Watch
0
0
Fork
You've already forked hyperhive
0
hyperhive/hive-agent
Repository files (latest commit first)
Filename Latest commit message Latest commit date
atlas 52037133e2 swarm-nats-auth: limit agent subscribe to its own inbox and input
An agent's queue credential could subscribe to every subject in the swarm
account, so any agent could read every other agent's terminal, turn state,
operator input and request replies. Agents are the least trusted clients
on the queue (mara's ruling on #4901), so their grants now carry a
subscribe allow-list:

- an agent's own credential (the harness and its subagent daemon):
  `_INBOX.agent.<agent>.>` and `$SWARM.input.<agent>`
- the hive's shared agent client: `_INBOX.client.<client-id>.>`

Hive and swarm-controller grants are unchanged (no `sub` claim, so still
every subject).

The clients connect with the matching inbox prefix, so the replies they
rely on still arrive: the icon write's JetStream ack and the schedule
DIRECT.GET. `connect_with_token` takes the agent name and sets the prefix
itself; the hive-shared fallback uses the new
`connect_with_inbox_prefix`.

The harness no longer subscribes to its input subject when it fell back
to the hive's shared client: that identity names no agent, so it cannot
be granted one agent's input without all of them. It logs that and
skips, the same as the schedule reader on that path.

Refs #4901
2026-10-04 19:22:41 +02:00
..
prompts config PRs: remove the hive's config-PR webhook, poll and core merge 2026-10-02 23:13:03 +02:00
src swarm-nats-auth: limit agent subscribe to its own inbox and input 2026-10-04 19:22:41 +02:00
Cargo.toml swarm: named scheduled prompts for one or more agents, fired in each agent 2026-10-04 17:24:57 +02:00
README.md docs(turn-loop): facts + structure pass 2026-10-02 07:52:13 +02:00

hive-agent

The in-container harness serve-loop binary — one instance per agent. Long-polls the broker inbox and drives one turn per inbox message through hive-runtime, on the agent's runtime (claude --print by default, or an ACP agent). It has one role (agent); the Surface trait + AgentSurface zero-sized type tag keep the turn loop generic and testable for future roles without a parallel copy of the loop.

When to use it

You don't call into this crate from elsewhere — it's the top-level binary systemd starts per agent container. Look here when you need to understand or change: what happens between a message landing in the inbox and the agent's reply, how the harness bootstraps login/auth, how it serves the per-agent web UI, or how turn/event stats get recorded. Architecture detail lives in docs/turn-loop/; this README is just the map of the module tree.

Shape

  • main.rs — the serve loop and the Surface trait; broker calls (inbox poll, ack, send) go through hive-sock-client with hive-core-agent-sock wire types.
  • turn.rs — the turn-loop policy layer: renders the system prompt + MCP config, runs the turn through hive-runtime, classifies the outcome, and feeds the event/turn-stats sinks.
  • login.rs / login_session.rs — first-run and session-resume auth flow for the claude CLI.
  • mcp_config.rs — renders the per-turn --mcp-config / --allowedTools blob from tool groups + capabilities.
  • todos.rs / reminders.rs / todo_server.rs — the harness-local loose-ends v2 stores (sqlite-backed) and the in-agent socket server extra MCP daemons + hive-agent-mcp dial into for todo/reminder ops.
  • vacuum.rs — periodic sqlite vacuum sweep for the harness-local stores.
  • events.rs / turn_stats.rs / stats.rs — append-only event sink and per-turn telemetry recording (context usage, cost, tool favorites) under harness/.
  • prompt.rs — system-prompt renderer (persona + tool docs + environment facts).
  • web_ui/ — the per-agent dashboard (terminal pane, status, schedules) served over the built-in hive-agent web port.
  • paths.rs — canonical path resolution for state/harness dirs and the harness-local sqlite files.

Siblings: hive-agent-mcp (the MCP server this loop points the agent at every turn) and hive-runtime (the library a turn runs through). docs/turn-loop/::Harness binary shape covers all three together.