Skip to content

Releases: genkio/herdlet

herdlet 0.10.0

Choose a tag to compare

@genkio genkio released this 11 Sep 03:07
76f09e3

Five fixes in the daemon and pane-addressing layers. The coordination protocol is unchanged.

  • One daemon per socket. Concurrent auto-starts (parallel hooks) could bind several daemons to one path, because asyncio.start_unix_server unlinks an existing socket before binding. serve now holds an flock on <socket>.lock for its lifetime, binds the socket itself, and unlinks only the inode it bound.
  • Waits are pinned to the occupant they started on. Records carry an instance that bumps when an id moves to another pane, or to the same pane number on another tmux server. A re-registered id can no longer wake a waiter that was waiting on the old one. --prefix waits stay unpinned.
  • Hook reports are retried. hook retries once (1 s, then 2 s) and logs a lost report to ~/.herdlet.log instead of dropping it silently.
  • send into a bare shell works again. A shell pane has no TUI input box, so verified send refused it with exit 6. It now types the line unverified and says so on stderr. TUI panes without an input box still exit 6.
  • Pane ids are per tmux server. Records carry the server socket, and every pane operation (peek, send, approve, resume, kill, the limited sweep, list) uses the record's server, so a daemon on server A never reads or kills a same-numbered pane on server B.

Restart the daemon after upgrading: pkill -f 'herdlet.*serve', then any herdlet command. Old persisted records gain the new fields at read time.

herdlet 0.9.0

Choose a tag to compare

@genkio genkio released this 11 Sep 03:07
4caeb93
  • spawn starts codex workers (--agent codex), reads rollout transcripts, and knows the codex usage-limit wording. New --allow pre-seeds the worker allowlist, and an approval policy per spawn.
  • send serializes submissions per pane, waits for the input box to clear, verifies the submit, and --ack reports back. It refuses to type on a menu (exit 6) or over a draft that does not clear (exit 4). --no-enter implies --no-verify.
  • approve --choice <text> picks the menu option by meaning, not by digit, and marks the worker working only while the record still shows blocked (compare-and-set on state and timestamp).
  • Right-stack pane layout for spawned workers; ack --kill-pane closes only stale panes (a live worker behind a shell wrapper survives; --force overrides); compact events.

Restart the daemon after upgrading: pkill -f 'herdlet.*serve', then any herdlet command.

herdlet 0.8.0

Choose a tag to compare

@genkio genkio released this 11 Sep 03:07
ce7eacf

pair / unpair: a scoped peer channel between two workers. A worker can send only to a paired peer (or to what it spawned); every other target exits 3. Each peer send appends one line under ## Thread in the topic file and emits a peer_send event on watch.

Restart the daemon after upgrading: pkill -f 'herdlet.*serve', then any herdlet command.

herdlet 0.7.0

Choose a tag to compare

@genkio genkio released this 06 Sep 15:33
f2bc3b6

Six friction points found while orchestrating a 12-hour herd, plus a version
guard. All of it is additive: no subcommand or flag was renamed or reordered.

  • herdlet spawn launches a Claude Code worker in one command: it splits
    your own pane, pins --model and --effort (both required, so a worker can
    never inherit your priciest model by accident), mutes per-turn notifications,
    keeps the pane readable, and registers the worker as spawning before its
    first hook fires. That last part closes the pre-registration blind spot: the
    worker is addressable by name from t=0, including while it sits on a trust
    prompt. With --brief PATH it takes the title from the brief's first heading
    and sends the worker Read <brief> and do it. once it is up.
  • A limited state. An agent parked on a usage-limit banner fires no hook,
    so its record used to say working forever and every waiter on it ran to
    timeout. The daemon now reads the last 8 non-blank lines of each working or
    spawning worker's visible pane every 30 seconds and reports limited when it
    sees a real banner. Add it to your waits: --state done,blocked,limited. The
    pattern matches Claude Code's own wording; HERDLET_LIMIT_PATTERN overrides it
    and HERDLET_LIMIT_SWEEP=0 turns it off.
  • herdlet peek --transcript reads the worker's own transcript file instead
    of scraping its screen, and prints the last N assistant messages verbatim.
    A pane capture wraps, scrolls and hides a full-screen TUI's history; the
    transcript is the real text.
  • herdlet send --file PATH (- for stdin) takes a message from a file,
    and anything multi-line or over 200 characters is now delivered as one
    bracketed paste instead of being typed character by character. A long message
    can no longer be cut in half by the Enter that follows it, and tmux's 16 KiB
    command-line ceiling is out of the way.
  • wait --timeout-ok turns a timeout into a result with exit 0 instead of
    an error with exit 2. Use it in harnesses that read a background command's
    exit code as a failure, such as Claude Code's background Bash. Default
    behaviour is unchanged, so the documented chunked-wait loop still works.
    approve --wait takes the flag too, where it only changes the exit code.
  • PreCompact awareness. herdlet get now shows compacts, how many times
    an agent has compacted its context. A worker on its second compaction has
    already lost detail: that is your signal to end its phase and hand over to a
    fresh worker. State and message are untouched by a compaction.
  • Version guard. Every command except hook warns on stderr when it finds a
    daemon older than itself, with the command to restart it. The limited sweep
    and the compacts counter live daemon-side, so an old daemon silently serves
    the old behaviour.

After upgrading, restart the daemon so the daemon-side features are served:
pkill -f 'herdlet.*serve' and then any herdlet command. Agents re-register on
their next hook event and the registry survives the restart.

herdlet 0.4.2

Choose a tag to compare

@genkio genkio released this 11 Jul 02:06
1e10ae7

Full Changelog: v0.4.1...v0.4.2

herdlet 0.4.1

Choose a tag to compare

@genkio genkio released this 11 Jul 00:52
6938a72

Full Changelog: v0.4.0...v0.4.1

herdlet 0.4.0

Choose a tag to compare

@genkio genkio released this 11 Jul 00:16
7240c25

Full Changelog: v0.2.3...v0.4.0

herdlet 0.1.1

Choose a tag to compare

@genkio genkio released this 09 Jul 23:12
cf64e99

Initial release: coordination bus for coding agents in tmux panes. Semantic agent state (idle/working/blocked/done), push-based wait/subscribe, hook adapter for Claude Code and Codex, send/peek pane I/O helpers, live monitor TUI for tmux popups.