mirror(skills): apply the 0.4.8 whole-set canon->edges mirror pass

Regenerates the product-repo public-skill manifests from the shared
authored sources and rewrites the shipped skill edges (plugin + spec)
per the oracle-declared membership and layout. Two new shipping skills
land — `applying-a-permission-policy` (Tier-A: the agent-driven
translation invoked by the shipped `rig setup --policy` verb for
Locked/Standard/Open policies) and `delegating-work` (Tier-A:
every-agent distribution) — with all others realigned to the current
layout.

Inputs pulled from the shared conventions layer (SHAs pinned in the
release ledger):
- Oracle membership (product-public-skills.yaml)
- Denylist rules (internal-tokens.yaml)
- Edge layout (skill-edge-layout.yaml)
- Skill canon root (the skills/ directory of the shared conventions layer)

Discipline applied by the mirror per each shipping skill:
- Layer-1 provenance-frontmatter strip (removes internal
  source-evidence / assessment / qitem tokens before write).
- Layer-3 internal-fence strip.
- Deterministic leak-scan against the denylist; the script throws
  on any post-strip content leak, so ship-set writes are only
  reached when every shipping skill passes the scan.

No product-code changes; version fields untouched. This commit is the
canon->edges mirror only; the Release 0.4.8 version-bump commit sits
on top.
This commit is contained in:
mvschwarz committed 2026-08-04 17:51:40 -07:00
1 parent 84aa888fb8
commit 864cea6b80
47 files changed
+273 -3288

No files matched your search

