| Filename | Latest commit message | Latest commit date |
|---|---|---|
mara's ruling on this PR: the principle that landed for the role path is general, so the no-role path moves the task out of the system prompt as well. `system_prompt_and_trigger`'s no-role branch still passed `prompt_file` straight through as `--append-system-prompt-file` — byte-identical to main's pre-PR behaviour, and the exact bug this PR exists to fix. Since no agent ships roles yet, every real dispatch takes this path, so the standing-system-prompt bug (a task re-asserting itself as an instruction on turn 2/3/N under continue/goal) was still live for 100% of usage; only the unused role path had actually been fixed. `compose_prompt` now always folds the task into `trigger`, role or not. Without a role there is no role text to hold a system-prompt file open for, so none exists at all — `--append-system-prompt-file` is omitted from the spawn entirely, not pointed at anything task-shaped. Replaces `without_a_role_the_task_file_is_what_claude_is_pointed_at` (which pinned the bug as "unchanged") with a test asserting the task is absent from what reaches `--append-system-prompt-file` and present in the trigger. Role-path tests are untouched in behavior; only mechanical fallout from `compose_prompt`'s `Option<PathBuf>` return and `&str` trigger params (clippy needless_pass_by_value once both branches only borrowed it). Blast radius: this changes behaviour for every existing dispatch, since prompt_file's content has always gone into the system-prompt file before this fix. |
||
| .. | ||
| src | ||
| Cargo.toml | ||
| README.md | ||
hive-subagent-mcp
Per-agent daemon (hive-subagent-daemon) that spawns nested headless
claude sessions on request and serves the tool surface
(start/continue/status/interrupt, plus a separate
subagent-facing goal_reached/need_help route, one per-session URL)
directly over streamable-http. No stdio bridge, no per-turn respawn — an
agent's claude reconnects to the same stable URL every turn.
Independent of hive-bash-mcp — a subagent spawns a full nested
claude session, a much heavier capability than a bash command, worth
its own deployable/restartable unit.
Shape
One bin (hive-subagent-daemon, src/main.rs) built from the crate's
own lib (src/lib.rs):
session.rs— the actual claude-facing logic:Claude::spawn+RunningClaude::wait/cancel_handle(notInfiniteSession::run, which has no cancel handle to reach in — see the module doc for the v1 scope this trades away), the turn-continuation loop agoalswitches on, and the in-memory maps that are the only state this daemon keeps (no task files — a restart stops whatever's running; the actual claude session is the durable store, found again by name viahive_claude::SessionStore).mcp.rs— thermcptool routers (the parent'sstart/continue/status/interrupton/mcp, the subagent'sgoal_reached/need_helpon/signal/mcp/<token>) +serve_http. Neither signal tool takes a session name: the token in the path is minted per run and resolved to a session before dispatch, so a subagent has no way to name — and therefore no way to signal — a sibling. One route with a path parameter, because theRouteris built once at startup and sessions come and go for the daemon's whole life.paths.rs— the in-agent todo-socket path.