agentsclimarketplace

Governed autonomy loop

Skill broomva/skills/skills/orchestration/governed-autonomy-loop

Broomva agent-skills monorepo — 48 Tier-2 skills compatible with Claude Code, Codex, Cursor, Gemini CLI, Goose, Copilot. Layout follows anthropics/skills (agentskills.io spec). Install: npx skills add broomva/skills --skill <name>.

Install
npx -y skills add broomva/skills --skill governed-autonomy-loop

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 3 stars3 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Turn any work-queue + any enforcement pipeline into a self-driving, self-healing, human-minimal autonomy loop with a control-systems safety envelope. A prose-defined governor closes a feedback loop over the queue, drives isolated worktree arcs to Done, is metacognitive (defers when the runtime can't support the act, escalates only when genuinely blocked, self-heals when the block clears), and NEVER performs the irreversible act itself — it delegates every merge/deploy/publish to an isolated arc gated by adversarial review + a policy gate + a server-side aggregate check. The controller is a markdown prompt interpreted fresh each tick; a thin tested shell (tick.sh) only schedules, locks, and logs. The skill SCAFFOLDS + GOVERNS a new loop instance: the invariant spine stays fixed, four adapters (tracker / irreversible-act + enforcement / runtime / partition) are per-instance, the deterministic core (scheduler, in-flight fold, reseed gate, config + denylist validation) is extracted into tested scripts, and the latent decisions stay prose with scenario evals. Generalizes the proven broomva ticket-dispatch governor (BRO-1740 + BRO-1833). USE WHEN setting up an autonomous ticket/PR/deploy loop, standing up a governor that drives a queue unattended, building a self-merging arc pipeline, adding a metacognitive control loop over background agents, or the user says "governed autonomy loop", "autonomy loop", "self-driving loop", "ticket-dispatch governor", "loopcast", "loop-caster", "set up an autonomous governor". NOT FOR a single in-session autonomous task (use /autonomous), a one-shot background watcher (use P9 wait), or a cross-session single-agent restart loop with no queue (use P12 persist) — this is the external-trigger, across-session, queue-driven, irreversible-act-gated quadrant.

SKILL.md

8.9 KB, ~1.8k tokens by cl100k_base, as published. Nobody here has run it

governed-autonomy-loop

Verbal incantation ("be autonomous", "merge when green") is open-loop control. A governed autonomy loop is the closed-loop version — a controller whose verification signals are causally independent of the agent (h ⟂ U), so "autonomous" becomes a machine-checkable behavior instead of a hope.

This skill packages a demonstrated controller, not a described one: the reference loop ran in production, hit two real runtime failures, degraded gracefully without paging a human, and self-healed to close its arc — all observable in loop-log.jsonl (broomva BRO-1740 + BRO-1833, first fully-autonomous merge 2026-07-10). It generalizes that instance into a recipe.

The latent-vs-deterministic split (the load-bearing idea)

Deterministic → tested code (scripts/)Latent → prose (templates/runner-prompt.template.md)
tick.sh — durable scheduler: fire-timing, flock, run-counter, quiet hours, mode decision, watchdog, child-guardreconcile classification (merged? dead? stale?)
loop_state.py — in-flight fold, reseed gate arithmetic, busy-guard, arc-status contractdispatch selection (which candidate, trust-bounded)
validate_config.py — fail-closed kill switch, DRY_RUN, num_or, partition guardthe govern/escalate judgment
denylist_check.py — tracker write-surface coveragethe adversarial (P20) review verdict
mine_loop_log.py — taxonomy + fixtures + drift-check from a running loop's logthe reconcile_skip reason classification (which reason to record)

The rule: precision work with one right answer per input lives in tested code; the model's intelligence builds the constraint that then constrains the model. The scripts are pinned by 65 unit/integration tests + an E2E smoke.

The invariant spine vs the swappable adapters

Keep the spine verbatim (references/invariant-spine.md): the loop shape (outer A–E + inner F), the ten binding invariants, the metacognitive gate, the irreversible-act delegation, resumability + rot-reseed, comment-first attribution, the trust boundary. Fill four adapters (references/adapters.md):

AdapterWhat you provideReference
Trackerlist/read/comment/transition/read-answer + the write-surface denylistlinear-server MCP + templates/denylist.linear.json
Irreversible-act + enforcementthe act (merge/deploy/publish) + the 3-layer gatePR-merge + P20 + .control/policy.yaml + merge-gate.yml
Runtimewhat pokes tick.sh on a cheap intervallaunchd / systemd / cron / k8s CronJob
Partitionthe disjoint label discriminator (N governors, one queue)agent-ok vs life-agent-ok

Procedure — instantiate a new loop

  1. Scaffold the instance dir: copy scripts/ verbatim; copy templates/runner-prompt.template.md and fill every {{SLOT}} for your adapters; copy + edit templates/config.env.template (starts DRY_RUN=1).
  2. Author the tracker adapter: point the runner-prompt at your queue's tool surface; write templates/denylist.<queue>.json (full write surface + both denylists) and run python3 scripts/denylist_check.py <that file> — it must PASS.
  3. Author the enforcement adapter + ship the server-side net: follow references/server-side-net.md — copy templates/merge-gate.yml, prove it green on one PR, THEN require it in a branch ruleset with no admin bypass.
  4. Wire the runtime: fill templates/launchd.plist.template or templates/systemd/*.template; set GAL_* env; enable it.
  5. Validate before arming (all offline, zero side effects): python3 -m pytest tests/ · bash tests/smoke.sh · DRY_RUN=1 FORCE=1 GAL_CLAUDE_BIN=echo bash scripts/tick.sh → assert a well-formed digest + runner_exit rc=0.
  6. Arm deliberately: review at least one DRY digest, then flip DRY_RUN=0. The first live fire is an operator decision, never an accident (DRY fails toward observation; the kill switch fails closed).
  7. Dogfood the generalization: instantiate a SECOND loop (a different queue or partition) — proving the spine/adapter factoring holds is the real test that you skillified the pattern, not re-described the instance.
  8. Keep it learning (once a loop is running): periodically mine_loop_log.py taxonomy <loop-log> — it grounds the controller in the loop's observed behavior and exits 3 on drift (a reason the loop emits that the skill's contract does not yet know), the signal to update loop_state + Step A. The reference loops mine to ✓ no drift across 1,836 live decisions. See references/live-telemetry.md.

Key parameters (config.env)

DISPATCH_ENABLED (kill switch, exactly 1) · DRY_RUN (live = exactly 0) · WIP_CAP · LABEL (the trust boundary — applying it authorizes code execution) · FIRE_INTERVAL_HOURS · RESUME_ENABLED · RESEED_TURN_CAP (context-rot bound) · RESEED_MAX_GENERATIONS (runaway guard). Full inline docs in the template.

Anti-rationalization

ExcuseReality
"The governor can just merge when it's green."Then it is a bot, not a controller. The governor NEVER performs the irreversible act (invariant 4) — an isolated arc does, only behind the independent enforcement pipeline.
"The prose controller is enough; skip the scripts."The scheduler + reseed gate + fail-closed config are ARITHMETIC. Latent space doing them is the bug — it silently drops a safety block. They are tested code.
"I'll require the individual CI jobs."Path-filtered CI skips on docs-only PRs and blocks them forever. Require the always-runs aggregate gate instead (references/server-side-net.md).
"Admin bypass is fine, I'm the admin."The arc runs as an admin identity. Admin-bypass = no gate for it. No bypass.
"One loop proves it."One loop proves the instance. Instantiate a second to prove the pattern generalized.

Validation (skill self-test)

  • Deterministic core: python3 -m pytest tests/ -q (65 tests) + bash tests/smoke.sh (E2E DRY tick, zero side effects).
  • Gate: python3 <skillify>/scripts/skillify_check.py <this dir> --run-tests exits 0 (SKILL.md contract + syntax-valid scripts + real unit tests).

References

  • references/invariant-spine.md — the fixed control-loop core + the 10 invariants.
  • references/adapters.md — the four adapter contracts + the optional Step-F adapters.
  • references/server-side-net.md — the mandatory checklist for autonomous acts.
  • references/scenarios.md — the gradeable latent-decision scenarios (the run-41 defer / reseed-exhaust / merge_not_authorized cases + live-grounded ones).
  • references/live-telemetry.md — what the reference loops actually do (mined from 1,836 live decisions), the drift check, and how to keep the skill learning.
  • Reference implementation: broomva scripts/ticket-dispatch/ (BRO-1740 + BRO-1833). Composes bstack primitives P3/P4/P5/P9/P12/P19/P20; it is the concrete realization of P19's external-trigger + across-session cube cell.

What ships with it: 29 files

161.4 KB alongside SKILL.md, 12 of them executable

evals/

scripts/

Keep looking

Skills are one crate of 326,970. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.