Files
boshu2__agentops/docs/MIGRATION-3.0.md
T
Bo 7455382416 refactor(gc): strip Gas City coupling; adopt NTM+MCP+managed-agents (ag-124p) (#679)
## 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
2026-06-02 09:06:41 -04:00

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/swarm for 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 via ao mcp serve (exposes the ao tool surface to any MCP-aware harness), or managed-agents via ao 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; --strict flips WARN→1). The retry hook for a substrate's check step 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 whole ao rpi/ao evolve loop 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.