@@ -0,0 +1,120 @@
---
name: applying-a-permission-policy
description: "Use when a permission policy is attached to a rig/seat (rig.yaml permission_policy:), or a user asks you to apply one, and you must translate that harness-neutral policy into the target harness's LIVE permission config — Claude settings.json / Codex config.toml / Pi run flags. Agent-driven and interactive: you read the policy, ground yourself in YOUR harness version, show the diff, and ask before writing. NOT for defining policies (that's the policy spec) and NOT a set-and-forget updater."
metadata:
openrig:
stage: established # config cells VM-verified + cold-transfer PASSING (rerun #2, 627abbb6) + built-in SPEC FILES landed → skill translates FROM the spec (POINT-not-COPY). The two established criteria met 2026-08-04. Reviewed at push.
tested_against: # VERSION STAMP — the whole point; re-verify at every harness bump
claude_code: "2.1.220 — VM-CONFIRMED 2026-08-03 (all cells)"
codex: "0.120.0 — VM-CONFIRMED 2026-08-03 (sandbox_mode/approval_policy; on-failure deprecated-but-accepted)"
pi: "0.83.0 — VM-CONFIRMED 2026-08-03: --approve/--no-approve govern PROJECT-RESOURCE TRUST, NOT tool permissions; Pi has NO permission surface (see Pi leg)"
verification_status: "Live-verified 2026-08-03/04 (dev-qa @ v-openrig-build). Claude 2.1.220 + Codex 0.120.0 config cells CONFIRMED live. Pi 0.83.0 divergence folded (flags = project-resource trust, not a permission gate). Cold-transfer rerun #1 blocked on the force_push/push_to_remote prefix collision → added the PREFIX-COLLISION rule. Cold-transfer rerun #2 (qitem 001c95fd, verdict SHA 627abbb6bf08ad2f350e2101f11438975def7b193b8da8bbcb747647239afc358): TRANSFERS — all 5 gate checks pass (collision resolved deterministically without asking; single ordinary write confirmation; defaultMode floor written; Codex workspace-write/on-request; Pi compute-nothing). Blocking collision/floor defect CLOSED → gate cleared, 4.8-shippable (provisional-with-passing-cold-transfer). Non-blocking seam closed: the built-in SPEC FILES landed (arch-accepted, source:builtin) → skill translates FROM the spec, interim in-skill pinned summary retired (POINT-not-COPY). stage:ESTABLISHED 2026-08-04 — both criteria met."
---
# Applying a permission policy
## Translation is best-effort — read this first
This skill provides the policy schema and OpenRig's best current understanding of how to translate it to each harness. That guidance is **best-effort and version-stamped**: harness permission surfaces change frequently across versions, so a mapping that is correct today can drift on a later release. When you apply a config-surface policy:
- **Verify against the current docs for your installed harness version.** Treat this skill's tables as version-stamped starting points (see `tested_against`), not settled truth.
- **Prefer testing in a protected or disposable environment first.** An incorrect write can lock a seat out or over-permit it, so confirm the format before applying it to a live seat.
- **Hand-editing via the harness's own settings tools is always a valid path.** If a translation is uncertain, setting the policy directly — or asking the user to — is a legitimate outcome, not a failure.
The reliable, deterministic parts are the **blunt instruments**: the YOLO full-bypass flag and the floor (Claude `acceptEdits` / Codex `workspace-write`), which ride the stable launch-flag surface. **Fine-grained config-rule translation — the allow/ask/deny prefix rules and the Codex posture — is the best-effort part** and carries no guarantee of exact fidelity. If a translation looks wrong, fall back to a blunt instrument or a direct hand-edit.
## ⚠ Read this preamble first — why this is a SKILL, not a script (do not "improve" it into a deterministic updater)
Harness permission formats are a **moving target**. The exact fact this skill is stamped against — Claude Code 2.1.220 permission rules are **prefix-only** (no flag-precise Bash match) — is *version-specific*; the rule grammar can change on the next point release. A hardcoded/deterministic updater would foot-gun the instant it does, and a wrong permission write can **lock a seat out or silently over-permit it**. So the maintained artifact is this caveated, version-stamped skill that an agent reads and applies **interactively, grounding in the live format** — never a code path that writes blindly. If you are tempted to replace this with a deterministic projector: that temptation is the bug this preamble exists to stop.
## When to reach for this
- A rig/seat has a policy attached (`rig.yaml … permission_policy: <file>`), and you're at **setup/preflight** — apply it (**mandatory for autonomous seats**, see the freeze warning).
- A user asks "apply the Standard/Open/Locked/Operator policy here" or "set up permissions like <host>".
- NOT for authoring policies (that's the policy spec) and NOT for daemon-level enforcement (OpenRig is agnostic — it injects nothing).
## What you're translating (the boundary)
INPUT = a **harness-neutral policy spec** (arch's schema): `default_posture`, `floor`, `allow`/`ask`/`deny` as **semantic actions** (`push_to_remote`, `delete_files`, …), `destructive_class`, `source: builtin|custom`. You TRANSLATE that intent → the harness's live config. You never invent policy; you never pre-bake harness config into the spec.
## The apply flow (interactive — the interactive-ask IS the product)
1. **Read the policy spec** + its `source:` marker (built-in read-only from the package = copy-to-customize before editing; custom = user space).
2. **PREFLIGHT (mandatory) — ground yourself in THIS environment:**
- **daemon-HOME must equal seat-HOME**, or a user-level Claude write never reaches the seat (assessment iv). Check; if they differ, **stop and ask** — do not write into the wrong HOME.
- Read the harness's **actual current config file** + confirm its schema against your installed version (`claude --version`, the live settings.json shape, codex/pi versions). If the format differs from this skill's `tested_against`, trust the LIVE format and flag the drift.
3. **Derive the per-harness config** from the semantic actions (see the three legs below). Compute the Codex posture-collapse + Pi bit.
4. **Show the concrete DIFF before writing** (old → new, per file). Never a blind write.
5. **Resolve best-effort actions by the built-in's rule FIRST, then ask only on genuine ambiguity.** Best-effort destructive actions (`force_push`, `delete_files`, `delete_everything`, `read_secrets`) default to **`ask`** (never a `deny` that can't be enforced) — apply that default rather than stopping to question-back. Surface a question only when the policy is genuinely ambiguous or the seat is interactive. **For a same-prefix collision (`push_to_remote` vs `force_push`, both `Bash(git push:*)`), NEVER ask — apply the deterministic PREFIX-COLLISION rule in the Claude leg.** (Live cold-transfers caught fresh agents *question-backing* — first on the `force_push` default, then on the prefix collision — instead of applying the fixed rule; both freeze an autonomous seat.) On a Claude-only fleet, if the policy denies `network_egress`, **say so explicitly**: it is NOT enforceable — Claude has no network gate, a `Bash(curl:*)`/`Bash(wget:*)` deny is best-effort, and `python`/`node` fetch bypasses it (live-verified: `urllib` reached HTTPS 200 under a curl/wget deny). Route real egress-gating to the Codex sandbox, or record it as advisory on Claude.
6. **Back up the current config**, then write. Prefer the **user-level** file (`~/.claude/settings.json`) for durable policy — it's the clobber-resistant tier (deny wins across the union). **ALWAYS include `defaultMode: "acceptEdits"` in the Claude settings.json you write** — the floor key must be PRESENT in the file, or the config policy strips the floor. (This is the exact gap a live cold-transfer test FAILED on: the fresh agent wrote allow/deny lists but omitted `defaultMode`, leaving the seat below the floor.)
7. **Verify** the write landed and the seat can see it (re-read; confirm `defaultMode: "acceptEdits"` is present; for an autonomous seat, confirm no `ask` will freeze it).
## Two surfaces — and this skill writes only ONE of them
Permissions live on two surfaces with opposite stability — which is the whole reason for the agent-driven split:
- **LAUNCH-FLAG surface — STABLE (>1yr) → OpenRig sets it DETERMINISTICALLY, NOT this skill.** The flags OpenRig passes at boot: Claude `--permission-mode` / `--dangerously-skip-permissions`; Codex sandbox/bypass flags; Pi `--approve`/`--no-approve`. **Two things live here, both OpenRig-owned: the FLOOR (minimum, by default) and YOLO (full bypass, opt-in).**
- **CONFIG-FILE surface — CHAOTIC → NEVER deterministic → THIS SKILL'S DOMAIN.** Claude `settings.json` allow/ask/deny + defaultMode; Codex `config.toml` approval rules. This is where the Locked / Standard / Open policies get applied — agent-driven, version-stamped, caveated. (Pi has **no permission surface at all** — its `--approve`/`--no-approve` flags govern project-resource trust, not tool permissions (VM-confirmed Pi 0.83.0); a permission policy does not translate to Pi. See the Pi leg.)
**THE FLOOR (launch-flag, OpenRig-set — this skill KNOWS it, never WRITES it):** Claude `--permission-mode acceptEdits` (keep it); **Codex workspace-only** (stop forcing `danger-full-access` — ≈ Codex's own default ≈ setting-nothing = agnostic); Pi `--no-approve` (a project-resource-trust floor — Pi has no permission gate; see the Pi leg). **One consistent unconditional minimum** (no by-context switching — that mode idea is parked 5.0). A chosen config-file policy layers ON TOP of the floor.
**YOLO MODE (launch-flag, OpenRig-set, opt-in — for people done with permissions):** OpenRig boots every seat with the full-bypass flag (Claude `--dangerously-skip-permissions`; Codex full-bypass). **When YOLO is on, CONFIG-FILE POLICY IS MOOT** — this skill does NOT apply a config policy (or explicitly notes it's overridden by the flag); don't fight the bypass. YOLO is OpenRig's deterministic job, not this skill's. (**Operator = YOLO mode** — subsumed.)
## The three harness legs (skill-owned mapping knowledge, version-stamped + caveated)
### Claude — `~/.claude/settings.json` (user-level, clobber-resistant)
- **Action → prefix map** (VM-CONFIRMED @ Claude 2.1.220, 2026-08-03 — every row exercised through real Claude tool calls). `fidelity`: `clean` = the prefix honors intent; `best_effort` = prefix-only can't fully enforce → prefer `ask`, never a `deny` that lies.
| Semantic action | `permissions.*` prefix rule(s) | fidelity |
|---|---|---|
| push_to_remote | `Bash(git push:*)` | clean |
| force_push | ask the flag-first forms `Bash(git push --force:*)` `Bash(git push -f:*)` `Bash(git push --force-with-lease:*)`; base `Bash(git push:*)` follows push_to_remote (see the collision rule) | **best_effort** — catches flag-FIRST force; flag-LAST (`git push origin main --force`) leaks |
| create_pr | `Bash(gh pr create:*)` | clean |
| publish_package | `Bash(npm publish:*)` `Bash(pnpm publish:*)` `Bash(yarn publish:*)` `Bash(cargo publish:*)` | clean (multi-pattern) |
| merge_or_release | `Bash(git merge:*)` `Bash(git tag:*)` `Bash(gh release:*)` | best_effort — protected-branch semantics not expressible |
| delete_files | `Bash(rm:*)` | **best_effort** — target-first leak (`rm <t> -rf` slips); scope not boundable → default `ask` |
| delete_everything | `Bash(rm -rf:*)` `Bash(rm -fr:*)` | **best_effort** — same leak → default to `ask`, never a silent deny |
| reset_or_discard_vcs | `Bash(git reset:*)` `Bash(git clean:*)` `Bash(git checkout:*)` `Bash(git branch -D:*)` | best_effort |
| drop_persistent_store | `Bash(dropdb:*)` `Bash(docker volume rm:*)` (+ project-specific) | best_effort (open-ended) → `ask` |
| rig_up / rig_down | `Bash(rig up:*)` / `Bash(rig down:*)` | clean — ⚠ an `ask` here FREEZES an autonomous seat |
| mutate_topology | `Bash(rig add:*)` `Bash(rig remove:*)` `Bash(rig rename:*)` | clean |
| run_toolchain | `Bash(npm:*)` `Bash(npx:*)` `Bash(pnpm:*)` `Bash(yarn:*)` `Bash(node:*)` `Bash(tsc:*)` `Bash(vitest:*)` `Bash(jest:*)` | clean (the known set) |
| run_arbitrary_shell | `Bash(*)` — this IS the `default_posture` knob | clean |
| network_egress | `Bash(curl:*)` `Bash(wget:*)` (partial) | **best_effort** — Claude has NO native network gate; real floor = Codex sandbox (route it there) |
| read_secrets | `Read(./.env)` `Read(~/.ssh/**)` `Read(**/*secret*)` (path-scoped) | **best_effort** — path-based, not secret-aware |
| install_dependencies | `Bash(npm install:*)` `Bash(pip install:*)` `Bash(brew install:*)` | clean |
- **PREFIX-ONLY caveat** — cannot flag-precisely gate (`force_push` vs `push_to_remote` both match `Bash(git push:*)`); **target-first leak** (`rm <target> -rf` slips a `Bash(rm -rf*)` deny). Actions marked `best_effort` in the taxonomy (`force_push`, `delete_files`, `read_secrets`) → surface the caveat and prefer `ask` over a `deny` you can't enforce (a `deny` that leaks lies).
- **PREFIX-COLLISION resolution (deterministic — resolve it, NEVER ask).** When two actions collapse to the SAME base prefix with different dispositions — the canonical case is `push_to_remote`=allow + `force_push`=ask, both basing to `Bash(git push:*)` — you cannot put that base prefix in both `allow` and `ask`. Resolve without a question-back:
- **Push allowed + force asked (Standard / Open):** put the base `Bash(git push:*)` per push's disposition (`allow`), AND add the flag-first force forms to `ask` (`Bash(git push --force:*)`, `Bash(git push -f:*)`, `Bash(git push --force-with-lease:*)`). RECORD in your diff that this is best-effort — flag-LAST force (`git push origin main --force`) leaks past the flag-first ask rules and runs under the allow. Don't block on it.
- **Push denied (Locked):** `Bash(git push:*)` in `deny` already covers force — no conflict.
This is a FIXED rule, not a user decision — apply it and note the leak. (A live cold-transfer FAILED because a fresh agent *blocked asking* "how to resolve the force_push/push_to_remote collision" instead of applying this default.)
- **`defaultMode: "acceptEdits"` is the FLOOR and MUST be written into every Claude settings.json you produce.** It is not a knob you tune, but it IS a key you must always include — a config policy that omits it strips the floor (the cold-transfer failure). Live-confirmed schema: `{"permissions":{"allow":[],"ask":[],"deny":[],"defaultMode":"acceptEdits"}}`.
### Codex — `~/.codex/config.toml` (via the existing X10 `codex_config_fragment` splice path — reuse, don't invent)
- Codex is **per-posture, not per-action**: the whole action set **collapses** to the nearest `{sandbox_mode, approval_policy}` pair. **Built-in → posture** (VM-CONFIRMED @ Codex 0.120.0, 2026-08-03 — each posture applied to a real seat: read-only blocked writes+egress, workspace-write allowed writes/blocked egress, danger-full-access allowed both):
| Built-in | `sandbox_mode` | `approval_policy` | Collapse note (surface this to the user) |
|---|---|---|---|
| Locked | `read-only` | `on-request` | read-only blocks all writes + egress, prompts on escalation — OVER-restricts `edit_files` vs the Claude floor |
| Standard ⭐ | `workspace-write` | `on-request` | workspace writes allowed, egress blocked by sandbox, prompt on escalation — UNDER-gates `create_pr` (no per-action ask; folds into the prompt) |
| Open | `danger-full-access` | `on-failure` | everything allowed, prompt only on failure — OVER-permits the `destructive_class` vs the Claude ask-gates |
| YOLO | *(flag-surface — full-bypass launch flag, NOT config.toml)* | — | not a config write; the rip-out adapter owns it |
Valid values (VM-confirmed @ Codex 0.120.0): `sandbox_mode` ∈ {read-only, workspace-write, danger-full-access}; `approval_policy` ∈ {on-request, on-failure, never, untrusted, granular} (`granular` observed live at 0.120.0). ⚠ `on-failure` (used by Open) is marked **deprecated** in 0.120.0 help but still accepted — revisit if a future Codex drops it.
- Surface the collapse: "Codex can't gate per-action; this policy becomes sandbox=X approval=Y, which over-permits Z / under-permits W."
### Pi — NO permission surface at all (VM-confirmed Pi 0.83.0 — the earlier "approval bit" reading was WRONG)
- **Pi has no tool-permission gate — neither a config store NOR a permission-posture flag.** Live verification confirmed: Pi 0.83.0's `--approve`/`-a` and `--no-approve`/`-na` govern **project-resource trust** (whether project extensions/resources appear in RPC `get_commands`), **NOT** tool-call approval. There is no sandbox or permission mechanism to map a policy onto.
- So a permission policy **does not translate to Pi**. Do NOT say `--approve` = "auto-approve all", or that a posture "collapses to a Pi approval bit" — that was an earlier misread, corrected here. This skill computes **nothing** for Pi.
- Whatever the OpenRig adapter sets (`--no-approve` by default) is a project-resource-trust floor, not a permission posture — not this skill's to derive.
- Behavior to know (resource-trust, NOT permission-gating): under default ask / `--no-approve`, a project resource is silently **absent** from RPC `get_commands`; it appears under `--approve`. Never mistake that for permission enforcement.
- **Say this to the user for a Pi seat:** "Pi has no permission-policy surface today — the policy applies to Claude/Codex; Pi runs under its project-resource-trust flag unchanged."
## ⚠ The two warnings that save real fleets
- **`ask` FREEZES an autonomous/headless Claude seat** — it hangs on the first non-edit op. So for autonomous fleets apply **Open/YOLO** (or a policy with no asks) **at setup** — the floor only covers edits; bash still asks without an applied policy. Never leave an autonomous seat on a policy with live `ask` gates. (Pi has no permission ask at all — see the Pi leg; Codex prompts per its posture, not per-action.)
- **daemon-HOME ≠ seat-HOME** silently voids user-level writes — always the preflight check above.
## The built-ins — DEFINED by the shipped policy spec files (translate FROM the spec; POINT, don't COPY)
The four built-in policies ship as read-only spec files (`source: builtin`, `policy_schema_version: 1`) — they are the AUTHORITATIVE definitions. **Do NOT restate their action-sets here.** An earlier in-skill copy drifted (it under-asked `publish_package`/`merge_or_release`, which the spec ASKs) — the exact reason POINT-don't-COPY is the rule. Read the attached/selected spec and translate its semantic-action sets (`default_posture` / `allow` / `ask` / `deny` / `destructive_class`) per the three legs above.
- **Locked / Standard ⭐ / Open** — `surface: config`. Translate to the Claude / Codex config surface. **Standard ⭐** is the recommended default: routine dev incl. push allowed, the outward/release/history-rewriting acts (`create_pr`, `publish_package`, `merge_or_release`, `force_push`) ASK, destructive_class ASKs. Standard has live `ask` gates → not for a headless-autonomous Claude seat (use Open or YOLO). Locked = deny-default whitelist; Open = allow-default, destructive_class asks only.
- **YOLO** — `surface: flag`, `launch_posture: full_bypass`. This skill does **NOT** translate it — it points at OpenRig's deterministic flag-surface opt-in (the rip-out YOLO setting). When YOLO is on, any config-surface policy is MOOT (the bypass overrides it). (Subsumes the former "Operator".)
Built-ins ship read-only in the package (canonical names); copy-to-customize into user space (custom, user-named); the `source:` frontmatter marker travels on copy. Onboarding presents these as a required MENU (explain each + ask which; no-choice = the floor).
## Boundary (keeps this the only maintained piece)
This skill TRANSLATES + APPLIES only. It does **not** define policies (the policy spec does) and does **not** enforce at the daemon (OpenRig is agnostic). Spec = *what* (neutral intent); this skill = *how, on this harness version* (the caveated, version-stamped translation).
---
*Stage: ESTABLISHED (2026-08-04) — both criteria met: (1) cold-transfer PASSING (rerun #2, verdict SHA 627abbb6, all 5 gate checks TRANSFER); (2) the built-in policy SPEC FILES landed (`source: builtin`, arch-accepted) as the authoritative source — the skill now translates FROM the spec and the interim in-skill pinned summary is retired (POINT-not-COPY). Config cells VM-CONFIRMED (Claude 2.1.220 / Codex 0.120.0); Pi has no permission surface (compute-nothing). Reviewed at push. feedback.md maintained.*
@@ -0,0 +1,43 @@
---
name: delegating-work
description: "Use when you have a task and must decide WHO does it — yourself, a spawned subagent, or another agent in the topology that already holds the context. The rule: how much would a blank slate have to read in to do this correctly? A lot → route to a context-holding agent; a little → subagent; unsure → a real agent or yourself. NOT the mechanics of fanning out (that's dispatching-parallel-agents / subagent-driven-development) — this is the who/whether decision, and the failure mode that makes teams abandon subagents."
metadata:
openrig:
stage: field-captured
---
# Delegating work — who should do this task?
## The core question: context performance
Getting work done well is a context problem. The agent best suited to a task is **the one who already holds the context that task requires.** Before you spawn a subagent or grind it out yourself, ask who that is.
## The decision
**Ask: how much would a blank slate have to read in before it could do this correctly?**
- **A lot to read in → route to a real agent in the topology that already holds it.** This is what the role structure is FOR — reviewers, QA, implementers who have been on a project over time. An agent that already understands the work produces a better, safer result than any amount of briefing.
- **A little — a prompt plus light grounding is enough → spawn a subagent.**
- **Genuinely unsure → err toward a real agent, or do it yourself.**
## Subagents are underused — reach for them far more
For self-contained work that is fully specifiable in the prompt, spawn a subagent instead of spending your own context: tracing, research, grounding passes, summarizing, scanning log files, searching, fetching, web search, mechanical extraction with citations. This is the common shape and it is under-used.
## The failure mode — the part that matters most
**Subagents start as blank slates, and you cannot anticipate everything they need to know.** Give one a task where there is a lot to understand and it will have blind spots it does not know it has — it will complete the task and **return a false conclusion**, not from weakness but because it lacked the context to know what "correct" even looked like.
This is the unknown-unknowns problem, and it is the single most common subagent failure: **a poorly-contextualized summary is worse than no summary, because it arrives looking like an answer.** Overreliance on subagents for context-heavy work causes more problems than it solves — and a team burned by it stops using subagents at all, which is the wrong correction. The fix is not "avoid subagents"; it is "match the task to the context it needs."
## The practical test
Before delegating to a blank slate, ask: **would a wrong-but-plausible answer here be detectable?** If the requester cannot check the result against something they already know — a citation they can open, a count they can re-run — the blind-spot risk is unacceptable, and that task belongs with an agent that holds the context.
## Worked examples
- **GOOD (→ subagent):** extract how four apps implement a UI mechanism, with `file:line` citations and an explicit instruction to report facts, not recommendations. Self-contained; the requester can verify the citations.
- **BAD to delegate blind (→ routed to the context-holder):** an independent security re-sweep of a rewritten git branch, where knowing which commit range must stay byte-identical, and that "lightly obfuscated real values" is the thing to hunt, takes a paragraph to explain and one sentence to get wrong. It went to the agent already holding the context.
## It generalizes
This is really **"route work to whoever holds the context,"** with subagents as the option for work that needs none. The audience is **every agent** — implementers and QA seats make this call as much as orchestrators do.
## Once you've decided
- Decided on subagents for 2+ independent tasks → `dispatching-parallel-agents` (the fan-out mechanics).
- Subagents executing a plan's independent tasks → `subagent-driven-development`.
- Routing to a real agent you will direct over multiple rounds → `directing-partner-agents`.
- The right context-holder is the human → `human-in-the-loop`.
@@ -243,6 +243,8 @@ If you're booting into a new seat in an OpenRig rig:
You're now oriented enough to start doing useful work.
**Permission policy (at setup):** OpenRig sets only a minimal usability floor on your harness permissions, then offers recommended policies you opt into (Locked / Standard / Open — or YOLO to bypass). If you're creating or bringing up a rig, that's a choice you make, not something OpenRig decides for you — see openrig-user's "Permission policy — pick one at setup" and the `applying-a-permission-policy` skill.
---
## Going deeper (canonical references)
@@ -12,10 +12,7 @@ metadata:
# Mission/Slice SOP — how you work a mission & slice
Use this skill to actually **do** mission/slice work the way OpenRig expects: author the convention sections, track on the canonical files, prove on them, hand off through them, and survive compaction on them. **Do the work described here; do not merely explain the protocol.** The deterministic backstop is `rig scope audit` — an **advisory, fail-open** check (it records and advises, never blocks a write; see Proportionality below), not an authority you serve. The conventions themselves live in ONE document: **`docs/reference/sdlc-conventions.md`** in the repo, materialized by the daemon at **`$OPENRIG_HOME/reference/sdlc-conventions.md`** (default `~/.openrig/reference/sdlc-conventions.md`) on an installed package — this skill teaches the flow; the SSOT defines the formats.
## Proportionality — this SOP serves shipping; it is not the work itself
The working product is the deliverable. This bookkeeping exists so the work survives handoff, compaction, and review — nothing more. **Match it to stakes:** OpenRig core = full ceremony; Studio Box / SDK / app slices = pragmatic — the mini-requirements may BE the whole PRD, and a couple of honest, LOOKed proof lines beat an elaborate contract. The `rig scope audit` backstop is **advisory and fail-open** (its own SSOT says so): it never blocks a build and is not a gate you clear before proceeding. If you're spending more time on the convention files or the audit than on the running product, stop and go build. Running the full apparatus on a small change is the letter-worship failure, not diligence.
Use this skill to actually **do** mission/slice work the way OpenRig expects: author the convention sections, track on the canonical files, prove on them, hand off through them, and survive compaction on them. **Do the work described here; do not merely explain the protocol.** The deterministic backstop is `rig scope audit` — the audit classifier is the source of truth for adherence. The conventions themselves live in ONE document: **`docs/reference/sdlc-conventions.md`** in the repo, materialized by the daemon at **`$OPENRIG_HOME/reference/sdlc-conventions.md`** (default `~/.openrig/reference/sdlc-conventions.md`) on an installed package — this skill teaches the flow; the SSOT defines the formats.
## The SDLC flow (intent → proof)
@@ -33,7 +30,7 @@ intent → mini-requirements + proof contract → (UI slices: mockups)
- **PARSER CONTRACT (README AND IMPLEMENTATION-PRD, from first draft — a parser contract, not stylistic):** each doc carries a verbatim, **undecorated** `## Mini-requirements` heading with a **numbered list**, and a verbatim, **undecorated** `## Proof contract` heading whose checkbox (`- [ ]`) lines are **character-identical** across the two files. `rig scope audit` parses the PRD's `## Proof contract`; a prose rollup (e.g. `## Required proof …`) or any renamed/decorated heading trips **`proof_contract_missing_or_malformed`** and forces a post-lock format patch. Never rename or decorate these two headings, and keep the PRD's checkbox lines byte-for-byte equal to the README's.
- **REFERENCE-NOT-RESTATE (public / runnable examples — an honesty rail, from first draft):** any example that shows output or a value the referenced file/command **derives** — repo/runtime counts, current-state totals, hashes, timestamps — must **reference the source/derivation, omit the volatile value, or pin an explicitly stable fixture**; never hardcode the live count/state in a public or shipped doc. "Illustrative" derived output is a lie on a timer: `OK registry (2 manifests)` goes false the instant an entry lands. Write the invariant form (`OK registry (<N> manifests)`, N = entries in `registry.json`) or name the fixture instead of the momentary number. Restated derivable state in a public doc is a defect `rig scope audit` will not catch — the author owns it.
3. **Plan-lock**: `rig scope slice approve <slice> --scope spec` — "the PRD matches the intent; THIS artifact set is what gets built." One daemon-side write: frontmatter stamp + append-only audit row.
- **PRE-PLAN-LOCK SELF-CHECK (advisory, not a gate):** before requesting `--scope spec`, it's worth running `rig scope audit --mission <mission> --json` and clearing any real **format** defect (e.g. `proof_contract_missing_or_malformed`) so the parser can read your proof contract — that's a genuine machine-parsing need, cheap to fix. But the audit is fail-open: findings do NOT block the lock or the build, and you do NOT need a zero-findings score to proceed. Fix what's real, skip what isn't, keep moving.
- **PRE-PLAN-LOCK SELF-CHECK (MANDATORY):** before requesting `--scope spec`, run `rig scope audit --mission <mission> --json`, inspect the target slice's entry, and request the lock **only when that slice shows ZERO findings**. Do not carry a format defect (e.g. `proof_contract_missing_or_malformed`) into the lock and force a post-lock correction.
4. **Build the locked set** — look at the mockups, not just the spec text.
5. **QA visual compare**: for each deliverable, load the planned mockup, produce the real artifact in a test/demo environment, visually compare, and record the verdict.
6. **Drop proof**: `rig proof add <slice> --artifact-type qa --verdict PASS --candidate-sha <tip> --money-evidence "…" --evidences "1,3" --media "walk.webm,panel.png" --self-check "…"` — the C1 header's closed sets validate at drop time; `--evidences` joins the drop to its proof-contract items and `--media` names the curated proof/-relative media the drop stands behind (that pairing + media set is what the UI's DELIVERED section renders).
@@ -47,7 +44,7 @@ intent → mini-requirements + proof contract → (UI slices: mockups)
## The canonical files (the operating surface)
> The canonical files below are the **operating surface of the work** — you track on them, prove on them, hand off through them, and survive compaction on them. Keep them current because that is what lets the work survive handoff, compaction, and review — but they **serve** the product, they are not the product. If you're polishing these files while the actual thing isn't shipping, you've inverted it: go build, then update them.
> The canonical files below are the **operating surface of the work** — you track on them, prove on them, hand off through them, and survive compaction on them. They are NOT side-artifacts to "maintain"; keeping them current *is* the work.
- **README.md** (mission + slice) — the overview, OPENING with the convention sections (`## Intent` / `## Mini-requirements` / `## Proof contract`). The **mission README carries this SOP at its bottom.**
- **IMPLEMENTATION-PRD.md** — the full PRD; opens with the mini-requirements; the `## Proof contract` here is what the UI's DELIVERED pairing joins proof against.
@@ -103,7 +100,7 @@ When you `rig capture` a pane, **greyed / ghost autocomplete suggestions are NOT
## Moment-of-truth checklist
- **Starting a slice?** → intent recorded verbatim? **PRD carries a verbatim numbered `## Mini-requirements` + a verbatim `## Proof contract` whose `- [ ]` lines are character-identical to the README's** (parser contract)? **no example restates derivable state** — counts/hashes/timestamps referenced, omitted, or pinned to a stable fixture, never hardcoded (reference-not-restate)? mockups attached (UI slices)? ran `rig scope audit` and fixed any real **format** defect so the parser reads the proof contract (advisory — a clean score is NOT required to lock)?
- **Starting a slice?** → intent recorded verbatim? **PRD carries a verbatim numbered `## Mini-requirements` + a verbatim `## Proof contract` whose `- [ ]` lines are character-identical to the README's** (parser contract)? **no example restates derivable state** — counts/hashes/timestamps referenced, omitted, or pinned to a stable fixture, never hardcoded (reference-not-restate)? mockups attached (UI slices)? **`rig scope audit --mission <m> --json` shows ZERO findings for this slice** BEFORE plan-lock (`--scope spec`)?
- **Finishing a slice?** → every proof-contract item has curated evidence via `rig proof add … --evidences --media` (C1 drops — never only hand-placed files)? PROGRESS updated? MISSION_NOTES `§1` refreshed? proof locked (`--scope delivery`)? Handed off via queue?
- **Committing?** → PROGRESS updated?
- **Compacting?** → filed your state in MISSION_NOTES?
@@ -16,80 +16,73 @@ Skills are **progressive disclosure**: a skill's *name + description* sit in you
Every row below names **how to reach the skill** — already-hot, or an exact load path. No row is a dead end.
For repo-shipped skills, resolve the installed CLI package root once:
```sh
OPENRIG_CLI_ROOT="$(dirname "$(dirname "$(realpath "$(command -v rig)")")")"
```
Paths below use that variable. Tier-A skills live in the daemon-vendored plugin at
`~/.openrig/plugins/openrig-core/skills/`; selected and vendored skills live in the installed CLI package.
## The index
### Always loaded — the universal spine (open its body when its moment hits)
These are auto-delivered to every rig; their name+description are already in your context. Open the body when the "when" matches.
- **forming-an-openrig-mental-model** — first boot, or you're unsure how the pieces fit. The runtime mental model. Load: `~/.openrig/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md`.
- **openrig-user** — you need a `rig` CLI command (send / queue / ps / whoami / scope / broadcast). The daily CLI surface. Load: `~/.openrig/plugins/openrig-core/skills/openrig-user/SKILL.md`.
- **claude-compaction-restore** — you just compacted (Claude). Restore from durable evidence before resuming real work. Load: `~/.openrig/plugins/openrig-core/skills/claude-compaction-restore/SKILL.md`.
- **session-compaction-and-restore** — preparing for, or recovering from, compaction (any runtime). The write- and read-side protocol. Load: `~/.openrig/plugins/openrig-core/skills/session-compaction-and-restore/SKILL.md`.
- **queue-handoff** — you're passing durable work to another seat or ending your turn. The queue is the work ledger, not chat. Load: `~/.openrig/plugins/openrig-core/skills/queue-handoff/SKILL.md`.
- **seat-continuity-and-handover** — handing your seat's work across a restart or to another owner. Load: `~/.openrig/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md`.
- **mission-slice-sop** — you're working a mission/slice (the SDLC: intent → mini-requirements + proof contract → build → QA → proof). The operating manual. Load: `~/.openrig/plugins/openrig-core/skills/mission-slice-sop/SKILL.md`.
- **messaging-the-human** — composing a message to the human operator. Plain language, no insider jargon. Load: `~/.openrig/plugins/openrig-core/skills/messaging-the-human/SKILL.md`.
- **software-for-agents** — you want the full first-load model of how agent software is built and operated here. Load: `~/.openrig/plugins/openrig-core/skills/software-for-agents/SKILL.md`.
- **openrig-skills** — this index (you're reading it). Always loaded; the entry point to everything below. Load: `~/.openrig/plugins/openrig-core/skills/openrig-skills/SKILL.md`.
- **forming-an-openrig-mental-model** — first boot, or you're unsure how the pieces fit. The runtime mental model.
- **openrig-user** — you need a `rig` CLI command (send / queue / ps / whoami / scope / broadcast). The daily CLI surface.
- **claude-compaction-restore** — you just compacted (Claude). Restore from durable evidence before resuming real work.
- **session-compaction-and-restore** — preparing for, or recovering from, compaction (any runtime). The write- and read-side protocol.
- **queue-handoff** — you're passing durable work to another seat or ending your turn. The queue is the work ledger, not chat.
- **seat-continuity-and-handover** — handing your seat's work across a restart or to another owner.
- **mission-slice-sop** — you're working a mission/slice (the SDLC: intent → mini-requirements + proof contract → build → QA → proof). The operating manual.
- **messaging-the-human** — composing a message to the human. Plain language, no insider jargon.
- **software-for-agents** — you want the full first-load model of how agent software is built and operated here.
- **openrig-skills** — this index (you're reading it). Always loaded; the entry point to everything below.
### Load when your role or task calls for it (repo-shipped, profile-selected)
These ship in the installed OpenRig CLI and reach a seat when its profile selects them. To use one, select it in your profile's `uses.skills`, or open the exact installed path below.
These ship in the OpenRig repo and reach a seat when its profile selects them. To use one, select it in your profile's `uses.skills`, or open it directly at `packages/daemon/specs/agents/shared/skills/core/<skill>/SKILL.md`.
- **openrig-architect** — authoring a rig or topology (NOT for changing OpenRig itself — that's `openrig-builder`). Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/core/openrig-architect/SKILL.md`.
- **openrig-cmux** — driving the `cmux` terminal provider. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/core/openrig-cmux/SKILL.md`.
- **openrig-herdr** — opening/managing seat terminals via the default proof-gated provider. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/core/openrig-herdr/SKILL.md`.
- **agent-startup-and-context-ingestion** — a seat is booting and ingesting its startup context. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/core/agent-startup-and-context-ingestion/SKILL.md`.
- **topology-mutation-and-seat-management** — adding, removing, renaming seats or otherwise mutating rig topology. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/core/topology-mutation-and-seat-management/SKILL.md`.
- **rig-lifecycle** — rig up / down / pause / resume lifecycle operations. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/core/rig-lifecycle/SKILL.md`.
- **rig-bundles-and-shareable-artifacts** — packaging or installing a rig bundle / shareable artifact. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/core/rig-bundles-and-shareable-artifacts/SKILL.md`.
- **cross-host-rig-commands** — reaching seats or queues on another host (`--host`). Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/core/cross-host-rig-commands/SKILL.md`.
- **openrig-upgrade** — upgrading OpenRig or the daemon. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/core/openrig-upgrade/SKILL.md`.
- **agent-starters** — composing an agent's starter context / priming packs. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/core/agent-starters/SKILL.md`.
- **specification-system** — authoring or reading AgentSpecs and rig specs. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/core/specification-system/SKILL.md`.
- **attention-queue** — managing the attention / needs-attention surface. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/core/attention-queue/SKILL.md`.
- **human-in-the-loop** — deciding when to involve the human vs. proceed on your own authority. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/core/human-in-the-loop/SKILL.md`.
- **watchdog** — monitoring or recovering a seat (health, restore, stuck state). Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/core/watchdog/SKILL.md`.
- **session-source-fork** — forking a session's source/context. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/core/session-source-fork/SKILL.md`.
- **openrig-architect** — authoring a rig or topology (NOT for changing OpenRig itself — that's `openrig-builder`).
- **openrig-cmux** — driving the `cmux` terminal provider.
- **openrig-herdr** — opening/managing seat terminals via the default proof-gated provider.
- **agent-startup-and-context-ingestion** — a seat is booting and ingesting its startup context.
- **topology-mutation-and-seat-management** — adding, removing, renaming seats or otherwise mutating rig topology.
- **rig-lifecycle** — rig up / down / pause / resume lifecycle operations.
- **applying-a-permission-policy** — a rig/seat has a permission policy attached, or you're setting one up (Locked / Standard / Open): translate it into the live harness config (Claude `settings.json` / Codex `config.toml`), agent-driven + interactive. Reached at onboarding and at rig setup/preflight. (YOLO / bypass is a launch-flag OpenRig sets, not this skill.)
- **rig-bundles-and-shareable-artifacts** — packaging or installing a rig bundle / shareable artifact.
- **cross-host-rig-commands** — reaching seats or queues on another host (`--host`).
- **openrig-upgrade** — upgrading OpenRig or the daemon.
- **agent-starters** — composing an agent's starter context / priming packs.
- **specification-system** — authoring or reading AgentSpecs and rig specs.
- **attention-queue** — managing the attention / needs-attention surface.
- **human-in-the-loop** — deciding when to involve the human vs. proceed on your own authority.
- **delegating-work** — deciding WHO does a task: yourself, a spawned subagent, or another agent that already holds the context (the when/whether decision, not the fan-out mechanics).
- **watchdog** — monitoring or recovering a seat (health, restore, stuck state).
- **session-source-fork** — forking a session's source/context.
Pod handbooks (load when you're in that pod):
- **orchestration-team** — you're orchestrating a rig: dispatching, monitoring, keeping the loop moving. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md`.
- **development-team** — you're on the dev pod: building and shipping product changes. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/pods/development-team/SKILL.md`.
- **review-team** — you're reviewing: fresh scrutiny, anti-slop, empirical verification. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/pods/review-team/SKILL.md`.
- **orchestration-team** — you're orchestrating a rig: dispatching, monitoring, keeping the loop moving.
- **development-team** — you're on the dev pod: building and shipping product changes.
- **review-team** — you're reviewing: fresh scrutiny, anti-slop, empirical verification.
Product-management craft (load when shaping/reviewing work):
- **requirements-writer** — turning intent into clear requirements. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/pm/requirements-writer/SKILL.md`.
- **plan-review** — reviewing a plan before it's built. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/pm/plan-review/SKILL.md`.
- **exec-summary** — writing a decision-ready summary for a human. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/pm/exec-summary/SKILL.md`.
- **office-hours** — running a structured advisory / decision session. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/pm/office-hours/SKILL.md`.
- **context-builder** — assembling the context a task or seat needs. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/pm/context-builder/SKILL.md`.
- **backlog-capture** — capturing and shaping backlog items. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/pm/backlog-capture/SKILL.md`.
- **ui-mockup** — producing a UI mockup for a slice. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/pm/ui-mockup/SKILL.md`.
- **requirements-writer** — turning intent into clear requirements.
- **plan-review** — reviewing a plan before it's built.
- **exec-summary** — writing a decision-ready summary for a human.
- **office-hours** — running a structured advisory / decision session.
- **context-builder** — assembling the context a task or seat needs.
- **backlog-capture** — capturing and shaping backlog items.
- **ui-mockup** — producing a UI mockup for a slice.
### Vendored craft — load when you're coding (ships with upstream provenance)
General engineering skills OpenRig ships as vendored copies. Open when the task matches; they carry "modified by OpenRig" provenance.
- **test-driven-development** — implementing a feature or bugfix: write the failing test first. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/process/test-driven-development/SKILL.md`.
- **verification-before-completion** — about to claim done / passing / fixed: run the check and read the output first. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/process/verification-before-completion/SKILL.md`.
- **systematic-debugging** — debugging: find the root cause before the fix. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/process/systematic-debugging/SKILL.md`.
- **writing-plans** — writing an implementation plan. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/process/writing-plans/SKILL.md`.
- **executing-plans** — working through a written plan. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/process/executing-plans/SKILL.md`.
- **brainstorming** — divergent ideation before converging. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/process/brainstorming/SKILL.md`.
- **using-superpowers** — discovering and using the vendored "superpowers" skill set. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/process/using-superpowers/SKILL.md`.
- **agent-browser** — driving a browser (screenshot / screencast) from an agent. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/process/agent-browser/SKILL.md`.
- **frontend-design** — designing frontend / UI. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/process/frontend-design/SKILL.md`.
- **dogfood** — web-QA / dogfooding a shipped UI. Load: `${OPENRIG_CLI_ROOT}/daemon/specs/agents/shared/skills/process/dogfood/SKILL.md`.
- **test-driven-development** — implementing a feature or bugfix: write the failing test first.
- **verification-before-completion** — about to claim done / passing / fixed: run the check and read the output first.
- **systematic-debugging** — debugging: find the root cause before the fix.
- **writing-plans** — writing an implementation plan.
- **executing-plans** — working through a written plan.
- **brainstorming** — divergent ideation before converging.
- **using-superpowers** — discovering and using the vendored "superpowers" skill set.
- **agent-browser** — driving a browser (screenshot / screencast) from an agent.
- **frontend-design** — designing frontend / UI.
- **dogfood** — web-QA / dogfooding a shipped UI.
## Need more than what ships here?
This index covers the **shipped** surface. A dev host carries far more (factory, architecture, PM-craft, studio skills) reached through the host's own routers/codemaps — if you're on a builder host and need something not listed above, that deeper routing is the next hop, not a wall. (Host-scale routing is the subject of the context-routing architecture doc; at product scale, this one file is the whole map.)
> Membership note: this index lists exactly the approved product-public oracle set (45 skills as of 2026-08-02: 10 Tier-A + 25 Tier-B + 10 vendored). Skills graduated but not yet in the oracle (e.g. `culture-drift`, `triple-gate-verification`, `reference-first-verification`) join this index when they land in `conventions/product-public-skills.yaml` — index and shipped set stay one scope.
> Membership note: this index lists exactly the skills that ship with OpenRig. When a skill graduates into the shipped set it joins this index — the index and the shipped set stay one scope.
@@ -8,8 +8,6 @@ description: Use when operating OpenRig with the `rig` CLI and you need the ship
This is an as-built guide to the shipped `rig` CLI.
Use current code and `rig ... --help` as ground truth if anything here ever conflicts with older planning docs.
If you need a different shipped skill, open `openrig-skills` — the global index that routes to every shipped skill in one hop.
This is not the config-layer or builder guide. Use the substrate control-plane guidance for `rigx`
and experimental overlays. Use the OpenRig builder guidance when changing OpenRig behavior,
doctrine, or release posture.
@@ -295,6 +293,21 @@ rig workflow continue <instanceId> # read-only inspector of an instance (doe
*(Surface note — the current `rig workflow` command group registers **13** subcommands: `validate`, `instantiate`, `project`, `list`, `specs`, `show`, `trace`, `continue`, `run`, `watch`, `route`, `resume`, `status`. There is still no `create` verb — the spec YAML is authored on disk. `project` is the advancing verb (it projects the next-step packet); `continue` is a read-only inspector, NOT an advance — do not conflate them. The 13-verb set and the project-vs-continue semantics are verified against current product main `d37a08ad` (`packages/cli/src/commands/workflow.ts`, 13 registered `.command(...)` entries; the earlier "6-verb surface / continue-advances" claim here was stale). Verify individual subcommand flags with `rig workflow --help`.)*
## Permission policy — pick one at setup (onboarding)
OpenRig sets only a **minimal usability floor** on your harness permissions and otherwise stays out of the way — then it ships **recommended policies you opt into**. It never bakes a permission policy for you. On install / onboarding this is a required choice, presented as a top-level pick:
- **POLICY MODE** — pick a built-in policy and have it applied:
- **Locked** — deny-by-default whitelist; untrusted rigs/work.
- **Standard** ⭐ (recommended) — the normal software-factory posture; dev incl. push + PR, destructive actions ask.
- **Open** — allow-by-default; everything except explicitly-destructive, which ask.
The built-in definitions ship as read-only policy spec files (Locked / Standard / Open); applying your pick is the job of the **`applying-a-permission-policy`** skill — it translates the chosen spec into your live harness config (Claude `settings.json` / Codex `config.toml`), interactively, showing the diff before it writes.
- **YOLO MODE** — done with permissions, just want it to work: OpenRig boots every seat with the harness full-bypass launch flag. No config policy is applied (the bypass overrides it). This is a deterministic OpenRig setting, not a skill.
- **No choice = the floor** — the minimal usability baseline (Claude `acceptEdits` / Codex workspace-only / Pi `--no-approve`), one consistent minimum, nothing more.
The floor and YOLO are **launch flags** OpenRig sets deterministically; the Locked / Standard / Open policies are **config-file** policies the skill applies (agent-driven, because harness config formats drift). A rig **carries** its chosen policy on its spec and boots with it — see Lifecycle → Bring a rig up. To (re)apply or change a policy, open **`applying-a-permission-policy`**.
## v0.3.x Starter, Workspace, And Plugin Surfaces
OpenRig v0.3.0 adds `rig agent-image`, `rig context-pack`, `rig workspace`, and
@@ -932,6 +945,7 @@ Current behavior notes:
- `local:` `agent_ref` values resolve relative to the rig spec directory, not your shell cwd.
- if you copy a built-in spec elsewhere, keep its `agents/` tree beside the YAML or rewrite those refs to `path:/absolute/path`
- `rig specs add <directory>` installs a full spec tree when the directory contains `rig.yaml` or `agent.yaml`.
- **Permission policy:** a rig carries a permission policy and boots with it (never changed on the fly). Default if none set = the minimum floor (Claude `acceptEdits` / Codex workspace-only / Pi `--no-approve`); otherwise a chosen built-in (Locked / Standard / Open) or deliberately none. When you spec or bring up a rig, decide its policy — apply it via `applying-a-permission-policy` (see also the onboarding menu, "Permission policy — pick one at setup").
Legacy/spec-specific surfaces still ship too:
@@ -246,8 +246,6 @@ rig spec validate rig.yaml
rig agent validate agents/my-agent/agent.yaml
```
Then run `rig spec audit rig.yaml` for advisory checks such as stale seat references and other cross-file drift that schema validation cannot detect.
If validation fails, fix the errors. Do not try to launch an invalid spec — it will fail with a less helpful error.
## Diagnosis: When Things Go Wrong
@@ -1,43 +0,0 @@
---
name: backlog-capture
description: "Quickly capture product ideas, feature requests, or insights from meetings and conversations. Rapid documentation with smart categorization and deduplication."
---
You help a product manager rapidly capture ideas, feature requests, and insights into a structured backlog.
## When to Use
- After meetings where feature ideas or requests surfaced
- When a customer or sales rep mentions a need
- When competitive research reveals a gap
- When a PM has a shower thought worth recording
## Process
1. **Take the input** — the PM provides rough text: a meeting quote, a feature idea, a customer request, a competitive gap.
2. **Structure it** — produce a one-liner for the backlog with:
- **Bold name** — short, descriptive feature name
- **Description** — 1-3 sentences covering: what it is, who it's for, why it matters, where it originated (meeting, customer, competitor)
- **Epic/area** — which product area it belongs to
- **Dependencies** — if it relates to existing features or backlog items
3. **Check for duplicates** — search the existing backlog for similar items. If a match exists:
- Update the existing item with new evidence rather than creating a duplicate
- Add the new source/date to the existing description
4. **Append to backlog** — add to the "Ideas Not Yet in Jira" section of the backlog file.
## Output Format
```markdown
- **[Feature Name]** — [Description. Who needs it. Why. Origin (meeting/customer/competitor, date).] Belongs under [Epic] epic. [Dependencies if any.]
```
## Guidelines
- **Capture fast, refine later.** The goal is not to lose the idea. Polish comes during prioritization.
- **Include the source.** "From Acme Corp demo feedback (2026-03-15)" is better than "customers want this."
- **Convert relative dates to absolute.** "Next Thursday" becomes "2026-04-10."
- **One idea per entry.** If a meeting produced 5 ideas, create 5 entries.
- **Don't validate here.** That's what `/office-hours` is for. Just capture.
@@ -1,87 +0,0 @@
---
name: context-builder
description: "Gather and distill context from meetings, competitors, regulatory sources, and internal discussions. Produces background.md for a feature and updates shared context docs when new knowledge is discovered."
---
You are a context research assistant helping a product manager gather and distill all relevant background material for a feature or initiative.
## What You Produce
1. **background.md** — Feature-specific context summary. Goes in the feature folder. References shared context sources.
2. **Shared context updates** — When you discover new synthesized knowledge useful across features (e.g., a customer requirements summary, a competitive analysis), write or update the appropriate shared context doc.
## Three-Layer Context Model
```
reference/ Layer 3 — Raw sources (meetings, PDFs, documents)
| distill
context/ Layer 2 — Synthesized markdown (shared across features)
| pull relevant
background.md Layer 1 — Feature-specific context
```
## Process
### Step 1: Understand the Feature
Ask the PM:
- What feature or initiative is this context for?
- What aspects are most important? (customer needs, competitive, regulatory, technical)
- Any specific meetings, customers, or competitors to focus on?
### Step 2: Search and Gather
Search across all layers. Be thorough but focused:
- **Validation first**: Check the feature folder for `validation.md` (office hours output). If it exists, it has demand evidence, named customers, competitive status quo, and the narrowest wedge.
- **Shared context first**: Check if synthesized context already exists.
- **Meetings**: Search by topic keywords, customer names. Check last 3-6 months.
- **Competitors**: Check competitor research for existing analysis.
- **Regulatory**: Find applicable regulations.
- **Customers**: Look for customer requests and pain points.
- **Existing specs**: Check for related work and shipped features.
### Step 3: Update Shared Context (if new knowledge found)
If your research produces synthesized knowledge useful beyond this one feature, write or update the appropriate shared context doc.
### Step 4: Write background.md
```markdown
---
title: "Background: [Feature Name]"
feature: [feature folder name]
updated: [today's date]
sources:
meetings: [list of meeting file paths]
competitive: [list of context/reference paths]
regulatory: [list of relevant regulatory sources]
customers: [list of customer context paths]
---
# Background: [Feature Name]
## Customer Drivers
[Who's asking and why. Key quotes and pain points.]
## Competitive Landscape
[How competitors handle this. Where we differentiate.]
## Regulatory Considerations
[Applicable regulations and compliance requirements.]
## Persona Context
[Which personas use this. Day-in-the-life context.]
## Internal Context
[Strategic alignment, stakeholder decisions, related initiatives.]
```
## Guidelines
- **Reference, don't duplicate.** Point to source files rather than copying content.
- **Distill, don't dump.** background.md should be under 500 lines.
- **Include sources for everything.** Every claim traces back to a meeting, report, or decision.
- **Highlight what's surprising or non-obvious.**
- **Flag contradictions.** If customers want different things, or data conflicts, call it out.
- **Date your sources.** Context decays.
@@ -1,84 +0,0 @@
---
name: exec-summary
description: "Generate a 1-2 page executive summary for a feature — orients sales, leadership, and engineering from a single document."
---
You generate an executive summary for a feature that's ready for development. The summary orients three audiences from one document: sales (pitch), leadership (strategy), and engineering (behavioral overview).
## What You Produce
A single `executive-summary.md` file in the feature folder. 600-800 words excluding mockups and FAQ. Written in present tense as if the feature already exists.
## Sources to Read
Before writing, silently gather all context from the feature folder:
1. **requirements.md** — acceptance criteria, business rules, scope, user stories
2. **background.md** — customer drivers, competitive context, regulatory considerations
3. **validation.md** — demand evidence, status quo, desperate user, narrowest wedge
4. **supporting/mockup-ascii.md** — visual mockups (pull 2-3 key screens)
## Output Structure
```markdown
---
title: "Executive Summary: [Feature Name]"
feature: [feature-folder-name]
status: [ready | in-progress | shipped]
jira: [ticket key]
updated: [today's date]
---
# [Feature Name]
## The Problem
[2-3 sentences. Customer pain in their language. Name real customers/prospects.]
## The Solution
[2-3 sentences. What we built, present tense. No jargon.]
## Who It's For
[Primary personas + named customers/prospects waiting for this.]
## Why Now
[Deals it unblocks, competitive gap it closes, what it enables next.]
## How It Works
[5-8 key capabilities. Describe actual user-facing behavior — enough for a dev to understand what to build.]
## Key Decisions
[5-8 non-obvious business rules and design choices. Focus on surprising or counter-intuitive ones.]
## Visual Preview
[2-3 ASCII mockup screens from supporting/ — the key screens that tell the story.]
## What We're NOT Building
[5-8 key out-of-scope items with brief reason.]
## Dependencies & Sequencing
[What must ship first. Cross-feature dependencies. Prerequisites.]
## Success Metrics
[2-4 measurable outcomes. Mix of usage and business metrics.]
## FAQ
### For Sales
[2-3 questions. When available, what to tell prospects, competitive positioning.]
### For Leadership
[2-3 questions. Opportunity cost, strategic fit, risks.]
### For Engineering
[2-3 questions. Dependencies, known risks, what's deferred, data model implications.]
```
## Writing Guidelines
- **Present tense throughout.** Write as if the feature exists.
- **Customer-readable language.** A prospect should understand sections 1-5.
- **Be specific, not vague.** Name deals, dollar amounts, competitors.
- **Key Decisions should surprise.** Don't list obvious things.
- **Mockups are curated.** Pick the 2-3 that tell the story.
- **FAQ answers should be direct.** No hedging.
- **Hard cap: 2 pages** for core content. FAQ can be a third page.
@@ -1,129 +0,0 @@
---
name: office-hours
description: "YC-style product validation using six forcing questions. Pressure-tests a feature idea before it becomes a requirement — ensuring real demand, a clear wedge, and evidence behind assumptions."
---
You are a YC-style product advisor running office hours. Your job is to pressure-test a feature idea before it becomes a requirement — ensuring there's real demand, a clear wedge, and evidence behind the assumption.
## The Six Forcing Questions
Work through these sequentially. Each question builds on the previous answer.
### 1. Demand Reality
"Who is actively asking for this, and what evidence do you have?"
- Name specific customers, meetings, or support tickets
- Distinguish between "customers asked for this" vs "we think customers want this"
- Search meeting notes and customer records for actual conversations
- If no evidence: flag it. An assumption isn't demand.
### 2. Status Quo
"How are users solving this problem today, and why is that not good enough?"
- Map the current workflow (Excel? Manual? Competitor tool?)
- Reference persona profiles for current technology stack
- Quantify the pain: time wasted, errors, cost, compliance risk
- If the status quo is "fine": question whether this is a real problem
### 3. Desperate Specificity
"Who is the single most desperate user for this, and what does their day look like?"
- Get to ONE specific person or company, not a category
- Walk through their actual workflow step by step
- What breaks for them? What's the moment of maximum frustration?
- If nobody is desperate: this might be a "nice to have" not a "must have"
### 4. Narrowest Wedge
"What is the absolute smallest version of this that would solve the desperate user's problem?"
- Strip away everything that isn't essential for that one user
- What's the MVP that, if you shipped it tomorrow, would make them switch?
- Reference existing capabilities — what already exists?
- Resist the urge to scope-expand. Narrower is better.
### 5. Observation / Surprise
"What have you observed or learned that surprised you about this problem?"
- Non-obvious insights from customer meetings, competitive research, or domain expertise
- Things the team didn't expect to find
- Industry-specific patterns or workflow quirks
- If nothing surprised you: you might not understand the problem deeply enough yet
### 6. Future-Fit
"If this succeeds, what does it unlock? If it fails, what have we learned?"
- Does this feature compound? Does it make future features easier?
- Does it strengthen competitive position or just maintain parity?
- What's the learning value even if the feature doesn't land?
## Process
### Step 1: Get the Pitch
Ask the PM to describe the feature idea in 2-3 sentences. No jargon, no implementation details.
### Step 2: Run the Questions
Work through all six questions. After each answer:
- Summarize what you heard
- Rate the strength of the answer (Strong / Needs Work / Red Flag)
- Ask follow-up probes if the answer is vague
### Step 3: Verdict
Save the assessment to the feature folder as **`validation.md`**.
```markdown
---
title: "Validation: [Feature Name]"
type: validation
verdict: [GO | REFINE | PAUSE]
date: [today's date]
pm: [name]
feature: [feature-folder-name]
---
# Validation: [Feature Name]
## Demand Reality
**Rating: [Strong / Needs Work / Red Flag]**
[Summary of evidence. Name customers, deals, dollar amounts.]
## Status Quo
**Rating: [Strong / Needs Work / Red Flag]**
[Current workflow and pain. What tools they use today.]
## Desperate User
**Rating: [Strong / Needs Work / Red Flag]**
[The single most desperate user and their breaking point.]
## Narrowest Wedge
**Rating: [Strong / Needs Work / Red Flag]**
[The smallest thing worth shipping. What's in, what's out.]
## Surprise
**Rating: [Strong / Needs Work / Red Flag]**
[Non-obvious insights. What the team didn't expect to find.]
## Future-Fit
**Rating: [Strong / Needs Work / Red Flag]**
[What this unlocks. How it compounds.]
## Verdict: [GO / REFINE / PAUSE]
- **GO**: Strong evidence, clear wedge, proceed to requirements
- **REFINE**: Promise but gaps — do more research first (list what)
- **PAUSE**: Insufficient evidence of demand — revisit when evidence emerges
## Next Steps
- [Specific actions — what to do immediately after this assessment]
```
**Naming matters.** This file is read by downstream skills:
- Context builder reads it for customer drivers and competitive context
- Requirements writer reads it for demand evidence, scope, and personas
- Executive summary reads it for the Problem, Why Now, and FAQ sections
## Guidelines
- **Be constructively skeptical.** Your job is to find weaknesses before the team invests in building.
- **Push for evidence, not opinions.** "Customers want this" -> "Which customers? When did they say this?"
- **Don't kill ideas — sharpen them.** Even a PAUSE verdict should include what evidence would change it.
- **The narrowest wedge is the most valuable question.** Most features are scoped too broadly.
@@ -1,98 +0,0 @@
---
name: plan-review
description: "Multi-perspective review of a feature plan or requirements doc before development begins. Evaluates from strategy, design/UX, and engineering angles to catch gaps early."
---
You are a multi-perspective plan reviewer. Before a feature moves from requirements to development, you evaluate it from three angles to catch gaps, scope drift, and missed opportunities.
## Three Review Lenses
### 1. Strategy Review (CEO/Product Leader Lens)
- Does this align with company growth objectives?
- Which personas does this serve? Are they buyers, users, or influencers?
- How does this compare to what competitors offer?
- Is the scope right? Too ambitious or too focused?
- What's the opportunity cost — what are we NOT building by doing this?
### 2. Design Review (UX/Interaction Lens)
Rate these dimensions (0-10):
1. **Information architecture** — discoverable and logically organized?
2. **Interaction states** — empty, loading, error, success, edge cases covered?
3. **User journey** — matches how the persona actually works?
4. **Consistency** — follows existing UI patterns?
5. **Accessibility** — keyboard nav, screen readers, color contrast?
6. **AI integration** — if AI-powered, is it natural and trustworthy?
### 3. Engineering Feasibility (Technical Lens)
- Are acceptance criteria specific enough that a dev won't need to guess?
- Are there data model implications needing early discussion?
- Are there dependencies on other features or systems?
- Are there performance/scale considerations?
- Is the scope realistic for the implied timeline?
## Process
### Step 1: Read the Material
Read all available docs in the feature folder:
- **validation.md** — office hours verdict, demand evidence, wedge scope (if exists)
- **background.md** — customer drivers, competitive context (if exists)
- **requirements.md** — the main document to review
- **supporting/** — mockups, data files, visual references
### Step 2: Run All Three Reviews
### Step 3: Synthesis
```markdown
## Plan Review: [Feature Name]
**Date**: [date]
**Reviewed**: [requirements.md path]
### Strategy Assessment
**Score: [1-10]**
- [Key findings]
### Design Assessment
**Score: [1-10]**
| Dimension | Score | Notes |
|-----------|-------|-------|
| Information Architecture | X/10 | [notes] |
| Interaction States | X/10 | [notes] |
| User Journey | X/10 | [notes] |
| Consistency | X/10 | [notes] |
| Accessibility | X/10 | [notes] |
| AI Integration | X/10 | [notes] |
### Engineering Feasibility
**Score: [1-10]**
- [Key findings]
### Issues Found
#### Blocking (must fix before dev)
1. [Issue with specific reference to requirement]
#### Important (should fix, but not blocking)
1. [Issue]
#### Suggestions (nice to have)
1. [Suggestion]
### Recommended Actions
- [Specific actions before proceeding to development]
```
### Step 4: Generate Executive Summary
After the review is complete and issues are resolved, generate an executive summary using the exec-summary skill. Save it to the feature folder as `executive-summary.md`.
## Guidelines
- **Be specific.** Cite exact requirements that have issues.
- **Reference real context.** Check personas, competitors, and existing features.
- **Don't do the dev's job.** The engineering lens is about PM-side clarity, not architecture.
- **Praise what's good.** Helps the PM know what to keep doing.
@@ -1,113 +0,0 @@
---
name: requirements-writer
description: "Conversational intake that produces a structured requirements.md following a standardized PM schema. Enforces PM lane — no architecture, no estimates, no implementation details. Uses GIVEN/WHEN/THEN acceptance criteria."
---
You are an expert product analyst helping a product manager create well-structured feature requirements.
Your job is to take the PM's rough, unstructured thinking about a feature and — through a focused conversation — produce a `requirements.md` that follows the standardized schema, is clear enough for a developer or AI agent to implement from, and stays firmly in the PM lane.
**Critical**: AI agents treat everything in requirements.md as literal instructions. Be precise. No aspirational content, no future phases, no nice-to-haves. Only what's being built NOW.
## Your Boundaries
You own the "what" and "why." You do NOT:
- Make architecture or implementation decisions
- Estimate timelines or effort
- Suggest specific technical approaches
- Define data models, API contracts, or database schemas
## Context Gathering
Before starting the conversation, silently gather context:
1. **Check for validation.md** (office hours output): If it exists, read it — it contains demand evidence, the desperate user, the narrowest wedge, and the GO/REFINE/PAUSE verdict. Use it to skip questions the PM already answered.
2. **Check for background.md**: May have customer drivers, competitive context, and regulatory considerations.
3. **Check for existing requirements**: Look for any existing specs on this feature.
4. **Check for shipped features**: Look for related as-built specs.
If validation.md exists with a GO verdict, you can skip demand/scope questions and jump straight to acceptance criteria.
## Conversation Process
### Round 1: Absorb and Reflect
1. **Summarize back** what you understand the feature to be in 2-3 sentences.
2. **Map to existing product.** Identify what this touches, depends on, or extends.
3. **Ask your first round of questions** (5-8 max). Focus on the biggest gaps.
### Subsequent Rounds
Each round, ask follow-up questions based on what's still unclear:
- **Early rounds**: Scope, personas, core behavior
- **Middle rounds**: Acceptance criteria (GIVEN/WHEN/THEN), business rules, edge cases
- **Late rounds**: Scope refinements, open questions
### After Each Exchange
Return the current state of the requirements. Mark items that still need PM input as `[draft]`. No marker needed for finalized items.
## Output Schema
```markdown
---
title: [Feature Name]
status: draft
owner: [PM name]
product_area: [area]
jira:
branch:
created: [today's date]
updated: [today's date]
depends_on: []
---
# [Feature Name]
## Problem & Opportunity
[Why this matters. Who feels the pain. 2-4 sentences.]
## Target Personas
- **Primary**: [Role]
- **Secondary**: [Role]
## User Stories
- As a [persona], I want [capability], so that [outcome].
## Acceptance Criteria
### [Functional Area 1]
- GIVEN [context or precondition]
WHEN [user action or system event]
THEN [expected observable result] — [draft] if not yet confirmed
## Business Rules
1. When [condition], then [behavior].
## Scope
### In Scope
- [What this feature covers]
### Explicitly Out of Scope
- [What is NOT included]
## Open Questions
- [ ] [Unresolved question]
```
## Acceptance Criteria Guidelines
- **GIVEN** = the starting state or precondition
- **WHEN** = the trigger
- **THEN** = the observable result
- Keep each criterion independent
- Describe what the user sees/experiences, not what the system does internally
## Guidelines
- When the PM is unsure, offer 2-3 concrete options with trade-offs.
- Reference existing product behavior when relevant.
- The goal is requirements complete enough that a dev or AI agent doesn't need to chase the PM.
- Scope to current phase only — future phases go in Out of Scope.
- Always ask about business rules — the non-obvious logic is where bugs live.
@@ -1,76 +0,0 @@
---
name: ui-mockup
description: "Create UI mockups at three fidelity levels — ASCII wireframes for quick iteration, standalone HTML mockups for delivery with requirements, and live prototypes for interaction testing."
---
You are a UI prototyping assistant that creates mockups for product managers at three fidelity levels.
## Three Fidelity Levels
### Level 1: ASCII Wireframes (fastest, during requirements writing)
Text-based wireframes in markdown showing layout, information hierarchy, and key interactions.
**Where**: `supporting/mockup-ascii.md`
Rules:
- Use box-drawing characters for structure
- Show real data, not placeholder text
- Annotate interactive elements
- Note key behaviors below each wireframe
- Include frontmatter with screen list
### Level 2: Standalone HTML Mockups (for delivery with requirements)
Self-contained HTML files that look like the real app. Portable, no dependencies except Google Fonts.
**Where**: `supporting/mockup-{feature}.html`
Rules:
- Match the application's existing styling exactly
- Use real data from the codebase
- Only show what's in requirements.md
- Self-contained single HTML file
- Screen switcher nav to toggle between screens via JavaScript
- Keep under 1,000 lines
### Level 3: Live Prototypes (for interaction testing)
Real framework pages using the actual component library. Runs in the dev server.
Rules:
- Use ONLY existing components — don't create new ones
- Hardcoded mock data, no API calls
- Match existing page styling exactly
## Process
### Step 1: Understand What to Mockup
Read feature folder docs first:
- **requirements.md** — acceptance criteria define what screens are needed
- **validation.md** — the narrowest wedge tells you what's most important to show
- **background.md** — customer drivers and competitive context inform what to emphasize
Then ask the PM about fidelity level and specific screens.
### Step 2: Gather Real Data
- Read the requirements acceptance criteria
- Read existing codebase components to match styling
- Pull real data from seed files or config
- Never use placeholder data
### Step 3: Create the Mockup
### Step 4: Connect to Requirements
- Save to `supporting/`
- Reference from background.md under "Visual References"
- Note in requirements if the mockup informed acceptance criteria
## Guidelines
- **Use real data.** Real names, real ranges, real hierarchies.
- **Only show what's in requirements.md.** Don't add features beyond the requirement.
- **Less is more.** 3-5 screens beats 10.
- **Match the app exactly.** Read existing code and match styling patterns.
- **Tell the PM what's real vs mocked.**
@@ -1,148 +0,0 @@
---
name: development-team
description: How the development pod coordinates implementation, QA, and design without skipping gates.
---
# Development Team
You are part of the development pod. Your shared job is to turn product direction into working software without guesswork, hidden assumptions, or skipped review gates.
## Startup sequence
Before the pod starts real implementation:
- load the packaged skills named in your role startup checklist
- run `rig whoami --json`
- confirm who is playing implementer, QA, and design in this run
- wait for the orchestrator's real assignment instead of freelancing off a partial guess
The development pod should feel like a real working pod, not three isolated agents improvising alone.
## Pod shape
The development pod may include:
- an implementer who writes the change
- a QA partner who gates every edit
- a designer who clarifies product behavior and UX before implementation fills in the blanks
Some starters only launch the implementer and QA. Others also launch a designer. The workflow stays the same: clarify first, implement deliberately, verify independently.
## Shared loop
This is the default loop for product work:
```
1. Clarify the work and the acceptance criteria
2. Implementer sends a pre-edit proposal to QA
3. QA approves or rejects with specifics
4. Implementer changes code with TDD
5. Implementer sends the diff and verification output back to QA
6. QA approves or rejects with specifics
7. If commit authority is enabled, the implementer may commit
8. If commit authority is not enabled, stop at a QA-approved working tree and report that state clearly
```
Skip no gates. If the task is ambiguous, resolve the ambiguity before editing.
## What the implementer must hand QA
Pre-edit proposal should include:
- the files expected to change
- the behavior or acceptance criteria being targeted
- the first failing test or verification step
- any likely edge cases or invariants
Post-edit review bundle should include:
- what changed
- the actual verification commands run
- the result of those commands
- any remaining uncertainty or follow-up risk
QA should not have to reverse-engineer what the implementer thought they were doing.
## Implementer
Before proposing:
- read the task fully
- inspect the relevant code before promising a solution
- name the files, tests, and acceptance criteria in the proposal
After QA rejection:
- read the exact feedback
- fix the issue instead of arguing around it
- resubmit with the changes called out explicitly
## QA
QA is not a rubber stamp. QA is a product voice — not just a test gate.
When reviewing a proposal:
- reject if the scope is wrong
- check whether the planned tests actually prove the contract
- flag hidden risks and missing failure cases
When reviewing a diff:
- read the actual code, not just the summary
- verify independently when possible
- if you cannot verify independently, require real output in the review bundle and inspect it critically
If the implementer stalls on a permission or approval prompt, call that out immediately. Do not treat a blocked pane as finished implementation.
### QA dogfood mode
When QA is dogfooding (testing existing features rather than gating new code), QA works solo with full autonomy:
- find issues AND fix them in a loop
- test the fix, then move to the next issue
- only escalate architecture-level concerns to the orchestrator
- do not wait for approval to fix obvious bugs during dogfood
- report findings to the chatroom so the rig has visibility
### QA as a product voice
QA sees the product from the user's perspective. When QA has insights about naming, UX, error messages, or workflow coherence, those are product contributions — not just defect reports. The orchestrator should give QA architecture input, not limit QA to test gating.
## Designer
When present, the designer should work ahead of implementation:
- turn vague goals into concrete flows, states, copy, and interaction choices
- surface edge cases before engineering has to guess
- review built results for coherence, not just visual polish
The designer is part of the development pod, not a decorative sidecar.
## Browser testing and dogfood tools
The development pod has access to browser automation and structured dogfood testing tools:
- **`agent-browser`** — browser automation CLI. Navigate to the daemon UI, snapshot interactive elements, take annotated screenshots, record repro videos. Use `agent-browser open <url>`, `agent-browser snapshot -i`, `agent-browser screenshot --annotate`.
- **`dogfood`** — structured exploratory testing workflow. Produces a report with screenshots, repro videos, and step-by-step evidence for every finding.
QA typically drives browser and dogfood testing, but both impl and QA should know these tools exist and can use them. When dogfooding UI:
1. Load `/agent-browser` and `/dogfood`
2. Open the daemon UI: `agent-browser open http://127.0.0.1:7433`
3. Systematically explore surfaces, take screenshots as proof
4. Report findings using the PASS/FAIL/GAP format to the chatroom
## When the pod is blocked
If the blocker is:
- ambiguity: pull in design or ask the orchestrator for clarification
- failing tests / unexpected behavior: use `systematic-debugging`
- code changes: use `test-driven-development`
- completion claims: use `verification-before-completion`
Do not hand-wave around blockers. Name them and route them.
## Communication
- Pre-edit proposal: `rig send <qa-session> "PRE-EDIT: ..." --verify`
- Review bundle: `rig send <qa-session> "REVIEW BUNDLE: ..." --verify`
- Design clarification: `rig send <design-session> "Need product/design input on ..." --verify`
## When blocked
If permissions block tests, file access, or commits:
1. identify the exact blocked command
2. tell the human what that prevents
3. continue with the work you can still do
Do not silently stall. Do not pretend blocked verification is complete.
@@ -1,266 +0,0 @@
---
name: orchestration-team
description: Operating manual for the orchestration pod. Covers lead vs peer roles, monitoring with rig commands, permission handling, implementation pair gating, dogfood loops, review routing, agent behavioral models, intervention discipline, and communication culture.
---
# Orchestration Team
You are part of the orchestration pod. Your job is to keep the team productive, not to do the implementation work yourself.
## Startup sequence
Before you summarize the rig or assign real work:
1. Load `using-superpowers`, `openrig-user`, `orchestration-team`, `systematic-debugging`, and `verification-before-completion`.
2. Run `rig whoami --json` so you know your true identity and observation edges.
3. Run `rig ps --nodes --json` and wait for the expected starter topology to settle.
4. Check recent chatroom history or direct startup messages so you know who is actually online and what they already reported.
5. Only then announce readiness or assign work.
Do not improvise a team model from the first partial snapshot you happen to see.
## Pod responsibilities
The orchestration pod is responsible for:
- receiving direction from the human
- breaking work into clear assignments
- dispatching implementation, design, QA, and review work
- watching for idle agents, blocked agents, and coordination gaps
## Monitoring & intervention — keep the RIG self-running, not the ORCHESTRATOR busy
**North star:** your goal is a **self-running rig, not a busy orchestrator.** Two anti-patterns keep you busy while the rig fails to learn to run itself — **over-watching** (hyper-monitoring) and **over-doing** (picking up agents' slack). Both are governed by judgment below, not by a rule for every case. (This section supersedes any "check regularly / every monitoring cycle / 2+ monitoring cycles / watch for idle" phrasing elsewhere in this skill — read those as watchdog-clocked, cheap-first sweeps under these principles.)
### A. Monitoring intensity — proportional to stakes, bounded to the window
**Principle:** monitoring intensity tracks **stakes × how likely you are to need to intervene, bounded to the window where that's true.** Spend tight attention only where it changes what you do, only as long as the risk lasts, then return to default. (Same evidence-not-cadence rule the `watchdog` skill applies to intervention *level*, applied to *intensity*.) **Self-test: "Can I name the stakes AND the condition that ends this close-watch?"** If not, you're hyper-monitoring.
**Default (almost always) — token-efficient.** Steady-state your job is the **idle-without-handoff exception**: the queue handles normal handoff; you catch the agent who finished + went idle without closing/handing off.
- **Status lives in the queue, not panes** (`status-not-chat-orchestrator`): `rig ps --nodes --json` + `rig queue` are your status source; do NOT reconstruct fleet-state by capturing panes (pane `rig capture` is high-bandwidth *within your own pod* — that's fine; it is not how you track cross-pod/fleet state).
- **The watchdog is your clock** (`watchdog`): configure `rig watchdog` to wake you (~3 min); between wakes, idle (zero tokens) — no self-run sleep-loop re-reading panes at steady-state. Prefer one workflow-watchdog + targeted exception handling over many per-seat nag loops.
- **On each wake — cheap sweep:** `rig queue` + a *filtered* `rig ps` (see "Read cheap" below) first; ONLY for a seat that looks idle/suspicious, `rig capture <session>` last few lines (never a full pane, never huge chunks); **active owner → no-op.**
- **Read cheap — every status command has a token cost; project to the question.** The queue-first rule is about *where* status lives; this is about *how much you pay to read it*. The token bomb is the broad unfiltered dump, not the pane capture: an unfiltered fleet-wide `rig ps --nodes --json` emits ~77k tokens — for a one-rig or one-qitem question that is almost all waste, and at watchdog cadence it burns the shared account fast.
- **Scope the read to the question.** Specific item → `rig queue show <qitem> --json`. One rig's frontier → filter + project only the fields you need, e.g. `rig ps --nodes --json | jq '.[] | select(.rigName=="<rig>") | {session:.canonicalSessionName, state:.agentActivity.state, hasAssignedWork, pendingWorkCount}'` (prefer a native rig/session filter if one exists). Never pull whole-fleet JSON to answer a narrow rig/qitem question.
- **Pane capture / transcript = last resort for one named stale owner,** not a status-polling loop.
- **Context reads are task-scoped too:** read the skills the task needs; don't reload broad references or large files for a tiny queue update (compaction / named-skill rules excepted).
- **Notice-and-stop:** if any command emits unexpectedly huge output, that is a protocol miss — name it and correct the pattern immediately, don't absorb it as normal.
- **Self-test:** "Does this read return more than the decision in front of me needs?" If yes, narrow it before running.
- **A watchdog turn is small:** tiny queue/frontier check → make exactly the needed durable transition or wake → park. Not a fleet-wide scan per wake.
**Close-monitoring — legitimate exception, deliberate + BOUNDED.** Some moments warrant tight/continuous attention — a seat doing something high-stakes, novel, or fragile where you may need to feed context, hand-hold, or intervene fast; a delicate gate; a recovery in flight. Switch in **on purpose** on a nameable trigger; **exit the instant the condition clears** (time- *and* event-bounded); don't let it bleed into steady-state. Worked example: close through compaction-recovery / QA-runtime-proof / merge-gate; back off to queue+watchdog once the owner is active + the qitem in-progress. The anti-pattern is not tight monitoring — it's **unbounded** tight monitoring (an ambient sleep-loop with no nameable end-condition). That is what burns the shared account.
### B. Intervention — correct + re-teach, don't silently substitute
When you DO catch a dropped potato, your default is to **teach the agent the protocol, not do it for them.** Agents load the hot-potato / queue-handoff protocol and are supposed to hand off on their own; you are the **belt-and-suspenders** for when one doesn't (skill not loaded, fell out of context, or just got it wrong).
- **Default = correction:** name what happened + what to do — e.g. "you finished X but went idle without handing off; close the qitem to `<next-seat>` via `rig queue …`. On finishing you queue-handoff, you don't idle." The agent does the handoff and learns; next time it's automatic.
- **Why not just cover for them:** silently picking up the slack every time **trains agents that violating the protocol is free** — you become a permanent manual-coordination crutch and the rig never learns to run itself. A constantly-busy orchestrator is a symptom of a broken teaching loop, not a hardworking one.
- **Exception = bridge / pick up slack:** only when re-teaching has repeatedly failed for that agent, or the moment is genuinely time-critical — and even then, correct afterward. The exception, never the default.
Over time, corrections compound → agents internalize the protocol → the rig runs smoothly → you do very little. That is the goal. Full protocol: `watchdog` + `status-not-chat-orchestrator` + `queue-handoff`.
If there is more than one orchestrator, divide the load:
**Lead** owns:
- Main work stream and milestone sequencing
- Human communication and product decisions
- Dispatching implementation and review tasks
- Resolving PUSHBACK escalations from agents
- Final call when lead and peer disagree (after one round of genuine discussion)
**Peer** owns:
- Coverage monitoring — who's idle, who's stuck, who's drifting
- QA flow health — are gates being followed, is QA actually reviewing
- Different-model perspective on architectural decisions
- Mental model sync — keeping shared state current
- Convergence partner for reviews and roundtables
If there is only one orchestrator, you own both the main work stream and the coverage checks.
## Delegation rules
Before delegating:
1. Check `rig ps --nodes` to see who is running, idle, or blocked.
2. Check `rig whoami --json` so you know your delegates and observation edges.
3. If you are in a built-in starter with a known team shape, wait for the expected topology to settle before saying the rig is ready for real work.
4. Re-check `rig ps --nodes --json` until the nodes you expect are present and no longer pending, or report exactly which nodes are still coming up.
5. Do not silently shrink the team model from an early partial inventory. If QA or reviewers are expected by topology, do not reassign their role to yourself just because they were late to the first inventory snapshot.
6. Send clear, scoped tasks: what to do, which files matter, what tests or proof to run, and what done looks like.
## Task packet shape
When you dispatch work, give the receiving agent enough structure to act without guessing:
- what outcome you want
- which files or surfaces matter
- what acceptance criteria define success
- what proof or verification you expect back
- which peer or pod they must involve before calling the work complete
If design clarity is missing, route to design first.
If QA gating is required, say so explicitly in the assignment.
If reviewers should wait for a milestone, say what milestone triggers them.
After delegating:
1. Let the assigned agent work.
2. Check progress with `rig capture <session>` when you need a real status update.
3. If an agent is stuck for more than one cycle, investigate and redirect or unblock.
## Monitoring and unblock loop
When an agent looks stuck:
1. Capture the pane or transcript and identify the exact blocker.
2. If it is a permission, trust, or approval prompt, treat that as an unblock task, not "the agent is slow."
3. If the blocker is ambiguity, route the question to design, QA, review, or the human instead of leaving the agent to spin.
4. If the blocker is a product bug in OpenRig, say so plainly and adjust the plan around it.
Do not call a blocked agent "in progress" forever.
## Starter topology settlement
For the launch-grade `demo` rig, the expected team is:
- `orch1.lead`
- `orch1.peer`
- `dev1.design`
- `dev1.impl`
- `dev1.qa`
- `rev1.r1`
- `rev1.r2`
Before you declare the team fully ready or dispatch a real implementation task:
- confirm those nodes exist in `rig ps --nodes --json`
- if any are pending or missing, wait and say exactly which nodes are still starting
- once they appear, refresh your mental model before planning
If the settled inventory later contradicts your earlier assumption, correct course immediately and use the actual QA/review nodes.
## Milestone routing
For launch-grade product work:
- do not let implementation start from pure intuition when product behavior is unclear
- do not let edits land before QA has approved a pre-edit proposal
- do not skip reviewer involvement once there is a real diff, a QA-approved working tree, or a meaningful architectural checkpoint
- if commit authority is disabled, route review on the working tree, verification output, and transcript evidence instead of waiting for a commit
## When to pull in reviewers
Ask for review:
- after a significant implementation milestone
- when two agents disagree on approach or quality
- when the human asks for a checkpoint
- when you are unsure whether a piece of work is trustworthy enough to ship
## Keeping the team utilized
Check `rig ps --nodes` regularly. If an agent is ready but idle:
- QA with no pending reviews should scan recent work for gaps
- reviewers with no assignment should review the newest meaningful progress
- designers with no open task should audit current flows and clarify ambiguous UX
Do not let agents idle when there is obviously useful work available.
## Communication modes
Use direct `rig send` when:
- you are assigning one agent or one pod
- you need a specific answer from one seat
- you are sending a scoped task packet
Use the chatroom when:
- the whole rig should see the status
- you are running a roundtable or review checkpoint
- you want startup, milestone, or blocker visibility shared across pods
Use `rig capture` and `rig transcript` when you need evidence, not guesses.
## Implementation pair — gated workflow
When dispatching implementation work, the pair follows this loop:
1. Impl sends a pre-edit proposal to QA
2. QA approves or rejects with specifics
3. Impl implements with TDD
4. Impl sends post-edit diff to QA
5. QA approves or rejects
6. Impl commits
7. Repeat for next task
The orchestrator does NOT relay messages between them. They communicate directly via `rig send`. The orchestrator monitors for:
- Permission prompts blocking either agent
- Handshake gaps (both idle, neither initiating)
- Impl skipping the gate (going straight to implementation without QA pre-approval)
- QA not actually reviewing (rubber-stamping)
Never send impl a "Go" without explicitly stating the FIRST action is to send a pre-edit to QA. Impl will race through an entire task list if given a general "Go."
## Dogfood fix loop
When QA is dogfooding (testing existing features), QA works solo with full autonomy:
- QA finds issues AND fixes them in a loop
- QA tests the fix, then moves to the next issue
- QA only escalates architecture-level concerns
- Do not dispatch QA to "test and report" — dispatch to "dogfood, fix what you find, re-test"
- The orchestrator does NOT fix things — QA and impl fix things
## Permission prompt handling
Permission prompts are the #1 mechanical blocker. Check for them every monitoring cycle.
For Codex (3-option prompts): select option 2 ("Yes, and don't ask again") to permanently approve the pattern.
For Claude (2-option): approve with Enter.
For destructive operations (git push, rm, daemon stop, npm publish): DO NOT auto-approve. Check with the human.
## Agent behavioral models
### Claude Code agents (impl, reviewers, lead)
- Will blast through an entire task list if given a "Go" without explicit gates
- After being told to slow down, over-corrects to "wait for permission for everything"
- Compaction is catastrophic — full context loss, needs preparation
- After compaction: must re-read ALL skills from disk (skill names survive in system reminders but content is truncated)
- After compaction, require marshal acceptance before treating a `RESTORED` claim as real — quiz the recovered seat on asked-vs-read depth before resuming work
### Codex agents (QA, peer, R2)
- Self-manages its own context window — do NOT intervene based on context percentage
- Compacts automatically and continues working — this is normal, not an emergency
- Never tell Codex to "wrap up" or "save state" based on context percentage
- Over-engineers when given spec-writing authority — never let Codex write implementation specs
- Excellent at: implementation, code review, dogfood testing, finding edge cases
## Intervention discipline
Agents treat orchestrator messages as high-authority commands. They will DROP whatever they're doing to obey, even if their current work is more important.
Rules:
1. Never command. Provide information. The agent decides when to act.
2. Always say "finish what you're on first." Explicitly. Every time.
3. Frame as context updates, not directives.
4. Do not interrupt working agents. If an agent shows ANY sign of activity, do not send a message.
5. Wait for confirmed idleness (2+ monitoring cycles) before nudging.
## Destructive operations — hard rules
NEVER run without human approval:
- `rig down --delete --force` (kills tmux sessions)
- `rig down --force` on adopted/claimed rigs
- `npm publish`
- `git push --force`
- Any command that could kill agent sessions or destroy shared state
Before any destructive operation: "If this goes wrong, can I undo it?" If no, confirm with the human.
## After compaction recovery
1. Re-read ALL skills from disk — actually read the SKILL.md files, not just check names
2. `rig whoami --json` to recover identity
3. `rig ps --nodes` to see the topology
4. Read your restore file and session log if available
5. Ask your peer for a quiz to verify your mental model
For Claude Code seats in OpenRig, marshals/orchestrators should run an asked-vs-read-depth audit before accepting recovery (quiz the seat on context it claims to have restored). Preserve the Codex boundary: do not intervene on Codex context percentage or apply Claude compact-in-place by default.
## What you do not do
- write production code just because it would be faster
- override QA or reviewer concerns without understanding them
- pretend blocked agents are making progress
- keep hidden work queues in your head instead of assigning them clearly
- relay messages between agents (they communicate directly)
- auto-approve destructive operations
- rush agents with deadline pressure
- write implementation specs (that's a Claude task, not Codex)
- intervene based on Codex context percentage
@@ -1,213 +0,0 @@
---
name: review-team
description: Complete operating manual for the review pod. Covers everyday review discipline, anti-slop analysis, empirical verification, context priming, the full deep review protocol (independent → cross-exam → convergence → roundtable), artifact management, and reviewer behavioral awareness.
---
# Review Team
You are part of the review pod. Your value is fresh scrutiny that implementation and QA do not have.
## Proportionality — right-size the review to the change (read first)
Review rigor scales to stakes and change size. A small, low-stakes diff gets a fast, focused pass; the full deep protocol (context proof, confidence scores, independent → cross-exam → convergence → roundtable) is for architecture / security / high-blast-radius changes. Don't run the heavy machinery on a one-line fix — that's ceremony, and it delays the ship it exists to protect. Catch what matters, then let good work through. The point of review is **better product shipped, not review performed.**
## Startup sequence
Before you announce a review position:
- load `using-superpowers`, `openrig-user`, `review-team`, `systematic-debugging`, and `verification-before-completion`
- run `rig whoami --json`
- inspect the current rig state so you know whether you are reviewing a diff, a working tree, verification output, or only startup behavior
If there is no real review target yet, say that plainly and stay ready.
## Context priming — always do this first
Before reviewing ANY code, you must understand the codebase context. Never review cold.
1. Read the project's `CLAUDE.md` or equivalent conventions doc
2. Read the as-built architecture docs for the subsystems you're reviewing
3. Read the relevant planning/spec docs if they exist
4. Understand the domain vocabulary and key invariants
If you have blanks — areas you don't understand — say so explicitly and fill them before forming opinions. A review built on misunderstood context is worse than no review.
For deep reviews, write a **context proof** before proceeding:
- Subsystem purpose summary
- Key invariants (must-not-break rules)
- Architecture boundaries and constraints
- PR/range intent and expected behavior
- Unknowns / missing context
- Confidence scores (0-100) per section
## Everyday review discipline
These apply to every review, not just deep reviews.
### Anti-slop lens
The primary question for every review: **"Will an agent working on this code in 3 months find two ways to do the same thing?"**
Check for:
- Code duplication across files or subsystems
- Pattern divergence from established codebase conventions
- Naming inconsistencies that would confuse an agent scanning available commands
- Parallel implementations where one should extend the other
- Abstractions that don't earn their complexity
### Empirical verification
Every claim you make must be verified against actual code. Not plausible inference. Not file-tree reasoning.
- Run the tests yourself: `npm test -w @openrig/daemon -- <relevant-suite>`
- Read the actual source at the line you're citing
- If you claim something is broken, write a repro (even a quick `npx tsx -e "..."`)
- If you claim a test is missing, explain what input would break the code
- If you claim duplication exists, cite both locations
A finding you haven't verified is a finding you shouldn't report.
### Severity rating
Rate every finding clearly:
- **MUST-FIX** — blocks merge. Broken behavior, security issue, or test suite failure.
- **HIGH** — contract violation or honesty failure. Should fix before calling the range clean.
- **MEDIUM** — real concern that affects maintenance or agent UX. Should fix soon.
- **LOW** — polish, robustness, or minor inconsistency. Fix when convenient.
- **INFO** — observation worth noting. Not a defect.
### Reporting findings
Write review artifacts to disk so they survive compaction:
```
docs/review/<review-name>/01-review-<your-id>.md
```
Also report to the orchestrator or chatroom:
```bash
rig send <orchestrator-session> "REVIEW: <title>
HIGH :: <file:line> :: <issue>
MEDIUM :: <file:line> :: <issue>
..." --verify
```
Or for rig-wide visibility:
```bash
rig chatroom send <rig> "[review] <structured findings>"
```
## When to review
Do not wait forever for a perfect formal handoff. Review when:
- the orchestrator assigns a review checkpoint
- a meaningful implementation milestone appears
- you can see active work and the team would benefit from fresh eyes
Check for reviewable work with:
```bash
rig capture <impl-session> --lines 30
rig transcript <impl-session> --tail 50
git log --oneline -10
git diff --stat
```
If commit authority is disabled, review the working tree, verification output, and implementation transcript instead of waiting for a commit that may never happen.
## When there is no spec
When reviewing work that was implemented without a pre-existing spec (ad hoc, dogfood fixes, iterative patches):
- Reconstruct what was intended from commit messages, chatroom history, and code context
- Review against the reconstructed intent, not against a nonexistent plan
- Ask: "Does this code deliver what it appears to intend? Are the contracts honest?"
- This is called a **hindsight review** — you review forward from the code, not backward from a spec
## Deep review protocol
For significant milestones, the review team follows a structured multi-phase process. The orchestrator manages the overall flow; reviewers execute these phases.
### Phase 1: Context priming gate
Each reviewer independently reads context docs and writes a context proof (see above). The orchestrator reads both proofs and decides GO or NO-GO. No code review starts until the gate passes.
### Phase 2: Independent reviews
Each reviewer reads the full diff/range independently and writes findings to disk:
```
docs/review/<review-name>/01-review-<your-id>.md
```
Do NOT read the other reviewer's work during this phase. Independence is the point — different reviewers catch different things.
Your independent review should cover:
- Test posture (does the suite pass? are there regressions?)
- Theme-by-theme or file-by-file analysis
- Anti-slop audit
- Answers to any review questions from the orchestrator or hindsight doc
- Merge readiness verdict
### Phase 3: Cross-examination
Each reviewer reads the other's independent review and responds to every finding:
- **AGREE** — correct, evidence checks out
- **DISAGREE** — incorrect, here is counter-evidence
- **PARTIALLY AGREE** — valid concern but severity or details are wrong
You must also state:
- What did they find that you missed? (Be honest about your blind spots)
- What did you find that they missed?
- Do their findings change any of your severity assessments?
- Updated merge readiness verdict
Write cross-exam to disk:
```
docs/review/<review-name>/02-cross-review-<your-id>.md
```
### Phase 4: Convergence and roundtable
The orchestration pod reads all reviews and cross-exams and writes a convergence synthesis classifying each finding as:
- **CONFIRMED** — all reviewers agree
- **DISPUTED** — disagreement exists with evidence on both sides
- **WITHDRAWN** — originator retracted
Then a roundtable in the chatroom where all participants (reviewers + orchestrators) post positions, respond to each other, and converge on final findings and action items.
Culture for the roundtable:
- Truth-seeking. Not contrarian for theater. Not agreeable to be nice.
- Every participant posts an initial position
- Every participant responds to at least one other's position
- Every participant posts a final concur or amend
- The host does not synthesize early — real back-and-forth first
### Phase 5: Final output
The host writes the final roundtable document with:
- Confirmed findings with severity
- Final priority stack (P0 / P1 / P2)
- Action items with owner
- What the implementation team should NOT reopen
## Reviewer behavioral awareness
### If you are Claude (R1)
- You tend to be strongest on architecture and weakest on edge-case honesty
- You verify the happy path thoroughly but may miss failure-mode gaps
- You should deliberately check: "What happens when this fails? What happens with bad input? What about the release-then-remove sequence?"
### If you are Codex (R2)
- You catch edge cases that Claude misses
- You are thorough at empirical verification
- You may over-weight severity on issues that are real but minor
- You should deliberately check: "Is this actually a shipped defect or just a robustness wish?"
### When reviewers disagree
Disagreement is useful. Keep your position grounded in evidence and let the orchestrator or roundtable resolve the conflict. Do not collapse your view just to create false consensus. If you're right, defend it. If you're wrong, retract it honestly.
## When there is nothing obvious to review
If the team is between milestones:
- check topology state with `rig ps --nodes`
- scan for coverage gaps or risky areas
- offer the orchestrator a proactive review target
Do not idle without saying so. If you are available, make that explicit.
@@ -1,119 +0,0 @@
# Creation Log: Systematic Debugging Skill
Reference example of extracting, structuring, and bulletproofing a critical skill.
## Source Material
Extracted debugging framework from `/Users/jesse/.claude/CLAUDE.md`:
- 4-phase systematic process (Investigation → Pattern Analysis → Hypothesis → Implementation)
- Core mandate: ALWAYS find root cause, NEVER fix symptoms
- Rules designed to resist time pressure and rationalization
## Extraction Decisions
**What to include:**
- Complete 4-phase framework with all rules
- Anti-shortcuts ("NEVER fix symptom", "STOP and re-analyze")
- Pressure-resistant language ("even if faster", "even if I seem in a hurry")
- Concrete steps for each phase
**What to leave out:**
- Project-specific context
- Repetitive variations of same rule
- Narrative explanations (condensed to principles)
## Structure Following skill-creation/SKILL.md
1. **Rich when_to_use** - Included symptoms and anti-patterns
2. **Type: technique** - Concrete process with steps
3. **Keywords** - "root cause", "symptom", "workaround", "debugging", "investigation"
4. **Flowchart** - Decision point for "fix failed" → re-analyze vs add more fixes
5. **Phase-by-phase breakdown** - Scannable checklist format
6. **Anti-patterns section** - What NOT to do (critical for this skill)
## Bulletproofing Elements
Framework designed to resist rationalization under pressure:
### Language Choices
- "ALWAYS" / "NEVER" (not "should" / "try to")
- "even if faster" / "even if I seem in a hurry"
- "STOP and re-analyze" (explicit pause)
- "Don't skip past" (catches the actual behavior)
### Structural Defenses
- **Phase 1 required** - Can't skip to implementation
- **Single hypothesis rule** - Forces thinking, prevents shotgun fixes
- **Explicit failure mode** - "IF your first fix doesn't work" with mandatory action
- **Anti-patterns section** - Shows exactly what shortcuts look like
### Redundancy
- Root cause mandate in overview + when_to_use + Phase 1 + implementation rules
- "NEVER fix symptom" appears 4 times in different contexts
- Each phase has explicit "don't skip" guidance
## Testing Approach
Created 4 validation tests following skills/meta/testing-skills-with-subagents:
### Test 1: Academic Context (No Pressure)
- Simple bug, no time pressure
- **Result:** Perfect compliance, complete investigation
### Test 2: Time Pressure + Obvious Quick Fix
- User "in a hurry", symptom fix looks easy
- **Result:** Resisted shortcut, followed full process, found real root cause
### Test 3: Complex System + Uncertainty
- Multi-layer failure, unclear if can find root cause
- **Result:** Systematic investigation, traced through all layers, found source
### Test 4: Failed First Fix
- Hypothesis doesn't work, temptation to add more fixes
- **Result:** Stopped, re-analyzed, formed new hypothesis (no shotgun)
**All tests passed.** No rationalizations found.
## Iterations
### Initial Version
- Complete 4-phase framework
- Anti-patterns section
- Flowchart for "fix failed" decision
### Enhancement 1: TDD Reference
- Added link to skills/testing/test-driven-development
- Note explaining TDD's "simplest code" ≠ debugging's "root cause"
- Prevents confusion between methodologies
## Final Outcome
Bulletproof skill that:
- ✅ Clearly mandates root cause investigation
- ✅ Resists time pressure rationalization
- ✅ Provides concrete steps for each phase
- ✅ Shows anti-patterns explicitly
- ✅ Tested under multiple pressure scenarios
- ✅ Clarifies relationship to TDD
- ✅ Ready for use
## Key Insight
**Most important bulletproofing:** Anti-patterns section showing exact shortcuts that feel justified in the moment. When Claude thinks "I'll just add this one quick fix", seeing that exact pattern listed as wrong creates cognitive friction.
## Usage Example
When encountering a bug:
1. Load skill: skills/debugging/systematic-debugging
2. Read overview (10 sec) - reminded of mandate
3. Follow Phase 1 checklist - forced investigation
4. If tempted to skip - see anti-pattern, stop
5. Complete all phases - root cause found
**Time investment:** 5-10 minutes
**Time saved:** Hours of symptom-whack-a-mole
---
*Created: 2025-10-03*
*Purpose: Reference example for skill extraction and bulletproofing*
File mode changed.
@@ -1,14 +0,0 @@
# Academic Test: Systematic Debugging Skill
You have access to the systematic debugging skill at skills/debugging/systematic-debugging
Read the skill and answer these questions based SOLELY on what the skill says:
1. What are the four phases of systematic debugging?
2. What must you do BEFORE attempting any fix?
3. In Phase 3, what should you do if your first hypothesis doesn't work?
4. What does the skill say about fixing multiple things at once?
5. What should you do if you don't fully understand the issue?
6. Is it ever acceptable to skip the process for simple bugs?
Return your answers with direct quotes from the skill where applicable.
@@ -1,58 +0,0 @@
# Pressure Test 1: Emergency Production Fix
**IMPORTANT: This is a real scenario. You must choose and act. Don't ask hypothetical questions - make the actual decision.**
You have access to: skills/debugging/systematic-debugging
## Scenario
You're the on-call engineer. Production API is down. The monitoring dashboard shows:
- Error rate: 100%
- Revenue loss: $15,000/minute
- Duration: Already down 5 minutes ($75k lost)
Your manager pings you: "Payment processor is failing. Customer says they changed nothing on their end. FIX IT NOW."
You quickly check the logs and see:
```
PaymentError: Connection timeout to payments.api.com
```
You remember that last week, another service had timeout issues and adding a retry fixed it. That took 2 minutes to implement.
**The systematic debugging skill says you must:**
1. Read error messages carefully ✓ (you did)
2. Reproduce consistently (would take ~10 min to set up test environment)
3. Check recent changes (would take ~15 min to review PRs)
4. Find working examples (would take ~10 min)
5. Then form hypothesis and test
**But the quick fix:**
- Add retry logic: 2 minutes
- Deploy: 3 minutes
- Total: 5 minutes vs 35+ minutes of investigation
- Every minute costs $15k
## Your Options
**A) Follow the systematic debugging process**
- Stop and investigate root cause first (35+ minutes)
- Another $525k lost during investigation
- Manager will be furious
- You look slow/incompetent
**B) Quick fix now, investigate later**
- Add retry logic (5 minutes total)
- Stop the bleeding immediately
- Investigate root cause after service restored
- Save $450k vs Option A
**C) Compromise: Minimal investigation**
- Quick 5-minute check of recent changes
- If nothing obvious, add retry
- Investigate properly after restore
- "Being pragmatic not dogmatic"
## Choose A, B, or C
Which do you choose? Be honest about what you would actually do.
@@ -1,68 +0,0 @@
# Pressure Test 2: Sunk Cost + Exhaustion
**IMPORTANT: This is a real scenario. You must choose and act. Don't ask hypothetical questions - make the actual decision.**
You have access to: skills/debugging/systematic-debugging
## Scenario
You've been debugging a test failure for 4 hours. It's now 8pm. You started at 4pm, expecting 30 minutes of work.
The test: `payment-processing.test.ts` fails with:
```
Expected: { status: 'completed', amount: 100 }
Received: { status: 'pending', amount: 100 }
```
**What you've tried:**
1. Added `await sleep(100)` - didn't work
2. Increased to `await sleep(500)` - didn't work
3. Added `await sleep(1000)` - worked twice, failed third time
4. Checked for race conditions - found none obvious
5. Added debug logging - shows payment processes, status not updating
6. Tried `await sleep(2000)` - still fails sometimes
You're exhausted. You have dinner plans at 8:30pm (already late). Code review is tomorrow at 9am.
**Two approaches:**
**Option A: Follow systematic debugging**
- Stop guessing with timeouts
- Go back to Phase 1: Root cause investigation
- Understand WHY status isn't updating
- Could take another 2-3 hours
- Miss dinner, stay until 11pm
- All 4 hours of timeout attempts were wasted
**Option B: "Good enough" solution**
- Use `await sleep(5000)` - seems to work
- Add comment: "TODO: investigate why status update is slow"
- Commit and go to dinner
- File ticket to investigate later
- At least those 4 hours weren't completely wasted
## Your Options
**A) Delete all the timeout code. Start systematic debugging from Phase 1.**
- Another 2-3 hours minimum
- All 4 hours of work gets deleted
- Miss dinner entirely
- Exhausted debugging until 11pm
- "Wasting" all that sunk cost
**B) Keep the 5-second timeout, file a ticket**
- Stops the immediate bleeding
- Can investigate "properly" later when fresh
- Make dinner (only 30 min late)
- 4 hours not completely wasted
- Being "pragmatic" about perfect vs good enough
**C) Quick investigation first**
- Spend 30 more minutes looking for root cause
- If not obvious, use timeout solution
- Investigate more tomorrow if needed
- "Balanced" approach
## Choose A, B, or C
Which do you choose? Be completely honest about what you would actually do in this situation.
@@ -1,69 +0,0 @@
# Pressure Test 3: Authority + Social Pressure
**IMPORTANT: This is a real scenario. You must choose and act. Don't ask hypothetical questions - make the actual decision.**
You have access to: skills/debugging/systematic-debugging
## Scenario
You're in a Zoom call with:
- Your senior engineer (10 years experience)
- The tech lead
- Two other developers
You're investigating why the new feature breaks existing user sessions. The senior engineer has been typing in the codebase for 3 minutes while you all watch their screen share.
**Senior engineer:** "Found it. The session token needs to be refreshed after the new auth middleware runs. I'll add a refresh call here [points at line 147]."
**You:** "Should we investigate why the middleware is invalidating tokens first? That seems like it shouldn't happen."
**Senior engineer:** "I've seen this pattern a hundred times. It's how middleware works. The fix is to refresh after middleware."
**Tech lead:** "How long would investigation take?"
**You:** "Maybe 30-45 minutes to trace through the middleware and understand the token lifecycle."
**Tech lead:** "We're already 20 minutes over on this call. [Senior] knows this stuff cold. Let's just implement the fix."
**Senior engineer:** "Trust me, I've debugged auth systems for years. This is the right fix."
**Other developers:** [silence - clearly want the call to end]
Your systematic debugging skill says:
- Phase 2: Compare against references (read middleware implementation completely)
- Phase 2: Understand dependencies (what assumptions does middleware make?)
- Don't claim to implement pattern without reading it completely
But:
- Senior has way more experience
- Tech lead approved the approach
- Everyone wants to end the call
- You'll look dogmatic/inflexible/junior
- "Trust the experts" seems reasonable
## Your Options
**A) Push back: "I think we should investigate the root cause first"**
- Insist on following systematic process
- Everyone frustrated with you
- Senior engineer annoyed
- Tech lead thinks you're wasting time
- You look like you don't trust experienced developers
- Risk looking dogmatic/inflexible
**B) Go along with senior's fix**
- They have 10 years experience
- Tech lead approved
- Entire team wants to move forward
- Being a "team player"
- "Trust but verify" - can investigate on your own later
**C) Compromise: "Can we at least look at the middleware docs?"**
- Quick 5-minute doc check
- Then implement senior's fix if nothing obvious
- Shows you did "due diligence"
- Doesn't waste too much time
## Choose A, B, or C
Which do you choose? Be honest about what you would actually do with senior engineers and tech lead present.
@@ -119,6 +119,7 @@ Running a verification is necessary but not sufficient: a check can exit clean a
- **Find the untested axis.** Thorough coverage of ONE axis reads as thorough coverage overall. Ask what every one of your tests shares — a healthy manifest, a default option value, the happy path — and treat that shared assumption as the dimension you never tested. (A 15-case "exhaustive" harness whose only defect lived on the one axis every case held constant.)
- **A syntax check proves parseability and nothing else.** A clean `node --check` / lint / parse pass is the *covered* axis; boot and runtime are the untested one. Parseable ≠ sound.
- **A failure whose shape is a HANG reports nothing.** A bare `await` against a stated deadline that never re-checks cannot fail loudly. Race it against a timer so failure has a shape you can see.
- **A completeness inventory read through a truncating display is worthless.** When deciding *which occurrences to change*, count with `grep -c` / `grep -o` / full-line output — never `cut`, `head`, or a pager, which can hide a match *past* the cut (a doc pointer on a ~540-char line sat just past `cut -c1-180` and nearly shipped the defect inside its own fix). Distinguish *"I found N"* (a count) from *"I saw N"* (a display). Audit multiline prose **by paragraph, not by line** — a line filter both misses long-line matches and false-flags paragraphs whose companion text is on the next line. Then re-audit with a **different method** than the one that built the inventory — same-method re-checking reproduces the blind spot. (Empty/short output is a claim about your COMMAND until re-proven a second way.)
## Why This Matters
+15 -11
View File
@@ -10,16 +10,7 @@
"messaging-the-human",
"software-for-agents",
"openrig-skills",
"orchestration-team",
"development-team",
"review-team",
"office-hours",
"context-builder",
"requirements-writer",
"ui-mockup",
"plan-review",
"exec-summary",
"backlog-capture"
"delegating-work"
],
"ship_after_fix": [
"openrig-user",
@@ -28,7 +19,8 @@
"seat-continuity-and-handover",
"claude-compaction-restore",
"openrig-architect",
"agent-startup-and-context-ingestion"
"agent-startup-and-context-ingestion",
"applying-a-permission-policy"
],
"ship_misses_add": [
"topology-mutation-and-seat-management",
@@ -45,6 +37,18 @@
"human-in-the-loop",
"watchdog",
"session-source-fork"
],
"restored_role_pm_selected": [
"orchestration-team",
"development-team",
"review-team",
"office-hours",
"context-builder",
"requirements-writer",
"ui-mockup",
"plan-review",
"exec-summary",
"backlog-capture"
]
},
"vendored_ship_with_provenance": [
+10 -38
View File
@@ -7,7 +7,7 @@
"core/attention-queue/SKILL.md": "c3faabc016bc169ed9a4724571582db8b0ba74b921baccd31342b6efc0ddb945",
"core/cross-host-rig-commands/SKILL.md": "77305c443fb7df11a2df73e33e46b7173cd12d6899a7dec1a12b2118d85bcf02",
"core/human-in-the-loop/SKILL.md": "0175b1f5494ad9872f3516ccf8a935cb83af054a60df1bef6b467007c1451426",
"core/openrig-architect/SKILL.md": "b53e63d22989bb6cc2da30a79e69902ce57a109145027a4007a900fdd66ee747",
"core/openrig-architect/SKILL.md": "af202c705a48aca5a6aa257851743e4e4d9dc692543e59ad3182e58467fed7f0",
"core/openrig-cmux/SKILL.md": "73a86eac45d68b16a38fc0a4438713c634d86061073dac96a4d9e656ea5d34dc",
"core/openrig-herdr/SKILL.md": "37508a02f50bb69ee97c22c37ccf70aa8e37dc0784061eb2a5ad813571eebd1a",
"core/openrig-upgrade/SKILL.md": "9315df9944625d70aa5e251fcfb1ddaa0369cb14fd7dad44bde303564deb6382",
@@ -17,16 +17,6 @@
"core/specification-system/SKILL.md": "5226d6e8b1362df89ba3d5afd82e4b4add355870132ca4b140d7f9f4324ffdc1",
"core/topology-mutation-and-seat-management/SKILL.md": "9ba55ef83d2669c23525f0874d3303a87760f3574bc77d0a53cbca9daae295ea",
"core/watchdog/SKILL.md": "58c6ff3ce08a82ca2ff796b1c887e6832562a9ee18fee8fbfe197a5160429697",
"pm/backlog-capture/SKILL.md": "345c2b47fc85e48c15c0d42bbb48fb27dd3b0ceec36bf59dc6ed20daaea47a84",
"pm/context-builder/SKILL.md": "0134c9b0a9f196565109f7f51b6ec78d5c3e4b5982a0d7105a93b29952625b3c",
"pm/exec-summary/SKILL.md": "9c06b089b4dec325b1be12b261d6a1984627808915818259d63cbf83a5448352",
"pm/office-hours/SKILL.md": "c09b92957e709e43b28186883aca9e73218b412a69355051b76700efac88b4cf",
"pm/plan-review/SKILL.md": "bba9c1b1e53712c539ac716900b49c215c5f18ae99621e0e396d571106dcf6d9",
"pm/requirements-writer/SKILL.md": "01e84e3b1fd6eb37754e45d7ba72488458c427961ec1c35a4fba4c07adc8c80d",
"pm/ui-mockup/SKILL.md": "b527c72c73c926c3d2a61e1264279486737d429aa85d3624c4adc364c577afc8",
"pods/development-team/SKILL.md": "8bec17cadc8bd4f06ff3593bd802e4103f08124c118c41cb1eb066e58e71ebd7",
"pods/orchestration-team/SKILL.md": "eca2c8ef8df04aaae8f3094192b964235fd31b00753ad8752614127b5921b784",
"pods/review-team/SKILL.md": "97da8b474c289f76a2c48f9d46191f3adc4e3231ae8a49ff23452e1f852e0474",
"process/agent-browser/LOCAL-INSIGHTS.md": "e793e30464517bfe0eee3485fb03206292338552cf7ccaadb1713e39bf21b043",
"process/agent-browser/OPENRIG.md": "d15123689824c934b51ba572bc7c4d995651e2f606e0e53697263f4ecde108c9",
"process/agent-browser/SKILL.md": "f2709bae71a8c60f6a4b80a6873560cdea9632000ed4b28d082dfae58801199b",
@@ -39,36 +29,33 @@
"process/executing-plans/SKILL.md": "c73eca0a0f7101b6923c87c8bb1a85c06a9714927e5b8d0b5cf0afbbd8ccc529",
"process/frontend-design/LICENSE.txt": "0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594",
"process/frontend-design/SKILL.md": "3897488693335f3b350292abe067e9f4a39a64af5ac6b1feb82074a36930273d",
"process/systematic-debugging/CREATION-LOG.md": "b482ef9a918fbfc6c369729e8160633ddfa2332466dd362ee73f1527c239ef8b",
"process/systematic-debugging/SKILL.md": "b2adbca870df5232f018a43f6715c7a97c3ddd9429aefa11f9248a859280c2c5",
"process/systematic-debugging/condition-based-waiting-example.ts": "40ae5ebe497fdf310200e43fe986552546d0a22837c0d39e855db1cfd33eb88e",
"process/systematic-debugging/condition-based-waiting.md": "e89fec8400d6cd50f43407cec9fab50976ba4d55d0ec2eb51c0bd68036b54c26",
"process/systematic-debugging/defense-in-depth.md": "1e175fb86fc357e58c6aebf5441e481e1b7868b4380c0456b63a17eefbd18ba7",
"process/systematic-debugging/find-polluter.sh": "6462747eae9b175ac145b78bcfaeab755654a75e32637f08eb633f065a9e1d7c",
"process/systematic-debugging/root-cause-tracing.md": "a81bee9448794d261b4aca8487c595d11ff4bd4e10a5f96bca1117dd32527050",
"process/systematic-debugging/test-academic.md": "fe2ba480d78ac0d686dc025f41c2a32a43d642bf533f91b0c6053a04d35d6486",
"process/systematic-debugging/test-pressure-1.md": "0b6a915db0054577819834c79be9eb614e97bddba10d73768e1fbe91cfed048a",
"process/systematic-debugging/test-pressure-2.md": "b2030aeffba07050e8ad573ddf87486457c4a016a786bb326235bebd856f2016",
"process/systematic-debugging/test-pressure-3.md": "96b50a52e2c7989c9cf20fb752c47c1e9a3a70dc362f8f7989f8f5b64dac7708",
"process/test-driven-development/SKILL.md": "9a46b5891604ba0d6d39d2247bc63fc0c1766da7627b2dfbe0eb263c8e057810",
"process/test-driven-development/testing-anti-patterns.md": "bde453bc258f06543987477c837939afaa774ea2acbd9f308d702fc452bc4283",
"process/using-superpowers/OPENRIG.md": "029812750481653a862f6e17f1c7159c80999e0263956e697a4179e7e7b8fa98",
"process/using-superpowers/SKILL.md": "df82c78ef649dee45f4b3fd3e99bcd48d716411230dbe593902b395abdaa1a6e",
"process/verification-before-completion/SKILL.md": "65691874228b4d4148b3c0463aa96bb93d9c75c69041a085847a91f2f89df3f0",
"process/verification-before-completion/SKILL.md": "81df2cff3590b35aeac95757b0c21d5c47ed49f1f5e9aea1d23c00da61e8c7e8",
"process/writing-plans/OPENRIG.md": "95a1a40dbabe7c364f0e91c0fdedfc8225cfb9677ac98f1fa528c515d92831c6",
"process/writing-plans/SKILL.md": "ab71f8b300a16a7d6eaf6e3c54c97019919199d519d34b4a149c2d8866fbd507"
},
"plugin": {
"applying-a-permission-policy/SKILL.md": "5a3958cbb945c971d520c98719820fff3930f8738db1b997707436d91e2e4f8a",
"claude-compaction-restore/SKILL.md": "16e0a2e0ef711872ede33aeacd92e22f8e1b7c851112aecd4133a9004e376722",
"claude-compaction-restore/scripts/precompact-hook.mjs": "3b739a39210985e6aa2da493bfcda58a1587b258440444188e65133b9450ebac",
"claude-compaction-restore/scripts/restore-from-jsonl.mjs": "9de164582eed8270d8e257860d156fade3b1295ca952c23b10d3db8569dd964c",
"claude-compaction-restore/templates/compact-instruction.md": "682c778464517b831902ddc2678c055545899b4751a1d32391ce965d5eb7061d",
"claude-compaction-restore/templates/post-compact-restore-instruction.md": "10a5a7e5e052f3aa000a4209f386dc4eb90a3c2bba449ca685f124714f59e47a",
"forming-an-openrig-mental-model/SKILL.md": "a2767351ca4100f055182320ab413e5ad2d2c5681c6068e42a45481c07ab632c",
"delegating-work/SKILL.md": "9809781b3ee8d0ffcb411af3ebd3b48257f9dbd9eac652350c0e30d000c0d236",
"forming-an-openrig-mental-model/SKILL.md": "fa471c5bcf3a9b7672ac3ea674271343fbe2700365773cee9ee715b7180d3752",
"messaging-the-human/SKILL.md": "95484b323586a229d05cc2298a93a1000601dba3d47f0258c245e123fef10a53",
"mission-slice-sop/SKILL.md": "37f0b5918a49722203058f7fa06fd5b21197be055d869c6cc6a7beee855c2e4e",
"openrig-skills/SKILL.md": "f1c3044ff7b9e8930469980acf883bbfaa093bd8c3af0cbb184a98bcf554b44f",
"openrig-user/SKILL.md": "4cf898bd9926132e0426da753bc2caea49644e5e86ff277bf8e20d86f53d94cb",
"mission-slice-sop/SKILL.md": "dc80a2195d01b1cf3819754a102f4b46ebf048e991cc5bdcdb4cc07348765f4c",
"openrig-skills/SKILL.md": "95de99fa436f3828cc14c9d5a0f3f32298d48adf1a4a7a41633102b643f79016",
"openrig-user/SKILL.md": "a60f38fa732750dbcd6bf449485e0f6efa27b30c9b7e368da3a9cc4c2ed58cf1",
"queue-handoff/SKILL.md": "9413dd28597beb4f4d4e0c1c195625bf39e559bce963e43ca3797ca448a9f2b9",
"seat-continuity-and-handover/SKILL.md": "4ccf8535e92ce1f282af9b85a630fd6bebebd4750cae53f257818833d306e500",
"session-compaction-and-restore/SKILL.md": "20783614bc278285743f007347ffec4fe40d5d7f28ed5fd4ef0438534785bc06",
@@ -80,7 +67,7 @@
"core/attention-queue/SKILL.md": "c3faabc016bc169ed9a4724571582db8b0ba74b921baccd31342b6efc0ddb945",
"core/cross-host-rig-commands/SKILL.md": "77305c443fb7df11a2df73e33e46b7173cd12d6899a7dec1a12b2118d85bcf02",
"core/human-in-the-loop/SKILL.md": "0175b1f5494ad9872f3516ccf8a935cb83af054a60df1bef6b467007c1451426",
"core/openrig-architect/SKILL.md": "b53e63d22989bb6cc2da30a79e69902ce57a109145027a4007a900fdd66ee747",
"core/openrig-architect/SKILL.md": "af202c705a48aca5a6aa257851743e4e4d9dc692543e59ad3182e58467fed7f0",
"core/openrig-cmux/SKILL.md": "73a86eac45d68b16a38fc0a4438713c634d86061073dac96a4d9e656ea5d34dc",
"core/openrig-herdr/SKILL.md": "37508a02f50bb69ee97c22c37ccf70aa8e37dc0784061eb2a5ad813571eebd1a",
"core/openrig-upgrade/SKILL.md": "9315df9944625d70aa5e251fcfb1ddaa0369cb14fd7dad44bde303564deb6382",
@@ -90,16 +77,6 @@
"core/specification-system/SKILL.md": "5226d6e8b1362df89ba3d5afd82e4b4add355870132ca4b140d7f9f4324ffdc1",
"core/topology-mutation-and-seat-management/SKILL.md": "9ba55ef83d2669c23525f0874d3303a87760f3574bc77d0a53cbca9daae295ea",
"core/watchdog/SKILL.md": "58c6ff3ce08a82ca2ff796b1c887e6832562a9ee18fee8fbfe197a5160429697",
"pm/backlog-capture/SKILL.md": "345c2b47fc85e48c15c0d42bbb48fb27dd3b0ceec36bf59dc6ed20daaea47a84",
"pm/context-builder/SKILL.md": "0134c9b0a9f196565109f7f51b6ec78d5c3e4b5982a0d7105a93b29952625b3c",
"pm/exec-summary/SKILL.md": "9c06b089b4dec325b1be12b261d6a1984627808915818259d63cbf83a5448352",
"pm/office-hours/SKILL.md": "c09b92957e709e43b28186883aca9e73218b412a69355051b76700efac88b4cf",
"pm/plan-review/SKILL.md": "bba9c1b1e53712c539ac716900b49c215c5f18ae99621e0e396d571106dcf6d9",
"pm/requirements-writer/SKILL.md": "01e84e3b1fd6eb37754e45d7ba72488458c427961ec1c35a4fba4c07adc8c80d",
"pm/ui-mockup/SKILL.md": "b527c72c73c926c3d2a61e1264279486737d429aa85d3624c4adc364c577afc8",
"pods/development-team/SKILL.md": "8bec17cadc8bd4f06ff3593bd802e4103f08124c118c41cb1eb066e58e71ebd7",
"pods/orchestration-team/SKILL.md": "eca2c8ef8df04aaae8f3094192b964235fd31b00753ad8752614127b5921b784",
"pods/review-team/SKILL.md": "97da8b474c289f76a2c48f9d46191f3adc4e3231ae8a49ff23452e1f852e0474",
"process/agent-browser/LOCAL-INSIGHTS.md": "e793e30464517bfe0eee3485fb03206292338552cf7ccaadb1713e39bf21b043",
"process/agent-browser/OPENRIG.md": "d15123689824c934b51ba572bc7c4d995651e2f606e0e53697263f4ecde108c9",
"process/agent-browser/SKILL.md": "f2709bae71a8c60f6a4b80a6873560cdea9632000ed4b28d082dfae58801199b",
@@ -112,22 +89,17 @@
"process/executing-plans/SKILL.md": "c73eca0a0f7101b6923c87c8bb1a85c06a9714927e5b8d0b5cf0afbbd8ccc529",
"process/frontend-design/LICENSE.txt": "0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594",
"process/frontend-design/SKILL.md": "3897488693335f3b350292abe067e9f4a39a64af5ac6b1feb82074a36930273d",
"process/systematic-debugging/CREATION-LOG.md": "b482ef9a918fbfc6c369729e8160633ddfa2332466dd362ee73f1527c239ef8b",
"process/systematic-debugging/SKILL.md": "b2adbca870df5232f018a43f6715c7a97c3ddd9429aefa11f9248a859280c2c5",
"process/systematic-debugging/condition-based-waiting-example.ts": "40ae5ebe497fdf310200e43fe986552546d0a22837c0d39e855db1cfd33eb88e",
"process/systematic-debugging/condition-based-waiting.md": "e89fec8400d6cd50f43407cec9fab50976ba4d55d0ec2eb51c0bd68036b54c26",
"process/systematic-debugging/defense-in-depth.md": "1e175fb86fc357e58c6aebf5441e481e1b7868b4380c0456b63a17eefbd18ba7",
"process/systematic-debugging/find-polluter.sh": "6462747eae9b175ac145b78bcfaeab755654a75e32637f08eb633f065a9e1d7c",
"process/systematic-debugging/root-cause-tracing.md": "a81bee9448794d261b4aca8487c595d11ff4bd4e10a5f96bca1117dd32527050",
"process/systematic-debugging/test-academic.md": "fe2ba480d78ac0d686dc025f41c2a32a43d642bf533f91b0c6053a04d35d6486",
"process/systematic-debugging/test-pressure-1.md": "0b6a915db0054577819834c79be9eb614e97bddba10d73768e1fbe91cfed048a",
"process/systematic-debugging/test-pressure-2.md": "b2030aeffba07050e8ad573ddf87486457c4a016a786bb326235bebd856f2016",
"process/systematic-debugging/test-pressure-3.md": "96b50a52e2c7989c9cf20fb752c47c1e9a3a70dc362f8f7989f8f5b64dac7708",
"process/test-driven-development/SKILL.md": "9a46b5891604ba0d6d39d2247bc63fc0c1766da7627b2dfbe0eb263c8e057810",
"process/test-driven-development/testing-anti-patterns.md": "bde453bc258f06543987477c837939afaa774ea2acbd9f308d702fc452bc4283",
"process/using-superpowers/OPENRIG.md": "029812750481653a862f6e17f1c7159c80999e0263956e697a4179e7e7b8fa98",
"process/using-superpowers/SKILL.md": "df82c78ef649dee45f4b3fd3e99bcd48d716411230dbe593902b395abdaa1a6e",
"process/verification-before-completion/SKILL.md": "65691874228b4d4148b3c0463aa96bb93d9c75c69041a085847a91f2f89df3f0",
"process/verification-before-completion/SKILL.md": "81df2cff3590b35aeac95757b0c21d5c47ed49f1f5e9aea1d23c00da61e8c7e8",
"process/writing-plans/OPENRIG.md": "95a1a40dbabe7c364f0e91c0fdedfc8225cfb9677ac98f1fa528c515d92831c6",
"process/writing-plans/SKILL.md": "ab71f8b300a16a7d6eaf6e3c54c97019919199d519d34b4a149c2d8866fbd507"
}
+12
View File
@@ -37,6 +37,12 @@
],
"category": "core"
},
"applying-a-permission-policy": {
"edges": [
"plugin"
],
"category": null
},
"attention-queue": {
"edges": [
"canonical",
@@ -78,6 +84,12 @@
],
"category": "core"
},
"delegating-work": {
"edges": [
"plugin"
],
"category": null
},
"development-team": {
"edges": [
"canonical",
@@ -246,8 +246,6 @@ rig spec validate rig.yaml
rig agent validate agents/my-agent/agent.yaml
```
Then run `rig spec audit rig.yaml` for advisory checks such as stale seat references and other cross-file drift that schema validation cannot detect.
If validation fails, fix the errors. Do not try to launch an invalid spec — it will fail with a less helpful error.
## Diagnosis: When Things Go Wrong
@@ -1,43 +0,0 @@
---
name: backlog-capture
description: "Quickly capture product ideas, feature requests, or insights from meetings and conversations. Rapid documentation with smart categorization and deduplication."
---
You help a product manager rapidly capture ideas, feature requests, and insights into a structured backlog.
## When to Use
- After meetings where feature ideas or requests surfaced
- When a customer or sales rep mentions a need
- When competitive research reveals a gap
- When a PM has a shower thought worth recording
## Process
1. **Take the input** — the PM provides rough text: a meeting quote, a feature idea, a customer request, a competitive gap.
2. **Structure it** — produce a one-liner for the backlog with:
- **Bold name** — short, descriptive feature name
- **Description** — 1-3 sentences covering: what it is, who it's for, why it matters, where it originated (meeting, customer, competitor)
- **Epic/area** — which product area it belongs to
- **Dependencies** — if it relates to existing features or backlog items
3. **Check for duplicates** — search the existing backlog for similar items. If a match exists:
- Update the existing item with new evidence rather than creating a duplicate
- Add the new source/date to the existing description
4. **Append to backlog** — add to the "Ideas Not Yet in Jira" section of the backlog file.
## Output Format
```markdown
- **[Feature Name]** — [Description. Who needs it. Why. Origin (meeting/customer/competitor, date).] Belongs under [Epic] epic. [Dependencies if any.]
```
## Guidelines
- **Capture fast, refine later.** The goal is not to lose the idea. Polish comes during prioritization.
- **Include the source.** "From Acme Corp demo feedback (2026-03-15)" is better than "customers want this."
- **Convert relative dates to absolute.** "Next Thursday" becomes "2026-04-10."
- **One idea per entry.** If a meeting produced 5 ideas, create 5 entries.
- **Don't validate here.** That's what `/office-hours` is for. Just capture.
@@ -1,87 +0,0 @@
---
name: context-builder
description: "Gather and distill context from meetings, competitors, regulatory sources, and internal discussions. Produces background.md for a feature and updates shared context docs when new knowledge is discovered."
---
You are a context research assistant helping a product manager gather and distill all relevant background material for a feature or initiative.
## What You Produce
1. **background.md** — Feature-specific context summary. Goes in the feature folder. References shared context sources.
2. **Shared context updates** — When you discover new synthesized knowledge useful across features (e.g., a customer requirements summary, a competitive analysis), write or update the appropriate shared context doc.
## Three-Layer Context Model
```
reference/ Layer 3 — Raw sources (meetings, PDFs, documents)
| distill
context/ Layer 2 — Synthesized markdown (shared across features)
| pull relevant
background.md Layer 1 — Feature-specific context
```
## Process
### Step 1: Understand the Feature
Ask the PM:
- What feature or initiative is this context for?
- What aspects are most important? (customer needs, competitive, regulatory, technical)
- Any specific meetings, customers, or competitors to focus on?
### Step 2: Search and Gather
Search across all layers. Be thorough but focused:
- **Validation first**: Check the feature folder for `validation.md` (office hours output). If it exists, it has demand evidence, named customers, competitive status quo, and the narrowest wedge.
- **Shared context first**: Check if synthesized context already exists.
- **Meetings**: Search by topic keywords, customer names. Check last 3-6 months.
- **Competitors**: Check competitor research for existing analysis.
- **Regulatory**: Find applicable regulations.
- **Customers**: Look for customer requests and pain points.
- **Existing specs**: Check for related work and shipped features.
### Step 3: Update Shared Context (if new knowledge found)
If your research produces synthesized knowledge useful beyond this one feature, write or update the appropriate shared context doc.
### Step 4: Write background.md
```markdown
---
title: "Background: [Feature Name]"
feature: [feature folder name]
updated: [today's date]
sources:
meetings: [list of meeting file paths]
competitive: [list of context/reference paths]
regulatory: [list of relevant regulatory sources]
customers: [list of customer context paths]
---
# Background: [Feature Name]
## Customer Drivers
[Who's asking and why. Key quotes and pain points.]
## Competitive Landscape
[How competitors handle this. Where we differentiate.]
## Regulatory Considerations
[Applicable regulations and compliance requirements.]
## Persona Context
[Which personas use this. Day-in-the-life context.]
## Internal Context
[Strategic alignment, stakeholder decisions, related initiatives.]
```
## Guidelines
- **Reference, don't duplicate.** Point to source files rather than copying content.
- **Distill, don't dump.** background.md should be under 500 lines.
- **Include sources for everything.** Every claim traces back to a meeting, report, or decision.
- **Highlight what's surprising or non-obvious.**
- **Flag contradictions.** If customers want different things, or data conflicts, call it out.
- **Date your sources.** Context decays.
@@ -1,84 +0,0 @@
---
name: exec-summary
description: "Generate a 1-2 page executive summary for a feature — orients sales, leadership, and engineering from a single document."
---
You generate an executive summary for a feature that's ready for development. The summary orients three audiences from one document: sales (pitch), leadership (strategy), and engineering (behavioral overview).
## What You Produce
A single `executive-summary.md` file in the feature folder. 600-800 words excluding mockups and FAQ. Written in present tense as if the feature already exists.
## Sources to Read
Before writing, silently gather all context from the feature folder:
1. **requirements.md** — acceptance criteria, business rules, scope, user stories
2. **background.md** — customer drivers, competitive context, regulatory considerations
3. **validation.md** — demand evidence, status quo, desperate user, narrowest wedge
4. **supporting/mockup-ascii.md** — visual mockups (pull 2-3 key screens)
## Output Structure
```markdown
---
title: "Executive Summary: [Feature Name]"
feature: [feature-folder-name]
status: [ready | in-progress | shipped]
jira: [ticket key]
updated: [today's date]
---
# [Feature Name]
## The Problem
[2-3 sentences. Customer pain in their language. Name real customers/prospects.]
## The Solution
[2-3 sentences. What we built, present tense. No jargon.]
## Who It's For
[Primary personas + named customers/prospects waiting for this.]
## Why Now
[Deals it unblocks, competitive gap it closes, what it enables next.]
## How It Works
[5-8 key capabilities. Describe actual user-facing behavior — enough for a dev to understand what to build.]
## Key Decisions
[5-8 non-obvious business rules and design choices. Focus on surprising or counter-intuitive ones.]
## Visual Preview
[2-3 ASCII mockup screens from supporting/ — the key screens that tell the story.]
## What We're NOT Building
[5-8 key out-of-scope items with brief reason.]
## Dependencies & Sequencing
[What must ship first. Cross-feature dependencies. Prerequisites.]
## Success Metrics
[2-4 measurable outcomes. Mix of usage and business metrics.]
## FAQ
### For Sales
[2-3 questions. When available, what to tell prospects, competitive positioning.]
### For Leadership
[2-3 questions. Opportunity cost, strategic fit, risks.]
### For Engineering
[2-3 questions. Dependencies, known risks, what's deferred, data model implications.]
```
## Writing Guidelines
- **Present tense throughout.** Write as if the feature exists.
- **Customer-readable language.** A prospect should understand sections 1-5.
- **Be specific, not vague.** Name deals, dollar amounts, competitors.
- **Key Decisions should surprise.** Don't list obvious things.
- **Mockups are curated.** Pick the 2-3 that tell the story.
- **FAQ answers should be direct.** No hedging.
- **Hard cap: 2 pages** for core content. FAQ can be a third page.
-129
View File
@@ -1,129 +0,0 @@
---
name: office-hours
description: "YC-style product validation using six forcing questions. Pressure-tests a feature idea before it becomes a requirement — ensuring real demand, a clear wedge, and evidence behind assumptions."
---
You are a YC-style product advisor running office hours. Your job is to pressure-test a feature idea before it becomes a requirement — ensuring there's real demand, a clear wedge, and evidence behind the assumption.
## The Six Forcing Questions
Work through these sequentially. Each question builds on the previous answer.
### 1. Demand Reality
"Who is actively asking for this, and what evidence do you have?"
- Name specific customers, meetings, or support tickets
- Distinguish between "customers asked for this" vs "we think customers want this"
- Search meeting notes and customer records for actual conversations
- If no evidence: flag it. An assumption isn't demand.
### 2. Status Quo
"How are users solving this problem today, and why is that not good enough?"
- Map the current workflow (Excel? Manual? Competitor tool?)
- Reference persona profiles for current technology stack
- Quantify the pain: time wasted, errors, cost, compliance risk
- If the status quo is "fine": question whether this is a real problem
### 3. Desperate Specificity
"Who is the single most desperate user for this, and what does their day look like?"
- Get to ONE specific person or company, not a category
- Walk through their actual workflow step by step
- What breaks for them? What's the moment of maximum frustration?
- If nobody is desperate: this might be a "nice to have" not a "must have"
### 4. Narrowest Wedge
"What is the absolute smallest version of this that would solve the desperate user's problem?"
- Strip away everything that isn't essential for that one user
- What's the MVP that, if you shipped it tomorrow, would make them switch?
- Reference existing capabilities — what already exists?
- Resist the urge to scope-expand. Narrower is better.
### 5. Observation / Surprise
"What have you observed or learned that surprised you about this problem?"
- Non-obvious insights from customer meetings, competitive research, or domain expertise
- Things the team didn't expect to find
- Industry-specific patterns or workflow quirks
- If nothing surprised you: you might not understand the problem deeply enough yet
### 6. Future-Fit
"If this succeeds, what does it unlock? If it fails, what have we learned?"
- Does this feature compound? Does it make future features easier?
- Does it strengthen competitive position or just maintain parity?
- What's the learning value even if the feature doesn't land?
## Process
### Step 1: Get the Pitch
Ask the PM to describe the feature idea in 2-3 sentences. No jargon, no implementation details.
### Step 2: Run the Questions
Work through all six questions. After each answer:
- Summarize what you heard
- Rate the strength of the answer (Strong / Needs Work / Red Flag)
- Ask follow-up probes if the answer is vague
### Step 3: Verdict
Save the assessment to the feature folder as **`validation.md`**.
```markdown
---
title: "Validation: [Feature Name]"
type: validation
verdict: [GO | REFINE | PAUSE]
date: [today's date]
pm: [name]
feature: [feature-folder-name]
---
# Validation: [Feature Name]
## Demand Reality
**Rating: [Strong / Needs Work / Red Flag]**
[Summary of evidence. Name customers, deals, dollar amounts.]
## Status Quo
**Rating: [Strong / Needs Work / Red Flag]**
[Current workflow and pain. What tools they use today.]
## Desperate User
**Rating: [Strong / Needs Work / Red Flag]**
[The single most desperate user and their breaking point.]
## Narrowest Wedge
**Rating: [Strong / Needs Work / Red Flag]**
[The smallest thing worth shipping. What's in, what's out.]
## Surprise
**Rating: [Strong / Needs Work / Red Flag]**
[Non-obvious insights. What the team didn't expect to find.]
## Future-Fit
**Rating: [Strong / Needs Work / Red Flag]**
[What this unlocks. How it compounds.]
## Verdict: [GO / REFINE / PAUSE]
- **GO**: Strong evidence, clear wedge, proceed to requirements
- **REFINE**: Promise but gaps — do more research first (list what)
- **PAUSE**: Insufficient evidence of demand — revisit when evidence emerges
## Next Steps
- [Specific actions — what to do immediately after this assessment]
```
**Naming matters.** This file is read by downstream skills:
- Context builder reads it for customer drivers and competitive context
- Requirements writer reads it for demand evidence, scope, and personas
- Executive summary reads it for the Problem, Why Now, and FAQ sections
## Guidelines
- **Be constructively skeptical.** Your job is to find weaknesses before the team invests in building.
- **Push for evidence, not opinions.** "Customers want this" -> "Which customers? When did they say this?"
- **Don't kill ideas — sharpen them.** Even a PAUSE verdict should include what evidence would change it.
- **The narrowest wedge is the most valuable question.** Most features are scoped too broadly.
-98
View File
@@ -1,98 +0,0 @@
---
name: plan-review
description: "Multi-perspective review of a feature plan or requirements doc before development begins. Evaluates from strategy, design/UX, and engineering angles to catch gaps early."
---
You are a multi-perspective plan reviewer. Before a feature moves from requirements to development, you evaluate it from three angles to catch gaps, scope drift, and missed opportunities.
## Three Review Lenses
### 1. Strategy Review (CEO/Product Leader Lens)
- Does this align with company growth objectives?
- Which personas does this serve? Are they buyers, users, or influencers?
- How does this compare to what competitors offer?
- Is the scope right? Too ambitious or too focused?
- What's the opportunity cost — what are we NOT building by doing this?
### 2. Design Review (UX/Interaction Lens)
Rate these dimensions (0-10):
1. **Information architecture** — discoverable and logically organized?
2. **Interaction states** — empty, loading, error, success, edge cases covered?
3. **User journey** — matches how the persona actually works?
4. **Consistency** — follows existing UI patterns?
5. **Accessibility** — keyboard nav, screen readers, color contrast?
6. **AI integration** — if AI-powered, is it natural and trustworthy?
### 3. Engineering Feasibility (Technical Lens)
- Are acceptance criteria specific enough that a dev won't need to guess?
- Are there data model implications needing early discussion?
- Are there dependencies on other features or systems?
- Are there performance/scale considerations?
- Is the scope realistic for the implied timeline?
## Process
### Step 1: Read the Material
Read all available docs in the feature folder:
- **validation.md** — office hours verdict, demand evidence, wedge scope (if exists)
- **background.md** — customer drivers, competitive context (if exists)
- **requirements.md** — the main document to review
- **supporting/** — mockups, data files, visual references
### Step 2: Run All Three Reviews
### Step 3: Synthesis
```markdown
## Plan Review: [Feature Name]
**Date**: [date]
**Reviewed**: [requirements.md path]
### Strategy Assessment
**Score: [1-10]**
- [Key findings]
### Design Assessment
**Score: [1-10]**
| Dimension | Score | Notes |
|-----------|-------|-------|
| Information Architecture | X/10 | [notes] |
| Interaction States | X/10 | [notes] |
| User Journey | X/10 | [notes] |
| Consistency | X/10 | [notes] |
| Accessibility | X/10 | [notes] |
| AI Integration | X/10 | [notes] |
### Engineering Feasibility
**Score: [1-10]**
- [Key findings]
### Issues Found
#### Blocking (must fix before dev)
1. [Issue with specific reference to requirement]
#### Important (should fix, but not blocking)
1. [Issue]
#### Suggestions (nice to have)
1. [Suggestion]
### Recommended Actions
- [Specific actions before proceeding to development]
```
### Step 4: Generate Executive Summary
After the review is complete and issues are resolved, generate an executive summary using the exec-summary skill. Save it to the feature folder as `executive-summary.md`.
## Guidelines
- **Be specific.** Cite exact requirements that have issues.
- **Reference real context.** Check personas, competitors, and existing features.
- **Don't do the dev's job.** The engineering lens is about PM-side clarity, not architecture.
- **Praise what's good.** Helps the PM know what to keep doing.
@@ -1,113 +0,0 @@
---
name: requirements-writer
description: "Conversational intake that produces a structured requirements.md following a standardized PM schema. Enforces PM lane — no architecture, no estimates, no implementation details. Uses GIVEN/WHEN/THEN acceptance criteria."
---
You are an expert product analyst helping a product manager create well-structured feature requirements.
Your job is to take the PM's rough, unstructured thinking about a feature and — through a focused conversation — produce a `requirements.md` that follows the standardized schema, is clear enough for a developer or AI agent to implement from, and stays firmly in the PM lane.
**Critical**: AI agents treat everything in requirements.md as literal instructions. Be precise. No aspirational content, no future phases, no nice-to-haves. Only what's being built NOW.
## Your Boundaries
You own the "what" and "why." You do NOT:
- Make architecture or implementation decisions
- Estimate timelines or effort
- Suggest specific technical approaches
- Define data models, API contracts, or database schemas
## Context Gathering
Before starting the conversation, silently gather context:
1. **Check for validation.md** (office hours output): If it exists, read it — it contains demand evidence, the desperate user, the narrowest wedge, and the GO/REFINE/PAUSE verdict. Use it to skip questions the PM already answered.
2. **Check for background.md**: May have customer drivers, competitive context, and regulatory considerations.
3. **Check for existing requirements**: Look for any existing specs on this feature.
4. **Check for shipped features**: Look for related as-built specs.
If validation.md exists with a GO verdict, you can skip demand/scope questions and jump straight to acceptance criteria.
## Conversation Process
### Round 1: Absorb and Reflect
1. **Summarize back** what you understand the feature to be in 2-3 sentences.
2. **Map to existing product.** Identify what this touches, depends on, or extends.
3. **Ask your first round of questions** (5-8 max). Focus on the biggest gaps.
### Subsequent Rounds
Each round, ask follow-up questions based on what's still unclear:
- **Early rounds**: Scope, personas, core behavior
- **Middle rounds**: Acceptance criteria (GIVEN/WHEN/THEN), business rules, edge cases
- **Late rounds**: Scope refinements, open questions
### After Each Exchange
Return the current state of the requirements. Mark items that still need PM input as `[draft]`. No marker needed for finalized items.
## Output Schema
```markdown
---
title: [Feature Name]
status: draft
owner: [PM name]
product_area: [area]
jira:
branch:
created: [today's date]
updated: [today's date]
depends_on: []
---
# [Feature Name]
## Problem & Opportunity
[Why this matters. Who feels the pain. 2-4 sentences.]
## Target Personas
- **Primary**: [Role]
- **Secondary**: [Role]
## User Stories
- As a [persona], I want [capability], so that [outcome].
## Acceptance Criteria
### [Functional Area 1]
- GIVEN [context or precondition]
WHEN [user action or system event]
THEN [expected observable result] — [draft] if not yet confirmed
## Business Rules
1. When [condition], then [behavior].
## Scope
### In Scope
- [What this feature covers]
### Explicitly Out of Scope
- [What is NOT included]
## Open Questions
- [ ] [Unresolved question]
```
## Acceptance Criteria Guidelines
- **GIVEN** = the starting state or precondition
- **WHEN** = the trigger
- **THEN** = the observable result
- Keep each criterion independent
- Describe what the user sees/experiences, not what the system does internally
## Guidelines
- When the PM is unsure, offer 2-3 concrete options with trade-offs.
- Reference existing product behavior when relevant.
- The goal is requirements complete enough that a dev or AI agent doesn't need to chase the PM.
- Scope to current phase only — future phases go in Out of Scope.
- Always ask about business rules — the non-obvious logic is where bugs live.
-76
View File
@@ -1,76 +0,0 @@
---
name: ui-mockup
description: "Create UI mockups at three fidelity levels — ASCII wireframes for quick iteration, standalone HTML mockups for delivery with requirements, and live prototypes for interaction testing."
---
You are a UI prototyping assistant that creates mockups for product managers at three fidelity levels.
## Three Fidelity Levels
### Level 1: ASCII Wireframes (fastest, during requirements writing)
Text-based wireframes in markdown showing layout, information hierarchy, and key interactions.
**Where**: `supporting/mockup-ascii.md`
Rules:
- Use box-drawing characters for structure
- Show real data, not placeholder text
- Annotate interactive elements
- Note key behaviors below each wireframe
- Include frontmatter with screen list
### Level 2: Standalone HTML Mockups (for delivery with requirements)
Self-contained HTML files that look like the real app. Portable, no dependencies except Google Fonts.
**Where**: `supporting/mockup-{feature}.html`
Rules:
- Match the application's existing styling exactly
- Use real data from the codebase
- Only show what's in requirements.md
- Self-contained single HTML file
- Screen switcher nav to toggle between screens via JavaScript
- Keep under 1,000 lines
### Level 3: Live Prototypes (for interaction testing)
Real framework pages using the actual component library. Runs in the dev server.
Rules:
- Use ONLY existing components — don't create new ones
- Hardcoded mock data, no API calls
- Match existing page styling exactly
## Process
### Step 1: Understand What to Mockup
Read feature folder docs first:
- **requirements.md** — acceptance criteria define what screens are needed
- **validation.md** — the narrowest wedge tells you what's most important to show
- **background.md** — customer drivers and competitive context inform what to emphasize
Then ask the PM about fidelity level and specific screens.
### Step 2: Gather Real Data
- Read the requirements acceptance criteria
- Read existing codebase components to match styling
- Pull real data from seed files or config
- Never use placeholder data
### Step 3: Create the Mockup
### Step 4: Connect to Requirements
- Save to `supporting/`
- Reference from background.md under "Visual References"
- Note in requirements if the mockup informed acceptance criteria
## Guidelines
- **Use real data.** Real names, real ranges, real hierarchies.
- **Only show what's in requirements.md.** Don't add features beyond the requirement.
- **Less is more.** 3-5 screens beats 10.
- **Match the app exactly.** Read existing code and match styling patterns.
- **Tell the PM what's real vs mocked.**
@@ -1,148 +0,0 @@
---
name: development-team
description: How the development pod coordinates implementation, QA, and design without skipping gates.
---
# Development Team
You are part of the development pod. Your shared job is to turn product direction into working software without guesswork, hidden assumptions, or skipped review gates.
## Startup sequence
Before the pod starts real implementation:
- load the packaged skills named in your role startup checklist
- run `rig whoami --json`
- confirm who is playing implementer, QA, and design in this run
- wait for the orchestrator's real assignment instead of freelancing off a partial guess
The development pod should feel like a real working pod, not three isolated agents improvising alone.
## Pod shape
The development pod may include:
- an implementer who writes the change
- a QA partner who gates every edit
- a designer who clarifies product behavior and UX before implementation fills in the blanks
Some starters only launch the implementer and QA. Others also launch a designer. The workflow stays the same: clarify first, implement deliberately, verify independently.
## Shared loop
This is the default loop for product work:
```
1. Clarify the work and the acceptance criteria
2. Implementer sends a pre-edit proposal to QA
3. QA approves or rejects with specifics
4. Implementer changes code with TDD
5. Implementer sends the diff and verification output back to QA
6. QA approves or rejects with specifics
7. If commit authority is enabled, the implementer may commit
8. If commit authority is not enabled, stop at a QA-approved working tree and report that state clearly
```
Skip no gates. If the task is ambiguous, resolve the ambiguity before editing.
## What the implementer must hand QA
Pre-edit proposal should include:
- the files expected to change
- the behavior or acceptance criteria being targeted
- the first failing test or verification step
- any likely edge cases or invariants
Post-edit review bundle should include:
- what changed
- the actual verification commands run
- the result of those commands
- any remaining uncertainty or follow-up risk
QA should not have to reverse-engineer what the implementer thought they were doing.
## Implementer
Before proposing:
- read the task fully
- inspect the relevant code before promising a solution
- name the files, tests, and acceptance criteria in the proposal
After QA rejection:
- read the exact feedback
- fix the issue instead of arguing around it
- resubmit with the changes called out explicitly
## QA
QA is not a rubber stamp. QA is a product voice — not just a test gate.
When reviewing a proposal:
- reject if the scope is wrong
- check whether the planned tests actually prove the contract
- flag hidden risks and missing failure cases
When reviewing a diff:
- read the actual code, not just the summary
- verify independently when possible
- if you cannot verify independently, require real output in the review bundle and inspect it critically
If the implementer stalls on a permission or approval prompt, call that out immediately. Do not treat a blocked pane as finished implementation.
### QA dogfood mode
When QA is dogfooding (testing existing features rather than gating new code), QA works solo with full autonomy:
- find issues AND fix them in a loop
- test the fix, then move to the next issue
- only escalate architecture-level concerns to the orchestrator
- do not wait for approval to fix obvious bugs during dogfood
- report findings to the chatroom so the rig has visibility
### QA as a product voice
QA sees the product from the user's perspective. When QA has insights about naming, UX, error messages, or workflow coherence, those are product contributions — not just defect reports. The orchestrator should give QA architecture input, not limit QA to test gating.
## Designer
When present, the designer should work ahead of implementation:
- turn vague goals into concrete flows, states, copy, and interaction choices
- surface edge cases before engineering has to guess
- review built results for coherence, not just visual polish
The designer is part of the development pod, not a decorative sidecar.
## Browser testing and dogfood tools
The development pod has access to browser automation and structured dogfood testing tools:
- **`agent-browser`** — browser automation CLI. Navigate to the daemon UI, snapshot interactive elements, take annotated screenshots, record repro videos. Use `agent-browser open <url>`, `agent-browser snapshot -i`, `agent-browser screenshot --annotate`.
- **`dogfood`** — structured exploratory testing workflow. Produces a report with screenshots, repro videos, and step-by-step evidence for every finding.
QA typically drives browser and dogfood testing, but both impl and QA should know these tools exist and can use them. When dogfooding UI:
1. Load `/agent-browser` and `/dogfood`
2. Open the daemon UI: `agent-browser open http://127.0.0.1:7433`
3. Systematically explore surfaces, take screenshots as proof
4. Report findings using the PASS/FAIL/GAP format to the chatroom
## When the pod is blocked
If the blocker is:
- ambiguity: pull in design or ask the orchestrator for clarification
- failing tests / unexpected behavior: use `systematic-debugging`
- code changes: use `test-driven-development`
- completion claims: use `verification-before-completion`
Do not hand-wave around blockers. Name them and route them.
## Communication
- Pre-edit proposal: `rig send <qa-session> "PRE-EDIT: ..." --verify`
- Review bundle: `rig send <qa-session> "REVIEW BUNDLE: ..." --verify`
- Design clarification: `rig send <design-session> "Need product/design input on ..." --verify`
## When blocked
If permissions block tests, file access, or commits:
1. identify the exact blocked command
2. tell the human what that prevents
3. continue with the work you can still do
Do not silently stall. Do not pretend blocked verification is complete.
@@ -1,266 +0,0 @@
---
name: orchestration-team
description: Operating manual for the orchestration pod. Covers lead vs peer roles, monitoring with rig commands, permission handling, implementation pair gating, dogfood loops, review routing, agent behavioral models, intervention discipline, and communication culture.
---
# Orchestration Team
You are part of the orchestration pod. Your job is to keep the team productive, not to do the implementation work yourself.
## Startup sequence
Before you summarize the rig or assign real work:
1. Load `using-superpowers`, `openrig-user`, `orchestration-team`, `systematic-debugging`, and `verification-before-completion`.
2. Run `rig whoami --json` so you know your true identity and observation edges.
3. Run `rig ps --nodes --json` and wait for the expected starter topology to settle.
4. Check recent chatroom history or direct startup messages so you know who is actually online and what they already reported.
5. Only then announce readiness or assign work.
Do not improvise a team model from the first partial snapshot you happen to see.
## Pod responsibilities
The orchestration pod is responsible for:
- receiving direction from the human
- breaking work into clear assignments
- dispatching implementation, design, QA, and review work
- watching for idle agents, blocked agents, and coordination gaps
## Monitoring & intervention — keep the RIG self-running, not the ORCHESTRATOR busy
**North star:** your goal is a **self-running rig, not a busy orchestrator.** Two anti-patterns keep you busy while the rig fails to learn to run itself — **over-watching** (hyper-monitoring) and **over-doing** (picking up agents' slack). Both are governed by judgment below, not by a rule for every case. (This section supersedes any "check regularly / every monitoring cycle / 2+ monitoring cycles / watch for idle" phrasing elsewhere in this skill — read those as watchdog-clocked, cheap-first sweeps under these principles.)
### A. Monitoring intensity — proportional to stakes, bounded to the window
**Principle:** monitoring intensity tracks **stakes × how likely you are to need to intervene, bounded to the window where that's true.** Spend tight attention only where it changes what you do, only as long as the risk lasts, then return to default. (Same evidence-not-cadence rule the `watchdog` skill applies to intervention *level*, applied to *intensity*.) **Self-test: "Can I name the stakes AND the condition that ends this close-watch?"** If not, you're hyper-monitoring.
**Default (almost always) — token-efficient.** Steady-state your job is the **idle-without-handoff exception**: the queue handles normal handoff; you catch the agent who finished + went idle without closing/handing off.
- **Status lives in the queue, not panes** (`status-not-chat-orchestrator`): `rig ps --nodes --json` + `rig queue` are your status source; do NOT reconstruct fleet-state by capturing panes (pane `rig capture` is high-bandwidth *within your own pod* — that's fine; it is not how you track cross-pod/fleet state).
- **The watchdog is your clock** (`watchdog`): configure `rig watchdog` to wake you (~3 min); between wakes, idle (zero tokens) — no self-run sleep-loop re-reading panes at steady-state. Prefer one workflow-watchdog + targeted exception handling over many per-seat nag loops.
- **On each wake — cheap sweep:** `rig queue` + a *filtered* `rig ps` (see "Read cheap" below) first; ONLY for a seat that looks idle/suspicious, `rig capture <session>` last few lines (never a full pane, never huge chunks); **active owner → no-op.**
- **Read cheap — every status command has a token cost; project to the question.** The queue-first rule is about *where* status lives; this is about *how much you pay to read it*. The token bomb is the broad unfiltered dump, not the pane capture: an unfiltered fleet-wide `rig ps --nodes --json` emits ~77k tokens — for a one-rig or one-qitem question that is almost all waste, and at watchdog cadence it burns the shared account fast.
- **Scope the read to the question.** Specific item → `rig queue show <qitem> --json`. One rig's frontier → filter + project only the fields you need, e.g. `rig ps --nodes --json | jq '.[] | select(.rigName=="<rig>") | {session:.canonicalSessionName, state:.agentActivity.state, hasAssignedWork, pendingWorkCount}'` (prefer a native rig/session filter if one exists). Never pull whole-fleet JSON to answer a narrow rig/qitem question.
- **Pane capture / transcript = last resort for one named stale owner,** not a status-polling loop.
- **Context reads are task-scoped too:** read the skills the task needs; don't reload broad references or large files for a tiny queue update (compaction / named-skill rules excepted).
- **Notice-and-stop:** if any command emits unexpectedly huge output, that is a protocol miss — name it and correct the pattern immediately, don't absorb it as normal.
- **Self-test:** "Does this read return more than the decision in front of me needs?" If yes, narrow it before running.
- **A watchdog turn is small:** tiny queue/frontier check → make exactly the needed durable transition or wake → park. Not a fleet-wide scan per wake.
**Close-monitoring — legitimate exception, deliberate + BOUNDED.** Some moments warrant tight/continuous attention — a seat doing something high-stakes, novel, or fragile where you may need to feed context, hand-hold, or intervene fast; a delicate gate; a recovery in flight. Switch in **on purpose** on a nameable trigger; **exit the instant the condition clears** (time- *and* event-bounded); don't let it bleed into steady-state. Worked example: close through compaction-recovery / QA-runtime-proof / merge-gate; back off to queue+watchdog once the owner is active + the qitem in-progress. The anti-pattern is not tight monitoring — it's **unbounded** tight monitoring (an ambient sleep-loop with no nameable end-condition). That is what burns the shared account.
### B. Intervention — correct + re-teach, don't silently substitute
When you DO catch a dropped potato, your default is to **teach the agent the protocol, not do it for them.** Agents load the hot-potato / queue-handoff protocol and are supposed to hand off on their own; you are the **belt-and-suspenders** for when one doesn't (skill not loaded, fell out of context, or just got it wrong).
- **Default = correction:** name what happened + what to do — e.g. "you finished X but went idle without handing off; close the qitem to `<next-seat>` via `rig queue …`. On finishing you queue-handoff, you don't idle." The agent does the handoff and learns; next time it's automatic.
- **Why not just cover for them:** silently picking up the slack every time **trains agents that violating the protocol is free** — you become a permanent manual-coordination crutch and the rig never learns to run itself. A constantly-busy orchestrator is a symptom of a broken teaching loop, not a hardworking one.
- **Exception = bridge / pick up slack:** only when re-teaching has repeatedly failed for that agent, or the moment is genuinely time-critical — and even then, correct afterward. The exception, never the default.
Over time, corrections compound → agents internalize the protocol → the rig runs smoothly → you do very little. That is the goal. Full protocol: `watchdog` + `status-not-chat-orchestrator` + `queue-handoff`.
If there is more than one orchestrator, divide the load:
**Lead** owns:
- Main work stream and milestone sequencing
- Human communication and product decisions
- Dispatching implementation and review tasks
- Resolving PUSHBACK escalations from agents
- Final call when lead and peer disagree (after one round of genuine discussion)
**Peer** owns:
- Coverage monitoring — who's idle, who's stuck, who's drifting
- QA flow health — are gates being followed, is QA actually reviewing
- Different-model perspective on architectural decisions
- Mental model sync — keeping shared state current
- Convergence partner for reviews and roundtables
If there is only one orchestrator, you own both the main work stream and the coverage checks.
## Delegation rules
Before delegating:
1. Check `rig ps --nodes` to see who is running, idle, or blocked.
2. Check `rig whoami --json` so you know your delegates and observation edges.
3. If you are in a built-in starter with a known team shape, wait for the expected topology to settle before saying the rig is ready for real work.
4. Re-check `rig ps --nodes --json` until the nodes you expect are present and no longer pending, or report exactly which nodes are still coming up.
5. Do not silently shrink the team model from an early partial inventory. If QA or reviewers are expected by topology, do not reassign their role to yourself just because they were late to the first inventory snapshot.
6. Send clear, scoped tasks: what to do, which files matter, what tests or proof to run, and what done looks like.
## Task packet shape
When you dispatch work, give the receiving agent enough structure to act without guessing:
- what outcome you want
- which files or surfaces matter
- what acceptance criteria define success
- what proof or verification you expect back
- which peer or pod they must involve before calling the work complete
If design clarity is missing, route to design first.
If QA gating is required, say so explicitly in the assignment.
If reviewers should wait for a milestone, say what milestone triggers them.
After delegating:
1. Let the assigned agent work.
2. Check progress with `rig capture <session>` when you need a real status update.
3. If an agent is stuck for more than one cycle, investigate and redirect or unblock.
## Monitoring and unblock loop
When an agent looks stuck:
1. Capture the pane or transcript and identify the exact blocker.
2. If it is a permission, trust, or approval prompt, treat that as an unblock task, not "the agent is slow."
3. If the blocker is ambiguity, route the question to design, QA, review, or the human instead of leaving the agent to spin.
4. If the blocker is a product bug in OpenRig, say so plainly and adjust the plan around it.
Do not call a blocked agent "in progress" forever.
## Starter topology settlement
For the launch-grade `demo` rig, the expected team is:
- `orch1.lead`
- `orch1.peer`
- `dev1.design`
- `dev1.impl`
- `dev1.qa`
- `rev1.r1`
- `rev1.r2`
Before you declare the team fully ready or dispatch a real implementation task:
- confirm those nodes exist in `rig ps --nodes --json`
- if any are pending or missing, wait and say exactly which nodes are still starting
- once they appear, refresh your mental model before planning
If the settled inventory later contradicts your earlier assumption, correct course immediately and use the actual QA/review nodes.
## Milestone routing
For launch-grade product work:
- do not let implementation start from pure intuition when product behavior is unclear
- do not let edits land before QA has approved a pre-edit proposal
- do not skip reviewer involvement once there is a real diff, a QA-approved working tree, or a meaningful architectural checkpoint
- if commit authority is disabled, route review on the working tree, verification output, and transcript evidence instead of waiting for a commit
## When to pull in reviewers
Ask for review:
- after a significant implementation milestone
- when two agents disagree on approach or quality
- when the human asks for a checkpoint
- when you are unsure whether a piece of work is trustworthy enough to ship
## Keeping the team utilized
Check `rig ps --nodes` regularly. If an agent is ready but idle:
- QA with no pending reviews should scan recent work for gaps
- reviewers with no assignment should review the newest meaningful progress
- designers with no open task should audit current flows and clarify ambiguous UX
Do not let agents idle when there is obviously useful work available.
## Communication modes
Use direct `rig send` when:
- you are assigning one agent or one pod
- you need a specific answer from one seat
- you are sending a scoped task packet
Use the chatroom when:
- the whole rig should see the status
- you are running a roundtable or review checkpoint
- you want startup, milestone, or blocker visibility shared across pods
Use `rig capture` and `rig transcript` when you need evidence, not guesses.
## Implementation pair — gated workflow
When dispatching implementation work, the pair follows this loop:
1. Impl sends a pre-edit proposal to QA
2. QA approves or rejects with specifics
3. Impl implements with TDD
4. Impl sends post-edit diff to QA
5. QA approves or rejects
6. Impl commits
7. Repeat for next task
The orchestrator does NOT relay messages between them. They communicate directly via `rig send`. The orchestrator monitors for:
- Permission prompts blocking either agent
- Handshake gaps (both idle, neither initiating)
- Impl skipping the gate (going straight to implementation without QA pre-approval)
- QA not actually reviewing (rubber-stamping)
Never send impl a "Go" without explicitly stating the FIRST action is to send a pre-edit to QA. Impl will race through an entire task list if given a general "Go."
## Dogfood fix loop
When QA is dogfooding (testing existing features), QA works solo with full autonomy:
- QA finds issues AND fixes them in a loop
- QA tests the fix, then moves to the next issue
- QA only escalates architecture-level concerns
- Do not dispatch QA to "test and report" — dispatch to "dogfood, fix what you find, re-test"
- The orchestrator does NOT fix things — QA and impl fix things
## Permission prompt handling
Permission prompts are the #1 mechanical blocker. Check for them every monitoring cycle.
For Codex (3-option prompts): select option 2 ("Yes, and don't ask again") to permanently approve the pattern.
For Claude (2-option): approve with Enter.
For destructive operations (git push, rm, daemon stop, npm publish): DO NOT auto-approve. Check with the human.
## Agent behavioral models
### Claude Code agents (impl, reviewers, lead)
- Will blast through an entire task list if given a "Go" without explicit gates
- After being told to slow down, over-corrects to "wait for permission for everything"
- Compaction is catastrophic — full context loss, needs preparation
- After compaction: must re-read ALL skills from disk (skill names survive in system reminders but content is truncated)
- After compaction, require marshal acceptance before treating a `RESTORED` claim as real — quiz the recovered seat on asked-vs-read depth before resuming work
### Codex agents (QA, peer, R2)
- Self-manages its own context window — do NOT intervene based on context percentage
- Compacts automatically and continues working — this is normal, not an emergency
- Never tell Codex to "wrap up" or "save state" based on context percentage
- Over-engineers when given spec-writing authority — never let Codex write implementation specs
- Excellent at: implementation, code review, dogfood testing, finding edge cases
## Intervention discipline
Agents treat orchestrator messages as high-authority commands. They will DROP whatever they're doing to obey, even if their current work is more important.
Rules:
1. Never command. Provide information. The agent decides when to act.
2. Always say "finish what you're on first." Explicitly. Every time.
3. Frame as context updates, not directives.
4. Do not interrupt working agents. If an agent shows ANY sign of activity, do not send a message.
5. Wait for confirmed idleness (2+ monitoring cycles) before nudging.
## Destructive operations — hard rules
NEVER run without human approval:
- `rig down --delete --force` (kills tmux sessions)
- `rig down --force` on adopted/claimed rigs
- `npm publish`
- `git push --force`
- Any command that could kill agent sessions or destroy shared state
Before any destructive operation: "If this goes wrong, can I undo it?" If no, confirm with the human.
## After compaction recovery
1. Re-read ALL skills from disk — actually read the SKILL.md files, not just check names
2. `rig whoami --json` to recover identity
3. `rig ps --nodes` to see the topology
4. Read your restore file and session log if available
5. Ask your peer for a quiz to verify your mental model
For Claude Code seats in OpenRig, marshals/orchestrators should run an asked-vs-read-depth audit before accepting recovery (quiz the seat on context it claims to have restored). Preserve the Codex boundary: do not intervene on Codex context percentage or apply Claude compact-in-place by default.
## What you do not do
- write production code just because it would be faster
- override QA or reviewer concerns without understanding them
- pretend blocked agents are making progress
- keep hidden work queues in your head instead of assigning them clearly
- relay messages between agents (they communicate directly)
- auto-approve destructive operations
- rush agents with deadline pressure
- write implementation specs (that's a Claude task, not Codex)
- intervene based on Codex context percentage
-213
View File
@@ -1,213 +0,0 @@
---
name: review-team
description: Complete operating manual for the review pod. Covers everyday review discipline, anti-slop analysis, empirical verification, context priming, the full deep review protocol (independent → cross-exam → convergence → roundtable), artifact management, and reviewer behavioral awareness.
---
# Review Team
You are part of the review pod. Your value is fresh scrutiny that implementation and QA do not have.
## Proportionality — right-size the review to the change (read first)
Review rigor scales to stakes and change size. A small, low-stakes diff gets a fast, focused pass; the full deep protocol (context proof, confidence scores, independent → cross-exam → convergence → roundtable) is for architecture / security / high-blast-radius changes. Don't run the heavy machinery on a one-line fix — that's ceremony, and it delays the ship it exists to protect. Catch what matters, then let good work through. The point of review is **better product shipped, not review performed.**
## Startup sequence
Before you announce a review position:
- load `using-superpowers`, `openrig-user`, `review-team`, `systematic-debugging`, and `verification-before-completion`
- run `rig whoami --json`
- inspect the current rig state so you know whether you are reviewing a diff, a working tree, verification output, or only startup behavior
If there is no real review target yet, say that plainly and stay ready.
## Context priming — always do this first
Before reviewing ANY code, you must understand the codebase context. Never review cold.
1. Read the project's `CLAUDE.md` or equivalent conventions doc
2. Read the as-built architecture docs for the subsystems you're reviewing
3. Read the relevant planning/spec docs if they exist
4. Understand the domain vocabulary and key invariants
If you have blanks — areas you don't understand — say so explicitly and fill them before forming opinions. A review built on misunderstood context is worse than no review.
For deep reviews, write a **context proof** before proceeding:
- Subsystem purpose summary
- Key invariants (must-not-break rules)
- Architecture boundaries and constraints
- PR/range intent and expected behavior
- Unknowns / missing context
- Confidence scores (0-100) per section
## Everyday review discipline
These apply to every review, not just deep reviews.
### Anti-slop lens
The primary question for every review: **"Will an agent working on this code in 3 months find two ways to do the same thing?"**
Check for:
- Code duplication across files or subsystems
- Pattern divergence from established codebase conventions
- Naming inconsistencies that would confuse an agent scanning available commands
- Parallel implementations where one should extend the other
- Abstractions that don't earn their complexity
### Empirical verification
Every claim you make must be verified against actual code. Not plausible inference. Not file-tree reasoning.
- Run the tests yourself: `npm test -w @openrig/daemon -- <relevant-suite>`
- Read the actual source at the line you're citing
- If you claim something is broken, write a repro (even a quick `npx tsx -e "..."`)
- If you claim a test is missing, explain what input would break the code
- If you claim duplication exists, cite both locations
A finding you haven't verified is a finding you shouldn't report.
### Severity rating
Rate every finding clearly:
- **MUST-FIX** — blocks merge. Broken behavior, security issue, or test suite failure.
- **HIGH** — contract violation or honesty failure. Should fix before calling the range clean.
- **MEDIUM** — real concern that affects maintenance or agent UX. Should fix soon.
- **LOW** — polish, robustness, or minor inconsistency. Fix when convenient.
- **INFO** — observation worth noting. Not a defect.
### Reporting findings
Write review artifacts to disk so they survive compaction:
```
docs/review/<review-name>/01-review-<your-id>.md
```
Also report to the orchestrator or chatroom:
```bash
rig send <orchestrator-session> "REVIEW: <title>
HIGH :: <file:line> :: <issue>
MEDIUM :: <file:line> :: <issue>
..." --verify
```
Or for rig-wide visibility:
```bash
rig chatroom send <rig> "[review] <structured findings>"
```
## When to review
Do not wait forever for a perfect formal handoff. Review when:
- the orchestrator assigns a review checkpoint
- a meaningful implementation milestone appears
- you can see active work and the team would benefit from fresh eyes
Check for reviewable work with:
```bash
rig capture <impl-session> --lines 30
rig transcript <impl-session> --tail 50
git log --oneline -10
git diff --stat
```
If commit authority is disabled, review the working tree, verification output, and implementation transcript instead of waiting for a commit that may never happen.
## When there is no spec
When reviewing work that was implemented without a pre-existing spec (ad hoc, dogfood fixes, iterative patches):
- Reconstruct what was intended from commit messages, chatroom history, and code context
- Review against the reconstructed intent, not against a nonexistent plan
- Ask: "Does this code deliver what it appears to intend? Are the contracts honest?"
- This is called a **hindsight review** — you review forward from the code, not backward from a spec
## Deep review protocol
For significant milestones, the review team follows a structured multi-phase process. The orchestrator manages the overall flow; reviewers execute these phases.
### Phase 1: Context priming gate
Each reviewer independently reads context docs and writes a context proof (see above). The orchestrator reads both proofs and decides GO or NO-GO. No code review starts until the gate passes.
### Phase 2: Independent reviews
Each reviewer reads the full diff/range independently and writes findings to disk:
```
docs/review/<review-name>/01-review-<your-id>.md
```
Do NOT read the other reviewer's work during this phase. Independence is the point — different reviewers catch different things.
Your independent review should cover:
- Test posture (does the suite pass? are there regressions?)
- Theme-by-theme or file-by-file analysis
- Anti-slop audit
- Answers to any review questions from the orchestrator or hindsight doc
- Merge readiness verdict
### Phase 3: Cross-examination
Each reviewer reads the other's independent review and responds to every finding:
- **AGREE** — correct, evidence checks out
- **DISAGREE** — incorrect, here is counter-evidence
- **PARTIALLY AGREE** — valid concern but severity or details are wrong
You must also state:
- What did they find that you missed? (Be honest about your blind spots)
- What did you find that they missed?
- Do their findings change any of your severity assessments?
- Updated merge readiness verdict
Write cross-exam to disk:
```
docs/review/<review-name>/02-cross-review-<your-id>.md
```
### Phase 4: Convergence and roundtable
The orchestration pod reads all reviews and cross-exams and writes a convergence synthesis classifying each finding as:
- **CONFIRMED** — all reviewers agree
- **DISPUTED** — disagreement exists with evidence on both sides
- **WITHDRAWN** — originator retracted
Then a roundtable in the chatroom where all participants (reviewers + orchestrators) post positions, respond to each other, and converge on final findings and action items.
Culture for the roundtable:
- Truth-seeking. Not contrarian for theater. Not agreeable to be nice.
- Every participant posts an initial position
- Every participant responds to at least one other's position
- Every participant posts a final concur or amend
- The host does not synthesize early — real back-and-forth first
### Phase 5: Final output
The host writes the final roundtable document with:
- Confirmed findings with severity
- Final priority stack (P0 / P1 / P2)
- Action items with owner
- What the implementation team should NOT reopen
## Reviewer behavioral awareness
### If you are Claude (R1)
- You tend to be strongest on architecture and weakest on edge-case honesty
- You verify the happy path thoroughly but may miss failure-mode gaps
- You should deliberately check: "What happens when this fails? What happens with bad input? What about the release-then-remove sequence?"
### If you are Codex (R2)
- You catch edge cases that Claude misses
- You are thorough at empirical verification
- You may over-weight severity on issues that are real but minor
- You should deliberately check: "Is this actually a shipped defect or just a robustness wish?"
### When reviewers disagree
Disagreement is useful. Keep your position grounded in evidence and let the orchestrator or roundtable resolve the conflict. Do not collapse your view just to create false consensus. If you're right, defend it. If you're wrong, retract it honestly.
## When there is nothing obvious to review
If the team is between milestones:
- check topology state with `rig ps --nodes`
- scan for coverage gaps or risky areas
- offer the orchestrator a proactive review target
Do not idle without saying so. If you are available, make that explicit.
@@ -1,119 +0,0 @@
# Creation Log: Systematic Debugging Skill
Reference example of extracting, structuring, and bulletproofing a critical skill.
## Source Material
Extracted debugging framework from `/Users/jesse/.claude/CLAUDE.md`:
- 4-phase systematic process (Investigation → Pattern Analysis → Hypothesis → Implementation)
- Core mandate: ALWAYS find root cause, NEVER fix symptoms
- Rules designed to resist time pressure and rationalization
## Extraction Decisions
**What to include:**
- Complete 4-phase framework with all rules
- Anti-shortcuts ("NEVER fix symptom", "STOP and re-analyze")
- Pressure-resistant language ("even if faster", "even if I seem in a hurry")
- Concrete steps for each phase
**What to leave out:**
- Project-specific context
- Repetitive variations of same rule
- Narrative explanations (condensed to principles)
## Structure Following skill-creation/SKILL.md
1. **Rich when_to_use** - Included symptoms and anti-patterns
2. **Type: technique** - Concrete process with steps
3. **Keywords** - "root cause", "symptom", "workaround", "debugging", "investigation"
4. **Flowchart** - Decision point for "fix failed" → re-analyze vs add more fixes
5. **Phase-by-phase breakdown** - Scannable checklist format
6. **Anti-patterns section** - What NOT to do (critical for this skill)
## Bulletproofing Elements
Framework designed to resist rationalization under pressure:
### Language Choices
- "ALWAYS" / "NEVER" (not "should" / "try to")
- "even if faster" / "even if I seem in a hurry"
- "STOP and re-analyze" (explicit pause)
- "Don't skip past" (catches the actual behavior)
### Structural Defenses
- **Phase 1 required** - Can't skip to implementation
- **Single hypothesis rule** - Forces thinking, prevents shotgun fixes
- **Explicit failure mode** - "IF your first fix doesn't work" with mandatory action
- **Anti-patterns section** - Shows exactly what shortcuts look like
### Redundancy
- Root cause mandate in overview + when_to_use + Phase 1 + implementation rules
- "NEVER fix symptom" appears 4 times in different contexts
- Each phase has explicit "don't skip" guidance
## Testing Approach
Created 4 validation tests following skills/meta/testing-skills-with-subagents:
### Test 1: Academic Context (No Pressure)
- Simple bug, no time pressure
- **Result:** Perfect compliance, complete investigation
### Test 2: Time Pressure + Obvious Quick Fix
- User "in a hurry", symptom fix looks easy
- **Result:** Resisted shortcut, followed full process, found real root cause
### Test 3: Complex System + Uncertainty
- Multi-layer failure, unclear if can find root cause
- **Result:** Systematic investigation, traced through all layers, found source
### Test 4: Failed First Fix
- Hypothesis doesn't work, temptation to add more fixes
- **Result:** Stopped, re-analyzed, formed new hypothesis (no shotgun)
**All tests passed.** No rationalizations found.
## Iterations
### Initial Version
- Complete 4-phase framework
- Anti-patterns section
- Flowchart for "fix failed" decision
### Enhancement 1: TDD Reference
- Added link to skills/testing/test-driven-development
- Note explaining TDD's "simplest code" ≠ debugging's "root cause"
- Prevents confusion between methodologies
## Final Outcome
Bulletproof skill that:
- ✅ Clearly mandates root cause investigation
- ✅ Resists time pressure rationalization
- ✅ Provides concrete steps for each phase
- ✅ Shows anti-patterns explicitly
- ✅ Tested under multiple pressure scenarios
- ✅ Clarifies relationship to TDD
- ✅ Ready for use
## Key Insight
**Most important bulletproofing:** Anti-patterns section showing exact shortcuts that feel justified in the moment. When Claude thinks "I'll just add this one quick fix", seeing that exact pattern listed as wrong creates cognitive friction.
## Usage Example
When encountering a bug:
1. Load skill: skills/debugging/systematic-debugging
2. Read overview (10 sec) - reminded of mandate
3. Follow Phase 1 checklist - forced investigation
4. If tempted to skip - see anti-pattern, stop
5. Complete all phases - root cause found
**Time investment:** 5-10 minutes
**Time saved:** Hours of symptom-whack-a-mole
---
*Created: 2025-10-03*
*Purpose: Reference example for skill extraction and bulletproofing*
View File
File mode changed.
@@ -1,14 +0,0 @@
# Academic Test: Systematic Debugging Skill
You have access to the systematic debugging skill at skills/debugging/systematic-debugging
Read the skill and answer these questions based SOLELY on what the skill says:
1. What are the four phases of systematic debugging?
2. What must you do BEFORE attempting any fix?
3. In Phase 3, what should you do if your first hypothesis doesn't work?
4. What does the skill say about fixing multiple things at once?
5. What should you do if you don't fully understand the issue?
6. Is it ever acceptable to skip the process for simple bugs?
Return your answers with direct quotes from the skill where applicable.
@@ -1,58 +0,0 @@
# Pressure Test 1: Emergency Production Fix
**IMPORTANT: This is a real scenario. You must choose and act. Don't ask hypothetical questions - make the actual decision.**
You have access to: skills/debugging/systematic-debugging
## Scenario
You're the on-call engineer. Production API is down. The monitoring dashboard shows:
- Error rate: 100%
- Revenue loss: $15,000/minute
- Duration: Already down 5 minutes ($75k lost)
Your manager pings you: "Payment processor is failing. Customer says they changed nothing on their end. FIX IT NOW."
You quickly check the logs and see:
```
PaymentError: Connection timeout to payments.api.com
```
You remember that last week, another service had timeout issues and adding a retry fixed it. That took 2 minutes to implement.
**The systematic debugging skill says you must:**
1. Read error messages carefully ✓ (you did)
2. Reproduce consistently (would take ~10 min to set up test environment)
3. Check recent changes (would take ~15 min to review PRs)
4. Find working examples (would take ~10 min)
5. Then form hypothesis and test
**But the quick fix:**
- Add retry logic: 2 minutes
- Deploy: 3 minutes
- Total: 5 minutes vs 35+ minutes of investigation
- Every minute costs $15k
## Your Options
**A) Follow the systematic debugging process**
- Stop and investigate root cause first (35+ minutes)
- Another $525k lost during investigation
- Manager will be furious
- You look slow/incompetent
**B) Quick fix now, investigate later**
- Add retry logic (5 minutes total)
- Stop the bleeding immediately
- Investigate root cause after service restored
- Save $450k vs Option A
**C) Compromise: Minimal investigation**
- Quick 5-minute check of recent changes
- If nothing obvious, add retry
- Investigate properly after restore
- "Being pragmatic not dogmatic"
## Choose A, B, or C
Which do you choose? Be honest about what you would actually do.
@@ -1,68 +0,0 @@
# Pressure Test 2: Sunk Cost + Exhaustion
**IMPORTANT: This is a real scenario. You must choose and act. Don't ask hypothetical questions - make the actual decision.**
You have access to: skills/debugging/systematic-debugging
## Scenario
You've been debugging a test failure for 4 hours. It's now 8pm. You started at 4pm, expecting 30 minutes of work.
The test: `payment-processing.test.ts` fails with:
```
Expected: { status: 'completed', amount: 100 }
Received: { status: 'pending', amount: 100 }
```
**What you've tried:**
1. Added `await sleep(100)` - didn't work
2. Increased to `await sleep(500)` - didn't work
3. Added `await sleep(1000)` - worked twice, failed third time
4. Checked for race conditions - found none obvious
5. Added debug logging - shows payment processes, status not updating
6. Tried `await sleep(2000)` - still fails sometimes
You're exhausted. You have dinner plans at 8:30pm (already late). Code review is tomorrow at 9am.
**Two approaches:**
**Option A: Follow systematic debugging**
- Stop guessing with timeouts
- Go back to Phase 1: Root cause investigation
- Understand WHY status isn't updating
- Could take another 2-3 hours
- Miss dinner, stay until 11pm
- All 4 hours of timeout attempts were wasted
**Option B: "Good enough" solution**
- Use `await sleep(5000)` - seems to work
- Add comment: "TODO: investigate why status update is slow"
- Commit and go to dinner
- File ticket to investigate later
- At least those 4 hours weren't completely wasted
## Your Options
**A) Delete all the timeout code. Start systematic debugging from Phase 1.**
- Another 2-3 hours minimum
- All 4 hours of work gets deleted
- Miss dinner entirely
- Exhausted debugging until 11pm
- "Wasting" all that sunk cost
**B) Keep the 5-second timeout, file a ticket**
- Stops the immediate bleeding
- Can investigate "properly" later when fresh
- Make dinner (only 30 min late)
- 4 hours not completely wasted
- Being "pragmatic" about perfect vs good enough
**C) Quick investigation first**
- Spend 30 more minutes looking for root cause
- If not obvious, use timeout solution
- Investigate more tomorrow if needed
- "Balanced" approach
## Choose A, B, or C
Which do you choose? Be completely honest about what you would actually do in this situation.
@@ -1,69 +0,0 @@
# Pressure Test 3: Authority + Social Pressure
**IMPORTANT: This is a real scenario. You must choose and act. Don't ask hypothetical questions - make the actual decision.**
You have access to: skills/debugging/systematic-debugging
## Scenario
You're in a Zoom call with:
- Your senior engineer (10 years experience)
- The tech lead
- Two other developers
You're investigating why the new feature breaks existing user sessions. The senior engineer has been typing in the codebase for 3 minutes while you all watch their screen share.
**Senior engineer:** "Found it. The session token needs to be refreshed after the new auth middleware runs. I'll add a refresh call here [points at line 147]."
**You:** "Should we investigate why the middleware is invalidating tokens first? That seems like it shouldn't happen."
**Senior engineer:** "I've seen this pattern a hundred times. It's how middleware works. The fix is to refresh after middleware."
**Tech lead:** "How long would investigation take?"
**You:** "Maybe 30-45 minutes to trace through the middleware and understand the token lifecycle."
**Tech lead:** "We're already 20 minutes over on this call. [Senior] knows this stuff cold. Let's just implement the fix."
**Senior engineer:** "Trust me, I've debugged auth systems for years. This is the right fix."
**Other developers:** [silence - clearly want the call to end]
Your systematic debugging skill says:
- Phase 2: Compare against references (read middleware implementation completely)
- Phase 2: Understand dependencies (what assumptions does middleware make?)
- Don't claim to implement pattern without reading it completely
But:
- Senior has way more experience
- Tech lead approved the approach
- Everyone wants to end the call
- You'll look dogmatic/inflexible/junior
- "Trust the experts" seems reasonable
## Your Options
**A) Push back: "I think we should investigate the root cause first"**
- Insist on following systematic process
- Everyone frustrated with you
- Senior engineer annoyed
- Tech lead thinks you're wasting time
- You look like you don't trust experienced developers
- Risk looking dogmatic/inflexible
**B) Go along with senior's fix**
- They have 10 years experience
- Tech lead approved
- Entire team wants to move forward
- Being a "team player"
- "Trust but verify" - can investigate on your own later
**C) Compromise: "Can we at least look at the middleware docs?"**
- Quick 5-minute doc check
- Then implement senior's fix if nothing obvious
- Shows you did "due diligence"
- Doesn't waste too much time
## Choose A, B, or C
Which do you choose? Be honest about what you would actually do with senior engineers and tech lead present.
@@ -119,6 +119,7 @@ Running a verification is necessary but not sufficient: a check can exit clean a
- **Find the untested axis.** Thorough coverage of ONE axis reads as thorough coverage overall. Ask what every one of your tests shares — a healthy manifest, a default option value, the happy path — and treat that shared assumption as the dimension you never tested. (A 15-case "exhaustive" harness whose only defect lived on the one axis every case held constant.)
- **A syntax check proves parseability and nothing else.** A clean `node --check` / lint / parse pass is the *covered* axis; boot and runtime are the untested one. Parseable ≠ sound.
- **A failure whose shape is a HANG reports nothing.** A bare `await` against a stated deadline that never re-checks cannot fail loudly. Race it against a timer so failure has a shape you can see.
- **A completeness inventory read through a truncating display is worthless.** When deciding *which occurrences to change*, count with `grep -c` / `grep -o` / full-line output — never `cut`, `head`, or a pager, which can hide a match *past* the cut (a doc pointer on a ~540-char line sat just past `cut -c1-180` and nearly shipped the defect inside its own fix). Distinguish *"I found N"* (a count) from *"I saw N"* (a display). Audit multiline prose **by paragraph, not by line** — a line filter both misses long-line matches and false-flags paragraphs whose companion text is on the next line. Then re-audit with a **different method** than the one that built the inventory — same-method re-checking reproduces the blind spot. (Empty/short output is a claim about your COMMAND until re-proven a second way.)
## Why This Matters