129 comments

[ 0.30 ms ] story [ 8.8 ms ] thread
I really liked Tmux and Zellij for the time being, but Herdr does it all so much better out of the box when it comes to agentic coding. I haven't found something I can do with tmux/zellij but can't do with herdr.
My only problem with herdr is its propensity to randomly crash and take out the whole session. At one point it was crashing once or twice a day, recently it’s more like every two weeks, but it still crashes. I have auto session resume on but that still means ongoing work is interrupted and I have to manually restart all the long running non-agent processes.

As a result I still run sessions and processes I really don’t want to lose inside tmux, nested inside herdr. Tmux never crashes.

As a counterpoint, I use herdr in WSL/windows and has never crashed for me.
If you’re mainly just using Claude Code, “$ claude agents” view is a good alternative coupled with tmux. I’m curious if herdr does other things though.
Maybe I didn’t give it enough of a shot, but I fond herdr was solving the wrong problem for me. I want to manage shipping work, gtd, not a bunch of agent sessions. The sessions are an implementation detail that I prefer jumping into only when something is wrong.
You can. I use it exactly that way with the individual terminal sessions accessible.

I'm mostly using it now because it integrates with ssh while still supporting image paste. I also use it via it's json API for a harness I'm working on which is agent agnostic.

I do expect I'll move off it if it becomes hostile and another tool takes it's place.

Only problem with Herdr is the VC funding. Not sure what the rug pull will be, but it's coming sooner or later.
Been using tmux session to hand over to claude for a while. Paranoid me uses the macbooks secure enclave with fingerprint for the ssh key so claude can't ssh into my remote boxes by himself. I then open named tmux sessions, perform the ssh login via fingerprint, and then tell claude that he is free to take over that session with a given name.
That’s the same reason I started using the Secure Enclave SSH access for HomeAssistant: I wanted to grant agentic access, but I also didn’t want my house’s automations being blown up. Everything is written offline as IaC, and gets pushed with explicit approval only.
Same reason I migrated my keys to ed25519-sk and began using touch and PIN hardware security dongles to approve auth.
It's great to manage subagents using the Claude team mode and tmux integration.
tmux and pi is already my preferred way to use LLMs, but the config in the article is sweet. I was wondering why the colors were off...
I used to use tmux & Claude on a Mac mini, but I gave it away when herdr came around - there were just too many tmux sessions to maintain and herdr does a better job at showing you what’s open. Admittedly, your tmux setup looks far more sophisticated than what I was doing. However, the new claude code projects is insane and a step above on having claude being a real project manager across sessions.
This website is so hard to read on a 15" retina screen.

The text content occupies like 20% of the screen, the rest is empty. Resizing the window helps.

The CSS of that website is weird in general, seems to be coming from whatever the kids use today that works like Dreamweaver. The width is so small because the layout is a grid for some reason, although it's just two columns. That same column has a "min-width: 0" and seems like that's happening in more places too, properties set to their defaults? Looks really strange overall.
Firefox reader view is made for this issue. Adjust the content width slider a bit and it's great.
It was unpleasant on a 27" 1440p monitor as well. I think the content is just too narrow in general.
This is why good browsers have a reader mode. Click a button and you can make it easily readable for you if you have challenges reading. I don't know why you would resize the window. Just use reader mode.
fwiw, I like to set max-width of columns of text to about `64ch`. In smaller view ports I may go down to about 45ch. But I feel the range of 50-65ch is ideal for reading. Setting to 20% or 20 vw is a bit dangerous for this precise issue.
Ironically, making my Firefox window smaller - about 830 pixels wide - made the text content wider, taking up the full width.

Making it wider than about a thousand pixels shrinks the text column down to 400 pixels.

A weird design choice.

remove. works fine. `.guide-page[data-astro-cid-oph4gsm4] { max-width: var(--max-w-narrow); margin: 0 auto; padding: 2.5rem 1.5rem 2rem; }`
I am doing tmux + Claude but I wanted a bit more.

Firstly, I want to sandbox my agents from each other and from my hard-drive, and partition (and encrypt) secrets, so I use (and wrote) byre[0], and run a devbox with long-running agents for certain tasks. TermRover[1] is a pretty good SSH client for tmux. For a more native integration I have started using Happier[2] which provides a web front-end and iOS app for my sessions too (unified with real Claude Code, so handover is seamless), and put together a byre skill[3] to make that easy.

[0]: https://github.com/pjlsergeant/byre-happier-claude

[1]: https://termrover.sh/

[2]: https://happier.dev/

[3]: https://github.com/pjlsergeant/byre-happier-claude

