Skip to content

herdlet 0.7.0

Choose a tag to compare

@genkio genkio released this 06 Sep 15:33
· 30 commits to main since this release
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.