| Filename | Latest commit message | Latest commit date |
|---|---|---|
The todo pushed at task start embedded the entire raw shell command (task.cmd) as its summary — for a multi-line heredoc script (a common agent pattern), that balloons every UI that renders todo summaries to the command's full line count (hyperhive#3248). short_cmd_label keeps only the first non-blank line, char-truncated to 100 chars, with a trailing ellipsis whenever either the line itself was cut or more lines follow — so a short-looking first line ahead of a long heredoc body still reads as truncated, not as the complete command. The full command is still on disk in the task file for status/view; this only shortens the todo label. |
||
| .. | ||
| src | ||
| Cargo.toml | ||
| README.md | ||
hive-bash-mcp
Per-agent background bash-task runner: a long-running daemon
(hive-bash-daemon) plus the thin stdio MCP bridge
(hive-bash-mcp) claude spawns each turn to talk to it. This is what
backs the bash_run / bash_status tools agents use to kick off
long-lived shell commands (builds, test suites, anything that
shouldn't block a turn) and check on them later.
When to use it
Look here when changing how background bash tasks are spawned,
tracked, or surfaced. The daemon owns all subprocess lifecycle
(sh -c spawn, completion monitoring, task state files under
harness/bash-tasks/) and pushes task-completion todos onto the
harness's in-agent socket so they show up in get_loose_ends. The
bridge binary is deliberately dumb: no subprocess management, just a
unix-socket round-trip per tool call, so it cold-starts in
milliseconds every turn.
Shape
Two bins from one shared lib (src/lib.rs):
hive-bash-daemon(src/main.rs) — the long-running daemon.runner.rsis the spawn/monitor loop and pushes todos on task transitions;socket.rsserves the daemon's own unix socket for tool-call requests from the bridge.hive-bash-mcp(src/bin/mcp.rs) — the stdio MCP server claude spawns per turn. Forwards every tool call to the daemon over the socket viaprotocol.rs'sDaemonRequest/DaemonResponseand returns the result.
Supporting modules: paths.rs (daemon socket + agent-socket
resolution), stats.rs (the bash_commands favorite-tool stat
recorded into turn-stats.sqlite).