I went down this path over 6 months ago and had a variety of custom setups using tmux, cmux, and more. But since using Orca IDE it feels like a leap in usability and robustness.
I found orca way to cluttered and overkill. Cmux feels very lightweight.
I love CMUX and some people I know who were building their own tmux setups bailed and just started using CMUX -- The built in browser and associated bash tools are awesome but really just having workspaces with colors and todos that survive a refresh makes it worth it if you run a bunch of agents at one time
I've made a terminal that is essentially ghostty + herder, but all natively and has a session persistence. https://thurm.rs

there is an ios application in testflight and web client, nothing is on the servers, using tailscale through clients or you can use classic remote hosts.

Isn't this the wrong architecture? Fundamentally, a coding agent should be running as a headless/detached process, a daemon. If it needs a CLI then that CLI can attach/connect to that daemon and interact with it. If you architect it that way then you can quit and resume the CLI anytime you want, from any machine you want and with whatever UI you want, the daemon doesn't care. Running the agent as an interactive CLI process which you need to stuff into something like tmux is just the wrong approach, and "connecting" to it by reading/scraping its screen is terrible.
Or, wrong by design. There is something about nudging users to use the claude CLI from which Anthropic extracts value. Otherwise they would not charge extra for "claude -p" or ACP access.

The tmux send-keys + terminal scrape is the LLM version of the analog hole of DRM'ed audio.

Wait, is `claude -p` usage counted differently? I've built something of a multi-agent daemon system and use `-p` extensively. Now I'm wondering if I'm burning my credits faster.
Oof same. I basically built something GP described: a daemon that kicks off a one-shot session, working on git-bug tasks
If you are paying for the API anyways, I don't think it makes a difference. What is different is if you are on a subscription then you need to pay more to use `claude -p`. But then Anthropic started adding free credits, at least for Team and above plans, to offset the cost. Drug dealer pricing.

But don't worry, I'm sure next week it'll all change in some new and confusing way. And not for the benefit of the customer.

Opencode works that way-ish.
tmux kind of is that daemon. The agent keeps running on the box and I attach from my laptop or phone. What I was missing was everything around it, like paste and files.
[flagged]
tmux is great, specially when you need persistence in a remote server where you don't want or can't install any other software, and when you are stuck with some 2010 terminal emulator.

But if you have control over your setup, I would use a capable terminal and ditch in-band multiplexers that sit in the middle of the process and your terminal eating up escape sequences and native features while adding latency. Then use a separate tool for session persistence (I like zmx but there are more for this).

Sigh, painful AI slop that is wrong on so many things and just an ad for crystl.
I work on a GUI multi-agent harness & IDE (claude, codex, opencode,vibe). It has MCP for supervisor agents to delegate tasks and receive feedback.

A nice alternative for ppl who struggle with terminal based solutions. It's a free indie product. https://shikigami.dev <--- more info there

I created my own “terminal multiplexer for AI agents” after trying out herdr.

For me (like for many others) tmux didn’t suit the multi agent workflow. Herdr then was too buggy in my experience.

My own tool, Jai, connects to multiple machines, handles multiple agents and enables agent to agent communication.

For those interested: https://michael.sinax.be/jai/index.html

Interesting, thanks for sharing! Is it not open-source? I could not find a github link.
I didn’t release the source yet but plan on doing so.
The documentation does mention building from source, maybe edit it or add a note to avoid confusion?

Still though why would you release and announce this before being ready to share the sources? You're telling people to run a shell script that not only fetches and installs a random, closed-source prebuilt binary, but also runs it automatically after fetching it.

Nobody in their right mind should be running this script or recommending it to anybody.

Looks interesting but I’m confused if you published your source code or not.

> By hand or from source > To install by hand, download jai-x86_64-unknown-linux-musl (Linux) or jai-aarch64-apple-darwin (macOS) or jai-x86_64-pc-windows-msvc.exe (Windows), check its SHA-256 against latest.json, and put it on your PATH as jai (jai.exe on Windows). You can also build from source with cargo install --path .; those builds don't check for updates.

However I’m not able to find source code anywhere on your github.

No worries if you didn’t open source, only it seems ambiguous currently.

Bit of a conflict with jai.scs.stanford.edu/.
Like others here I created my own terminal multiplexer as well. Daemon that holds all sessions, seamless binary upgrades so those sessions never get lost, everything recorded so recovery is always possible, thin client mode so laptop has a native app that connects to daemon, and a wasm responsive webui with transcription so I can carry on with sessions from phone. CLI allows agent control of everything for a harness independent implementation of claude's channels. A few friends have forked and adopted it as their daily driver. Similar organization to herdr wrt spaces to organize sessions. Optimized for speed/bandwidth when running in thin client mode.

https://github.com/zackham/seance

You can just install Claude Code on the server and drive it from Claude Desktop via remote control. That way you can control Claude Code on mutiple servers straight from your Claude Desktop, Mobile or Web, and stay fully within Anthropic tools.

