I've been using tmux for several years and I just tried this and I'm pleasantly surprised! I definitely see myself using this as my goto. Couple of questions:
- Do you plan to support viewing file-diffs for the cwd? Currently I keep zed / vscode open on the side to view diffs. It would be great if we could fold those into herdr as well
- Is there an easy way to reconfigure the prefix? For tmux i've been using ` for years now, so going back to ctrl+z is a bit of a struggle
I wanted to mention that `zmx` is a beautiful piece of minimal software that basically has gotten rid of my tmux and zellij use. Uses a ghostty-based terminal emulator for each session, supports pretty much all of these features by leveraging ghostty. I truly don’t see the benefit of something like herdr over this minimal, robust setup. If I really wanted a lot of customization for AI assistants, I’d consider using Orca, but my current zmx approach works OOB and it’s solid. Great software!
Thank you for mentioning zmx. Reading through their repo, it’s like someone read my mind, took my instinctive, almost pre-verbal, half-formed/quarter-baked preference for `screen` over `tmux`, beautifully and precisely formalized it into an actually lucid opinion, and then instantiated it as an actually real piece of software. I’ve used it for an hour and it already feels like second nature; I somehow have muscle memory for features that I didn’t even know it had until I instinctively used them and they were right where I expected them to be. Seriously, thank you.
My pleasure. Make sure you check out the thriving ecosystem of tools around it as well. I’ve seen a few projects building on it in a prettt creative way.
I really want to like this. Ideologically I'm on board. Who wouldn't want to avoid all this multiplexing complexity and pitfalls? But deferring the window management to the OS sounds great in theory, but in practice it falls short (at least for me).
I work on both MacOS and Linux. Even if I were to figure out a perfect window management approach, I'd have to do it twice, and then figure out a way to "attach" to a layout of windows essentially. And then make it cross-platform... or live with zero organization, or at best some kind of flat structure. That's a immediate non-starter. Even if I focused only on a single OS, I still don't consider this a viable approach. It would be like removing browser tabs, and saying let's let the OS manage all this nasty UI stuff.
So then the next immediate idea is let's just have the Terminal itself manage UI. Ghostty supports tabs, splits etc. Great. But if I need to restart Ghostty for whatever reason, my entire layout vanishes and I have to set it all up again?
For me tmux is not just about the attach/detach part. A session is a personal "layout" of the workspace I've organically landed on for this task. Maybe it's a few windows with splits. Maybe it's just the single window with or without a split. Maybe it's a more browser-like just X amount of windows (tabs). If/when things get overwhelming I branch off into a new session for one (or more) sub-tasks. Little fzf-based utilities allow for nice fuzzying over sessions and what not. Or maybe you just run the different sessions in actual different physical OS windows. You can mix and match however you feel that day.
So if I'm in project x, working on feature y, and I detach and walk over to my other computer I can SSH over and continue as if nothing at all changed and retain the exact layout of what I was using before. Simultaneously in another physical window (or a tab) I can just switch to another local (or not) session and instantly be mentally in a different context, working on a different project or feature. Or I can SSH into a server and resume a debugging session left (intentionally) open for a while (which may consist of a few splits/windows/what not).
Maybe I'm missing something. I'm curious how your day-to-day workflow looks like. I imagine if I was 100% bound to a single machine, I could make it work with a tiling wm. But even then Ghostty crashes or something else happens and poof your entire work layout is gone and needs to be re-created (even if the individual pieces are safe).
If you do most of your work on a central server and treat your other devices as thin clients, then (afaik) Tmux/Zellij are the way to go – not to mention if you want to multiplayer with colleagues.
(I know Wezterm has remote session multiplexing in beta, but I’d be surprised if you can re-attach from a different machine.)
Lately I’ve been experimenting with embracing the total scriptability of my favorite terminal, Kitty. Its creator is famously outspoken about non-native multiplexers, precisely because of the pitfalls you mentioned and because they hold back the terminal ecosystem.
Couple of recent issues I’ve had: washed-out colors in Claude Code, desktop notifications not passing through, scrollback weirdness, and image protocol mismatches.
I used to treat Zellij as an OS to build my own IDE in. Now it’s Kitty.
I save layouts as a Kitty session. Important limitation: this doesn’t persist running processes. And so enter zmx. Whenever I need a process I can reattach to I wrap it in zmx.
A terminal agent can interact with the kitty cli to create splits and such. I’m still on the fence as to whether that’s safe. Probably not. Also, tmux is likely better represented in the training data. Currently experimenting with running claude inside tmux (multiplexing) inside nono (sandbox).
Niri is a perfect window manager approach, in my opinion. I don’t need tmux. Just Niri + Foot (terminal) and it’s perfect for the way my brain works. If you haven’t tried it, I highly recommended it.
Huh. The person you're replying to specifically mentioned they connect to the same tmux session from different computers. Niri is great, but how's it relevant here?
seamlessly jumping from local to remote sessions is something ive been hoping for in zellij for quite a while so if herdr supports this it could be interesting.
Until I try it, though, I don't think I'll understand why it needs a specific feature for running an agent tool in a side panel, which is appartently one of it's main selling point.
Yeah, I use tmux all day. Technically great, but the UX for tmux smux.
You end up having to wrap everything in adapter scripts because it is so verbose as well as so unmemorable, along with that, it has no built in help, not even -h
Would usuability (for what herdr is optimized for) not be the bigger use case for users?
I never heard of this project but in 5 minutes I got the features that I wanted without having to introduce muscle memory. I just wanted a dead simple way to point and click to select different terminals. The only thing I neeed to remember now is "ctrl-b + v" to create a new pane.
I also quite like that it has a decent CLI and skill for agents to use too.
Quite handy to apply since you can instruct models to run devservers in herdr panes or workspaces rather than doing long running shell commands or scripts in the agent session.
(You could probably do the same with tmux and others but I've had better success with monitoring herdr state)
From what I can figure it is actively calling itself a multiplexer, so pretty closely linked to something like tmux (one of the review videos on the page calls it a "tmux rewrite").
But they seem to be targeting very different scopes use wise.
I think if you use this to do stuff like, edit files, run htop, drop into an interactive shell, compile some code, my guess is you're gonna be fighting uphill and have a bad time.
On the other hand, if you're only using tmux so that you can have a bunch of terminal windows for agents. Then this is probably going to make your workflow a fair bit smoother.
What? Do y'all even try it before saying things like this?
I use it primarily as a replacement for tmux to do terminal stuff, not use agents. It's awesome. It worked out of the box, has actually good, working mouse support, quickly ships fixes, and the defaults are sane with obvious behaviors represented in an intuitive TUI.
I think that just enables xterm mouse support, and allows for various mouse key bindings in tmux. I think the deal is that it's turned on by default, and lots of the UI elements by default are configured with mouse bindings. Not just selecting and resizing panes, you can right click on a pane or a workspace and one of those display-popups pops up with a "rename" dialog box.
I think this is why it's described as "mouse first" terminal.
The example I saw of "mobile support" was connecting via a mobile terminal emulator. I don't see how that is any different than using tmux with the same mobile terminal emulator.
Herdr supports mobile-friendly layouts seamlessly, just like responsive web pages. On a narrow terminal, the sidebar is automatically hidden, and the tab bar is replaced with a status line (current workspace name, current tab name, and agent statuses). Everything else is tucked into the hamburger menu.
I've been dailying this (inside tmux!) for multi-agent orchestration and for state detection for agentic fleet orchestration, it's excellent. Highly recommend!
I've been using tmux historically and it eventually became too cumbersome since my typical workflow started being a lot more AI-agent heavy. I now run over 10 agents at the same time and they're all working on some multi-hour workstreams that I occasionally need to check in on or unblock. Tmux was not making this particularly easy and I would occasionally lose an agent or forget about it until much later only to realize it's been sitting idle waiting for me to approve something for a few days.
I've tried Cmux, but it didn't do it for me, since the agent statuses were displayed on the workspaces and having multiple agents in the same workspace would sometime produce confusing results.
I've been using Herdr since the start of the week and so far it's been the best in terms of visibility of what my agents are doing and which of them need attention. The only wart I've noticed so far is that the performance is not always great — sometimes I see the text appearing with a noticeable delay as I type it.
In a multi-pane tabbed interface like cmux (I made my own), I found it sufficient for agents to always alert when they are done or awaiting my input, and then the tab shows a badge that counts the number of unacked alert panes inside it.
Then I just work through the alerts and handle them as they arrive.
I guess there's an edge case where you don't know if an agent is running in a tab at all (while herdr will show "Agent running") but in practice I'm the one starting agents, and they run until they alert, so I'm not hitting a case where I think an agent is running but it's not.
I've been using cmux for a long time too but am pretty happy with it. It's not perfect but much better than plain tmux/ghostty. I'll give herdr a shot too.
I thought that was where I was going to end up, but that's where Claude's remote control or copilot's agents tab spared me.
The hitching is compounded for me because I tend to run the agents in squads: the agent I talk to operates a strict no-coding 'producer' mode, it tasks a sub-agent to do the research or coding, then the results go via a file to a critic or review agent; keeps the producer context very minimal and lean. Not convinced it's as necessary as just starting new contexts frequently with Fable etc.
My general rule is that I won't commit code a human hasn't seen/reviewed to production codebases, and I know I won't maintain that rule if I have to read all the slop that gets generated first time round without an AI reviewer pass.
So far my producer skill has survived 4.6 thru fable in succeeding to treat the review/critic output skeptically, as a likely yes-man or team player.
The key is to remember that, as of Fable, the size of the training corpus segment representing people responding to AI-generated content is still relatively tiny. Telling Sonnet 4.6 "this is code an agent produced" has a near decorative effect with no apparent significance, Sonnet 4.8 shows some misgivings, and when I experimented with Fable it seemed to do well at anticipating the kind of slop 4.6 would throw you.
Interestingly, to me, telling Fable that code a previous Fable agent wrote was AI generated seemed to raise some kind of "I'm being benchmarked" flag; expanding the reasoning finds it being evasive and mistrusting; look past the null derefence because this must be a trick question type thing.
I wish Claude's remote control sessions were longer running. If I forget about a conversation it's been cognitively difficult for me to track down which tmux tab = the correct remote control session in the Claude GUI. Remote control does come in super handy for pasting images in when some shell environments where pasting doesn't work for...reasons. The output in the GUI is also so much easier to read.
We have a skill that takes a well defined Jira ticket and basically drives it to completion until it produces a human-review ready PR. This process is coded into a bunch of gates that the agent needs to clear before it can advance to the next stage, like fully understanding of the context/problem, fully solidified design (or several), implementation, critic review, submit PR, address CI issues and automated review comments etc.
In practical terms it often means that you can give the agent a ticket and it'll work on it for several hours until the PR is ready. Occasionally it'll run into some question that it needs you to clarify something or make some directional choice, but overall it's pretty autonomous.
Because this takes so long, you normally run 3 or 4 of those in parallel.
Then between shepherding those session, you also run several PR review sessions at the same time. Those also run for quite some time when doing deep investigations.
And then you also have long running discovery/design sessions for various other projects or problems you're working in between.
Not the above person, and I usually max out around 5 although I have definitely had 10 or more at some point.
Assuming I'm working on one repo, I'll have different worktrees, each for a related area. For example, one worktree for each of: ui, small bug fixes, feature A, feature B, and so on.
Each worktree will have one active write agent, but I have a special docs/plans folder where I can have additional agents doing research and saving their findings. Agents in "plan mode" are write restricted to just that folder.
So look at a bug fix worktree. I could easily have 5 agents doing RCA into various bugs, each in plan mode. One at a time will get promoted to write mode to fix its specific bug while I continue discussion/RCA with the others. After fixing several bugs I'll spin up a "quality pass" agent that will make sure all tests/lint etc. pass and then give me a list of touched surfaces to manually verify before merging the branch and closing the worktree.
Note, I'm working solo at the moment so there's no PRs needed, but it would look quite similar if I had to make a PR for each bug fix, just probably with more worktrees.
Some tasks could take a while, especially with /goal mode. At work we often have multiple agents running on different tasks, and each could spawn subagents that you may or may not want to track. With the herdr skill you can have subagents be managed via tabs or panes, which gives them more visibility and could also explode your terminal :)
Lower-priority backlog items. TODOs atop your new PRs. Code reviews. Exploratory work where you can discuss a design sync and then dispatch one or more agents to prototype async. Any workstream where you can define a loop and let the agent hill-climb towards the goal.
A lot of this is personal taste but the general thing I get most value from is asking an agent to speculatively build every idea, instead of writing down ideas in some backlog for later (it never happens later).
Say you have something easily paralelizable, like 150 decompiled binaries, and you want to produce documentation for what each does. You can run 50 subagents in parallel (eg. kimi swarm) to analyze it all in a few minutes in 3 batches instead of doing it serially which would take half a day.
I used to work at BigTech in a role where I spent a lot of time reviewing new open source projects. It was always a fun game to guess which single person in which department tried out a piece of software that caused our logo to end up on the "as used by..." description on the tiniest of projects.
Fair haha. I'm no trademark lawyer, but I have to assume there's some wiggle room when you're not actively stealing their trademark and just referencing it... but still, the combined value of endorsements from Google/Nvidia/Amazon/ByteDance/Tencent/Alibaba/SalesForce/IBM etc has to be worth... a lot. That "not company endorsements" is rather load-bearing. I don't think I've seen anyone just say that, so maybe they're being a bit less bold haha.
You might as well say Herdr runs on 3 billion devices, go all in! 16 billion devices! Every human on earth installed Herdr twice! (source: study amongst users of herdr, n=5)
I get your point completely. I was (naively, I suppose) pretty surprised when I realized how low most people's threshold is to add a logo and claim a client/brand.
I've seen VCs very much encourage this (and shadier) behavior. There's a line between hustling / being an entrepreneur and actively trying to mislead people... clearly we don't all see that line being in the same place (:
edit: to be clear, I didn't mean to make such a broad statement about VCs. I'm sure plenty of people do this on their own
Everyone does that. Some random startup "We're used by Google!". More often than not some random engineer signed up for a trial or some tiny department somewhere is using it for some internal thing
I was under the impression that "individual engineers ..." is basically implied always, if not just outright lies, I don't trust these listings very highly. Except when its clear that the companies are actually customers. Like; how do I even add my company to this list? Email them?
I did try Herdr but found too many things I expected it to have and just didn't. Right now I've been switching between two different approaches for combined local and remote work.
There's the more traditional tmux/zellij way. I have a tailscale and mosh and a script where I can say something like "cw api do-this-feature" and it'll go into the folder of my api, create a worktree, and fire up claude code to use it (and another tab with lazygit and delta so I can do side-by-size diffs). And modified tmux's defaults so the session & window names are more targeted. Then can have it in Ghostty locally or Moshi (https://getmoshi.app/) on my phone. Moshi is basically a terminal for iOS but geared toward doing agentic stuff. Has a lot of shortcuts you can add for common commands of tmux, CC, can pinch to change font size, has a built-in diff tool, etc. Also has a small hook you can put in your agent so you get notifications on your phone. And it can directly open the particular tmux/zellij/herdr pane from that (has specific support for those three).
So that approach is nice in that you get full access to the harnesses, with no worries that a wrapper has a bug or doesn't support some new feature. But it still doesn't flow as well for me as a "real" wrapper does.
For the real wrapper approach, I started with Happy (https://happy.engineering/) and currently am using Happier (https://happier.dev/). Unlike Moshi, these are open source and basically control the various harnesses and have their own UI. Also have a relay so tailscale isn't necessarily needed, along with encryption in such a way that the person owning the relay can't decrypt the sessions. Happier even has a desktop app. Right now I'm running the dev version of Happier from source on my own machine w/ tailscale, with the testflight version of the app. There's various rough-around-the-edges aspects (and they're currently in the middle of a re-write), but it is nice to have a real UI with tabs for all your sessions, can click in to expand tool calls, to start a new session just select the harness, folder, type a new worktree name, etc and it starts going.
So I don't know. I like aspects of both of these and kind of depends on what I'm up to and my current mood. Nothing feels totally perfect yet IMO.
I'm a big tmux fan, but admittedly I've found myself switching between a lot of sessions recently and wishing it was a little bit more mouse friendly.
If you're a Mac user, and can forgive the shameless plug, you might find belfry.robgough.net useful. Connects to local and remote machines entirely through tmux, ssh and libghostty - populating the sidebar from tmux session info, and optionally adds a little Claude visibility in there for good measure.
There's even an iOS/iPadOS version – though for the moment you'll need to build that yourself. Source is all on Github.
Can you explain what you struggle to do in tmux with the mouse? I'm using it as we speak and everything is clickable, panes are resizable, right clicking a windows give you a context menu... Not sure what else is missing?
Quickly switching between multiple sessions, and seeing which sessions are waiting for input.
I generally run a session per project. Then within each session, a window for Claude, a window for running whatever dev server/logs, a window for neovim, and finally a plain terminal window for things like kicking off deploys etc.
I’ve been using tmux (with the wonderful iTerm2 integration) for almost a year now to manage agents as well as organize my workspaces. I initially wrote this off but looking closer I think I’m going to give a shot. My mobile experience is acceptable (Blink shell + tmux) but not ideal and the monitoring of agents is nice. Currently I rely on a hook+Pushover to alert me when my attention is needed which works but has not been without frustration.
Herdr did a lot of things really well.
It have a great landing page where you can see and interact, and that really made me try it, and a few of my friend was also captured and immediately understood what it is for. I basically do everything remote, never on my own machine.
Once I tried it, I can never go back. It is so simple and worked exactly as I thought how it should work.
I would say it is just a modern version of tmux but really thought about user experience of more novice users. For people who come from the mouse world, moving to this is quite seamless.
Also, coming to the comments, I would think maybe `zellij` would also work well. Or use `zmc` and build something on top. `zmc` is great, as the then the tab/window management can be handled by the desktop or TUI, depend on what someone want to use.
I've been using Herdr for running my AI agents and it has been really nice. I like that I can reconnect to it from multiple sessions (I have one up in a window on my desktop, and when I ssh in from my "after hours" laptop I can also attach to it there and continue one if I'm at my son's Dr appt or the like. I can also attach to it natively from my Mac over SSH transport as well as resuming a remote wezterm connection that is running herdr.
A few small downsides: I can't copy/paste in wezterm using the keyboard/vim keys because it is constantly drawing the screen and unselects my selection. The mouse drag in herdr works very well though. It'd also be nice if you could rebind key mappings in the UI, because I still haven't rebound the keys and am using the mouse.
The primary benefit I've gotten over just a straight tmux session is that there is a collapsable left "tab" bar that shows you your different workspaces, which you can relabel, and below that is a list of the agents you are running (claude code, codex, etc) along with their status (idle, blocked, working).
So I will start a workspace for each different thing I'm working on, label it "Studio Shed Packet", "Teapot game", "Mux experiment". Then in each one I run a Claude Code. Then I can see the status of my Claude Codes just by glancing at the sidebar, rather than having to switch between screens to see what is waiting next.
You can rename the tabs in tmux but not sure if there's a way to do dynamic status (I suspect there is but it's probably non trivial to get it to play nice with the harness)
Was just about to say this. And the application can also try to rename the terminal window title with the OSC 2 escape sequence. Don't think you need more than that. The bell was the general "Something needs your attention" since forever.
Yes but someone else has put in the effort so I don't have to. I could go to the supermarket and buy a bunch of groceries and make food, or I could buy food from a restaurant.
Does anyone know how this compares to Supacode (https://supacode.sh)? I just started using Supacode a few days ago and have been enjoying it so far; it is based on libghostty.
Supacode is macOS only and is a terminal emulator itself. Herdr is cross-platform and is just a multiplexer. You can use it in any terminal emulator. If you want you can even run Herdr in Supacode
With the long waits for agents to do stuff I really don't see how one can get anything done without multitasking with multiple worktrees in parallel. So I'd want support for listing the worktrees and then have a list of agents within each worktree.
Emdash and Nimbalyst have this kind of UI. Unfortunately both of them want to manage the state of each worktree group themselves; I'm looking for something that just would just call git worktree directly so that I can switch more seamlessly between CLI and IDE/TUI..
Claude can easily do the merges I need (or myself manually for that matter). I guess all codebases and usecases are very different here and hard to give general advice.
But I do have many years of experience working in a larger team and it's the same problem there (just that people want to merge after some days of working). I'm not sure if AI changes the picture much vs working in a team.
Either way one has to plan ahead a bit and select tasks that are not going to trample on each other. I can typically imagine roughly what the code generated is going to be (at least what files will likely be involved in what way) and when selecting tasks to work on I take into account if it's going to likely cause conflicts.
In my experience if different branches work on different things, Claude have no issue doing "trivial" merges where you just ended up changing different aspects of the same lines. Of course, if two branches rewrite the same pieces of code there's a problem -- so don't do that..
I always rebase the worktree back to the source branch before merging, and resolve conflicts on the branch. I have a resolve conflicts skill and just say:
echo “resolve conflicts” | runpi
Where runpi is my pi -p wrapper. I’ve never had a regression from it, but it gives me a report at the end so I can double check the decisions if I need to.
The skill is basically don’t use automatic resolvers, err on the side of including both sides, refer to recent commits, missions and runfiles for context and in your report to me use real branch names not HEAD and incoming because I can never remember what those refer to.
git worktrees are managed by git, not the IDEs.
e.g. at agentastic.dev, we use git's worktree command to create them, and they should be portable to any other IDE or app.
The problem I have with worktrees is when I need to switch branches to merge or something. If a work tree for any branch involved exists, git prevents me from switching to it. So, I have to go clone somewhere else, do whatever, then update everything. I really wish git didn't care about the other worktree folders contained, since it clearly doesn't anyways, since you can switch any existing worktree folder to any branch you want.
So, I no longer use worktrees, and just copy and existing/clone a new folder.
I'm sure they're roughly equivalent. Parent is probably actually asking: is there native support for managing multiple checkouts/branches for parallel work (and I would add: with lifecycle hooks for create/teardown so I can have dedicated test databases etc).
This looks very similar to what I do in Emacs, using ghostel, which also has the advantage of using libghostty for excellent quality terminal rendering.
I saw this trending on github yesterday and tried it and liking it so far.
What I like:
- familiar tmux like key binding (configurable) interface
- comes with all the tmux advantages like detach, ssh etc
- mouse
- nice sidebar
I prefer to manage my worktrees manually with a super simple script.
the rise of the TUIs is an indictment of existing GUIs, you can technically create a GUI that has identical functionality to a TUI and then start adding features that a TUI can't match.
Another way to interpret it is that a massive sample bias is governing your premise. Programmers are embracing LLMs to scratch their own itches and programmers tend to work in terminals (yes, many use IDEs) so they build to their own environments and HN readers and contributors tend to be programmers talking about programming things.
The deceiving logo marquee is the most annoying thing of this software era. "Popular with people that follow these companies on social media" is the next step to this madness.
I thought for a minute that they had built agent support for all terminals, which would render obsolete https://terminai.app which I just released.
Luckily for me, this is on the other end of the spectrum. Maybe there would even be a use case for running herdr as the AI CLI inside of terminai.
I get why folks use tmux/herdr, but I already use i3wm/Hyprland for window/workspace management, and want to have "shared first class windows" instead of dual binds of "super-based binds for i3 windows ... oh wait control-a based binds for tmux panes".
Has anyone got a tool/setup that is tmux-like but the remote terminals/panes are all local/native windows?
ITerm2 has a really great tmux integration where you get native windows or tabs for tmux windows and the panes are really easy to interact with. Of course it’s macOS only but I use it on my MBP and ssh to attach to my tmux sessions from a secondary Mac (getting the same experience remotely) or my phone (without all the niceties, just normal tmux, but still usable)
Ditto, iTerm2 tmux integration is a game-changer. People at work had this whole custom-built solution to help run stuff remotely, and I couldn't even understand what that was for because I'm so used to just iTerm2+tmux.
Something like this would be great. It seems what one really need is just persistent terminal session. So this thing probably can be built on top of zmc with a few scripts.
okey just did some investigation. ~/.config/herdr/herdr.sock JSON-RPC API so we can avoid herdr UI. In fact herdr's TUI is using it too.
So basically you can write your own tool to make it work (vibe it with AI if you want)
i tried giving tmux a go but there is a period where you're kinda going in and out of a tool, maybe not coming back to it for weeks at a time, this is why imo herdr is a really good tool - it doesn't punish you for not remembering the bindings, everything is clickable and as you go you can decide which bindings to learn and commit to instinct when required. I believe all TUIs should be like this from now on. This is also what makes opencode so great/sticky. Great work herdr team, I've only used it for a few days but I know I will be using this for a long time to come.
I've been working on Hyperia, which is very similar: https://github.com/deepbluedynamics/hyperia. Hyperia is a fork of Hyper Terminal. Both are open source. Competition is good for this space, I think, especially for the user. There's also cmux and Intelligent Terminal (by Microsoft).
I do separation of concerns with the agent orchestrator (Nemesis8): https://github.com/deepbluedynamics/nemesis8. That can be run with or without Hyperia. I do not suggest anyone run agents on their bare metal. Putting them in a container gets a lot of wins, especially around log aggregation. Working now on a Splunk/Loggly-like interface for searching logs, tool runs (useful in tuning a custom local MoE drafter) and full session suspend, stop, detach, and search. It also does single MCP tool installs for all agents. Nemesis also supports dynamic port exposure to the host metal, for testing agent builds inside their containers.
Hyperia has a lot of extra features as well that I have found personally useful:
- Sticky notes (search too)
- addressable panes in addressable tabs, tabs in windows, multiple windows
- full ACLs across panes, notes, tabs, windows
- Poke-a-pane to keep an agent going (any agent, not just CC which has a timer function)
- webpanes with markdown extraction, JavaScript injection
- directory pickers for people who find cd'ing to things confusing or those weary of typing nearly the same directory path over and over again in new terminals (not perfect, but I'm iterating on it)
- a built in agent loop (in the Rust sidecar) that allows using local models for tool calls (needs a trained drafter to make it viable) or using a local model for token maxxing (compresses reads of panes by frontier models)
- pane splits down/up/left/right and quick layouts.
As for whether it was "vibe coded" or not, or Herdr for that matter, I don't think that term is useful, other than for quick judgment. No, this is not a one-prompt project. I've spent 100s of hours on it, started out with Hyper, and did a crazy amount of planning on how to architect it. I have done systems architecture for a living before, and have a strong search background. People who hate on AI, and therfore projects done with AI, are threatened. Nothing more. That's why they shortcut with "AI slop" or "Vibecoded. Nope". That's just ignorance speaking from a standpoint of fear.
Slop, whether AI or human, is an effort problem: https://deepbluedynamics.com/blog/ai-slop-effort-problem. Looking at Herdr, it looks solid. Judge the product by it's outcomes, it's use, not whether or not AI wrote it or not. That's the moment we're in though, for now, so downvote or not. I don't care.
Cool that you're using Hyper Terminal as a starting point! What was the reason why you've added MCP to this? How is the intended use? I launch Claude Code on Hyperia and then Claude Code can open as many tabs as it wants inside of Hyperia? Or m I missing something
> Each runs in its own real terminal, on a server that keeps it alive when you close the laptop.
How does one describe what's happening with stuff like this? Where a business tries to intercept people who are still learning the lay of some land, to get them to pay for something that they just haven't learned yet can be essentially free to them? Is there a word for it?
It sets up a bunch of panes for you and tracks your agents' status and everything is clickable. You could probably do much of the same by setting up tmux appropriately. Or you could use this, which is already set up.
I tried herdr today, and it's not bad. Better than my previous many terminal tabs. Copy-and-paste is wonky (and it's ridiculous that copying is documented in multiple places in the docs, but pasting is never mentioned). And when an agent is waiting for a shell command, it shows as "idle", which IMO is wrong. Still, seems OK so far, I'll stick with it for a while.
I've been using tmux for several years and I just tried this and I'm pleasantly surprised! I definitely see myself using this as my goto. Couple of questions:
- Do you plan to support viewing file-diffs for the cwd? Currently I keep zed / vscode open on the side to view diffs. It would be great if we could fold those into herdr as well
- Is there an easy way to reconfigure the prefix? For tmux i've been using ` for years now, so going back to ctrl+z is a bit of a struggle
Great execution btw, congrats!
So I've tried to figure out why you might want to use this over Tmux, and essentially I think it comes to down to:
- everything is mouse clickable
- tmux style display-popups are used for friendly UI interactions everywhere
- it has a UI for agents running in panes, with a cool status (idle/working) display
- has opinionated defaults like automatic clipboard copy on mouse text select
- makes nested sessions easier & has default affordances for remote SSH attach
- is generally prettier
- uses display-popups for notifications
Otherwise it seems exactly like tmux.
I wanted to mention that `zmx` is a beautiful piece of minimal software that basically has gotten rid of my tmux and zellij use. Uses a ghostty-based terminal emulator for each session, supports pretty much all of these features by leveraging ghostty. I truly don’t see the benefit of something like herdr over this minimal, robust setup. If I really wanted a lot of customization for AI assistants, I’d consider using Orca, but my current zmx approach works OOB and it’s solid. Great software!
Thank you for mentioning zmx. Reading through their repo, it’s like someone read my mind, took my instinctive, almost pre-verbal, half-formed/quarter-baked preference for `screen` over `tmux`, beautifully and precisely formalized it into an actually lucid opinion, and then instantiated it as an actually real piece of software. I’ve used it for an hour and it already feels like second nature; I somehow have muscle memory for features that I didn’t even know it had until I instinctively used them and they were right where I expected them to be. Seriously, thank you.
My pleasure. Make sure you check out the thriving ecosystem of tools around it as well. I’ve seen a few projects building on it in a prettt creative way.
https://zmx.sh/
for the lazy.
I don't understand what it does. The homepage says it doesn't provide windows, panes or splits. What is it used for?
Provides a daemonized terminal basically, so you can attach and detach it freely. Other UI concerns are left to other layers.
So likely that is neovim running all my terminal/repl/agent/editor panes and tabs?
I really want to like this. Ideologically I'm on board. Who wouldn't want to avoid all this multiplexing complexity and pitfalls? But deferring the window management to the OS sounds great in theory, but in practice it falls short (at least for me).
I work on both MacOS and Linux. Even if I were to figure out a perfect window management approach, I'd have to do it twice, and then figure out a way to "attach" to a layout of windows essentially. And then make it cross-platform... or live with zero organization, or at best some kind of flat structure. That's a immediate non-starter. Even if I focused only on a single OS, I still don't consider this a viable approach. It would be like removing browser tabs, and saying let's let the OS manage all this nasty UI stuff.
So then the next immediate idea is let's just have the Terminal itself manage UI. Ghostty supports tabs, splits etc. Great. But if I need to restart Ghostty for whatever reason, my entire layout vanishes and I have to set it all up again?
For me tmux is not just about the attach/detach part. A session is a personal "layout" of the workspace I've organically landed on for this task. Maybe it's a few windows with splits. Maybe it's just the single window with or without a split. Maybe it's a more browser-like just X amount of windows (tabs). If/when things get overwhelming I branch off into a new session for one (or more) sub-tasks. Little fzf-based utilities allow for nice fuzzying over sessions and what not. Or maybe you just run the different sessions in actual different physical OS windows. You can mix and match however you feel that day.
So if I'm in project x, working on feature y, and I detach and walk over to my other computer I can SSH over and continue as if nothing at all changed and retain the exact layout of what I was using before. Simultaneously in another physical window (or a tab) I can just switch to another local (or not) session and instantly be mentally in a different context, working on a different project or feature. Or I can SSH into a server and resume a debugging session left (intentionally) open for a while (which may consist of a few splits/windows/what not).
Maybe I'm missing something. I'm curious how your day-to-day workflow looks like. I imagine if I was 100% bound to a single machine, I could make it work with a tiling wm. But even then Ghostty crashes or something else happens and poof your entire work layout is gone and needs to be re-created (even if the individual pieces are safe).
If you do most of your work on a central server and treat your other devices as thin clients, then (afaik) Tmux/Zellij are the way to go – not to mention if you want to multiplayer with colleagues.
(I know Wezterm has remote session multiplexing in beta, but I’d be surprised if you can re-attach from a different machine.)
Lately I’ve been experimenting with embracing the total scriptability of my favorite terminal, Kitty. Its creator is famously outspoken about non-native multiplexers, precisely because of the pitfalls you mentioned and because they hold back the terminal ecosystem.
Couple of recent issues I’ve had: washed-out colors in Claude Code, desktop notifications not passing through, scrollback weirdness, and image protocol mismatches.
I used to treat Zellij as an OS to build my own IDE in. Now it’s Kitty.
I save layouts as a Kitty session. Important limitation: this doesn’t persist running processes. And so enter zmx. Whenever I need a process I can reattach to I wrap it in zmx.
A terminal agent can interact with the kitty cli to create splits and such. I’m still on the fence as to whether that’s safe. Probably not. Also, tmux is likely better represented in the training data. Currently experimenting with running claude inside tmux (multiplexing) inside nono (sandbox).
You might want to give https://github.com/kstenerud/yoloai a try, then.
Runs agents in tmux in sandboxes.
Hard coded harness support... Yuck.
Gondolin is sand boxes done right...
You don't have to use the opinionated harnesses. Nothing stopping you from launching your own.
Niri is a perfect window manager approach, in my opinion. I don’t need tmux. Just Niri + Foot (terminal) and it’s perfect for the way my brain works. If you haven’t tried it, I highly recommended it.
Huh. The person you're replying to specifically mentioned they connect to the same tmux session from different computers. Niri is great, but how's it relevant here?
I think https://zellij.dev/ covers all of these? But it isn't an "agent native", and `herdr` seems to support importing existing agent sessions.
I use zellij a lot and created myself a zellij skill for an agent to manage my sessions/layouts in zellij directly.
So for a new worktree the agent can create a tab in zellij with multiple panes, properly named etc.
It works really nicely.
Although since I got the 52 inch Dell monitor I tend to just put everything visible at all once most of the time.
Could you share this skill?
how do you handle zellij on mobile?
seamlessly jumping from local to remote sessions is something ive been hoping for in zellij for quite a while so if herdr supports this it could be interesting.
Until I try it, though, I don't think I'll understand why it needs a specific feature for running an agent tool in a side panel, which is appartently one of it's main selling point.
It's better than tmux. I've used both extensively, there's no reason to use tmux again.
Yeah, I use tmux all day. Technically great, but the UX for tmux smux.
You end up having to wrap everything in adapter scripts because it is so verbose as well as so unmemorable, along with that, it has no built in help, not even -h
Well, tmux is mature, battle-tested software, whereas probably no human has ever read the majority of the code in this project.
Would usuability (for what herdr is optimized for) not be the bigger use case for users?
I never heard of this project but in 5 minutes I got the features that I wanted without having to introduce muscle memory. I just wanted a dead simple way to point and click to select different terminals. The only thing I neeed to remember now is "ctrl-b + v" to create a new pane.
I also quite like that it has a decent CLI and skill for agents to use too.
Quite handy to apply since you can instruct models to run devservers in herdr panes or workspaces rather than doing long running shell commands or scripts in the agent session.
(You could probably do the same with tmux and others but I've had better success with monitoring herdr state)
From what I can figure it is actively calling itself a multiplexer, so pretty closely linked to something like tmux (one of the review videos on the page calls it a "tmux rewrite").
But they seem to be targeting very different scopes use wise.
I think if you use this to do stuff like, edit files, run htop, drop into an interactive shell, compile some code, my guess is you're gonna be fighting uphill and have a bad time.
On the other hand, if you're only using tmux so that you can have a bunch of terminal windows for agents. Then this is probably going to make your workflow a fair bit smoother.
What makes you guess that? Have you looked at the page at all? A video? Tried it? It works like any other multiplexer.
What? Do y'all even try it before saying things like this?
I use it primarily as a replacement for tmux to do terminal stuff, not use agents. It's awesome. It worked out of the box, has actually good, working mouse support, quickly ships fixes, and the defaults are sane with obvious behaviors represented in an intuitive TUI.
Copy paste out of tmux drives me nuts. Seems to work half the time. Interested in a good fix
You can enable mouse in tmux as well.
Claude now hijacks your mouse in tmux!
I had this problem, and was able to get around it by disabling mouse reporting in iTerm2.
tmux has a mouse switch--does this do more than that?
I think that just enables xterm mouse support, and allows for various mouse key bindings in tmux. I think the deal is that it's turned on by default, and lots of the UI elements by default are configured with mouse bindings. Not just selecting and resizing panes, you can right click on a pane or a workspace and one of those display-popups pops up with a "rename" dialog box.
I think this is why it's described as "mouse first" terminal.
Tmux mouse support also has right-click context menus, clicking between tabs and panes, scrolling in panes, selecting text etc.
Sounds like byobu+any reasonable term emulator, honestly. Hasn't failed me yet - has most of those features.
Mobile support?
There are plugins yes. You've to setup cloudflare and ideally your own tunnel, and it's pretty seamless as long as your laptop isn't off / sleeping
The example I saw of "mobile support" was connecting via a mobile terminal emulator. I don't see how that is any different than using tmux with the same mobile terminal emulator.
Herdr supports mobile-friendly layouts seamlessly, just like responsive web pages. On a narrow terminal, the sidebar is automatically hidden, and the tab bar is replaced with a status line (current workspace name, current tab name, and agent statuses). Everything else is tucked into the hamburger menu.
The clickable areas work on mobile as well - at least using supported clients like Moshi
If there was a mobile app or at least some kind of agent agnostic telegram integration then I'd be more interested.
There are two pluggins I've seen:
1- https://github.com/dcolinmorgan/herdr-remote Support Cloudflare, Telegram, .. quite buggy to me
2- https://github.com/0cv/herdr-mobile-relay Forked from the original one but improved and usable on phones, however the scope narrowed down to Cloudflare only
I'm trying to get Discord to work with it. A few people have succeeded.
You want to use Telegram as a shell?
To monitor and instruct agents.
You missed the most important one. Automatic git worktree management. So that different agents don't clash with each other.
If my aunt had balls, she'd be my uncle
Similarity to tmux is the point
I've been dailying this (inside tmux!) for multi-agent orchestration and for state detection for agentic fleet orchestration, it's excellent. Highly recommend!
you dropped this >rust
I've been using tmux historically and it eventually became too cumbersome since my typical workflow started being a lot more AI-agent heavy. I now run over 10 agents at the same time and they're all working on some multi-hour workstreams that I occasionally need to check in on or unblock. Tmux was not making this particularly easy and I would occasionally lose an agent or forget about it until much later only to realize it's been sitting idle waiting for me to approve something for a few days.
I've tried Cmux, but it didn't do it for me, since the agent statuses were displayed on the workspaces and having multiple agents in the same workspace would sometime produce confusing results.
I've been using Herdr since the start of the week and so far it's been the best in terms of visibility of what my agents are doing and which of them need attention. The only wart I've noticed so far is that the performance is not always great — sometimes I see the text appearing with a noticeable delay as I type it.
In a multi-pane tabbed interface like cmux (I made my own), I found it sufficient for agents to always alert when they are done or awaiting my input, and then the tab shows a badge that counts the number of unacked alert panes inside it.
Then I just work through the alerts and handle them as they arrive.
I guess there's an edge case where you don't know if an agent is running in a tab at all (while herdr will show "Agent running") but in practice I'm the one starting agents, and they run until they alert, so I'm not hitting a case where I think an agent is running but it's not.
I've been using cmux for a long time too but am pretty happy with it. It's not perfect but much better than plain tmux/ghostty. I'll give herdr a shot too.
Take a look at zellij as well
I thought that was where I was going to end up, but that's where Claude's remote control or copilot's agents tab spared me.
The hitching is compounded for me because I tend to run the agents in squads: the agent I talk to operates a strict no-coding 'producer' mode, it tasks a sub-agent to do the research or coding, then the results go via a file to a critic or review agent; keeps the producer context very minimal and lean. Not convinced it's as necessary as just starting new contexts frequently with Fable etc.
My general rule is that I won't commit code a human hasn't seen/reviewed to production codebases, and I know I won't maintain that rule if I have to read all the slop that gets generated first time round without an AI reviewer pass.
So far my producer skill has survived 4.6 thru fable in succeeding to treat the review/critic output skeptically, as a likely yes-man or team player.
The key is to remember that, as of Fable, the size of the training corpus segment representing people responding to AI-generated content is still relatively tiny. Telling Sonnet 4.6 "this is code an agent produced" has a near decorative effect with no apparent significance, Sonnet 4.8 shows some misgivings, and when I experimented with Fable it seemed to do well at anticipating the kind of slop 4.6 would throw you.
Interestingly, to me, telling Fable that code a previous Fable agent wrote was AI generated seemed to raise some kind of "I'm being benchmarked" flag; expanding the reasoning finds it being evasive and mistrusting; look past the null derefence because this must be a trick question type thing.
I wish Claude's remote control sessions were longer running. If I forget about a conversation it's been cognitively difficult for me to track down which tmux tab = the correct remote control session in the Claude GUI. Remote control does come in super handy for pasting images in when some shell environments where pasting doesn't work for...reasons. The output in the GUI is also so much easier to read.
Curious, are you using the 10 agents for personal projects or for work?
Work.
What's an example of what the 10 agents would be doing in parallel? I've never used more than 2 in parallel before.
We have a skill that takes a well defined Jira ticket and basically drives it to completion until it produces a human-review ready PR. This process is coded into a bunch of gates that the agent needs to clear before it can advance to the next stage, like fully understanding of the context/problem, fully solidified design (or several), implementation, critic review, submit PR, address CI issues and automated review comments etc.
In practical terms it often means that you can give the agent a ticket and it'll work on it for several hours until the PR is ready. Occasionally it'll run into some question that it needs you to clarify something or make some directional choice, but overall it's pretty autonomous.
Because this takes so long, you normally run 3 or 4 of those in parallel.
Then between shepherding those session, you also run several PR review sessions at the same time. Those also run for quite some time when doing deep investigations.
And then you also have long running discovery/design sessions for various other projects or problems you're working in between.
Not the above person, and I usually max out around 5 although I have definitely had 10 or more at some point.
Assuming I'm working on one repo, I'll have different worktrees, each for a related area. For example, one worktree for each of: ui, small bug fixes, feature A, feature B, and so on.
Each worktree will have one active write agent, but I have a special docs/plans folder where I can have additional agents doing research and saving their findings. Agents in "plan mode" are write restricted to just that folder.
So look at a bug fix worktree. I could easily have 5 agents doing RCA into various bugs, each in plan mode. One at a time will get promoted to write mode to fix its specific bug while I continue discussion/RCA with the others. After fixing several bugs I'll spin up a "quality pass" agent that will make sure all tests/lint etc. pass and then give me a list of touched surfaces to manually verify before merging the branch and closing the worktree.
Note, I'm working solo at the moment so there's no PRs needed, but it would look quite similar if I had to make a PR for each bug fix, just probably with more worktrees.
> I'll spin up a "quality pass" agent that will make sure all tests/lint etc. pass
Why would you need an agent more than one time to create a script then use one command to launch it? What's the added value of the agent there?
The quality pass:
1. Merges in the dev branch
2. runs the various tests and static checks
3. Fixes any small issues with the context of what was fixed on this branch
4. Stops and reports if there's any major issues
Or
5. Handles the merge back to dev if all is green.
Some tasks could take a while, especially with /goal mode. At work we often have multiple agents running on different tasks, and each could spawn subagents that you may or may not want to track. With the herdr skill you can have subagents be managed via tabs or panes, which gives them more visibility and could also explode your terminal :)
Lower-priority backlog items. TODOs atop your new PRs. Code reviews. Exploratory work where you can discuss a design sync and then dispatch one or more agents to prototype async. Any workstream where you can define a loop and let the agent hill-climb towards the goal.
A lot of this is personal taste but the general thing I get most value from is asking an agent to speculatively build every idea, instead of writing down ideas in some backlog for later (it never happens later).
Say you have something easily paralelizable, like 150 decompiled binaries, and you want to produce documentation for what each does. You can run 50 subagents in parallel (eg. kimi swarm) to analyze it all in a few minutes in 3 batches instead of doing it serially which would take half a day.
i created a little calude hook that updates the status bar
I've seen a lot of companies list logos if just a single engineer or team is using the product.
I used to work at BigTech in a role where I spent a lot of time reviewing new open source projects. It was always a fun game to guess which single person in which department tried out a piece of software that caused our logo to end up on the "as used by..." description on the tiniest of projects.
Feels like standard last ten years. All SaaS companies saying Used by people in Google just because one guy in support used it one time 5 years ago.
Fair haha. I'm no trademark lawyer, but I have to assume there's some wiggle room when you're not actively stealing their trademark and just referencing it... but still, the combined value of endorsements from Google/Nvidia/Amazon/ByteDance/Tencent/Alibaba/SalesForce/IBM etc has to be worth... a lot. That "not company endorsements" is rather load-bearing. I don't think I've seen anyone just say that, so maybe they're being a bit less bold haha.
You might as well say Herdr runs on 3 billion devices, go all in! 16 billion devices! Every human on earth installed Herdr twice! (source: study amongst users of herdr, n=5)
I get your point completely. I was (naively, I suppose) pretty surprised when I realized how low most people's threshold is to add a logo and claim a client/brand.
I've seen VCs very much encourage this (and shadier) behavior. There's a line between hustling / being an entrepreneur and actively trying to mislead people... clearly we don't all see that line being in the same place (:
edit: to be clear, I didn't mean to make such a broad statement about VCs. I'm sure plenty of people do this on their own
I go from company to company just to be able to add their logo to stuff I use :)
Everyone does that. Some random startup "We're used by Google!". More often than not some random engineer signed up for a trial or some tiny department somewhere is using it for some internal thing
It’s such a tiny hop from there to “has a friend at Google who used it once as a favor”. I hadn’t even considered that people would do such a thing!
I think this is actually the norm.
I was under the impression that "individual engineers ..." is basically implied always, if not just outright lies, I don't trust these listings very highly. Except when its clear that the companies are actually customers. Like; how do I even add my company to this list? Email them?
I use cmux. Has anyone used both and offer some comparison?
I did try Herdr but found too many things I expected it to have and just didn't. Right now I've been switching between two different approaches for combined local and remote work.
There's the more traditional tmux/zellij way. I have a tailscale and mosh and a script where I can say something like "cw api do-this-feature" and it'll go into the folder of my api, create a worktree, and fire up claude code to use it (and another tab with lazygit and delta so I can do side-by-size diffs). And modified tmux's defaults so the session & window names are more targeted. Then can have it in Ghostty locally or Moshi (https://getmoshi.app/) on my phone. Moshi is basically a terminal for iOS but geared toward doing agentic stuff. Has a lot of shortcuts you can add for common commands of tmux, CC, can pinch to change font size, has a built-in diff tool, etc. Also has a small hook you can put in your agent so you get notifications on your phone. And it can directly open the particular tmux/zellij/herdr pane from that (has specific support for those three).
So that approach is nice in that you get full access to the harnesses, with no worries that a wrapper has a bug or doesn't support some new feature. But it still doesn't flow as well for me as a "real" wrapper does.
For the real wrapper approach, I started with Happy (https://happy.engineering/) and currently am using Happier (https://happier.dev/). Unlike Moshi, these are open source and basically control the various harnesses and have their own UI. Also have a relay so tailscale isn't necessarily needed, along with encryption in such a way that the person owning the relay can't decrypt the sessions. Happier even has a desktop app. Right now I'm running the dev version of Happier from source on my own machine w/ tailscale, with the testflight version of the app. There's various rough-around-the-edges aspects (and they're currently in the middle of a re-write), but it is nice to have a real UI with tabs for all your sessions, can click in to expand tool calls, to start a new session just select the harness, folder, type a new worktree name, etc and it starts going.
So I don't know. I like aspects of both of these and kind of depends on what I'm up to and my current mood. Nothing feels totally perfect yet IMO.
I still don't fully get the additional value over tmux, beside notification regarding the agent status?
There is a whole page about this https://herdr.dev/compare/
For me the killer feature is the git worktree management.
But in essence it is tmux on steroid (Specifically for agents)
I wonder if it works with jj workspaces as well. I guess I have something new to tryout today
Sadly it does not. There are both a discussion about support for non-git vcs (https://github.com/ogulcancelik/herdr/discussions/522) and about jj specifically.
Hopefully any of those get some traction
I did find a plugin at least
You can create per-pane titles now in tmux. I'm sure you could pipe status to that. I use it for installing machines.
For me, that was the big selling point. If you aren't working with multiple agents at once, I'm not sure you'd pick Herdr.
I couldn't ever for the life of me incorporate tmux into my muscle memory, tmux came naturally so did herdr that just clicked.
Can't tell you what it is, brain wired like that or smth.
Their page has a live view of the amount of GitHub stars, arguably the most important metrics in the universe.
I'm a big tmux fan, but admittedly I've found myself switching between a lot of sessions recently and wishing it was a little bit more mouse friendly.
If you're a Mac user, and can forgive the shameless plug, you might find belfry.robgough.net useful. Connects to local and remote machines entirely through tmux, ssh and libghostty - populating the sidebar from tmux session info, and optionally adds a little Claude visibility in there for good measure.
There's even an iOS/iPadOS version – though for the moment you'll need to build that yourself. Source is all on Github.
> wishing it was a little bit more mouse friendly
Can you explain what you struggle to do in tmux with the mouse? I'm using it as we speak and everything is clickable, panes are resizable, right clicking a windows give you a context menu... Not sure what else is missing?
Quickly switching between multiple sessions, and seeing which sessions are waiting for input.
I generally run a session per project. Then within each session, a window for Claude, a window for running whatever dev server/logs, a window for neovim, and finally a plain terminal window for things like kicking off deploys etc.
I’ve been using tmux (with the wonderful iTerm2 integration) for almost a year now to manage agents as well as organize my workspaces. I initially wrote this off but looking closer I think I’m going to give a shot. My mobile experience is acceptable (Blink shell + tmux) but not ideal and the monitoring of agents is nice. Currently I rely on a hook+Pushover to alert me when my attention is needed which works but has not been without frustration.
Herdr did a lot of things really well. It have a great landing page where you can see and interact, and that really made me try it, and a few of my friend was also captured and immediately understood what it is for. I basically do everything remote, never on my own machine.
Once I tried it, I can never go back. It is so simple and worked exactly as I thought how it should work.
I would say it is just a modern version of tmux but really thought about user experience of more novice users. For people who come from the mouse world, moving to this is quite seamless.
Also, coming to the comments, I would think maybe `zellij` would also work well. Or use `zmc` and build something on top. `zmc` is great, as the then the tab/window management can be handled by the desktop or TUI, depend on what someone want to use.
I've been using Herdr for running my AI agents and it has been really nice. I like that I can reconnect to it from multiple sessions (I have one up in a window on my desktop, and when I ssh in from my "after hours" laptop I can also attach to it there and continue one if I'm at my son's Dr appt or the like. I can also attach to it natively from my Mac over SSH transport as well as resuming a remote wezterm connection that is running herdr.
A few small downsides: I can't copy/paste in wezterm using the keyboard/vim keys because it is constantly drawing the screen and unselects my selection. The mouse drag in herdr works very well though. It'd also be nice if you could rebind key mappings in the UI, because I still haven't rebound the keys and am using the mouse.
How is this different from sshing into a server and attaching to a tmux session? I don't see the benefits in switching over.
The primary benefit I've gotten over just a straight tmux session is that there is a collapsable left "tab" bar that shows you your different workspaces, which you can relabel, and below that is a list of the agents you are running (claude code, codex, etc) along with their status (idle, blocked, working).
So I will start a workspace for each different thing I'm working on, label it "Studio Shed Packet", "Teapot game", "Mux experiment". Then in each one I run a Claude Code. Then I can see the status of my Claude Codes just by glancing at the sidebar, rather than having to switch between screens to see what is waiting next.
I've been using it around a week so far.
You can rename the tabs in tmux but not sure if there's a way to do dynamic status (I suspect there is but it's probably non trivial to get it to play nice with the harness)
If you're willing to go down to a single boolean of "needs attention", tmux responds to the terminal bell.
Was just about to say this. And the application can also try to rename the terminal window title with the OSC 2 escape sequence. Don't think you need more than that. The bell was the general "Something needs your attention" since forever.
Using mosh to do the same (which is helpful if you're on a laptop and you want to survive lid closes or ip roaming)
I think most of this can be done with tmux and some simple extras. An afternoon of vibing.
Yes but someone else has put in the effort so I don't have to. I could go to the supermarket and buy a bunch of groceries and make food, or I could buy food from a restaurant.
I have created my own opinionated setup but this comment is not about that.
I do think that there should be a protocol such that using these tools becomes more standardized.
For example I know that cmux is trying to support a tmux based setup so it feels like tmux could be most of that protocol.
There are a lot of tools like this popup and I really think making switching easier is the only way I will try a different tool.
Does anyone know how this compares to Supacode (https://supacode.sh)? I just started using Supacode a few days ago and have been enjoying it so far; it is based on libghostty.
Supacode is macOS only and is a terminal emulator itself. Herdr is cross-platform and is just a multiplexer. You can use it in any terminal emulator. If you want you can even run Herdr in Supacode
Is there git worktree support?
With the long waits for agents to do stuff I really don't see how one can get anything done without multitasking with multiple worktrees in parallel. So I'd want support for listing the worktrees and then have a list of agents within each worktree.
Emdash and Nimbalyst have this kind of UI. Unfortunately both of them want to manage the state of each worktree group themselves; I'm looking for something that just would just call git worktree directly so that I can switch more seamlessly between CLI and IDE/TUI..
Yes, it seems that it does though I have not yet tried it: https://herdr.dev/docs/configuration/#worktrees
I use this bash script that creates tmux windows and panes in a worktree and then undoes the process:
https://gist.github.com/iaindooley/cc8a61a1ff0fe23526c850906...
You include a script .worktree in your repo that does any copying or symlinking to setup the target directory.
It also has a headless mode so that it does the worktree operations without the tmux which I use for executing pi -p prompts in worktrees.
I haven't been able to use worktrees because when there are major conflicts I find the ai can't handle it. Often it ends up dropping a lot of code.
How do you manage that? How do you successfully navigate complex merges using ai?
Claude can easily do the merges I need (or myself manually for that matter). I guess all codebases and usecases are very different here and hard to give general advice.
But I do have many years of experience working in a larger team and it's the same problem there (just that people want to merge after some days of working). I'm not sure if AI changes the picture much vs working in a team.
Either way one has to plan ahead a bit and select tasks that are not going to trample on each other. I can typically imagine roughly what the code generated is going to be (at least what files will likely be involved in what way) and when selecting tasks to work on I take into account if it's going to likely cause conflicts.
In my experience if different branches work on different things, Claude have no issue doing "trivial" merges where you just ended up changing different aspects of the same lines. Of course, if two branches rewrite the same pieces of code there's a problem -- so don't do that..
I always rebase the worktree back to the source branch before merging, and resolve conflicts on the branch. I have a resolve conflicts skill and just say:
echo “resolve conflicts” | runpi
Where runpi is my pi -p wrapper. I’ve never had a regression from it, but it gives me a report at the end so I can double check the decisions if I need to.
The skill is basically don’t use automatic resolvers, err on the side of including both sides, refer to recent commits, missions and runfiles for context and in your report to me use real branch names not HEAD and incoming because I can never remember what those refer to.
As conceptually required, serialized work that works on the same lines of code, or fix conflicts.
git worktrees are managed by git, not the IDEs. e.g. at agentastic.dev, we use git's worktree command to create them, and they should be portable to any other IDE or app.
Of course. But I prefer IDEs that group and name the agent sessions by the worktree they are tasked with automatically.
what is the advantage of git worktree vs using a git remote set to a local file upstream.
As the sibling comments note, this is kind of off-topic to my post.
But I think git worktrees are a bit more ergonomic, I don't have to think about local vs upstream there's just one place to push.
I like to organize my projects like this:
The problem I have with worktrees is when I need to switch branches to merge or something. If a work tree for any branch involved exists, git prevents me from switching to it. So, I have to go clone somewhere else, do whatever, then update everything. I really wish git didn't care about the other worktree folders contained, since it clearly doesn't anyways, since you can switch any existing worktree folder to any branch you want.
So, I no longer use worktrees, and just copy and existing/clone a new folder.
I think all my problems go away with jujustu.
I'm sure they're roughly equivalent. Parent is probably actually asking: is there native support for managing multiple checkouts/branches for parallel work (and I would add: with lifecycle hooks for create/teardown so I can have dedicated test databases etc).
What is the advantage of a git remote set to a local upstream vs a git worktree?
This looks very similar to what I do in Emacs, using ghostel, which also has the advantage of using libghostty for excellent quality terminal rendering.
I saw this trending on github yesterday and tried it and liking it so far. What I like: - familiar tmux like key binding (configurable) interface - comes with all the tmux advantages like detach, ssh etc - mouse - nice sidebar
I prefer to manage my worktrees manually with a super simple script.
More options: https://agentmgmt.dev (disclaimer: built by me)
the rise of the TUIs is an indictment of existing GUIs, you can technically create a GUI that has identical functionality to a TUI and then start adding features that a TUI can't match.
Another way to interpret it is that a massive sample bias is governing your premise. Programmers are embracing LLMs to scratch their own itches and programmers tend to work in terminals (yes, many use IDEs) so they build to their own environments and HN readers and contributors tend to be programmers talking about programming things.
The deceiving logo marquee is the most annoying thing of this software era. "Popular with people that follow these companies on social media" is the next step to this madness.
I just want the sound notification when they are blocked/done.
repo visualization https://app.principal-ade.com/ogulcancelik/herdr
I thought for a minute that they had built agent support for all terminals, which would render obsolete https://terminai.app which I just released. Luckily for me, this is on the other end of the spectrum. Maybe there would even be a use case for running herdr as the AI CLI inside of terminai.
I get why folks use tmux/herdr, but I already use i3wm/Hyprland for window/workspace management, and want to have "shared first class windows" instead of dual binds of "super-based binds for i3 windows ... oh wait control-a based binds for tmux panes".
Has anyone got a tool/setup that is tmux-like but the remote terminals/panes are all local/native windows?
ITerm2 has a really great tmux integration where you get native windows or tabs for tmux windows and the panes are really easy to interact with. Of course it’s macOS only but I use it on my MBP and ssh to attach to my tmux sessions from a secondary Mac (getting the same experience remotely) or my phone (without all the niceties, just normal tmux, but still usable)
Ditto, iTerm2 tmux integration is a game-changer. People at work had this whole custom-built solution to help run stuff remotely, and I couldn't even understand what that was for because I'm so used to just iTerm2+tmux.
Something like this would be great. It seems what one really need is just persistent terminal session. So this thing probably can be built on top of zmc with a few scripts.
okey just did some investigation. ~/.config/herdr/herdr.sock JSON-RPC API so we can avoid herdr UI. In fact herdr's TUI is using it too. So basically you can write your own tool to make it work (vibe it with AI if you want)
Yeah... Herdr. Used in thin client mode connecting to remote server.
Does it support port forwarding like ssh -L ... ?
I'm happy with tmux - can use it on my phone.
sure, but you can use this on Windows!
I cant figure out how to make subagents work with herdr, tried to email the maintainer and got no reply back (yet) - has anyone figured it out?
Can you elaborate a bit on what you're trying to get to work?
So it's like mosh + tmux?
i tried giving tmux a go but there is a period where you're kinda going in and out of a tool, maybe not coming back to it for weeks at a time, this is why imo herdr is a really good tool - it doesn't punish you for not remembering the bindings, everything is clickable and as you go you can decide which bindings to learn and commit to instinct when required. I believe all TUIs should be like this from now on. This is also what makes opencode so great/sticky. Great work herdr team, I've only used it for a few days but I know I will be using this for a long time to come.
Zellij has context sensitive hint bar that shows possible key bindings. You can turn it off, but by default it's there.
how does this compare to superset and conductor?
There is a whole page just on this subject https://herdr.dev/compare/
Conductor is a more fully-featured app rather than a TUI (some people might prefer one or the other), and is Mac-only.
I've been working on Hyperia, which is very similar: https://github.com/deepbluedynamics/hyperia. Hyperia is a fork of Hyper Terminal. Both are open source. Competition is good for this space, I think, especially for the user. There's also cmux and Intelligent Terminal (by Microsoft).
I do separation of concerns with the agent orchestrator (Nemesis8): https://github.com/deepbluedynamics/nemesis8. That can be run with or without Hyperia. I do not suggest anyone run agents on their bare metal. Putting them in a container gets a lot of wins, especially around log aggregation. Working now on a Splunk/Loggly-like interface for searching logs, tool runs (useful in tuning a custom local MoE drafter) and full session suspend, stop, detach, and search. It also does single MCP tool installs for all agents. Nemesis also supports dynamic port exposure to the host metal, for testing agent builds inside their containers.
Hyperia has a lot of extra features as well that I have found personally useful:
- Sticky notes (search too) - addressable panes in addressable tabs, tabs in windows, multiple windows - full ACLs across panes, notes, tabs, windows - Poke-a-pane to keep an agent going (any agent, not just CC which has a timer function) - webpanes with markdown extraction, JavaScript injection - directory pickers for people who find cd'ing to things confusing or those weary of typing nearly the same directory path over and over again in new terminals (not perfect, but I'm iterating on it) - a built in agent loop (in the Rust sidecar) that allows using local models for tool calls (needs a trained drafter to make it viable) or using a local model for token maxxing (compresses reads of panes by frontier models) - pane splits down/up/left/right and quick layouts.
As for whether it was "vibe coded" or not, or Herdr for that matter, I don't think that term is useful, other than for quick judgment. No, this is not a one-prompt project. I've spent 100s of hours on it, started out with Hyper, and did a crazy amount of planning on how to architect it. I have done systems architecture for a living before, and have a strong search background. People who hate on AI, and therfore projects done with AI, are threatened. Nothing more. That's why they shortcut with "AI slop" or "Vibecoded. Nope". That's just ignorance speaking from a standpoint of fear.
Slop, whether AI or human, is an effort problem: https://deepbluedynamics.com/blog/ai-slop-effort-problem. Looking at Herdr, it looks solid. Judge the product by it's outcomes, it's use, not whether or not AI wrote it or not. That's the moment we're in though, for now, so downvote or not. I don't care.
> Hyperia is a fork of Hyper Terminal.
I couldn't click fast enough, then discovered that "Hyper Terminal" has nothing to do with "HyperTerminal" and couldn't click "close tab" fast enough.
Cool that you're using Hyper Terminal as a starting point! What was the reason why you've added MCP to this? How is the intended use? I launch Claude Code on Hyperia and then Claude Code can open as many tabs as it wants inside of Hyperia? Or m I missing something
another example of people inventing something that Emacs already has.
> Each runs in its own real terminal, on a server that keeps it alive when you close the laptop.
How does one describe what's happening with stuff like this? Where a business tries to intercept people who are still learning the lay of some land, to get them to pay for something that they just haven't learned yet can be essentially free to them? Is there a word for it?
I read the website and still don't understand what this solves.
Doesn't tmux and zellij do all of these things that 'herdr' does?
This 6-minute video (linked from the website) demoes it nicely: https://www.youtube.com/watch?v=qnIu-Xu64H0
It sets up a bunch of panes for you and tracks your agents' status and everything is clickable. You could probably do much of the same by setting up tmux appropriately. Or you could use this, which is already set up.
I tried herdr today, and it's not bad. Better than my previous many terminal tabs. Copy-and-paste is wonky (and it's ridiculous that copying is documented in multiple places in the docs, but pasting is never mentioned). And when an agent is waiting for a shell command, it shows as "idle", which IMO is wrong. Still, seems OK so far, I'll stick with it for a while.
tmux and zellij are compared here https://herdr.dev/compare/
Yes, but better.
yes but this does it wrapped up together.
Vibecoded. Nope.
That ship has sailed boss.
I don't think you can avoid those much longer.
I sure can. Especially if you aren't paying me to use your unpleasant software.
Everything is vibecoded now, better get used to it.
Aside from that, the quality of the project is great. Vibecoded doesn't automatically mean bad.
Good call. Break up with her first before she breaks up with you.
i mean the app is for vibe coding, what did you really expect?
Then it doesn't "rule them all" for anyone who needs a terminal, does it?
[dead]
[flagged]
[flagged]
"hurr durr"