## What Operator-authorized (Bo, 2026-06-02). Strips the remaining **Gas City** (`gastown`) coupling from AgentOps and reconciles the **split-doctrine state** on `main` that the #672–#676 post-mortem flagged: canonical docs (#676) said NTM+MCP+managed-agents while user-facing docs still described Gas City as the reference substrate. The out-of-session substrate is now uniformly **NTM** (local tmux swarm) + **MCP** (`ao mcp serve`, shipped) + **managed-agents** (`ao agent`). AgentOps adopts a substrate; it owns none. Closes **ag-124p** (and resolves **ag-h93p** — the claude.json gc-hook decouple). ## Deleted (load-bearing surfaces, per the bead's verified scope) - `packs/agentops/` (the reference City) + root `city.toml` - `skills/using-gc` + `skills-codex/using-gc` (+ `tests/scripts/using-gc-skill.bats`) - `gc prime/nudge/mail/hook` wiring in `cli/hooks/claude.json` → now hookless, matching 3.0 doctrine ## Doc sweep (the split-doctrine fix the post-mortem required) - **README.md, docs/MIGRATION-3.0.md, docs/dependencies.md, docs/activation-profiles.md** re-narrated to the substrate trio (the four files the verdict named) - AGENTS.md / CLAUDE.md substrate bullets; `dream` skill (+codex twin) retirement pointer; `shared` / `agent-native` / `using-agentops` cross-refs; skill-dispositions, context-map, sku-catalog, google-sre convergence map ## Regenerated derived surfaces Skill counts (81→80), `registry.json`, `skills/catalog.json`, context-map, skill-domain-map, codex hashes (14) + manifest, SKILL-TIERS — all via the generators, validated drift-free. ## Scope boundaries / follow-ups - **`cli/internal/doctor/fix_bridges.go`** still carries a gc-bridge detector/fixer subsystem. Out of the bead's verified scope; degrades gracefully (stat-checks, returns empty when `gc`/`city.toml` absent); removing it is a test-backed Go change → **follow-up bead**. - **CLAUDE.md "Gas City bridge — REMOVED"** note kept intentionally: it's an anti-re-coupling record, not substrate-framing. - The local-only **bd-closeout** pre-push check (not in CI) is a pre-existing gap on `main` (its AGENTS.md has no `bd dolt push` line) — untouched here. - `thesis-stability` gate FAIL, if present, is the pre-existing README/PRODUCT/GOALS tagline drift, unrelated to this PR (my README/PRODUCT edits are the dependency table + skill-count numbers, not the tagline). ## Verification `go build ./...` + `go vet` green · skill schema (80/80) + integrity (heal --strict clean) + lint suite (0 fail) + codex parity green · sku-catalog & context-map drift gates green · zero broken markdown links to deleted paths. Closes-scenario: ag-124p#gc-coupling-strip Bounded-context: BC5-Runtime Evidence: docs/MIGRATION-3.0.md
4.2 KiB
Migrating to AgentOps 3.0
3.0 is a deliberate narrowing. AgentOps is now the in-session agent operating loop and context compiler: skills, the rpi/evolve loops, crank/swarm, and the .agents/ corpus. Everything that tried to be an always-on orchestration runtime has been removed. Out-of-session orchestration is delegated to a substrate you choose. AgentOps adopts a reference trio — NTM (a local tmux swarm) + MCP (ao mcp serve, shipped) + managed-agents (ao agent) — or you can run Olympus (the full-custom take). AgentOps owns none of it.
This guide lists what was removed in 3.0 and what to use instead.
Removed: all hooks (the repo is hookless)
ao hooks install, --with-hooks, and the embedded hook surface are gone. AgentOps no longer installs or runs hooks.
Use instead: skills + the ao CLI guide the workflow; CI is the authoritative gate (.github/workflows/validate.yml). What a PreToolUse/PostToolUse hook used to enforce locally, a CI job now enforces on push. For the in-session knowledge loop, the skills (/rpi, /evolve, /post-mortem) call the ao commands directly instead of relying on hook side effects.
Removed: the daemon (ao daemon / agentopsd)
The always-on daemon — the queue, supervisor, scheduler, job executors, and the dream/overnight compounding runner — is deleted. AgentOps has no out-of-session runtime.
Use instead:
- In-session: run the loop yourself —
ao rpi(one cycle),ao evolve(many cycles),crank/swarmfor in-session agent teams. This is the zero-dependency path; it needs no extra binary. - Out-of-session (always-on): run the loop under a substrate AgentOps adopts but does not own — an NTM tmux swarm (workers each run
ao rpi <bead>; a lead agent or operator slings ready beads), MCP viaao mcp serve(exposes theaotool surface to any MCP-aware harness), or managed-agents viaao agent(hosted, scheduled drivers). The substrate supplies supervision, crash-recovery, and agent spawning; the agents inherit the AgentOps skills and run the AgentOps loops. - Or use Olympus for a full-custom out-of-session implementation.
Removed: scheduling (ao schedule, ao plans, ao watch, ao overnight)
These drove the daemon's cron lane and are gone with it. docs/scheduling.md and the .agents/schedule.yaml contract no longer apply.
Use instead: schedule the substrate you adopt — cron-triggered NTM dispatch or a managed-agents schedule that runs ao compile / ao maturity / corpus maintenance — or run the work in-session on demand.
Removed: the factory command (ao factory) and its contract corpus
Use instead: the factory is the loop — crank/swarm in-session, or substrate-driven dispatch (NTM / managed-agents) out-of-session. There is no separate factory binary.
Removed: the runtime=gc phased-engine bridge
The CLI gc-bridge glue is severed. ao rpi keeps its non-gc backends (auto/direct/stream/tmux); runtime=gc is no longer a valid mode. A substrate now dispatches whole loops (ao rpi) as one unit rather than driving the phased engine through a bridge.
New in 3.0
ao validate --gate— deterministic exit-code verdict (0 pass/warn, 1 fail, 2 internal error;--strictflips WARN→1). The retry hook for a substrate'scheckstep and for CI; composes the existing ratchet validator, no network or LLM.- The reference out-of-session substrate — AgentOps adopts NTM + MCP (
ao mcp serve, shipped) + managed-agents (ao agent) to run the loop out of session. None of it is AgentOps-owned; the substrate dispatches a wholeao rpi/ao evolveloop as one unit and never drives its insides.
What stays (the in-session core)
ao rpi, ao evolve, crank, swarm, ao harvest, ao forge, ao mine, ao compile, ao wiki, ao doctor, ao goals, and the .agents/ corpus are all unchanged. The in-session loop is the product, and it is proven end-to-end.
One-line summary
If you ran AgentOps in a session, nothing you rely on changed. If you ran the daemon for always-on work, move that lane to a substrate (NTM + MCP + managed-agents) or Olympus — AgentOps itself is now in-session only.