Agentops rpi
Full RPI lifecycle orchestrator. Delegates to /discovery, /crank, /validation phase skills. One command, full lifecycle with complexity classification, --from routing, and optional loop. Triggers: "rpi", "full lifecycle", "research plan implement", "end to end".
git clone https://github.com/boshu2/agentops
T=$(mktemp -d) && git clone --depth=1 https://github.com/boshu2/agentops "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/rpi" ~/.claude/skills/boshu2-agentops-rpi-799399 && rm -rf "$T"
skills/rpi/SKILL.md/rpi — Full RPI Lifecycle Orchestrator
Quick Ref: One command, full lifecycle.
→/discovery→/crank. Thin wrapper that delegates to phase orchestrators. YOU MUST EXECUTE THIS WORKFLOW. Do not just describe it. THREE-PHASE RULE + FULLY AUTONOMOUS. Read/validation— it defines the mandatory 3-phase lifecycle, autonomous execution rules, anti-patterns, and phase completion logging. Unlessreferences/autonomous-execution.mdis set, RPI runs hands-free. Do NOT stop after Phase 2. Do NOT ask the user anything between phases.--interactive
Strict Delegation Contract (default)
RPI delegates via
Skill(skill="discovery", ...), Skill(skill="crank", ...), Skill(skill="validation", ...) as separate tool invocations. Strict delegation is the default — there is no --full flag because strict delegation is always on.
Anti-pattern to reject: compressing phases into one pass, substituting
Agent() for Skill(), skipping /validation. See ../shared/references/strict-delegation-contract.md for the full contract, rationalizations to reject, supported compression escapes (--quick, --fast-path, --from=<phase>, --no-retro, --no-forge, --no-budget), and detection rules.
A live compression was observed 2026-04-19; see
..agents/learnings/2026-04-19-orchestrator-compression-anti-pattern.md
Quick Start
Run
/rpi "<goal>" for the full lifecycle. For resume, loop, fast-path, and deep examples, read references/examples.md.
Lifecycle Ownership
Phase orchestrators own all sub-skill sequencing, retry gates, and phase budgets.
/discovery handles brainstorm → design (when PRODUCT.md exists) → search → research → plan → pre-mortem and writes the execution packet; /crank owns wave-based implementation and implementation retries; /validation owns vibe → post-mortem → retro → forge and validation retries. /rpi stays thin: it owns setup, complexity classification, phase routing, the implementation gate, the validation-fail-to-crank loop, and the final report.
Execution Steps
Step 0: Setup + Classify
mkdir -p .agents/rpi
Determine starting phase:
- default:
discovery
→ skip to Phase 2, use the artifact as the discovery handoff (see Discovery Artifact Mode)--from=implementation --discovery-artifact=<path>
(aliases:--from=implementation
) → skip to Phase 2crank
(aliases:--from=validation
,vibe
) → skip to Phase 3post-mortem- aliases
,research
,plan
,pre-mortem
map tobrainstormdiscovery - If input is a bead ID and
is not set, resolve it before routing:--from
saysbd show <id>
→ Phase 2 using that epic IDissue_type=epic- child issue with
→ Phase 2 using the parent epic IDparent
- If beads are absent or the input is plain goal text:
- preserve the goal as the lifecycle objective
- use
as the phase-2 handoff when discovery does not yield an epic.agents/rpi/execution-packet.json - default to Phase 1 unless the user explicitly set
--from
- Do not infer epic scope from
alone. Classify complexity:ag-*
| Level | Criteria | Behavior |
|---|---|---|
| Goal <=30 chars, no complex/scope keywords | Full 3-phase. Gates use throughout. |
| Goal 31-120 chars, or 1 scope keyword | Full 3-phase. Gates use . |
| Complex-operation keyword, 2+ scope keywords, or >120 chars | Full 3-phase. Gates use full council. |
Complex-operation keywords:
refactor, migrate, migration, rewrite, redesign, rearchitect, overhaul, restructure, reorganize, decouple, deprecate, split, extract module, port
Scope keywords:
all, entire, across, everywhere, every file, every module, system-wide, global, throughout, codebase
Overrides:
--deep forces full. --fast-path forces fast.
Log:
RPI mode: rpi-phased (complexity: <level>)
Initialize state:
rpi_state = { goal: "<goal string>", epic_id: null, phase: "<discovery|implementation|validation>", complexity: "<fast|standard|full>", test_first: <true by default; false only when --no-test-first>, cycle: 1, max_cycles: <3 when --loop; overridden by --max-cycles>, verdicts: {} }
Phase 1: Discovery
Delegate to
/discovery:
Skill(skill="discovery", args="<goal> [--interactive] --complexity=<level>")
After
/discovery completes:
- Check completion marker:
or<promise>DONE</promise><promise>BLOCKED</promise> - If BLOCKED: stop. Discovery handles its own retries (max 3 pre-mortem attempts). Manual intervention needed.
- If DONE: read
(or the matching run archive when.agents/rpi/execution-packet.json
is known), preserve the execution-packet objective spine, and extractrun_id
only when it existsepic_id - Store
when present andrpi_state.epic_idrpi_state.verdicts.pre_mortem - Log:
PHASE 1 COMPLETE ✓ (discovery) — proceeding to Phase 2
Phase 2: Implementation
If the execution packet has
epic_id:
Skill(skill="crank", args="<epic-id> [--test-first] [--no-test-first]")
Otherwise:
Skill(skill="crank", args=".agents/rpi/execution-packet.json [--test-first] [--no-test-first]")
Implementation gate (max 3 attempts):
: proceed to validation<promise>DONE</promise>
: retry with block context (max 2 retries)<promise>BLOCKED</promise>- Re-invoke
on the same lifecycle objective + block reason/crank - If still BLOCKED after 3 total: stop, manual intervention needed
- Re-invoke
: retry remaining (max 2 retries)<promise>PARTIAL</promise>- Re-invoke
on the same epic or execution packet (picks up remaining work)/crank - If still PARTIAL after 3 total: stop, manual intervention needed
- Re-invoke
Record:
ao ratchet record implement 2>/dev/null || true
Log:
PHASE 2 COMPLETE ✓ (implementation) — proceeding to Phase 3
DO NOT STOP HERE. Do not ask the user to commit. Do not summarize and wait. Proceed IMMEDIATELY to Phase 3. Implementation without validation is incomplete work — the flywheel does not turn, learnings are not captured, and quality is unverified.
Phase 3: Validation
MANDATORY for all complexity levels.
/validation is the Phase 3 orchestrator — it wraps /vibe + /post-mortem + /retro + /forge. Do NOT call /vibe directly from /rpi — call /validation which handles the full sequence. fast complexity uses inline --quick gates inside /validation; it does not skip closeout.
If the execution packet has epic_id:
Skill(skill="validation", args="<epic-id> --complexity=<level> [--strict-surfaces if --quality]")
Otherwise:
Skill(skill="validation", args="--complexity=<level> [--strict-surfaces if --quality]")
Validation-to-crank loop (max 3 total attempts):
: finish RPI<promise>DONE</promise>
: vibe found defects<promise>FAIL</promise>- Extract findings from validation output
- Re-invoke
on the same epic or execution packet + findings context (preserve/crank
/--test-first
from original invocation)--no-test-first - Re-invoke
/validation - If still FAIL after 3 total: stop, manual intervention needed
Record:
ao ratchet record vibe 2>/dev/null || true
Log:
PHASE 3 COMPLETE ✓ (validation) — RPI DONE
Step Final: Report + Loop
Report: Summarize all phase verdicts and epic status.
Optional loop (
): If validation verdict is FAIL and --loop
cycle < max_cycles:
- Extract 3 concrete fixes from the post-mortem report
- Increment
rpi_state.cycle - Re-invoke
from discovery with a tightened goal/rpi - PASS/WARN stops the loop
Optional spawn-next (
): After PASS/WARN finish:--spawn-next
- Read
for harvested follow-up items.agents/rpi/next-work.jsonl - Report with suggested next
command/rpi - Do NOT auto-invoke
Read
references/report-template.md for full output format.
Read references/error-handling.md for failure semantics.
Flags
| Flag | Default | Description |
|---|---|---|
| | Start from , , or |
| unset | With , use a pre-computed discovery artifact (e.g., a validation report or hand-written plan) as the Phase 2 handoff instead of running Phase 1. Validates the path exists, extracts scope/risks into an execution packet, and proceeds to . See Discovery Artifact Mode. |
| off | Human gates in discovery (research + plan) and validation (Gate 1, Gate 2). Does NOT affect pre-mortem or vibe council autonomy. |
| on | Fully autonomous (no human gates). Inverse of . Passed through to and . |
| off | Post-mortem FAIL triggers new cycle |
| | Max cycles when enabled (default 3) |
| off | Surface follow-up work after completion |
| on | Strict-quality (passed to ) |
| off | Opt out of strict-quality |
| auto | Force fast complexity (uses quick inline gates, still runs full lifecycle) |
| auto | Force full complexity |
| off | Pass to , making all 4 surface failures blocking |
| off | Report without mutating queue |
| off | Disable phase time budgets (passed to phase skills) |
Phase Data Contracts
All transitions use filesystem artifacts (no in-memory coupling). The execution packet (
.agents/rpi/execution-packet.json as the latest alias, plus .agents/rpi/runs/<run-id>/execution-packet.json as the per-run archive) carries the repo execution profile via contract_surfaces, plus done_criteria and queue claim/finalize metadata between phases. For detailed schemas, read references/phase-data-contracts.md.
Complexity-Scaled Council Gates
Pre-mortem
orcomplexity == "low"
: inline review, no spawning (complexity == "fast"
)--quick
orcomplexity == "medium"
: inline fast default (complexity == "standard"
)--quick
orcomplexity == "high"
: full council, 2-judge minimum; retry gate max 3 total attemptscomplexity == "full"
Final Vibe
orcomplexity == "low"
: inline review, no spawning (complexity == "fast"
)--quick
orcomplexity == "medium"
: inline fast default (complexity == "standard"
)--quick
orcomplexity == "high"
: full council, 2-judge minimum; retry gate max 3 total attemptscomplexity == "full"
Post-mortem (STEP 2)
orcomplexity == "low"
: inline review, no spawning (complexity == "fast"
)--quick
orcomplexity == "medium"
: inline fast default (complexity == "standard"
)--quick
orcomplexity == "high"
: full council, 2-judge minimum; retry gate max 3 total attemptscomplexity == "full"
Examples
Read
references/examples.md for full lifecycle, resume, and interactive examples. --fast-path still runs validation; it only forces the fast/inline gate profile.
Troubleshooting
Read
references/troubleshooting.md for common problems and solutions.
Runtime Compatibility
RPI runs in three runtime modes. All must produce identical phase artifacts.
| Concern | gc (default) | Hook-capable (Claude Code) | Codex native hooks (v0.115.0+) | Hook-less fallback (Codex pre-v0.115.0) |
|---|---|---|---|---|
| Session start | gc controller starts session | hook fires automatically | Native hooks fire automatically | called explicitly |
| Session stop | gc controller stops session | hook fires automatically | Native hooks fire automatically | called explicitly |
| Phase execution | via gc sessions | via Claude CLI | via Codex CLI | via Codex CLI |
| Event capture | gc event bus (, , , ) | local events.jsonl (legacy) | local events.jsonl (legacy) | local events.jsonl (legacy) |
| Phase state | | | | |
| Phase numbering | 1 = discovery, 2 = implementation, 3 = validation | Same | Same | |
| Ratchet checkpoints | | | | |
| Agent health | | manual / tmux inspection | manual |
gc is the default when available.
ao rpi auto-selects gcExecutor when gc binary is on PATH, version >= 0.13.0, and city.toml exists. Falls back to streamExecutor otherwise. Use --runtime stream or --runtime tmux to force legacy executors.
Minimal contract across all modes: phase state is always written to
.agents/rpi/phased-state.json; phase numbering stays 1=discovery, 2=implementation, 3=validation; ao ratchet check reads that shared state unchanged; the close-loop flywheel still runs at stop time.
Reference Documents
- references/complexity-scaling.md
- references/context-windowing.md
- references/gate-retry-logic.md
- references/gate4-loop-and-spawn.md
- references/phase-budgets.md
- references/phase-data-contracts.md
- references/report-template.md
- references/error-handling.md
- references/examples.md
- references/autonomous-execution.md
- references/troubleshooting.md
- references/discovery-artifact-mode.md