Operator UX: force-stop with reaping, liveness/family-health status, hot-reload - #85
Merged
Conversation
…load - loopy stop --force: requests the stop and actively reaps the current iteration's spawned agent subprocesses via the existing reaper, so an abrupt stop leaves no orphaned agent CLIs (previously required manual pkill). - loopy status: adds a liveness signal (age of most-recent activity for the active session) and surfaces rate-limited model families when the harness run.json carries them (best-effort, tolerates absence); plus a JSON form. - loopy reload: atomically refreshes the coordinator's cached preflight so a fixed prompt / reloadable coordinator-only config is picked up on the next iteration WITHOUT a restart. Deliberately does NOT reload the session-frozen config_snapshot, goal, model/family, or workflow contracts (that immutability is load-bearing) — documented precisely. Implemented by codex (gpt-5.6-sol xhigh); pending Grok + human review. Co-Authored-By: Codex (gpt-5.6-sol) <noreply@openai.com> Claude-Session: https://claude.ai/code/session_01EPYwF6cRYs2mfsfHF1hibc
…s health Publishes the operator-UX surface on the docs site: loopy stop --force (reap active agents), loopy reload (refresh prompts/coordinator config at the next boundary; not the frozen session policy), and the new status health lines (last-activity liveness + rate-limited model families, plus --json). Adds troubleshooting entries for a wedged loop, orphaned agents, a rate-limited family, and a prompt fix not taking effect. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EPYwF6cRYs2mfsfHF1hibc
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Three operator-UX gaps felt while running a real program:
loopy stop --force— requests the stop and actively reaps the current iteration's spawned agent subprocesses via the existing reaper, so an abrupt stop leaves no orphaned agent CLIs (previously required manualpkill).loopy statusliveness + family-health — adds the age of the active session's most-recent activity, and surfaces rate-limited model families when the harnessrun.jsoncarries them (best-effort; tolerates absence); plus a JSON form.loopy reload— atomically refreshes the coordinator's cached preflight so a fixed prompt / reloadable coordinator-only config is picked up next iteration without a restart. Does not reload the session-frozenconfig_snapshot, goal, model/family, or workflow contracts/rosters — that immutability is load-bearing (documented).Review
Implemented by Codex (gpt-5.6-sol xhigh); adversarially reviewed by Grok (grok-4.5) and me. Grok: SHIP-WITH-NITS — reload frozen-state safety sound (no mutation of config_snapshot/goal/model/contracts/rosters/tiers; membership changes fail closed); force-stop correctly reuses the reaper with host/run gates; status crash-safe. Nits are operator-edge semantics and test depth (CLI reaper test mocked; recovery-layer reaping tested with force=True).
Test plan
449 tests pass; ruff + pyright clean.
🤖 Generated with Claude Code — implemented by Codex, reviewed by Grok + Claude.
https://claude.ai/code/session_01EPYwF6cRYs2mfsfHF1hibc