hyperhive/hive-bash-mcp
Repository files (latest commit first)
Filename Latest commit message Latest commit date
iris 31c34939ef hive-bash-mcp: shorten the running-task todo label instead of embedding the whole command
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.
2026-08-14 02:24:42 +02:00
..
src hive-bash-mcp: shorten the running-task todo label instead of embedding the whole command 2026-08-14 02:24:42 +02:00
Cargo.toml hive-sh4re/hive-bash-mcp/hive-agent: retype TaskFile timestamps to DateTime<Utc>, drop now_unix from these crates 2026-08-02 02:12:19 +02:00
README.md docs(#2627): crate READMEs for the harness column (hive-agent, hive-agent-mcp, hive-agent-wake, hive-bash-mcp) 2026-07-23 16:41:05 +02:00

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.rs is the spawn/monitor loop and pushes todos on task transitions; socket.rs serves 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 via protocol.rs's DaemonRequest/DaemonResponse and 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).