Everything works: you get the native view of subagents, you can upload files and images, fork threads, etc.

The massive upside is that the actual work happens on the server so you can close your laptop and it will continue plus it will not fry your thighs. The advantage over sessions (which I haven't tried but theoretically sound) is that you can configure Claude's environment on the server however you like. Give it any tools you need, ssh access to other machines, sudo, whatever.

The only downside is that every new project requires a setup step on the server (to add the systemd service) where you will develop it since Claude can only handle one server per directory. Claude will handle this step however if you give it ssh access to your server.

The machines show up nicely in Claude Desktop/Mobile/Web, and repos/projects are in a dropdown. Unless you work on very many projects at the same time, this setup is golden.

> The only downside

This is the only downside? You expose your servers to Claude infrastructure and their security. You inherently leave a backdoor open to your system.

I can't wrap my year around how far we backtracked on security standards, to the point people just don't even see the obvious.

Is it better if these are pure development servers, that are only used for Claude to create software?
I’ve been thinking about something similar using a pizero2w on a little rover thing i have. Turn cc loose writing the software to drive it around while reading sensors for obstacle avoidance. It would be cool to prompt “drive to the wall, turn around, and come back” and see if it could figure it out.
I put tailscale on my desktop and run my AI sessions in tmux (or per that other HN topic, anything with persistent attachable sessions). Now I can termux in from my phone or laptop and keep the work going. Not everyone has a spare desktop sitting around, but I like having freedom of provider and keeping the actual filesystem on my machine.
I don't use tmux. I run Claude Code in Cursor windows, and each window title shows the folder name, so that's how I tell them apart. It rarely gets confusing, and an app I built for myself made it a lot easier.
I've been doing this for a while with jaiver (made by me). Just expanded it recently to work with another tool that allows access via Telegram, because I've been on a crusade to make everything on my desktop mobile-accessible.

- https://gitlab.com/skeledrew/jaiver

Similar others I have had a lot of success just hand rolling a terminal multiplexer that fit my workflow — somewhat similar to herdr but works a little bit how I had my set up working with git worktrees and agents. Terminal native, and optimised for speed.

https://domux.dev

what are the differences between domux and herdr ?
I honestly haven't used herdr off a lot myself, but the main thing that jumped out was organising projects. With domux projects can have workspaces which are git worktrees that domux manages, and you can run agents inside them. That helps me see at a glace what workspaces I have in flight, and the work each agent is doing inside them. The navigation is different as well — with cmd+k like experience to rapidly switch between agents.
Wow, nearly every top level comment is about coding their own version of this.

I'd love some perspective on what problem this setup solves and how do you address sandboxing.

Like everyone else here I have mine as well. My motivation was: - A way to 'resume' my whole workflow after restart or shutdown - Visual way to verify which sessions are running still, which need my assistance, and which are actually done - Something lightweight I could bake into an orchestration layer

I have agents create work queues with little completion bar charts so I can at a glance be aware of all the running tasks (could be subagents as well) and a keyboard only way to jump between sessions.

I am also a big fan of distilling skills into scripts, and the expressiveness of tmux makes it easy to create some easy wrapper commands you let your agent use in a skill rather than having to direct it with verbose skills

What do you mean by sandboxing exactly? Not sure if the other part of my workflow addresses that or not.

One other thing I will say, maybe it is just me, but I have an easier time (even for the first time) moding and customizing tmux than terminals themselves.

So many commands. I just started claude in a new tmux session with iterm. Told it it's running in tmux with iterm and it should spawn subagents into separate tabs. When I wanted to know the status of the fleet I just asked the primary agent.

Worked pretty well. Now if I want to automate something like that I would just ask it to write a skill at the end of the session. I'm lazy and I can't remember a couple of hotkeys or commands.

herdr (supercharged tmux) has also mouse keybindings. So instead of remembering how to split a pane, you just right click with the mouse and choose "split" from the popup menu
I used Claude Code in tmux since January until August.

Now I am 100% in the ChatGPT desktop app, because it felt I am doing way too much tinkering amd maintenance of my setup instead of doing real work.

Retrospectively, it feels tmux was right choice early this year as the alternatives just weren’t there. It was also fascinating and enjoyable building own workflow from the primitives and I did learn a lot, but the learning has plateued and what was left was mostly chore.

tmux is still nice for remote work And it's even nicer when you want to have a different harnesses communicate with each other. I typically have a group of them working on the same thing, and typically it is Codex, Claude Code, and Pi. Sometimes I include agy if I need some Google specific capability, and it's very easy for them to communicate. I basically evolved something like a poor man's version of Claude Code's new projects But the nice thing is that I can have different coding harnesses other than cc working on a specific tasks.