Watch
0
0
Fork
You've already forked hyperhive
0
hyperhive/hivectl/src
Repository files (latest commit first)
Filename Latest commit message Latest commit date
atlas 31008c83df feat: pause an agent's turn loop without stopping its container
A paused agent keeps its container, its claude session and its
dashboard/todo servers up, but stops driving turns. Messages queue
unacked and are drained on resume.

The whole protocol is a single marker file, `<harness>/paused`. That
directory is already a bind-mount shared between host and container, so
both sides just stat the same path: the harness reads it to decide
whether to drive a turn, hive-c0re reads it to render the badge and
writes/removes it for `hivectl pause|resume`. No new wire protocol, no
container round-trip, and it is sticky across restarts by construction.

Not calling `recv_next` while paused *is* the queueing semantic, so
there is no fencing to get wrong: reminders buffer in their unbounded
channel, the todo `Notify` permit coalesces, and a `request_next_turn`
that raced the pause survives because the gate sits above
`self_continue.take()`.

Graceful stop is handled host-side rather than in the harness: a paused
agent provably has no turn in flight, so `run_signal` skips the fence
entirely instead of eating the full `GRACEFUL_STOP_TIMEOUT` waiting for
a checkpoint turn that will never run.

`paused` is reported on `ContainerView` / `AgentStatusRow` for the
dashboard, orthogonal to `running` and reported for stopped containers
too.

Closes: hyperhive/hyperhive issue 2271
2026-07-26 03:11:33 +02:00
..
agents.rs feat: pause an agent's turn loop without stopping its container 2026-07-26 03:11:33 +02:00
approvals.rs split hivectl main.rs into per-domain modules (#2509) 2026-07-16 11:28:43 +02:00
choom.rs split hivectl main.rs into per-domain modules (#2509) 2026-07-16 11:28:43 +02:00
cli.rs feat: pause an agent's turn loop without stopping its container 2026-07-26 03:11:33 +02:00
client.rs refactor(#2352): extract standalone hivectl crate, hive-c0re daemon-only 2026-07-15 22:36:13 +02:00
completions.rs split hivectl main.rs into per-domain modules (#2509) 2026-07-16 11:28:43 +02:00
dag_progress.rs test(#2591): assert hivectl header shows source, not a derived label 2026-07-23 18:01:26 +02:00
forge.rs refactor(#2302): type socket wire fields as ident, validated by serde on deserialize 2026-07-20 21:46:18 +02:00
gateway.rs split hivectl main.rs into per-domain modules (#2509) 2026-07-16 11:28:43 +02:00
github.rs refactor(#2302): type socket wire fields as ident, validated by serde on deserialize 2026-07-20 21:46:18 +02:00
main.rs feat(#2554): add hivectl forge reconcile-config to reconcile local applied config against forge main 2026-07-17 12:55:42 +02:00
matrix.rs refactor(#2302): type socket wire fields as ident, validated by serde on deserialize 2026-07-20 21:46:18 +02:00
open.rs split hivectl main.rs into per-domain modules (#2509) 2026-07-16 11:28:43 +02:00
power.rs split hivectl main.rs into per-domain modules (#2509) 2026-07-16 11:28:43 +02:00
quota.rs refactor(#2302): type socket wire fields as ident, validated by serde on deserialize 2026-07-20 21:46:18 +02:00
subvol.rs refactor(#2302): type socket wire fields as ident, validated by serde on deserialize 2026-07-20 21:46:18 +02:00
util.rs refactor(#2302): type socket wire fields as ident, validated by serde on deserialize 2026-07-20 21:46:18 +02:00
wg.rs split hivectl main.rs into per-domain modules (#2509) 2026-07-16 11:28:43 +02:00