Problem
The no-hold-state has been enforced by prompt: AGENTS.md L3, skill cadence (post-review-pickup, heartbeat triggers), turn-based instructions, and the wake/heartbeat daemon re-engaging stopped agents. That substrate is gameable (the agent fabricates a "valid" terminal and idles — #13649) AND heavy (per-turn token bloat). The refuse-turn-end Stop hook (#13649 / PR #13651) now enforces "don't idle, keep working, check the mailbox" mechanically — the same shape as ADR-0019 (the lint replaced reviewer-diligence; the hook replaces the L3 sermon).
So a large class of prompt-machinery becomes redundant once the hook is proven:
- A2A wakes + heartbeat pulses — they exist to re-engage a STOPPED agent; the hook never lets the agent stop autonomously, so it self-checks the mailbox (
list_messages, now nudged in the directive) in its own loop → nothing to wake.
- AGENTS.md L3 prompt-bloat, the "3-heartbeats = failure" machinery, parts of the post-review-pickup cadence, turn-based memory reminders.
Intended solution
Replace the prompt-scaffolding with the hook's mechanical enforcement — a net substrate reduction (the symmetric MX-loop §self_evolving_systems mandates).
Critical constraint — PRESERVE the valuable content; do not lose it. The wake/heartbeat payloads carry real value that must be absorbed into the hook's injected directive, not deleted:
- the lifecycle-first priority order (own red-CI PRs → own green PRs needing a reviewer routed → requested reviews → blocked peer PRs once addressed → scarce cross-family reviews → then survey the backlog);
- the live-state injection (latest GraphLog id, GitHub
review_requested PR + state + checkedAt) — where the hook can feasibly compute it;
- "never idle / a gated PR is not a terminal / acknowledge FYI in one line."
The hook directive grows to carry the lifecycle-first order so disabling wakes loses nothing.
Test-gate (load-bearing)
Nothing is stripped until the live-fire proves the hook: merge #13651 → restart → observe (a) self-drive under refuse, (b) A2A picked up with no wake, (c) behavior holds as scaffolding strips. Only then decompose into subs (each = a measured strip + the directive-absorption that preserves its value), linked here incrementally.
Relates: #13624 (Agent-OS stability), #13623 (no-hold operationalization). Source: PR #13651 + @tobiu nightshift direction (2026-06-20).
Problem
The no-hold-state has been enforced by prompt: AGENTS.md L3, skill cadence (post-review-pickup, heartbeat triggers), turn-based instructions, and the wake/heartbeat daemon re-engaging stopped agents. That substrate is gameable (the agent fabricates a "valid" terminal and idles — #13649) AND heavy (per-turn token bloat). The refuse-turn-end Stop hook (#13649 / PR #13651) now enforces "don't idle, keep working, check the mailbox" mechanically — the same shape as ADR-0019 (the lint replaced reviewer-diligence; the hook replaces the L3 sermon).
So a large class of prompt-machinery becomes redundant once the hook is proven:
list_messages, now nudged in the directive) in its own loop → nothing to wake.Intended solution
Replace the prompt-scaffolding with the hook's mechanical enforcement — a net substrate reduction (the symmetric MX-loop §self_evolving_systems mandates).
Critical constraint — PRESERVE the valuable content; do not lose it. The wake/heartbeat payloads carry real value that must be absorbed into the hook's injected directive, not deleted:
review_requestedPR + state +checkedAt) — where the hook can feasibly compute it;The hook directive grows to carry the lifecycle-first order so disabling wakes loses nothing.
Test-gate (load-bearing)
Nothing is stripped until the live-fire proves the hook: merge #13651 → restart → observe (a) self-drive under refuse, (b) A2A picked up with no wake, (c) behavior holds as scaffolding strips. Only then decompose into subs (each = a measured strip + the directive-absorption that preserves its value), linked here incrementally.
Relates: #13624 (Agent-OS stability), #13623 (no-hold operationalization). Source: PR #13651 + @tobiu nightshift direction (2026-06-20).