##Run it, keep it
Every program runs in a terminal that lives in herdr-core, not in a window. Close the app, quit your terminal, update either one: the program keeps going, and you attach to it again where it was.
# runs it and waits, like a shell hc run cargo test # starts it and returns hc run --bg --name web bun dev # what's running hc ls # take it over (ctrl+\ detaches) hc attach web
hc update updates herdr-core itself. Running terminals keep running.
##Agents run agents
An agent can start helpers, give them work, wait for them and read what they did. Helpers live under the agent that started them, report back when they're done, and stop when it stops.
# start an agent and say how to report back hc run --bg --name review codex "review src/x.rs. Done: hc send $HC_TERMINAL_ID" # wait until it's done, then read it hc wait review hc read --lines 60 review # steer it hc send review "also check the tests"
Agents get the whole manual in one read: hc --skill.
The recipes for the example layouts on this site were written this way: one agent handed them to a helper, kept working, and got a report back when they were done.
##Every machine
Add your server, a VM or another laptop over SSH. Its terminals join the same list, and you run things there the same way.
hc machine add box@my-server
hc run --on my-server --bg claude
hc ls # this machine and my-server together ##Status from the source
herdr-core draws nothing and guesses nothing. A terminal's status (working, done, needs you) is what its program reports through OSC 7501, the open Program Status Protocol. No screen scraping, no list of known agents. Any program that speaks it has a status; your own script can too.
printf '\e]7501;state=blocked:app=my-agent\e\\'
##Build your own client
The Herdr app is one client. The same API is open to yours: a phone app, an editor panel, a Stream Deck. hc schema prints it as OpenRPC, with streams and events for live updates.
herdr-core is open source under Apache 2.0. herdrdev/herdr-core →