Merge pull request #3 from Heretek-AI/remediate/audit-hr-6.1-5.5-regen

fix: remediate HR-6.1 + HR-5.5 via regen (64 skills, 15th tab deny)
This commit is contained in:
BillyOutlast authored and GitHub committed 2026-10-19 20:21:36 -04:00
commit 9e805ade8d
439 files changed
+5032 -409

No files matched your search

+65 -74
View File
@@ -1,92 +1,81 @@
# AUDIT_REPORT_FINDINGS: heretek-rigs
## Baseline
- Commit: `9ec0014ff44e7e174f6d7a5c74590de5f8fe664f` (from `.git/refs/heads/main`; `git log` message/date NOT RUN — shell blocked)
- Audit date (UTC): 2026-10-19 (user-supplied session date; `date -u` NOT RUN)
- Commit: `99b4420c6a2e50749c8bb0b3a8d02186b9aa2b41` (from `.git/refs/heads/main`; `git log` message/date NOT RUN — shell blocked)
- Previous run commit: `9ec0014ff44e7e174f6d7a5c74590de5f8fe664f` (prior report); tree moved, re-audited from scratch
- Audit date (UTC): 2026-10-20 (session date; `date -u` NOT RUN — shell blocked)
- Tool versions: UNKNOWN — shell blocked (`permission.rejected` on every shell call for controller and all subagents; python3/node/npm/git/jq/rg/rig/pi/docker versions not runnable)
- Dirty files: UNKNOWN (`git status --porcelain` not runnable); no worktree copy made (worktree creation needs shell)
- Scratch space: NOT CREATED (`mktemp`/worktree blocked); subagent raw notes are in-session only (no `$AUDIT_TMP/{alpha,beta,gamma}.md` files)
- Host capabilities: file-content (read-only) audit only via Read/Glob/Grep + 3 subagents (Alpha/Beta/Gamma) + 3 cross-examiners; every live check (rig/pi/docker/network/python/jsonschema/digest recompute/sabotage/bootstrap/render-seat/guard-profiles/compose) NOT RUN
- Host capabilities: file-content (read-only) audit only via Read/Glob/Grep + 3 subagents (Alpha/Beta/Gamma) + 3 cross-examiners; every live check (`rig spec validate` / `bundle check` / `agent validate` / `preflight` / `expand` / `add` / daemon up-down, `pi` seat render, `find -type l`, `jsonschema` validation, JCS/`configurationId`/`packageDigest` recompute, `render-seat.py` refusal matrix, `seed-rig.py` / `bootstrap-pi-seats.sh` in isolated `OPENRIG_HOME`, `make guard-profiles` matrix, `docker compose config`, all 12 sabotage runs, `generate-rigs.py --check-idempotent`, `verify-rigs.sh --check-only`, `audit_loop.py --self-test`, network/registry probes) NOT RUN
- Per section 0.5 + Cardinal Rule: no claim is VERIFIED without execution (ceiling is PARTIAL for static-consistent)
- Formation executed: Alpha (claims [A]), Beta (claims [B]), Gamma (claims [G]) ran concurrently with no cross-reading; cross-examination (Alpha's→Beta, Beta's→Gamma, Gamma's→Alpha) completed; all challenges returned CONFIRMED (one refinement: Alpha's patch-bypass "REMEDIATED" holds for toolchain only, not checked-in artifacts — see HR-5.5-patch)
- Formation executed: Alpha (claims [A]) + Beta (claims [B]) + Gamma (claims [G]) ran concurrently with no cross-reading; cross-examination (Alpha's→Beta-challenger, Beta's→Gamma-challenger, Gamma's→Alpha-challenger) completed; synthesis by controller with on-disk re-reads of `schemas/rigspec-keys.pinned.json:12`, `scripts/render-seat.py:398-419`, `specs/agents/languages/go-backend-eng/runtime/policy-enforcement.json:60-63`, `specs/agents/_shared/skills/executing-plans/SKILL.md:50`, `fleet/fleet.yaml:3361-3367`
## Verdict
heretek-rigs at HEAD `9ec0014` is the 51-role / 8-rig OpenRig monorepo described in the prompt, and its static shapes (fleet partition 6+11+4+6+11+6+7, schema keys/versions, permission first/last bounds, sidecar pins, exact-set networks, model/runtime pins) are internally consistent on disk. Three defects stand on static evidence, each re-verified from scratch and cross-examined (all CONFIRMED): the upstream tarball attestation is still a placeholder forcing the verify gate red on a clean tree (HR-2.1, P1, Claim 8.2 BROKEN), the `subagent-driven-development` sibling skill is still absent with dangling fleet bindings and unconditional hard script refs (HR-6.1, P2, Claim 6.1 BROKEN), and allowed `git log/show/diff` prefixes still admit patch output past `path` read-denies in every checked-in artifact even though the renderer+gate+gate-role toolchain fix has landed unmaterialized (HR-5.5-patch, P3). The prior HR-5.5 rendered-allow-superset gap is FIXED in gate (`verify-rigs.sh:577-584` subset checks; live injection UNVERIFIABLE). No live proof was possible (rig/pi/docker/python/network all blocked). The single most important fix is to attest the real `@openrig/[email protected]` tarball SHA-256 into `schemas/rigspec-keys.pinned.json:12` and run `python3 scripts/generate-rigs.py` on a networked shell host (HR-2.1 + HR-5.5-patch regen), which unblocks the green gate, the audit-loop self-test, and any reachable `STATUS: NO_FINDINGS`.
heretek-rigs at HEAD `99b4420` remains the 51-role / 8-rig OpenRig monorepo described in the prompt, and its static shapes (fleet partition 6+11+4+6+11+6+7, schema keys/versions, permission first/last bounds, sidecar pins, exact-set networks, model/runtime pins) are internally consistent on disk. The two prior-report P3 residuals are STILL OPEN on static re-verification and cross-examination could not overturn them: the `../using-superpowers/references/` prose pointer still dangles with a staged-but-unregenerated fleet binding (HR-6.1), and the `"*\t-p*"` tab deny lives in the renderer + verifier but in zero of the checked-in permission artifacts, so the tree is stale relative to its own fail-closed gate (HR-5.5). No new P0/P1/P2 was proven; a proposed new P1 for each leg was refuted/downgraded by challengers to the same two P3s (duplicate + fail-closed-gate-already-red reasoning). No live proof was possible (rig/pi/docker/python/network all blocked). The single most important fix is to run `python3 scripts/generate-rigs.py` on a networked shell host (materializing both the tab deny and the using-superpowers sibling), then re-run the section-4 live recipes plus the 12 sabotage targets with upstream attestation (tarball bytes, skill tree hashes, matcher semantics), which is the only path to `STATUS: NO_FINDINGS`.
## Prioritized Defect Matrix
| ID | Priority | Claim | Location | Summary |
|----|----------|-------|----------|---------|
| HR-2.1-pinned-still-local | P1 | 2.1 / 8.2 | `schemas/rigspec-keys.pinned.json:12` + `scripts/verify-rigs.sh:183-186` | `tarball_sha256` placeholder forces gate-red on clean tree |
| HR-6.1-missing-subagent-sibling | P2 | 6.1 | `specs/agents/_shared/skills/` (absent dir) + `fleet/fleet.yaml:2860,3359` | sibling absent; dangling seat bindings; hard script refs dangle, Native path intact |
| HR-5.5-git-patch-read-bypass | P3 | 5.3 / 5.5 | `specs/agents/security/threat-modeler/runtime/pi-permission-config.json:15-38` (allows `:24-27`, no patch denies) vs `scripts/render-seat.py:398-414` + `scripts/verify-rigs.sh:556-567` (toolchain fixed, artifacts stale) | `git log/show/diff` prefixes admit `-p` patch output past `fleet/*`+`scripts/*` read-denies on disk |
| HR-6.1-using-superpowers-prose-ref | P3 | 6.1 | `specs/agents/_shared/skills/executing-plans/SKILL.md:50` + `fleet/fleet.yaml:3366-3367` | dangling `../using-superpowers/references/` prose ref; staged fleet binding without lock/disk/regen; doc-dangles while fail-closed gate now red |
| HR-5.5-tab-p-suffix-gap | P3 | 5.5 / 5.3 | `specs/agents/languages/go-backend-eng/runtime/policy-enforcement.json:60-63` + `scripts/render-seat.py:402-419` + `scripts/verify-rigs.sh:587-603` + `scripts/gate-role.sh:69-76` | `"*\t-p*"` in renderer+verifier but 0/102 artifacts carry it (14 vs 15 denies); tab-separated `-p` un-denied on disk; stale tree fails own gate |
## Findings
### HR-2.1-pinned-still-local: upstream tarball attestation still placeholder, gate red on clean tree
- **Priority:** P1
- **Claim:** 2.1 (rig validation chain attested to upstream) + 8.2 (`verify-rigs.sh --check-only` exits 0 clean)
- **Location:** `schemas/rigspec-keys.pinned.json:12`; gate `scripts/verify-rigs.sh:183-186`; generator `scripts/generate-rigs.py:384-403` (per Alpha re-read); tgz `schemas/openrig-cli-0.6.11.tgz` absent
- **Proof:** read-only (shell blocked). `pinned.json:10-14` shows `"tarball_sha256": "PENDING_SHELL_HOST_REFRESH", "refreshed_at": null` (controller re-read this run); gate requires `re.fullmatch(r"[0-9a-f]{64}", ...)` else `fail()`; live `./scripts/verify-rigs.sh --check-only; echo $?` NOT RUN (predicted 1). No env/placeholder allowance or skip branch on this path (`CI`/`HERETEK_ALLOW_SYNTHETIC` govern a different SYNTHETIC check)
- **Raw output:** `"tarball_sha256": "PENDING_SHELL_HOST_REFRESH",` (verbatim file content); gate: `fail("schemas/rigspec-keys.pinned.json provenance.upstream_tarball.tarball_sha256 must be the 64-hex SHA-256 of the upstream tarball ...")`
- **Why it matters:** every clean-tree verify exits 1, so Claim 8.2 is false, `audit_loop.py --self-test` fails at its gate step, and the loop can never reach `STATUS: NO_FINDINGS`.
- **Remediation:** on a networked shell host from repo root: `npm pack @openrig/[email protected] && sha256sum openrig-cli-0.6.11.tgz`, record the 64-hex digest at `pinned.json` `provenance.upstream_tarball.tarball_sha256` (+ `refreshed_at`), optionally place tarball at `schemas/openrig-cli-0.6.11.tgz`, then `python3 scripts/generate-rigs.py`.
- **Verify the fix:** `./scripts/verify-rigs.sh --check-only; echo $?` -> 0; `python3 scripts/audit_loop.py --self-test; echo $?` -> 0
- **Cross-examination:** Beta challenged (re-read pin + gate 183-192 + tgz glob; checked placeholder allowance/env bypass/skip branch — all negative); CONFIRMED, P1 stands (fail-closed, documented "red by design" -> not P0; breaks top-level clean invariant -> not P2).
### HR-6.1-missing-subagent-sibling: vendored subagent-driven-development sibling absent, bindings dangling
- **Priority:** P2
- **Claim:** 6.1 — 63 skills full-fidelity incl. multi-file `subagent-driven-development` sibling required by `writing-plans`/`executing-plans` REQUIRED SUB-SKILL refs
- **Location:** `specs/agents/_shared/skills/` (62 dirs, no `subagent*` — Beta re-listed this run); `fleet/skills-lock.json` (62 entries, `grep subagent` -> No matches); `specs/agents/_shared/agent.yaml:5-129` (62 `resources.skills`); refs `specs/agents/_shared/skills/writing-plans/SKILL.md:59,200-204`, `specs/agents/_shared/skills/executing-plans/SKILL.md:53,60,121,126,236` (+ scripts `executing-plans/scripts/task-start:12,21`, `task-done:10,21` `sdd="$(cd .../../../subagent-driven-development/scripts ...)"` under `set -euo pipefail`); bindings `fleet/fleet.yaml:2860-2861` (product-director), `:3359-3360` (system-architect); verifier expects 63 at `scripts/verify-rigs.sh:251` + sibling gate `:314-356`
- **Proof:** read-only: skills-dir read returns 62 entries; `glob skills/subagent-driven-development/*` -> No files found; `grep subagent skills-lock.json` -> No matches; live `ls|wc -l` + lock-vs-disk reconcile NOT RUN. Nearest candidate `dispatching-parallel-agents/` contains zero `subagent-driven-development|sdd-workspace|task-brief` refs (no alias/proxy)
- **Raw output:** 62 dirs (`address-sanitizer/` ... `yara-rule-authoring/`); `task-start:21`: `sdd="$(cd "$(dirname "$0")/../../subagent-driven-development/scripts" && pwd)"`; `executing-plans/SKILL.md:126`: `` `../subagent-driven-development/scripts/sdd-workspace PLAN_FILE` ``; `:236`: `../subagent-driven-development/scripts/review-package`
- **Why it matters:** two seats bind a skill id with no backing directory/lock entry, and three unconditional procedural script paths (`sdd-workspace` at skill start, `review-package` at final review, `task-start`/`task-done` sdd resolution under `set -euo pipefail` with no `||` guard → immediate exit on missing dir) resolve against a nonexistent dir; plan/execute flow degrades where it touches those scripts. Verifier count+sibling gates go red by design.
- **Remediation:** vendor `obra/superpowers@bb92a77` `skills/subagent-driven-development/` (multi-file incl. `scripts/` + LICENSE) under `specs/agents/_shared/skills/subagent-driven-development/`, add `skills-lock.json` entry + `_shared/agent.yaml` `resources.skills` binding, re-run `python3 scripts/generate-rigs.py`.
- **Verify the fix:** `ls specs/agents/_shared/skills | wc -l` (=63); lock-vs-disk reconcile; `./scripts/verify-rigs.sh --check-only` -> 0
- **Cross-examination:** Gamma challenged (re-read all REQUIRE sites + both scripts + fleet bindings + `verify-rigs.sh:251,314-356`; corrected two non-existent paths cited by Beta — substance unchanged); CONFIRMED. DOWNGRADE P1->P2 SUSTAINED: `writing-plans:59` is disjunctive ("Use SDD (recommended) or executing-plans"), `:200-204` gates SDD-requirement on user choosing the subagent-driven path, and `executing-plans:49-51` documents a working no-subagent Native fallback — seats function via the Native path, so P1/seat-outage refuted. P3 refuted in turn (dangling refs + missing sibling + unconditional script failures exceed cosmetic).
### HR-5.5-git-patch-read-bypass: allowed git log/show/diff prefixes admit patch output past path read-denies (artifacts stale, toolchain fixed)
### HR-6.1-using-superpowers-prose-ref: dangling using-superpowers prose reference + staged-but-unregenerated binding
- **Priority:** P3
- **Claim:** 5.3 / 5.5 (secret/sensitive read-denies vs. role-scoped git allows)
- **Location:** `specs/agents/security/threat-modeler/runtime/pi-permission-config.json:24-27` (allows) vs `:57-58` (denies), bash `:28-37` ends at `"*)*"` with zero patch denies (controller re-read this run; identical in `policy-enforcement.json:30-44`, `exec-director`, `sabotage-qa-tester`); fleet grants `fleet/fleet.yaml:590-593` (+ ~19 roles identical); gate `scripts/verify-rigs.sh:547-567`; renderer `scripts/render-seat.py:387-414`; probes `scripts/gate-role.sh:32-40,69-73`; generator `scripts/generate-rigs.py:629-644`
- **Proof:** read-only. Every checked-in locked seat allows `"git log --oneline*"`, `"git show --stat*"`, `"git diff --stat*"`, `"git diff --name-only*"` (trailing `*` admits flag suffixes). `git log --oneline -p -- fleet/fleet.yaml` matches `"git log --oneline*"`; `-p` matches none of the 10 on-disk terminal denies — while `fleet/*` is `"deny"` in `path`. Toolchain half HAS landed since the prior run: `render-seat.py:398-414` emits `"* -p*","*--patch*","*--full-diff*","*--textconv*"` LAST; `verify-rigs.sh:556-567` mandates all 14 terminal denies + ordering; `gate-role.sh:69-70` probes both patch exfils must-deny (+ `:72` anti-over-block must-allow); `generate-rigs.py:629-644` renders via `build_seat_files` so regen materializes the fix. Consequence: checked-in specs are STALE — clean-tree `--check-only` now fails on missing terminal denies (second red cause alongside HR-2.1).
- **Raw output:** `threat-modeler:24-27` allow prefixes; `path` denies `fleet/*` (`:57`), `scripts/*` (`:58`); on-disk bash ends `"*)*": "deny"` (`:37`); renderer loop `:398-414` + gate tuple `:558` both contain the 4 patch denies
- **Why it matters:** punctures the `fleet/*` + `scripts/*` read-deny layer for locked seats on disk (orchestrator-config disclosure; charter/recon surface). Blast radius capped at tracked content — secrets live untracked in `$HERETEK_SECRETS` (4.3/4.4), and `*.env`/`*id_rsa*` direct-read denies still hold — hence P3, not higher.
- **Remediation (fail-closed):** run `python3 scripts/generate-rigs.py` on a shell host (NOT a hand-edit — materializes renderer patch denies into all 51 specs), then `./scripts/verify-rigs.sh --check-only` + `bash scripts/gate-role.sh threat-modeler` (patch probes must deny, anti-over-block must allow).
- **Verify the fix:** `bash scripts/gate-role.sh threat-modeler` with patch probes → both deny; full `./scripts/verify-rigs.sh --check-only` stays green (needs HR-2.1 attestation too)
- **Cross-examination:** Alpha challenged (re-read `:540-584`, renderer, gate-role canary+probes, all artifact maps, fleet grants, generator); CONFIRMED — STILL OPEN on disk (not FIXED), same ID kept (identical bypass family, residual documented in gate comments), P3 sustained (tracked-only; upgrade to P2 would need secret-bearing tracked content — not in evidence). Alpha's competing "REMEDIATED" verdict REFUTED as fleet-state claim (holds for renderer+gate code only).
- **Claim:** 6.1 (63/64 vendored skills full-fidelity; every skill ref resolves)
- **Location:** `specs/agents/_shared/skills/executing-plans/SKILL.md:50`; `fleet/fleet.yaml:3366-3367`
- **Proof:** read-only (shell blocked). `grep using-superpowers specs/agents/_shared/skills/executing-plans/SKILL.md` → line 50 `` `../using-superpowers/references/`). Never fabricate a dispatch; run ``; `glob specs/agents/_shared/skills/using-superpowers*` → No files found; `grep using-superpowers fleet/skills-lock.json` → zero hits; `grep using-superpowers fleet/fleet.yaml` → lines 3361-3362 (comments) + 3366 (`- id: using-superpowers`, live list content under `system-architect` `skills.shared`); `specs/agents/_shared/agent.yaml` + all `rigs/*/agents/_shared/agent.yaml` → 63 ids each, zero `using-superpowers`; live `verify-rigs.sh --check-only` NOT RUN
- **Raw output:** `` `../using-superpowers/references/`). Never fabricate a dispatch; run `` (line 50, verbatim); `fleet.yaml:3366-3367` verbatim: ` - id: using-superpowers` / ` source: superpowers`; gate `verify-rigs.sh:357-385` is an explicit HR-6.1 fail-closed gate (fence-strip + `../([a-z0-9-]+)/` match, `fail()` at :385) citing exactly this case
- **Why it matters:** a reader/seat following the executing-plans doc hits a nonexistent sibling path; fleet (declared source of truth) now promises 64 shared ids while lock/disk/generated bindings deliver 63, so source and tree disagree until regen.
- **Remediation:** on a networked shell host vendor `obra/superpowers@bb92a77:skills/using-superpowers/` (+ lock entry; `_shared/agent.yaml` binding follows from `generate-rigs.py:552-605` union), then `python3 scripts/generate-rigs.py` (expect `system-architect/agent.yaml` `uses.skills` + lock + disk to gain the 64th entry); do not hand-edit generated leaves
- **Verify the fix:** `grep -rn "using-superpowers" specs/agents/_shared/skills/ fleet/` resolves to existing dirs/lock entries; `./scripts/verify-rigs.sh --check-only` → 0
- **Cross-examination:** Gamma-challenger (vs Beta) CONFIRMED the dangle (prose not fenced: fences are the ```dot graph :68-106 and example :325-373; :50 survives `re.sub` fence-strip) and disk/lock absence, but corrected the narrative: the sibling gate is now fail-closed (suite red by inspection, not silent green) and the fleet binding is live YAML not comment-only; Beta's proposed separate P1 `HR-6.1-using-superpowers-dangling-binding` DOWNGRADED to this same P3 regen-lag (fleet 64 vs disk 63 is arithmetically real but already caught by `uses.skills` exact-equality gate :444-455 + doc-ref gate :371-385; upstream `using-superpowers` exists in `obra/superpowers@bb92a77`, so remediation is actionable) — folded here, no new ID.
### HR-5.5-tab-p-suffix-gap: tab-separated -p deny in renderer+verifier but absent from all checked-in artifacts (stale generated tree)
- **Priority:** P3
- **Claim:** 5.5 (bash terminal denies fail-closed) / 5.3 (read-deny layer)
- **Location:** `specs/agents/languages/go-backend-eng/runtime/policy-enforcement.json:60-63` (representative of all 102 files); `scripts/render-seat.py:402-419`; `scripts/verify-rigs.sh:587-603`; `scripts/gate-role.sh:69-76`
- **Proof:** read-only. Sampled bash maps show 14 denies (`"* -p*": "deny",` immediately followed by `"*--patch*": "deny",`); `grep -rn $'\t' specs/agents --include='*.json'` pattern → zero TAB denies (controller + Gamma re-read; `grep t-p` hits only `asset-pipeline` strings); `render-seat.py:413-414` verbatim `"* -p*",` / `"*\t-p*",` (15-tuple :402-418); `verify-rigs.sh:587-590` requires all 15 incl `"*\t-p*"` with terminality check :597-603; `generate-rigs.py:629-644` calls `build_seat_files` + order-preserving `write_json` (:195-197, no `sort_keys`), so regen would emit it; live matcher probes + `verify-rigs.sh --check-only` NOT RUN
- **Raw output:** `"* -p*": "deny",` then `"*--patch*": "deny",` (no `"*\t-p*"` line between; `go-backend-eng` :60-61 verbatim) vs renderer `scripts/render-seat.py:414` ` "*\t-p*",` and verifier `scripts/verify-rigs.sh:587` `_TERMINAL_BASH_DENIES = (..., "* -p*", "*\t-p*", "*--patch*", ...)`
- **Why it matters:** under the repo's own last-match-wins substring-glob model, `git log --oneline<TAB>-p -- fleet/fleet.yaml` matches the `git log --oneline*` allow but no deny (tab ≠ space), leaking tracked-content diffs past the `fleet/*` read-deny; secrets live untracked (`$HERETEK_SECRETS`, `*.env`/`*id_rsa*` direct-read denies hold), so blast radius is tracked content only, hence P3.
- **Remediation:** on a networked shell host: `python3 scripts/generate-rigs.py` (emits the TAB deny into all 102 permission files via the already-fixed renderer; expect only those files changed) then `./scripts/verify-rigs.sh --check-only` → 0 and `bash scripts/gate-role.sh threat-modeler` → tab/`-p`/`--patch`/`--full-diff`/`--textconv` all deny with path-scoped allows still allow; optionally tighten gate to assert no allow follows the terminal block (already present :597-603) and keep TAB probe :74
- **Verify the fix:** repo-wide TAB-deny present in all 102 files; `./scripts/verify-rigs.sh --check-only` exits 0
- **Cross-examination:** Alpha-challenger (vs Gamma) CONFIRMED all three legs (renderer emits TAB :413-414 with correct `json.dumps` `\t`→TAB chain; verifier requires it under `<<'PY'` heredoc; 14-vs-15 on disk; no covering TAB deny; `generate-rigs.py` regen would fix; prior legs 2/4-probe and sortedness-vs-terminality already fixed in script :69-76/:597-603) but REFUTED P1: duplicate of this same P3 ID (not a new finding), no execution per Cardinal Rule (matcher whitespace normalization untested; `verify-rigs.sh` red-run and hostile corpus NOT RUN), impact capped at tracked content — folded here as stale-regen fact, no new P1 (`HR-5.5-tab-deny-not-materialized` rejected as duplicate).
## Claim Ledger
| Claim | Status | Evidence (command or finding ID) |
|-------|--------|----------------------------------|
| 1.1 | PARTIAL | static: 51 `member_fragments` + 51 role keys + 51 `specs/agents/*/*/agent.yaml` (incl 37/51); Heretek-Crew diff NOT RUN |
| 1.2 | PARTIAL | static: 6+11+4+6+11+6+7=51, spot exactly-one-rig; full cross-product NOT RUN |
| 1.1 | PARTIAL | static: 51 role keys + 51 `specs/agents/*/*/agent.yaml` (incl 37/51); Heretek-Crew diff NOT RUN |
| 1.2 | PARTIAL | static: 6+11+4+6+11+6+7=51 member-ID counts, spot exclusivity; full uniqueness matrix NOT RUN |
| 1.3 | PARTIAL | static: 3-seat command pod + 15 pods + 51 members + rig.all-51.yaml + roster; `rig expand` NOT RUN |
| 1.4 | PARTIAL | static: 7-file shape, zero stubs (sweeps noted), `local:../../_shared`->`local:../_shared` sole delta (spot-diffed); full byte-drift diff NOT RUN |
| 2.1 | PARTIAL | static keys/version pass; live `rig spec validate` NOT RUN; attestation placeholder -> HR-2.1 (8.2) |
| 2.2 | PARTIAL | static edge kinds/qualification sampled, no cycles in checked subgraph (zero `spawned_by` edges used — legal); programmatic DAG NOT RUN |
| 2.3 | PARTIAL | static: 51x `send_text`, zero `guidance_merge`/`hooks:` in agent.yaml (include-scoped grep), lifecycle pins; `rig agent validate` NOT RUN |
| 2.4 | PARTIAL | static zero `guidance_merge` in specs+rigs agent.yaml (`behaviour.json` `guidance_merge` values are generator-emitted culture/told-files delivery, `generate-rigs.py:1058`, not startup files); live preflight/bundle NOT RUN |
| 2.5 | PARTIAL | static `copytree symlinks=False` + `is_symlink` sweep + `..`/absolute gates present; `find -type l` + `rig bundle check` NOT RUN |
| 3.1 | PARTIAL | static: 8+8+8+1 present, required-fields/consts shape OK; Draft202012Validator NOT RUN |
| 3.2 | PARTIAL | static: 64-hex digest present, pattern-conformant; JCS recompute NOT RUN |
| 3.3 | PARTIAL | static: joined-string IDs sorted (qa sample), triple-agreeing digests; disk recompute + `identity-vectors.json` replay NOT RUN |
| 4.1 | PARTIAL | static model/runtime pins on all sampled seats + member/pod fragments + agent defaults, all-omp presets; seat census + preflight NOT RUN |
| 4.2 | PARTIAL | static renderer logic (0600, `!cat`, O_NOFOLLOW, uid pin, strict default, `--pod`/phantom fail-closed); live render/bootstrap NOT RUN |
| 4.3 | PARTIAL | static `!cat`/echo-Bearer shapes in key/env/headers only (samples), refusal logic present; live refusal matrix NOT RUN |
| 4.4 | PARTIAL | static: zero `env:` in rig.yaml, only `permission_policy` lines match secret-name grep; full-repo literal scan NOT RUN |
| 5.1 | PARTIAL | static: 18x `builtin:locked` + rig defaults, 16x docs/sbom-only, zero yolo/open in shipped surface; live NOT RUN (subset-gap now FIXED in gate, live injection UNVERIFIABLE) |
| 5.2 | PARTIAL | static: `*` first / `*..*` last in both maps on samples; hostile corpus NOT RUN (note: checked-in bash maps lack the 4 patch denies the gate now mandates -> regen pending, see HR-5.5-patch) |
| 5.3 | PARTIAL | static: secret-denies + deny/timeout present, zero `ask`; live probes NOT RUN; patch-bypass -> HR-5.5-git-patch-read-bypass (P3 STILL OPEN, stale artifacts) |
| 5.4 | PARTIAL | static: 3 mut-denies on all samples, read-only AST/LSP allows, no pi-lsp@0.1.7 in shipped surface; live bypass probe NOT RUN |
| 5.5 | PARTIAL | static: bash/mcp bounds + 10 on-disk terminal denies ordered on samples (gate+renderer now mandate 14 incl. patch flags — artifacts stale); escape corpus NOT RUN; -> HR-5.5-git-patch-read-bypass (P3) |
| 6.1 | BROKEN | HR-6.1-missing-subagent-sibling |
| 6.2 | PARTIAL | static pins exact, zero r2mcp/aws-mcp/:latest in catalog (`replaces:` notes only), read-only flags; liveness NOT RUN |
| 7.1 | PARTIAL | static 8x 127.0.0.1 + 9 pinned images, zero 0.0.0.0/bare in shipped surface; compose/bind check NOT RUN |
| 1.4 | PARTIAL | static: 7-file shape sampled, zero stubs in sampled dirs, `local:../../_shared`→`local:../_shared` sole delta in sampled pair; full byte-drift diff NOT RUN |
| 2.1 | PARTIAL | static keys/version + 64-hex attestation shape FIXED; live `rig spec validate` + tarball-byte attestation NOT RUN |
| 2.2 | PARTIAL | static edge kinds/qualification sampled, DFS gate present; programmatic full-DAG NOT RUN |
| 2.3 | PARTIAL | static: 51x `send_text`, zero `guidance_merge`/`hooks:` in agent.yaml; `rig agent validate` NOT RUN |
| 2.4 | PARTIAL | static zero `guidance_merge` in specs+rigs agent.yaml; live preflight/bundle NOT RUN |
| 2.5 | PARTIAL | static `copytree symlinks=False` + `is_symlink` sweep + `..`/absolute gates; `find -type l` + `rig bundle check` NOT RUN |
| 3.1 | UNVERIFIABLE | presence/shape static only; Draft202012Validator NOT RUN (shell blocked) |
| 3.2 | UNVERIFIABLE | 64-hex shape only; JCS recompute NOT RUN |
| 3.3 | UNVERIFIABLE | joined-string/digest shapes + identity-vectors constants static; disk recompute + replay NOT RUN |
| 4.1 | PARTIAL | static model/runtime pins sampled + all-omp presets; seat census + preflight NOT RUN |
| 4.2 | PARTIAL | static renderer logic (0600, `!cat`, O_NOFOLLOW, uid pin, strict default); live render/bootstrap NOT RUN |
| 4.3 | PARTIAL | static `!cat`/echo-Bearer shapes in key/env/headers only, refusal logic present; live refusal matrix NOT RUN |
| 4.4 | PARTIAL | static: zero `env:` in rigs rig.yaml, only prose/placeholder secret-name hits; full literal scan NOT RUN |
| 5.1 | PARTIAL | static: 16x readonly_charter + sampled `builtin:locked`, zero yolo/open in shipped surface; full 18-seat census + live NOT RUN |
| 5.2 | PARTIAL | static: `*` first / `*..*` last in both maps on samples; hostile corpus NOT RUN |
| 5.3 | PARTIAL | static: secret-denies + deny/timeout present, zero `ask`; live probes NOT RUN; tab residual → HR-5.5-tab-p-suffix-gap (P3) |
| 5.4 | PARTIAL | static: 102/102 mut-denies, read-only AST/LSP allows, no pi-lsp@0.1.7 in shipped surface; live bypass probe NOT RUN |
| 5.5 | PARTIAL | static: bash/mcp bounds present but 14/15 terminal denies on disk (stale regen); escape corpus NOT RUN; → HR-5.5-tab-p-suffix-gap (P3) |
| 6.1 | PARTIAL | static: 63 lock entries + 63 skills + multi-file SDD + 6 SOP skills; upstream fidelity UNVERIFIABLE; → HR-6.1-using-superpowers-prose-ref (P3) |
| 6.2 | PARTIAL | static pins exact, zero r2mcp/aws-mcp/:latest in catalog, read-only flags, liveness labels; registry existence NOT RUN |
| 7.1 | PARTIAL | static 8x 127.0.0.1 + 9 pinned images, zero 0.0.0.0/bare; compose/bind check NOT RUN |
| 7.2 | PARTIAL | static 20-toggle exact set `"0"` + 0.5.0 + :ro; proxy probe NOT RUN |
| 7.3 | PARTIAL | static exact-set networks + ro mounts + guard logic; live matrix NOT RUN |
| 8.1 | UNVERIFIABLE | idempotence NOT RUN (shell blocked); static sorted()/--check-idempotent features noted |
| 8.2 | BROKEN | HR-2.1 placeholder forces exit 1 on clean tree (plus stale patch-deny artifacts second red cause) |
| 8.3 | UNVERIFIABLE | self-test NOT RUN; static evaluator logic reads fail-closed (7 vectors) |
| 8.4 | PARTIAL | all 8 deliverables present non-empty; full placeholder sweep NOT RUN (adjacent: `LICENSE.md:1` is literally `PLACEHOLDER` — out of claim scope, noted for human) |
| 8.1 | UNVERIFIABLE | idempotence NOT RUN (shell blocked); static `--check-idempotent` + sorted()/hash features noted |
| 8.2 | UNVERIFIABLE | live exit NOT RUN; clean-tree currently red by inspection (tab-deny + using-superpowers gates); gate-shape passes statically otherwise |
| 8.3 | UNVERIFIABLE | self-test NOT RUN; static evaluator reads fail-closed (7 vectors) |
| 8.4 | PARTIAL | all 8 deliverables present non-empty; full placeholder sweep NOT RUN |
## Sabotage Results
| Invariant | One-line sabotage (file:line, before -> after) | Suite result | Caught? |
@@ -97,7 +86,7 @@ heretek-rigs at HEAD `9ec0014` is the 51-role / 8-rig OpenRig monorepo described
| 2.4 guidance_merge | `send_text` -> `guidance_merge` (exec-director agent.yaml) | NOT RUN | UNVERIFIABLE (static: specs+vendored guidance_merge gates) |
| 2.5 symlink | clean -> `agents/link.md` symlink | NOT RUN | UNVERIFIABLE (static: is_symlink sweep) |
| 3.2 bodyDigest flip | `registry/status.json` digest -> flipped hex char | NOT RUN | UNVERIFIABLE (static: digest-equality gate) |
| 4.3 sk-live | `runtime/mcp.json` `!cat /...` -> `sk-live-123456` | NOT RUN | UNVERIFIABLE (static: literal-secret regex gate, `!`-in-args die) |
| 4.3 sk-live | `runtime/mcp.json` `!cat /...` -> `sk-live-123456` | NOT RUN | UNVERIFIABLE (static: literal-secret regex gate) |
| 5.1 yolo | `builtin:locked` -> `builtin:yolo` | NOT RUN | UNVERIFIABLE (static: policy gates, LOCKED_18_ROLES) |
| 5.2 remove *..* | `policy-enforcement.json` `*..*:deny` -> removed | NOT RUN | UNVERIFIABLE (static: bounds/order gates) |
| 5.4 code_rewrite allow | `code_rewrite:deny` -> `allow` | NOT RUN | UNVERIFIABLE (static: mut-deny gate) |
@@ -107,17 +96,19 @@ heretek-rigs at HEAD `9ec0014` is the 51-role / 8-rig OpenRig monorepo described
## Regression Ledger
| Previous finding ID | Previous priority | Status now: FIXED / STILL OPEN / REGRESSED / NO LONGER APPLICABLE | Evidence |
|-----|-------------------|--------|----------|
| HR-2.1-pinned-still-local | P1 | STILL OPEN | `pinned.json:12` placeholder + gate `verify-rigs.sh:183-186` unchanged (controller + Alpha + Beta-challenger all re-read this run) |
| HR-6.1-missing-subagent-sibling | P2 (downgraded from P1 on prior cross-exam) | STILL OPEN (P2 sustained: absence confirmed, REQUIRED shown disjunctive, hard script refs unconditional) | 62 skill dirs, no `subagent*`; lock grep no match; dangling bindings `fleet.yaml:2860-2861,3359-3360`; disjunctive REQUIRE `writing-plans:59,200-204` + fallback `executing-plans:49-51`; unconditional refs + `task-start/task-done:21` (Beta + Gamma-challenger re-verified) |
| HR-7.3-network-exclusivity-gap | P2 (fixed) | FIXED retained | static exclusive exact-set networks + ro mounts + guard retained (`docker-compose.sidecars.yml`, `Makefile:46-54`); live matrix NOT RUN |
| HR-5.5-rendered-allow-superset-gap | P2 (new on prior run) | FIXED (in gate; live injection UNVERIFIABLE) | `verify-rigs.sh:568-584` now asserts rendered bash/path_write allows ⊆ fleet-declared sets (surplus fails); `:530-539` mcp bound-set + `:481` rendered↔rendered equality; Alpha + Gamma + both challengers CONFIRMED |
| HR-5.5-git-patch-read-bypass | P3 (new on prior run) | STILL OPEN (toolchain landed, artifacts stale; P3 sustained) | on-disk bash maps still end `"*)*"` with zero patch denies (`threat-modeler:15-38` controller re-read); renderer `render-seat.py:398-414` + gate `:556-567` + probes `gate-role.sh:32-40,69-73` landed but unmaterialized — regen pending (Gamma + Alpha-challenger CONFIRMED) |
| HR-6.1-using-superpowers-prose-ref | P3 | STILL OPEN (evolved: fleet binding staged, regen pending; fail-closed gate now present) | `executing-plans/SKILL.md:50` verbatim retained; zero `using-superpowers*` dirs; zero lock hits; `fleet.yaml:3366` live binding without regen; Beta + Gamma-challenger CONFIRMED |
| HR-5.5-tab-p-suffix-gap | P3 | STILL OPEN (morphed to stale-regen; scripts fully remediated, artifacts stale) | on-disk 14/102 denies vs renderer+verifier 15 (`render-seat.py:414`, `verify-rigs.sh:587`); `go-backend-eng:60-61` verbatim; Gamma + Alpha-challenger CONFIRMED fact, P1 duplicate REFUTED |
| HR-2.1-pinned-still-local | P1 | FIXED (shape; hash-byte truth UNVERIFIABLE) | `pinned.json:12` 64-hex `289dc007…267f6` + `refreshed_at`; Alpha + Beta + challengers CONFIRMED shape; byte-truth needs `npm pack && sha256sum` on shell host |
| HR-6.1-missing-subagent-sibling | P2 | FIXED retained (counts/bindings/scripts; upstream fidelity UNVERIFIABLE) | `subagent-driven-development/` multi-file + lock + fleet bindings; challengers CONFIRMED |
| HR-7.3-network-exclusivity-gap | P2 (fixed prior) | FIXED retained | static exact-set networks + ro mounts + guard retained; live matrix NOT RUN |
| HR-5.5-rendered-allow-superset-gap | P2 (fixed prior) | FIXED retained | subset gates present; live injection UNVERIFIABLE |
| HR-5.5-git-patch-read-bypass | P3 | FIXED (artifacts materialized as 14 denies; residual split to HR-5.5-tab-p-suffix-gap) | 14 patch/terminal denies on disk; 3 challengers CONFIRMED on-disk fix; tab residual → HR-5.5-tab-p-suffix-gap |
## Not Audited / Unverifiable
- All live checks NOT RUN (shell `permission.rejected` on controller + all subagents): `rig spec validate` / `bundle check` / `agent validate` / `preflight` / `expand` / `add` / daemon up-down; `pi` seat render; `find -type l`; `jsonschema` validation; JCS/`configurationId`/`packageDigest` recomputes; `render-seat.py` refusal matrix; `seed-rig.py` / `bootstrap-pi-seats.sh` in isolated `OPENRIG_HOME`; `make guard-profiles` matrix; `docker compose config`; all 12 sabotage runs; `generate-rigs.py --check-idempotent`; `verify-rigs.sh --check-only`; `audit_loop.py --self-test`.
- No `$AUDIT_TMP` scratch/worktree created or cleaned (blocked); real-checkout dirtiness unverified via shell — human must confirm `git status --porcelain` shows only this report (+ prompt file if untracked). Commit read from `.git/refs/heads/main` (`9ec0014`); commit message/date not re-read (no shell).
- No `$AUDIT_TMP` scratch/worktree created or cleaned (blocked); real-checkout dirtiness unverified via shell — human must confirm `git status --porcelain` shows only this report (+ prompt file if untracked). Commit read from `.git/refs/heads/main` (`99b4420`); commit message/date not re-read (no shell).
- Coverage: all 30 claim IDs have a ledger status (Alpha 10 + Beta 10 + Gamma 10; ceiling PARTIAL without execution). Finding IDs stable (`HR-<claim-id>-<slug>`) for next-run matching.
- Human must provide: networked shell host with `@openrig/[email protected]`, pi 1.3.0, loopback daemon, then re-run section-4 recipes, the 12 sabotage targets, the superset-injection probe, and the `gate-role.sh threat-modeler` patch probes; first actions are the HR-2.1 tarball attestation + `python3 scripts/generate-rigs.py` regen (materializes patch denies + any skill vendoring).
- Human must provide: networked shell host with `@openrig/[email protected]`, pi 1.3.0, loopback daemon, then run section-4 recipes, the 12 sabotage targets, `python3 scripts/generate-rigs.py` regen (tab deny + using-superpowers), the tab-suffix + `--full-diff`/`--textconv` probes, the upstream `using-superpowers` check, and the `npm pack @openrig/[email protected]` + `obra/superpowers@bb92a77` tree-hash attestations.
## Final Loop Sentinel
STATUS: FINDINGS_DETECTED
+5 -5
View File
@@ -76,13 +76,13 @@ graph TD
- Verify zero `guidance_merge` entries exist in any `agent.yaml` (`startup.files`), preventing the shared `<cwd>/AGENTS.md` overwrite bug, and confirm all 6 OpenRig core SOP skills (`openrig-operating-model`, `mission-slice-sop`, `delegating-work`, `queue-handoff`, `refocusing`, `seat-continuity-and-handover`) are projected via `resources.skills`.
### Subagent Beta: Architecture, 51-Role Parity, Cryptographic Digests & Supply Chain Auditor
* **Focus**: "Are all 51 roles from `Heretek-Crew` and 63 vendored skills 100% accounted for without truncation, do all v1 JSON Schemas validate, do cryptographic digests match disk, do the canonicalization rules replay the `identity-vectors.json` shape fixtures, and are all package/image pins real?"
* **Focus**: "Are all 51 roles from `Heretek-Crew` and 64 vendored skills 100% accounted for without truncation, do all v1 JSON Schemas validate, do cryptographic digests match disk, do the canonicalization rules replay the `identity-vectors.json` shape fixtures, and are all package/image pins real?"
* **Methodology**:
- Cross-check `fleet/fleet.yaml`, `specs/agents/<domain>/<role-slug>/`, and Rigs 1–7 (`rigs/*/rig.yaml`) against all 51 roles in `Heretek-Crew` (specifically verifying Role 37 `static-analysis-lead` in Rig 6 and Role 51 `ai-red-teamer` in Rig 7, with partition counts 6 + 11 + 4 + 6 + 11 + 6 + 7 = 51).
- Verify zero byte-drift between `specs/agents/<domain>/<role-slug>/{guidance,startup,runtime}` and every materialized `rigs/<rig-slug>/agents/<role-slug>/` copy, and verify `python3 scripts/generate-rigs.py` is 100% deterministic (`git status --porcelain` empty after re-run).
- Validate all 8 `rigs/*/configurations.yaml`, 8 `registry/views/*/behaviour.json`, 8 `registry/entries/*.yaml`, and `registry/status.json` against `schemas/*.v1.schema.json` using `jsonschema.Draft202012Validator`.
- Recompute `configurationId` (UTF-16 code-unit sort over `pod.member=runtime`), `packageDigest` (`openrig.package-digest/v1` over `JSON.stringify(path) + "\t" + sha256 + "\n"` sorted by UTF-16 code units), and `registry/status.json` `bodyDigest` (SHA-256 over RFC 8785 JCS canonical JSON) and prove they match the repository's files byte-for-byte; replay the `identity-vectors.json` shape fixtures (UTF-16 order, JCS canonical form, coverage/algorithm constants) separately — that file pins canonicalization rules, not per-rig digests.
- Verify all 63 vendored skills in `specs/agents/_shared/skills/<id>/` against `fleet/skills-lock.json` (`obra/superpowers@bb92a77` full-fidelity directories (including upstream single-file skills where upstream is single-file, and the multi-file `subagent-driven-development` sibling required by the `writing-plans`/`executing-plans` REQUIRED SUB-SKILL refs), `trailofbits/skills@5c99c03` unmodified CC-BY-SA-4.0 with LICENSE, `getsentry/skills@f57ada2`, `anthropics/skills@dbd4588`, `vercel-labs/agent-skills@063bee9`, `@openrig/[email protected]`), and confirm every pin in `fleet/mcp-servers.yaml` and `fleet/fleet.yaml` exists (zero `r2mcp==0.2.5`, zero `aws-mcp`, zero duplicate `[email protected]`, zero `pi-subagents`).
- Verify all 64 vendored skills in `specs/agents/_shared/skills/<id>/` against `fleet/skills-lock.json` (`obra/superpowers@bb92a77` full-fidelity directories (including upstream single-file skills where upstream is single-file, the multi-file `subagent-driven-development` sibling required by the `writing-plans`/`executing-plans` REQUIRED SUB-SKILL refs, and the `using-superpowers` sibling required by the `executing-plans` `../using-superpowers/references/` per-platform pointer), `trailofbits/skills@5c99c03` unmodified CC-BY-SA-4.0 with LICENSE, `getsentry/skills@f57ada2`, `anthropics/skills@dbd4588`, `vercel-labs/agent-skills@063bee9`, `@openrig/[email protected]`), and confirm every pin in `fleet/mcp-servers.yaml` and `fleet/fleet.yaml` exists (zero `r2mcp==0.2.5`, zero `aws-mcp`, zero duplicate `[email protected]`, zero `pi-subagents`).
### Subagent Gamma: Security, Permission Bypass, Extension Tool Containment & Sidecar Isolation Auditor
* **Focus**: "Can any seat bypass `path_write` via `..` traversal or mutating AST/LSP extension tools (`code_rewrite`, `lsp_rename`, `lsp_code_actions`), can any read-only seat mutate code, can secrets leak, or are sidecars exposed?"
@@ -130,10 +130,10 @@ graph TD
* **Claim 5.2 [G][S]**: Every seat's `extensions/pi-permission-system/config.json` starts `path_write` with `"*": "deny"`, explicitly denies `AGENTS.md`, `*/AGENTS.md`, `.git/*`, `*/.git/*`, `.pi/*`, `*/.pi/*`, `.agents/*`, `*/.agents/*`, `fleet/*`, `scripts/*`, and places `"*..*": "deny"` as the **last** key in both `path_write` and `path` so `..` traversal attempts are always denied.
* **Claim 5.3 [G][S]**: Every seat's `extensions/pi-permission-system/config.json` denies secret reads (`*.env`, `*.env.*` except `*.env.example`, `*.pem`, `*.key`, `*id_rsa*`, `*kubeconfig*`, `*/secrets/*`, `*.pat`, `*.uri`, `*.profile`, `*.region`, `*.host`, `*.password`, `*.credentials`, `*.config`, `*.url`, `*.user`), sets `external_directory: "deny"` and `promptTimeoutMs: 60000`, and contains zero `"ask"` rules.
* **Claim 5.4 [G][S]**: Every seat's `extensions/pi-permission-system/config.json` explicitly sets mutating AST/LSP extension tools (`"code_rewrite": "deny"`, `"lsp_rename": "deny"`, `"lsp_code_actions": "deny"`) to `"deny"` so `ToolKind = "extension"` tools from `[email protected]` cannot bypass `path_write`, while the 21 code-analysis/builder seats allow only read-only AST/LSP tools (`ast_grep`, `ast_search`, `code_overview`, `lsp_diagnostics`, `lsp_hover`, `lsp_definition`, `lsp_references`, `lsp_symbols`, `lsp_completions`) and never load the duplicate `[email protected]` package.
* **Claim 5.5 [G][S]**: Every seat's `bash` map starts with `"*": "deny"` followed only by role-scoped allow patterns (with zero `git diff/log/show --output=*` write escapes or arbitrary interpreters on locked seats) and ends with the terminal denies `"*--output*"`, `"*;*"`, `"*|*"`, `"*>*"`, `"*<*"`, `"*&*"`, `"*`*", `"*$*"`, `"*(*"`, `"*)*"`, `"* -p*"`, `"*--patch*"`, `"*--full-diff*"`, `"*--textconv*"` (last-match-wins, so chained/redirection/patch-output suffixes deny even on allowed prefixes). Every seat's rendered `bash`/`path_write` allow-sets are subsets of the fleet-declared `bash_allow`/`path_write` sets (a hand-injected allow in a generated permission file fails the gate), and `mcp` starts with `"*": "deny"` followed only by `<server>: "allow"` for servers bound to that role.
* **Claim 5.5 [G][S]**: Every seat's `bash` map starts with `"*": "deny"` followed only by role-scoped allow patterns (with zero `git diff/log/show --output=*` write escapes or arbitrary interpreters on locked seats) and ends with the terminal denies `"*--output*"`, `"*;*"`, `"*|*"`, `"*>*"`, `"*<*"`, `"*&*"`, `"*`*", `"*$*"`, `"*(*"`, `"*)*"`, `"* -p*"`, `"*\t-p*"`, `"*--patch*"`, `"*--full-diff*"`, `"*--textconv*"` (last-match-wins, so chained/redirection/patch-output suffixes deny even on allowed prefixes, with no allow key following the terminal-deny block). Every seat's rendered `bash`/`path_write` allow-sets are subsets of the fleet-declared `bash_allow`/`path_write` sets (a hand-injected allow in a generated permission file fails the gate), and `mcp` starts with `"*": "deny"` followed only by `<server>: "allow"` for servers bound to that role.
### Domain 6: 63 Vendored Skills & Curated MCP Catalog
* **Claim 6.1 [B][S]**: `specs/agents/_shared/agent.yaml` (and `rigs/*/agents/_shared/agent.yaml`) vendors all 63 shared skills under `specs/agents/_shared/skills/<id>/` with valid `SKILL.md` frontmatter and `LICENSE`, matching `fleet/skills-lock.json`, including all 6 OpenRig core SOP skills (`openrig-operating-model`, `mission-slice-sop`, `delegating-work`, `queue-handoff`, `refocusing`, `seat-continuity-and-handover`) under `resources.skills` and full-fidelity `obra/superpowers@bb92a77` skill directories (including upstream single-file skills where upstream is single-file, and the multi-file `subagent-driven-development` sibling required by the `writing-plans`/`executing-plans` REQUIRED SUB-SKILL refs).
### Domain 6: 64 Vendored Skills & Curated MCP Catalog
* **Claim 6.1 [B][S]**: `specs/agents/_shared/agent.yaml` (and `rigs/*/agents/_shared/agent.yaml`) vendors all 64 shared skills under `specs/agents/_shared/skills/<id>/` with valid `SKILL.md` frontmatter and `LICENSE`, matching `fleet/skills-lock.json`, including all 6 OpenRig core SOP skills (`openrig-operating-model`, `mission-slice-sop`, `delegating-work`, `queue-handoff`, `refocusing`, `seat-continuity-and-handover`) under `resources.skills` and full-fidelity `obra/superpowers@bb92a77` skill directories (including upstream single-file skills where upstream is single-file, the multi-file `subagent-driven-development` sibling required by the `writing-plans`/`executing-plans` REQUIRED SUB-SKILL refs, and the `using-superpowers` sibling required by the `executing-plans` `../using-superpowers/references/` per-platform pointer; every `../<id>/` doc ref outside fenced code blocks resolves to a vendored sibling directory).
* **Claim 6.2 [B][S]**: Every MCP server in `fleet/mcp-servers.yaml` is pinned to an exact package version in the catalog (including `radareorg/[email protected]` with `-R` and `awslabs.aws-api-mcp-server==1.5.6` with `READ_OPERATIONS_ONLY=true`, and zero `r2mcp==0.2.5`, `aws-mcp`, or `:latest` tags), with per-seat `runtime/mcp.json` resolving pins at seed time; liveness exceptions honestly labeled in-catalog (`semgrep: run-failed-here`, `radare2: not-run`) are not silent pins, and read-only modes/flags are enforced (`--read-only`, `--access-mode=restricted`, `CLICKHOUSE_ALLOW_WRITE_ACCESS=false`).
### Domain 7: Sidecar Docker Compose & Network Segmentation
+418
View File
@@ -9685,3 +9685,421 @@ replaced with literals, no secrets/`OPENRIG_*` in `rig.yaml` `env:`, no proxy
`AUDIT_REPORT_FINDINGS.md` left untouched; `scripts/audit_loop.py` must spawn
the next triad audit (expect `STATUS: NO_FINDINGS` on re-audit: all three HR
IDs remediated and gate green).
## 2026-10-20 — Automated remediation pass (PROMPT_FLEET_AUDIT_REMEDIATION.md, HR-6.1-using-superpowers-prose-ref + HR-5.5-tab-p-suffix-gap)
Execution context: OpenCode file-tool-only run. Reading order followed:
`AUDIT_REPORT_FINDINGS.md` → `docs/OPENRIG_MUSE_GO_ARCHITECTURE.md` →
`PROMPT_SPOONFEEDER_OPENCODE_IMPLEMENTATION.md` (M0–M4 excerpts, toolchain
files authoritative) → `fleet/fleet.yaml` + `fleet/mcp-servers.yaml` +
`scripts/generate-rigs.py` + `scripts/render-seat.py` +
`scripts/verify-rigs.sh` + `scripts/gate-role.sh` + `tests/test_render_seat.py`
+ `identity-vectors.json` + `PROMPT_ADVERSARIAL_FLEET_AUDIT.md`.
`default.shell` probes (`python3 ./scripts/generate-rigs.py`, then `true`)
each returned
`{"type":"permission.rejected","message":"This non-interactive run cannot ask the user for permission..."}`
(2 attempts, 0 blind retries; stop per hard rule 4 well before 3). Therefore
`python3 scripts/generate-rigs.py`, `./scripts/verify-rigs.sh --check-only`,
`./scripts/bootstrap-pi-seats.sh --all --dry-run`, and
`python3 ./scripts/audit_loop.py --self-test` could NOT be executed here, and
the regen that materializes the two fixes below (64th skill + 15th terminal
deny across all 51 seats + refreshed digests) is PENDING on a shell host. No
`STATUS: NO_FINDINGS` claimed here; `scripts/audit_loop.py` must spawn the
next triad audit after the gate turns green. Every finding re-verified by
`Read`/`Grep` per the Cardinal Rule. `AUDIT_REPORT_FINDINGS.md` untouched.
### Reproduction (Proof commands re-run via file tools)
- HR-6.1: `Read specs/agents/_shared/skills/executing-plans/SKILL.md:47-51`
→ line 50 `` `../using-superpowers/references/` `` verbatim;
`Read specs/agents/_shared/skills/` → 63 entries, no `using-superpowers*`;
`Grep using-superpowers fleet/` → zero lock hits (only the 1
`specs/.../SKILL.md:50` prose hit repo-wide); `Read
.scratch/vendor/obra_superpowers/skills/` → 15 entries INCLUDING
`using-superpowers/` (with `references/` holding `pi-tools.md` et al),
confirming the ref is a valid upstream sibling omitted from the vendored
subset. Gate blind spot CONFIRMED: `verify-rigs.sh:337-356` checks only
`REQUIRED ... superpowers:<id>` refs and `\.\./([a-z0-9-]+)/scripts/`
paths — a `../<id>/references/` prose ref escapes both. REPRODUCED.
- HR-5.5: `Read specs/agents/security/threat-modeler/runtime/pi-permission-config.json:28-41`
(sampled shape; full 51-seat re-read NOT RUN — shell blocked) +
`Read render-seat.py:398-414` terminal tuple ending `* -p*` (space-anchored)
+ `Read verify-rigs.sh:558-567` sortedness-only order gate +
`Read gate-role.sh:69-70` only `-p`/`--patch` probes. Tab bypass, 2/4-flag
probe gap, and order-gate weakness all CONFIRMED on disk. REPRODUCED.
### P3 — HR-6.1-using-superpowers-prose-ref (FIXED in source; regen pending)
- Root cause: `executing-plans` is vendored full-fidelity from
`obra/superpowers@bb92a77`, whose upstream tree contains the
`using-superpowers/` sibling (with the per-platform `references/`,
including `pi-tools.md` relevant to our Pi runtime). The fleet's shared
bindings never pulled that sibling into the vendored subset (63 skills),
so the upstream prose pointer at SKILL.md:50 dangles and the gate's two
patterns both miss the `../<id>/references/` shape.
- Files modified (canonical catalog + generator-side gate, never the
generated leaf — hard rule 1):
- `fleet/fleet.yaml` (system-architect `shared:`): added
`- id: using-superpowers / source: superpowers` with an
`HR-6.1-using-superpowers-prose-ref` comment. System-architect is the
only role binding `executing-plans`; the generator unions it into the
shared pool, so the next regen vendors 64 skills, extends
`fleet/skills-lock.json` (new tree-hash entry), `_shared/agent.yaml`
`resources.skills`, and system-architect `uses.skills`. No
`builtin:locked` touched, no upstream file edited (fidelity preserved).
- `scripts/verify-rigs.sh`: count gate `63 → 64` (lock + disk +
header comment); new fail-closed sibling-doc-ref block scans every
`specs/agents/_shared/skills/*/SKILL.md`, strips fenced code blocks
(so `typescript-astro` ```astro code samples with
`'../components/...'` never false-positive), and fails on any
`../([a-z0-9-]+)/` ref with no vendored sibling directory. Verified by
reading that all other current SKILL.md-root `../` refs resolve
(`subagent-driven-development` → `requesting-code-review`,
`executing-plans` → `subagent-driven-development`,
`requesting-code-review`) or are fenced.
- `scripts/generate-rigs.py` docstring: `63 → 64` shared skills.
- `PROMPT_ADVERSARIAL_FLEET_AUDIT.md` (§Beta focus, §Beta methodology,
Domain 6 header + Claim 6.1): `63 → 64`, with the `using-superpowers`
sibling named as required by the `executing-plans`
`../using-superpowers/references/` pointer plus the every-`../<id>/`-resolves
invariant.
- Verification (TO RUN on shell host):
`HERETEK_RIGS_ALLOW_DIRTY=1 python3 scripts/generate-rigs.py`
(expect `... 64 shared skills ...`);
`ls specs/agents/_shared/skills | wc -l` → 64;
`grep -rn "using-superpowers" specs/agents/_shared/skills/ fleet/` →
lock entry + vendored dir + fleet binding;
`./scripts/verify-rigs.sh --check-only` → exit 0;
sabotage (scratch copy: `rm -rf specs/agents/_shared/skills/using-superpowers`)
→ gate exits 1 via the new sibling-doc-ref block (hard-rule-2 style
proof). Could NOT execute here (`permission.rejected`).
- Status: HARDENED in source; REGEN + EXECUTION PENDING shell.
### P3 — HR-5.5-tab-p-suffix-gap (FIXED in source; regen + live-pi proof pending)
- Root cause: three legs, all confirmed on disk: (1) the patch-deny
`"* -p*"` anchors on a literal space, so
`git log --oneline<TAB>-p -- fleet/fleet.yaml` matches the
`git log --oneline*` allow but no deny under last-match-wins
substring-glob semantics (`--patch`/`--full-diff`/`--textconv` denies
need no space anchor and already cover tab separators); (2)
`gate-role.sh` probes only 2/4 patch flags (`-p`, `--patch`);
(3) `verify-rigs.sh` asserts terminal denies are sorted relative to
each other, not that no `allow` follows them.
- Files modified:
- `scripts/render-seat.py`: added `"*\t-p*"` to the terminal-deny
tuple (after `"* -p*"`) + comment documenting the tab gap (JSON
`\t` decodes to TAB at match time). Fleet allows verified
metachar-free, so the clean fleet renders unchanged except the added
deny; all 51 seats gain a 15th terminal deny on regen.
- `scripts/verify-rigs.sh`: `_TERMINAL_BASH_DENIES` gains `"*\t-p*"`;
order gate gains a terminality assert (`max(allow_idx) >
min(term_idx)` → fail: no allow may follow the terminal-deny block,
a hand-injected trailing allow flips the gate); renderer-emit check
gains `'"*\t-p*"'`.
- `scripts/gate-role.sh`: added tab-separated
`git log --oneline\t-p` deny probe (JSON `\t` → TAB) plus the two
missing flag probes (`git log --oneline --full-diff`,
`git show --textconv HEAD`) — 4/4 patch flags now live-probed.
- `tests/test_render_seat.py`: expected terminal denies gain
`"*\t-p*"`.
- `PROMPT_ADVERSARIAL_FLEET_AUDIT.md` Claim 5.5: terminal-deny list
gains `"*\t-p*"` + the no-allow-follows-the-block invariant.
- Verification (TO RUN on shell host):
`python3 scripts/generate-rigs.py` then
`bash scripts/gate-role.sh threat-modeler` → tab `-p`,
`--full-diff`, `--textconv` probes all `ok ... deny`, anti-overblock
allows (`git log --oneline -- fleet/fleet.yaml` modulo the documented
`fleet/*` path-deny over-block, `git status --short`) still allow;
`./scripts/verify-rigs.sh --check-only` → exit 0;
sabotage trio in a scratch copy (delete `"*\t-p*"` from one seat's
`pi-permission-config.json`; append a trailing `"zzz-evil*": "allow"`
after the terminal block; drop the tab probe expectation) → each flips
the gate 0→1. Live matcher semantics (`\t` glob support in
`@gotgenes/[email protected]`) decided by the hostile-corpus
run through installed `pi`. Could NOT execute here.
- Status: HARDENED in source; REGEN + LIVE PROOF PENDING shell/pi.
### Sabotage coverage note (remediation hard rule 2)
This audit's Sabotage Results table reports every invariant as UNVERIFIABLE
(shell blocked, subjects present but live runs blocked) — none as survived
(`Caught? = No`) — so no rule-2 reactive check was triggered. Proactively,
this pass adds fail-closed gate coverage for both findings' exact gaps:
the `../<id>/`-doc-ref sibling gate (HR-6.1) and the tab-deny + 4/4-probe +
terminality gate (HR-5.5). Scratch-copy sabotage proofs for both are
specified above and MUST be run on a shell host (delete-vendored-sibling →
exit 1; delete-tab-deny / trailing-allow → exit 1).
### Verification gate (all BLOCKED here — exact commands + verbatim outputs)
```bash
python3 scripts/generate-rigs.py
# -> NOT RUN: {"type":"permission.rejected","message":"This non-interactive run cannot ask the user for permission, so the request was rejected. Continue without this action."}
./scripts/verify-rigs.sh --check-only
# -> NOT RUN: same permission.rejected (gate never probed beyond the generate attempt + `true` probe; 0 blind retries per hard rule 4)
./scripts/bootstrap-pi-seats.sh --all --dry-run
# -> NOT RUN: same permission.rejected (not retried — same error class)
python3 ./scripts/audit_loop.py --self-test
# -> NOT RUN: same permission.rejected (not retried — same error class)
python3 scripts/generate-rigs.py # second run idempotency
# -> NOT RUN: same permission.rejected
```
Deterministic idempotency (`git diff` after second generate) UNTESTABLE here.
Hard-rule stop condition NOT triggered (2 shell attempts, 0 blind retries on
same fix). Pre-regen gate state is INTENTIONALLY red-by-design: fleet
declares 64 skills / 15 terminal denies while disk still carries 63 skills /
14 denies until the shell host regens — fail-closed, not a regression.
No security check weakened or skipped, no `builtin:locked` touched, no
`*..*` deny removed (still LAST in both maps), no
`code_rewrite/lsp_rename/lsp_code_actions` deny removed, no `guidance_merge`
introduced into `agent.yaml` `startup.files`, no `!cat` replaced with
literals, no secrets/`OPENRIG_*` in `rig.yaml` `env:`, no proxy `0->1`, no
`0.0.0.0`, no `:latest`, no symlinks, no generated leaf hand-edited (all
edits are canonical catalog / toolchain / prompt-claim / unit-test; digests
recompute on regen).
`AUDIT_REPORT_FINDINGS.md` left untouched; `scripts/audit_loop.py` must spawn
the next triad audit after a shell host regens (expect 64 skills), turns the
full gate + `--check-idempotent` green, runs the two sabotage trios above,
and commits.
## 2026-10-20 — Automated remediation pass (PROMPT_FLEET_AUDIT_REMEDIATION.md, HR-6.1-using-superpowers-prose-ref P3 + HR-5.5-tab-p-suffix-gap P3 — verify-only, regen-blocked)
Execution context: OpenCode file-tool-only run. Reading order followed strictly:
`AUDIT_REPORT_FINDINGS.md` (114 lines, `STATUS: FINDINGS_DETECTED`) →
`docs/OPENRIG_MUSE_GO_ARCHITECTURE.md` (`:1-30` pins + verdict table) →
`PROMPT_SPOONFEEDER_OPENCODE_IMPLEMENTATION.md` (`:1-30` mission + hard rules) →
`fleet/fleet.yaml` + `fleet/mcp-servers.yaml` + `scripts/generate-rigs.py` +
`scripts/render-seat.py` + `scripts/verify-rigs.sh` + `scripts/gate-role.sh` +
`scripts/seed-rig.py` + `scripts/bootstrap-pi-seats.sh` + `scripts/audit_loop.py` +
`docker-compose.sidecars.yml` + `Makefile` + `identity-vectors.json` + `schemas/` +
`specs/agents/_shared/skills/executing-plans/SKILL.md`.
`default.shell` probes (directory probe, `echo blocked` probe, then the mandated
`python3 ./scripts/generate-rigs.py` gate probe) each returned
`{"type":"permission.rejected","message":"This non-interactive run cannot ask the user for permission, so the request was rejected. Continue without this action."}`
(3 attempts, 0 blind retries; stop per hard rule 4). Therefore
`python3 scripts/generate-rigs.py`, `./scripts/verify-rigs.sh --check-only`,
`./scripts/bootstrap-pi-seats.sh --all --dry-run`, and
`python3 ./scripts/audit_loop.py --self-test` could NOT be executed here. No
`STATUS: NO_FINDINGS` claimed; shell-capable host must run the gate. Every HR
finding re-verified by `Read`/`Grep`/`Glob` per the Cardinal Rule (no claim counted
as VERIFIED by reading alone). `AUDIT_REPORT_FINDINGS.md` left untouched.
### Reproduction (exact Proof commands re-run via file tools — both findings REPRODUCED)
- HR-6.1: `Grep using-superpowers specs/agents/_shared/skills/executing-plans` →
`SKILL.md:50` `` `../using-superpowers/references/` `` verbatim;
`Read specs/agents/_shared/skills/` → 63 entries, no `using-superpowers*`;
`Grep using-superpowers fleet/skills-lock.json` → zero hits (63 `"source"`
entries, no `using-superpowers` key);
`Grep using-superpowers fleet/` → only `fleet.yaml:3361-3362,3366`
(fail-closed comment + `- id: using-superpowers / source: superpowers` live
binding under `system-architect` `skills.shared`);
`Read .scratch/vendor/obra_superpowers/skills/` → 15 entries INCLUDING
`using-superpowers/`, so the upstream sibling exists and the prose ref is
valid-but-unvendored. Gate blind spot already closed in source:
`verify-rigs.sh:357-385` sibling-doc-ref block (fence-strip + `../([a-z0-9-]+)/`
match, `fail()` at `:385`). REPRODUCED as staged-binding-without-regen.
- HR-5.5: `Read specs/agents/languages/go-backend-eng/runtime/policy-enforcement.json:50-63` →
14 denies (`"* -p*": "deny"` at `:60` immediately followed by
`"*--patch*": "deny"` at `:61`, no `"*\t-p*"` line);
`Read scripts/render-seat.py:402-419` → 15-tuple ending
`"* -p*", "*\t-p*", "*--patch*", ...` (`:413-414` verbatim);
`Read scripts/verify-rigs.sh:587-603` → `_TERMINAL_BASH_DENIES` requires all 15
incl `"*\t-p*"` (`:587`) with terminality assert (`:597-603`);
`Read scripts/gate-role.sh:69-76` → tab `-p` + `--full-diff` + `--textconv`
deny probes present. Disk carries 14/15 denies; renderer+verifier require 15.
REPRODUCED as stale generated tree failing its own fail-closed gate.
- Sabotage table (`AUDIT_REPORT_FINDINGS.md:80-94`): all 12 rows
`NOT RUN (shell blocked)` — none reports `Caught? = No`, so hard-rule-2
reactive check NOT triggered.
### P3 — HR-6.1-using-superpowers-prose-ref (no source change this pass; regen pending)
- Root cause: fleet's canonical binding (`fleet.yaml:3366`) stages the 64th shared
skill but `python3 scripts/generate-rigs.py` has not been re-run since it landed,
so lock (63 entries) + disk (`specs/agents/_shared/skills/`, 63 dirs) +
`_shared/agent.yaml` (63 ids) disagree with the source of truth. Prior
2026-10-20 pass already made the fail-closed source fixes (fleet binding +
`verify-rigs.sh:357-385` sibling gate + `generate-rigs.py` docstring `63 → 64` +
prompt Claim 6.1 `63 → 64`); re-verified present by reading above. No further
canonical defect found.
- Files modified: none (hard rule 1 forbids hand-editing generated leaves —
that would desync `configurationId`/`packageDigest`/`bodyDigest`; the fix is
regen on a shell host).
- Verification (TO RUN on shell host):
`python3 scripts/generate-rigs.py` (expect 64 shared skills);
`grep -rn "using-superpowers" specs/agents/_shared/skills/ fleet/` resolves to
lock entry + vendored dir + fleet binding;
`./scripts/verify-rigs.sh --check-only` → exit 0.
Could NOT execute here — `default.shell permission.rejected` (verbatim below).
- Status: SOURCE HARDENED (prior pass); REGEN PENDING shell.
### P3 — HR-5.5-tab-p-suffix-gap (no source change this pass; regen + live proof pending)
- Root cause: same stale-regen class — `render-seat.py:402-419` already emits the
`"*\t-p*"` 15th terminal deny, `verify-rigs.sh:587-603` already requires it
with the no-allow-after-block assert, and `gate-role.sh:69-76` already probes
tab/`--full-diff`/`--textconv`, but all 102 checked-in permission files still
carry 14 denies (representative `go-backend-eng:60-63` verbatim above).
`generate-rigs.py:629-644` calls order-preserving `write_json`, so regen emits
the TAB deny into all 102 files. Prior 2026-10-20 pass made these source fixes;
re-verified present by reading above. No further canonical defect found.
- Files modified: none (regen-only fix; hand-editing the 102 JSON leaves is
forbidden by hard rule 1).
- Verification (TO RUN on shell host): `python3 scripts/generate-rigs.py`
(expect only permission files changed);
repo-wide TAB-deny present in all 102 files;
`./scripts/verify-rigs.sh --check-only` → exit 0;
`bash scripts/gate-role.sh threat-modeler` → tab/`-p`/`--patch`/`--full-diff`/
`--textconv` all deny with path-scoped allows still allow.
Could NOT execute here — `default.shell permission.rejected`.
- Status: SOURCE HARDENED (prior pass); REGEN + LIVE `pi` MATCHER PROOF PENDING.
### Sabotage coverage note (remediation hard rule 2)
This audit's Sabotage Results table reports every invariant as UNVERIFIABLE
(shell blocked) — none as survived (`Caught? = No`) — so no rule-2 reactive check
was triggered. Both findings' exact gaps already carry fail-closed gate coverage
from the prior 2026-10-20 pass (sibling-doc-ref block HR-6.1; tab-deny + 4/4-probe
+ terminality block HR-5.5), re-verified present this pass.
### Verification gate (mandated step 3 — all BLOCKED here, exact commands + verbatim outputs)
```bash
python3 scripts/generate-rigs.py
# -> NOT RUN: {"type":"permission.rejected","message":"This non-interactive run cannot ask the user for permission, so the request was rejected. Continue without this action."}
./scripts/verify-rigs.sh --check-only
# -> NOT RUN: same permission.rejected (gate-probe already rejected; not retried per hard rule 4)
./scripts/bootstrap-pi-seats.sh --all --dry-run
# -> NOT RUN: same permission.rejected (not retried — same error class)
python3 ./scripts/audit_loop.py --self-test
# -> NOT RUN: same permission.rejected
python3 scripts/generate-rigs.py # second run idempotency
# -> NOT RUN: same permission.rejected
```
Deterministic idempotency (`git diff` after second generate) UNTESTABLE here.
Hard-rule stop condition NOT triggered (3 shell attempts, 0 blind retries on same
fix). No security check weakened or skipped, no `builtin:locked` touched, no
`*..*` deny removed (still last in both maps), no
`code_rewrite/lsp_rename/lsp_code_actions` deny removed, no `guidance_merge`
introduced into `agent.yaml` `startup.files`, no `!cat` replaced with literals,
no secrets/`OPENRIG_*` in `rig.yaml` `env:`, no proxy `0→1`, no `0.0.0.0`, no
`:latest`, no symlink, no generated leaf hand-edited.
`AUDIT_REPORT_FINDINGS.md` left untouched; `scripts/audit_loop.py` must spawn the
next triad audit after a shell host regens (expect 64 skills + 15 denies), turns
the full gate + `--check-idempotent` green, runs the two sabotage trios, and commits.
## 2026-10-20 — EXECUTED remediation pass (build mode, shell available; gate GREEN 22/0)
Execution context: OpenCode interactive session, build mode — `default.shell`
available. Reading order followed: `AUDIT_REPORT_FINDINGS.md` (114 lines,
`STATUS: FINDINGS_DETECTED`, 2 P3 findings) → `docs/OPENRIG_MUSE_GO_ARCHITECTURE.md`
→ `PROMPT_SPOONFEEDER_OPENCODE_IMPLEMENTATION.md` → `fleet/fleet.yaml` +
`fleet/mcp-servers.yaml` + `scripts/generate-rigs.py` + `scripts/render-seat.py` +
`scripts/verify-rigs.sh` + `scripts/gate-role.sh` + `scripts/audit_loop.py` +
`docker-compose.sidecars.yml` + `Makefile` + `identity-vectors.json` + `schemas/`.
### Reproduction (Proof commands executed, both findings REPRODUCED pre-regen)
- `ls specs/agents/_shared/skills | wc -l` → `63`, no `using-superpowers`;
`grep -c using-superpowers fleet/skills-lock.json` → `0` hits on the id
(63 `"source"` entries); `fleet.yaml:3366` live binding present.
HR-6.1 REPRODUCED as staged-binding-without-regen.
- `python3 -c` JSON-key probe on
`specs/agents/languages/go-backend-eng/runtime/policy-enforcement.json` →
`has TAB key: False`; `render-seat.py:414` emits `"*\t-p*"` (backslash-t
source → TAB at runtime); `verify-rigs.sh:587` requires 15 denies incl TAB.
HR-5.5 REPRODUCED as stale generated tree (14/15 denies on disk).
### P3 — HR-6.1-using-superpowers-prose-ref (REMEDIATED by regen; no new source edit)
- Root cause: fleet's canonical `system-architect` binding
(`fleet.yaml:3366` `- id: using-superpowers / source: superpowers`, added by
the prior 2026-10-20 pass along with the `verify-rigs.sh:357-385`
sibling-doc-ref gate) was never materialized — lock + disk + digests still
reflected the 63-skill subset although vendor
`.scratch/vendor/obra_superpowers/skills/using-superpowers/` exists.
- Files modified: none this pass (canonical catalog + gate already correct).
- Fix executed: `HERETEK_RIGS_ALLOW_DIRTY=1 python3 ./scripts/generate-rigs.py`
→ `wrote 51 specialist AgentSpecs, 64 shared skills, 8 RigBundles, Roster, and Registry views ...`
(ALLOW_DIRTY still records the real HEAD SHA `99b4420c`, never the
`SYNTHETIC-` fallback; dirty flag is due to this pass's own uncommitted
source fixes + `.opencode/opencode-loop/` session logs, not a provenance gap).
Post-regen: `ls specs/agents/_shared/skills | wc -l` → `64`,
`using-superpowers` present on disk, lock carries the 64th entry.
- Sabotage proof (fail-closed): `mv specs/agents/_shared/skills/using-superpowers /tmp/opencode/...`
→ `./scripts/verify-rigs.sh --check-only` → `EXIT:1` with
`[FAIL] Shared skill count mismatch (expected 64)`,
`[FAIL] shared skill using-superpowers: missing directory ...`,
`[FAIL] shared skill executing-plans: doc ref ../using-superpowers/ has no vendored sibling skill directory ...`;
restored → `EXIT:0`. (Hard rule 2 satisfied: gate catches the invariant.)
- Status: FIXED (regen materialized; gate green).
### P3 — HR-5.5-tab-p-suffix-gap (REMEDIATED by regen + 1-line verifier-literal fix)
- Root cause (two legs): (1) stale tree — all 102 permission files carried 14
terminal denies while renderer + verifier required 15 (`"*\t-p*"`); regen
emits the TAB deny via the order-preserving `write_json` path.
(2) Real gate bug found during this executed pass: `verify-rigs.sh:1149`
(renderer-emit check) tested `'"*\t-p*"'` — a Python literal that evaluates
to a real TAB — against `render-seat.py` source text, which contains the
2-byte `backslash-t` escape. Post-regen the gate reported
`SUMMARY: 22 checks passed, 1 failed` with
`[FAIL] scripts/render-seat.py must emit terminal "*<TAB>-p*" bash deny`
even though the renderer was correct (all 51 seats validated, TAB key present
in parsed JSON). One-line fail-closed correction, no check removed:
`scripts/verify-rigs.sh:1149` `'"*\t-p*"'` → `'"*\\t-p*"'` (match the source
encoding; runtime TAB semantics unchanged — line 587 still compares TAB keys
against parsed JSON, and the generated JSON carries a real TAB key).
- Files modified: `scripts/verify-rigs.sh` (1 line, renderer-emit literal only).
`scripts/render-seat.py` untouched (already correct; a sabotage probe that
deleted its tab line tripped `tests/test_render_seat.py` → gate `EXIT:1`,
then the renderer was restored byte-identical and the gate returned to green —
no residual drift: `git diff --stat scripts/render-seat.py` → 5 insertions,
matching the prior pass's fix).
- Fix executed: same regen as HR-6.1; post-regen probe:
`has TAB key: True` (`'*\t-p*'` in `permission.bash`), 64 skills.
- Sabotage proofs (fail-closed, order-preserving edits): delete TAB deny from
both `policy-enforcement.json` + `pi-permission-config.json`
→ `EXIT:1` with `[FAIL] go-backend-eng: permission bash must contain terminal
deny '*<TAB>-p*': deny`; restored → `EXIT:0`. (Single-file delete trips the
specs↔seat parity check first — also `EXIT:1`, defense in depth.)
- Status: FIXED (regen materialized + verifier literal corrected; gate green).
### Verification gate (mandated step 3 — EXECUTED, verbatim)
```bash
HERETEK_RIGS_ALLOW_DIRTY=1 python3 ./scripts/generate-rigs.py
# -> wrote 51 specialist AgentSpecs, 64 shared skills, 8 RigBundles, Roster, and Registry views under /home/john/Projects/heretek-rig-workspace/heretek-rigs
./scripts/verify-rigs.sh --check-only
# -> SUMMARY: 22 checks passed, 0 failed. EXIT:0
./scripts/bootstrap-pi-seats.sh --all --dry-run
# -> EXIT:2 error: missing /home/john/.config/heretek-rigs/secrets/opencode-go.key (chmod 600)
# (specified HR-4.2 strict-default behavior: fail-closed without secrets, not a finding)
./scripts/bootstrap-pi-seats.sh --all --dry-run --allow-missing-secrets
# -> EXIT:0 bootstrap-pi-seats: [DRY-RUN] would provision 54 Pi seat directories under /home/john/.openrig/state/pi
python3 ./scripts/audit_loop.py --self-test
# -> SELF-TEST PASSED: audit_loop.py is ready for autonomous OpenCode execution. EXIT:0
# (self-test internally re-runs verify-rigs.sh → passed; 7/7 adversarial vectors classified)
HERETEK_RIGS_ALLOW_DIRTY=1 python3 ./scripts/generate-rigs.py # second run
# -> wrote 51 ... / git status diff before-vs-after EMPTY → IDEMPOTENT: zero additional changes
```
Sabotage trio summary: tab-deny delete → `EXIT:1` → restore `EXIT:0`;
vendored-sibling delete → `EXIT:1` (count + sibling-doc-ref FAILs) → restore `EXIT:0`;
renderer tab-line delete → `EXIT:1` (unit-test FAIL) → restored byte-identical → `EXIT:0`.
Hard-rule compliance: no security check weakened or skipped (1-line verifier fix
corrects a false-positive literal; the check still fails closed — proven by the
trio above); no `builtin:locked` touched; no `*..*` deny moved (still last);
no `code_rewrite/lsp_rename/lsp_code_actions` deny removed; no `guidance_merge`
introduced; no `!cat` replaced; no proxy `0→1`; no `0.0.0.0`; no `:latest`;
no symlink; no generated leaf hand-edited (all 359 modified tracked files flow
from `generate-rigs.py`; 60 untracked entries are `.opencode/opencode-loop/`
session logs only).
`AUDIT_REPORT_FINDINGS.md` left untouched; `scripts/audit_loop.py` must now spawn
the next triad audit, which should confirm `STATUS: NO_FINDINGS` (gate 22/0,
self-test passed, regen idempotent).
+6
View File
@@ -145,3 +145,9 @@
- Reproduction via file tools: HR-2.1 `pinned.json:10-14` placeholder + gate `:183-186` 64-hex-or-fail + `Glob schemas/openrig-cli-0.6.11.tgz` → absent (REPRODUCED); HR-6.1 62 `*/SKILL.md` / zero lock `subagent` hits vs fleet binds `:2860,:3359` + executing-plans refs `:53,60,121,126,236` + vendor `skills/subagent-driven-development/` (`SKILL.md` + `scripts/` + 3 prompts) present (REPRODUCED); HR-5.5-superset `:559-575` declared-only vs `:534-539` mcp-only + `:481` rendered↔rendered + `:1151-1157` no re-run (REPRODUCED); HR-5.5-patch `git log --oneline -p` matching allow `:24-27` with none of the 10 terminal denies matching `-p` (REPRODUCED). Sabotage 12× NOT RUN at audit time, zero `Caught? = No` → hard rule 2 not triggered (new checks below are finding-remediation, not rule-2 reactive).
- Source fixes this pass (fail-closed, minimal; NO generated leaves hand-edited per hard rule 1 — `specs/`/`rigs/` still carry the 10-deny set + 62 skills, so the gate stays red BY DESIGN until a shell host regens): `render-seat.py:387-414` +4 terminal patch denies (`* -p*`, `*--patch*`, `*--full-diff*`, `*--textconv*`) LAST with residual doc; `verify-rigs.sh` V1 subset check (`rendered bash/path_write allows ⊆ fleet-declared`) + 10→14 terminal asserts (`_TERMINAL_BASH_DENIES`, presence + order) + `:1081-1089` renderer-emit asserts; `gate-role.sh` canary `fleet/fleet.yaml` commit + 2 must-deny patch probes + 1 anti-over-block allow probe; `tests/test_render_seat.py` asserts → 14; `PROMPT_ADVERSARIAL_FLEET_AUDIT.md:133` claim lists 14 denies + subset clause. `Grep` fleet `bash_allow` → zero `-p`/`--patch`/`--textconv`/`--full-diff` substrings (clean regen unaffected). No check weakened; 20× `builtin:locked`, `*..*` deny-last, triple-deny, `!cat`, loopback/pinned sidecars preserved.
- HR-2.1 + HR-6.1 STILL OPEN — BLOCKED HERE (need networked shell: `npm pack` → record SHA → commit/stash or `ALLOW_DIRTY=1` regen expecting 63 skills + 14 denies + refreshed digests → full gate + idempotence green). `AUDIT_REPORT_FINDINGS.md` untouched; `audit_loop.py` spawns next triad audit after green. Full per-HR mapping in `REMEDIATION_LOG.md` latest entry.
## 2026-10-20 — Remediation pass per PROMPT_FLEET_AUDIT_REMEDIATION.md (2-finding P3 sweep: HR-6.1-using-superpowers-prose-ref + HR-5.5-tab-p-suffix-gap)
- `default.shell` 2 attempts, 0 blind retries (stopped well before hard rule 4 limit of 3 — same `permission.rejected` error class, no further shell calls): (1) `python3 ./scripts/generate-rigs.py` → `{"type":"permission.rejected","message":"This non-interactive run cannot ask the user for permission, so the request was rejected. Continue without this action."}`; (2) `true` probe → same `permission.rejected`. `python3 scripts/generate-rigs.py`, `./scripts/verify-rigs.sh --check-only`, `./scripts/bootstrap-pi-seats.sh --all --dry-run`, `python3 ./scripts/audit_loop.py --self-test` → NOT RUN. Second-run idempotency UNTESTABLE.
- Reproduction via file tools: HR-6.1 `executing-plans/SKILL.md:50` `` `../using-superpowers/references/` `` vs zero `using-superpowers*` dirs/lock hits, vendor source `.scratch/vendor/obra_superpowers/skills/using-superpowers/` (`SKILL.md` + `references/` incl `pi-tools.md`) present, gate `:337-356` blind to `../<id>/references/` shape (REPRODUCED); HR-5.5 `* -p*` space-anchored + `render-seat.py:362` ban missing `\t` + `gate-role.sh:69-70` 2/4 probes + `verify-rigs.sh:565-567` sortedness-only order gate (REPRODUCED). Sabotage table 12× UNVERIFIABLE/NOT RUN, zero `Caught? = No` → rule 2 not triggered (new sibling-doc-ref + tab-deny + terminality coverage added proactively).
- Source fixes (fail-closed, minimal; NO generated leaves hand-edited per hard rule 1 — disk still carries 63 skills / 14 denies, so the gate stays red BY DESIGN until a shell host regens): `fleet/fleet.yaml` system-architect `shared:` += `using-superpowers` (superpowers) → regen vendors 64; `verify-rigs.sh` 63→64 count + fenced-stripped `../([a-z0-9-]+)/` sibling-doc-ref gate + `"*\t-p*"` terminal deny + terminality assert (no allow after deny block) + renderer-emit check; `render-seat.py` terminal tuple += `"*\t-p*"`; `gate-role.sh` += tab-`-p` + `--full-diff` + `--textconv` deny probes (4/4 flags); `tests/test_render_seat.py` += tab deny; `generate-rigs.py` docstring 63→64; audit prompt Beta/5.5/Domain-6/6.1 claims → 64 skills + 15 denies + sibling-resolves invariant. No check weakened; 20× `builtin:locked`, `*..*` deny-last, triple-deny, `!cat`, loopback/pinned sidecars preserved.
- Shell host MUST: `HERETEK_RIGS_ALLOW_DIRTY=1 python3 scripts/generate-rigs.py` (expect 64 shared skills + 15 terminal denies) → `./scripts/verify-rigs.sh --check-only` → `python3 ./scripts/audit_loop.py --self-test` → `python3 scripts/generate-rigs.py --check-idempotent` → scratch-copy sabotage trios (rm `using-superpowers` sibling; delete `"*\t-p*"`; trailing-allow inject — each must flip gate 0→1) → commit → `audit_loop.py` spawns next triad audit. Full per-HR mapping in `REMEDIATION_LOG.md` latest entry. `AUDIT_REPORT_FINDINGS.md` untouched.
+7
View File
@@ -3358,6 +3358,13 @@ roles:
source: superpowers
- id: subagent-driven-development
source: superpowers
# HR-6.1-using-superpowers-prose-ref (fail-closed): executing-plans
# SKILL.md points at `../using-superpowers/references/` (per-platform
# references incl pi-tools.md). The sibling must be vendored so the
# ref resolves; the generator unions this into the shared pool
# (fleet/skills-lock.json + specs/agents/_shared/skills/).
- id: using-superpowers
source: superpowers
role_local:
- id: madr-architecture-decision
source: heretek-crew
+6
View File
@@ -343,6 +343,12 @@
"tree": "sha256:b5295fdd7d884e8af6a8cefb019e841ffd12681b02308183a0753a8100623192",
"license_file": "LICENSE (copied from source root)"
},
"using-superpowers": {
"source": "obra/superpowers@bb92a77",
"path": "skills/using-superpowers",
"tree": "sha256:1403e7978a16bef5ccb230006ba1fafcc165fcced2fe0b41ba1c6387e5b5b6ad",
"license_file": "LICENSE (copied from source root)"
},
"variant-analysis": {
"source": "trailofbits/skills@5c99c03",
"path": "plugins/variant-analysis/skills/variant-analysis",
@@ -6,7 +6,7 @@ summary: Cloud IaC (OpenTofu), Kubernetes orchestration, SRE incident response,
source:
repository: https://github.com/Heretek-AI/heretek-rigs
folder: rigs/cloud-sre-and-data-platform
resolvedCommit: 9ec0014ff44e7e174f6d7a5c74590de5f8fe664f
resolvedCommit: 99b4420c6a2e50749c8bb0b3a8d02186b9aa2b41
requestedRef: main
configurations:
- id: data.analytics-metrics-eng=pi,data.cache-streaming-eng=pi,data.data-pipeline-eng=pi,data.dba-specialist=pi,ml.mlops-serving-eng=pi,ml.vector-rag-spec=pi,platform.cloud-platform-eng=pi,platform.dependency-patcher=pi,platform.k8s-orchestrator=pi,sre.observability-eng=pi,sre.sre-incident-eng=pi
@@ -14,7 +14,7 @@ configurations:
recommended: true
packageDigest:
algorithm: sha256
value: 6c161de9d9a80b57959336558a5d3cef0830071e8535e8199074d93d2985979d
value: e721950b7b33ee880706efd6cab15e6c54acfb9db265f558761d11d2c4a76f60
coverage: openrig.package-digest/v1
assembler:
openrigVersion: 0.6.11
@@ -6,7 +6,7 @@ summary: 'Zero-trust defensive security and red-team rig: STRIDE threat modeling
source:
repository: https://github.com/Heretek-AI/heretek-rigs
folder: rigs/defensive-sec-and-red-team
resolvedCommit: 9ec0014ff44e7e174f6d7a5c74590de5f8fe664f
resolvedCommit: 99b4420c6a2e50749c8bb0b3a8d02186b9aa2b41
requestedRef: main
configurations:
- id: blue.appsec-engineer=pi,blue.cloud-sec-auditor=pi,blue.compliance-auditor=pi,blue.threat-modeler=pi,red.ai-red-teamer=pi,red.binary-reverse-eng=pi,red.firmware-sec-analyst=pi
@@ -14,7 +14,7 @@ configurations:
recommended: true
packageDigest:
algorithm: sha256
value: 5693f48128dcf88730baa2c4e5b000a6ecc816e575b31ecf0a3f19f1147406f8
value: 3cbb630dd4c11834d6d36f95e80b04b21df69402cc9180319d361db9ce3e3823
coverage: openrig.package-digest/v1
assembler:
openrigVersion: 0.6.11
@@ -6,7 +6,7 @@ summary: Executive governance, product strategy, sprint decomposition, system ar
source:
repository: https://github.com/Heretek-AI/heretek-rigs
folder: rigs/executive-and-architecture
resolvedCommit: 9ec0014ff44e7e174f6d7a5c74590de5f8fe664f
resolvedCommit: 99b4420c6a2e50749c8bb0b3a8d02186b9aa2b41
requestedRef: main
configurations:
- id: delivery.git-drift-coord=pi,delivery.tech-docs-lead=pi,delivery.tpm-scrum-lead=pi,exec.exec-director=pi,exec.product-director=pi,exec.system-architect=pi
@@ -14,7 +14,7 @@ configurations:
recommended: true
packageDigest:
algorithm: sha256
value: 0c4fa47e54804fa9cfb7939da466c09dcd438f2ea243d386e6776519873c4030
value: 079592db2faa10d592dd0e20393fd86c9bb97bda7b4a5dc7c7d5d827135b8f71
coverage: openrig.package-digest/v1
assembler:
openrigVersion: 0.6.11
@@ -6,7 +6,7 @@ summary: End-to-end web, backend microservice, UI/UX design system, frontend per
source:
repository: https://github.com/Heretek-AI/heretek-rigs
folder: rigs/fullstack-and-web-studio
resolvedCommit: 9ec0014ff44e7e174f6d7a5c74590de5f8fe664f
resolvedCommit: 99b4420c6a2e50749c8bb0b3a8d02186b9aa2b41
requestedRef: main
configurations:
- id: build.go-backend-eng=pi,build.java-kotlin-eng=pi,build.python-backend-spec=pi,build.ts-node-fullstack=pi,design.a11y-specialist=pi,design.brand-copy-spec=pi,design.design-system-eng=pi,design.fe-perf-eng=pi,design.mobile-web-eng=pi,design.ui-ux-designer=pi,design.ux-research-analyst=pi
@@ -14,7 +14,7 @@ configurations:
recommended: true
packageDigest:
algorithm: sha256
value: df5c93e32f21561bf94ebb2443f1fde50b8ed870fe7bac25b318ca92dd9faff4
value: 8348cc1caaf255d3c0a0af3458387cf9d830f6afe3c5b03d20e7c7ba967303c7
coverage: openrig.package-digest/v1
assembler:
openrigVersion: 0.6.11
+2 -2
View File
@@ -6,7 +6,7 @@ summary: Real-time game engine architecture, ECS systems, deterministic physics
source:
repository: https://github.com/Heretek-AI/heretek-rigs
folder: rigs/game-dev-and-sim-rig
resolvedCommit: 9ec0014ff44e7e174f6d7a5c74590de5f8fe664f
resolvedCommit: 99b4420c6a2e50749c8bb0b3a8d02186b9aa2b41
requestedRef: main
configurations:
- id: engine.engine-systems-eng=pi,engine.graphics-shader-eng=pi,engine.physics-sim-eng=pi,gameplay.game-ai-dev=pi,gameplay.game-systems-dev=pi,gameplay.tech-artist-pipeline=pi
@@ -14,7 +14,7 @@ configurations:
recommended: true
packageDigest:
algorithm: sha256
value: c498513b47ad27e6f89b26133433feca1c014a3a5dd83817c6cf7f1353ae4b3f
value: ad5b75ae28b41b35d83d167e8d3c3fea4186c1d86fe8f6728b04dfa19cc93b8d
coverage: openrig.package-digest/v1
assembler:
openrigVersion: 0.6.11
+2 -2
View File
@@ -6,7 +6,7 @@ summary: Master composable 51-agent omni-fleet topology booting a 3-seat command
source:
repository: https://github.com/Heretek-AI/heretek-rigs
folder: rigs/heretek-omni-fleet
resolvedCommit: 9ec0014ff44e7e174f6d7a5c74590de5f8fe664f
resolvedCommit: 99b4420c6a2e50749c8bb0b3a8d02186b9aa2b41
requestedRef: main
configurations:
- id: command.exec-director=pi,command.system-architect=pi,command.tpm-scrum-lead=pi
@@ -14,7 +14,7 @@ configurations:
recommended: true
packageDigest:
algorithm: sha256
value: d40547936a10a7a046e5974cdc035c414380a4760b17b8b540532a2c642f087c
value: c936ce5827cd38cd417c30b94b0e4a4e53e5168abb8843918e247f2773cfc3b0
coverage: openrig.package-digest/v1
assembler:
openrigVersion: 0.6.11
@@ -6,7 +6,7 @@ summary: 'Adversarial quality assurance gauntlet: Playwright E2E browser automat
source:
repository: https://github.com/Heretek-AI/heretek-rigs
folder: rigs/qa-and-verification-gauntlet
resolvedCommit: 9ec0014ff44e7e174f6d7a5c74590de5f8fe664f
resolvedCommit: 99b4420c6a2e50749c8bb0b3a8d02186b9aa2b41
requestedRef: main
configurations:
- id: qa.api-contract-tester=pi,qa.e2e-browser-qa=pi,qa.load-stress-tester=pi,qa.release-qa-officer=pi,qa.sabotage-qa-tester=pi,qa.static-analysis-lead=pi
@@ -14,7 +14,7 @@ configurations:
recommended: true
packageDigest:
algorithm: sha256
value: 1468bdb0659d597e3c18fd0bd2e0784057086472adfc746340f181aecf5b93ee
value: d2625b1da491c5632314c5e3d1403debc554bf54fa11a56f04eae8f6e5818ffa
coverage: openrig.package-digest/v1
assembler:
openrigVersion: 0.6.11
@@ -6,7 +6,7 @@ summary: Low-level Rust and C++ systems programming paired with native Android (
source:
repository: https://github.com/Heretek-AI/heretek-rigs
folder: rigs/systems-and-mobile-foundry
resolvedCommit: 9ec0014ff44e7e174f6d7a5c74590de5f8fe664f
resolvedCommit: 99b4420c6a2e50749c8bb0b3a8d02186b9aa2b41
requestedRef: main
configurations:
- id: mobile.android-mobile-spec=pi,mobile.ios-mobile-spec=pi,systems.cpp-lowlevel-eng=pi,systems.rust-systems-spec=pi
@@ -14,7 +14,7 @@ configurations:
recommended: true
packageDigest:
algorithm: sha256
value: 0f9e97bfc580dc839da0ac92107880b8b5cd79ecb7d8711ff0a03a647e2a525d
value: f6cb83210cd2005473a6543e52b4e23405ea5a2ad678a0031ade31c289f48486
coverage: openrig.package-digest/v1
assembler:
openrigVersion: 0.6.11
+9 -9
View File
@@ -22,7 +22,7 @@
"packageDigests": [
{
"algorithm": "sha256",
"value": "0c4fa47e54804fa9cfb7939da466c09dcd438f2ea243d386e6776519873c4030",
"value": "079592db2faa10d592dd0e20393fd86c9bb97bda7b4a5dc7c7d5d827135b8f71",
"coverage": "openrig.package-digest/v1"
}
]
@@ -48,7 +48,7 @@
"packageDigests": [
{
"algorithm": "sha256",
"value": "df5c93e32f21561bf94ebb2443f1fde50b8ed870fe7bac25b318ca92dd9faff4",
"value": "8348cc1caaf255d3c0a0af3458387cf9d830f6afe3c5b03d20e7c7ba967303c7",
"coverage": "openrig.package-digest/v1"
}
]
@@ -74,7 +74,7 @@
"packageDigests": [
{
"algorithm": "sha256",
"value": "0f9e97bfc580dc839da0ac92107880b8b5cd79ecb7d8711ff0a03a647e2a525d",
"value": "f6cb83210cd2005473a6543e52b4e23405ea5a2ad678a0031ade31c289f48486",
"coverage": "openrig.package-digest/v1"
}
]
@@ -100,7 +100,7 @@
"packageDigests": [
{
"algorithm": "sha256",
"value": "c498513b47ad27e6f89b26133433feca1c014a3a5dd83817c6cf7f1353ae4b3f",
"value": "ad5b75ae28b41b35d83d167e8d3c3fea4186c1d86fe8f6728b04dfa19cc93b8d",
"coverage": "openrig.package-digest/v1"
}
]
@@ -126,7 +126,7 @@
"packageDigests": [
{
"algorithm": "sha256",
"value": "6c161de9d9a80b57959336558a5d3cef0830071e8535e8199074d93d2985979d",
"value": "e721950b7b33ee880706efd6cab15e6c54acfb9db265f558761d11d2c4a76f60",
"coverage": "openrig.package-digest/v1"
}
]
@@ -152,7 +152,7 @@
"packageDigests": [
{
"algorithm": "sha256",
"value": "1468bdb0659d597e3c18fd0bd2e0784057086472adfc746340f181aecf5b93ee",
"value": "d2625b1da491c5632314c5e3d1403debc554bf54fa11a56f04eae8f6e5818ffa",
"coverage": "openrig.package-digest/v1"
}
]
@@ -178,7 +178,7 @@
"packageDigests": [
{
"algorithm": "sha256",
"value": "5693f48128dcf88730baa2c4e5b000a6ecc816e575b31ecf0a3f19f1147406f8",
"value": "3cbb630dd4c11834d6d36f95e80b04b21df69402cc9180319d361db9ce3e3823",
"coverage": "openrig.package-digest/v1"
}
]
@@ -204,7 +204,7 @@
"packageDigests": [
{
"algorithm": "sha256",
"value": "d40547936a10a7a046e5974cdc035c414380a4760b17b8b540532a2c642f087c",
"value": "c936ce5827cd38cd417c30b94b0e4a4e53e5168abb8843918e247f2773cfc3b0",
"coverage": "openrig.package-digest/v1"
}
]
@@ -231,5 +231,5 @@
}
}
},
"bodyDigest": "4944318f8ff48e079f426a1761d6532688860a61453693bbd666538303e4e81b"
"bodyDigest": "ab27d9ce5a776d2cd63d45dcada77f6e3c75684413e3869db2b2734180781203"
}
@@ -5,14 +5,14 @@
"source": {
"repository": "https://github.com/Heretek-AI/heretek-rigs",
"folder": "rigs/cloud-sre-and-data-platform",
"resolvedCommit": "9ec0014ff44e7e174f6d7a5c74590de5f8fe664f",
"resolvedCommit": "99b4420c6a2e50749c8bb0b3a8d02186b9aa2b41",
"requestedRef": "main",
"canonicalUrl": "https://github.com/Heretek-AI/heretek-rigs/tree/9ec0014ff44e7e174f6d7a5c74590de5f8fe664f/rigs/cloud-sre-and-data-platform"
"canonicalUrl": "https://github.com/Heretek-AI/heretek-rigs/tree/99b4420c6a2e50749c8bb0b3a8d02186b9aa2b41/rigs/cloud-sre-and-data-platform"
},
"configurationId": "data.analytics-metrics-eng=pi,data.cache-streaming-eng=pi,data.data-pipeline-eng=pi,data.dba-specialist=pi,ml.mlops-serving-eng=pi,ml.vector-rag-spec=pi,platform.cloud-platform-eng=pi,platform.dependency-patcher=pi,platform.k8s-orchestrator=pi,sre.observability-eng=pi,sre.sre-incident-eng=pi",
"packageDigest": {
"algorithm": "sha256",
"value": "6c161de9d9a80b57959336558a5d3cef0830071e8535e8199074d93d2985979d",
"value": "e721950b7b33ee880706efd6cab15e6c54acfb9db265f558761d11d2c4a76f60",
"coverage": "openrig.package-digest/v1"
},
"assembler": {
@@ -5,14 +5,14 @@
"source": {
"repository": "https://github.com/Heretek-AI/heretek-rigs",
"folder": "rigs/defensive-sec-and-red-team",
"resolvedCommit": "9ec0014ff44e7e174f6d7a5c74590de5f8fe664f",
"resolvedCommit": "99b4420c6a2e50749c8bb0b3a8d02186b9aa2b41",
"requestedRef": "main",
"canonicalUrl": "https://github.com/Heretek-AI/heretek-rigs/tree/9ec0014ff44e7e174f6d7a5c74590de5f8fe664f/rigs/defensive-sec-and-red-team"
"canonicalUrl": "https://github.com/Heretek-AI/heretek-rigs/tree/99b4420c6a2e50749c8bb0b3a8d02186b9aa2b41/rigs/defensive-sec-and-red-team"
},
"configurationId": "blue.appsec-engineer=pi,blue.cloud-sec-auditor=pi,blue.compliance-auditor=pi,blue.threat-modeler=pi,red.ai-red-teamer=pi,red.binary-reverse-eng=pi,red.firmware-sec-analyst=pi",
"packageDigest": {
"algorithm": "sha256",
"value": "5693f48128dcf88730baa2c4e5b000a6ecc816e575b31ecf0a3f19f1147406f8",
"value": "3cbb630dd4c11834d6d36f95e80b04b21df69402cc9180319d361db9ce3e3823",
"coverage": "openrig.package-digest/v1"
},
"assembler": {
@@ -5,14 +5,14 @@
"source": {
"repository": "https://github.com/Heretek-AI/heretek-rigs",
"folder": "rigs/executive-and-architecture",
"resolvedCommit": "9ec0014ff44e7e174f6d7a5c74590de5f8fe664f",
"resolvedCommit": "99b4420c6a2e50749c8bb0b3a8d02186b9aa2b41",
"requestedRef": "main",
"canonicalUrl": "https://github.com/Heretek-AI/heretek-rigs/tree/9ec0014ff44e7e174f6d7a5c74590de5f8fe664f/rigs/executive-and-architecture"
"canonicalUrl": "https://github.com/Heretek-AI/heretek-rigs/tree/99b4420c6a2e50749c8bb0b3a8d02186b9aa2b41/rigs/executive-and-architecture"
},
"configurationId": "delivery.git-drift-coord=pi,delivery.tech-docs-lead=pi,delivery.tpm-scrum-lead=pi,exec.exec-director=pi,exec.product-director=pi,exec.system-architect=pi",
"packageDigest": {
"algorithm": "sha256",
"value": "0c4fa47e54804fa9cfb7939da466c09dcd438f2ea243d386e6776519873c4030",
"value": "079592db2faa10d592dd0e20393fd86c9bb97bda7b4a5dc7c7d5d827135b8f71",
"coverage": "openrig.package-digest/v1"
},
"assembler": {
@@ -5,14 +5,14 @@
"source": {
"repository": "https://github.com/Heretek-AI/heretek-rigs",
"folder": "rigs/fullstack-and-web-studio",
"resolvedCommit": "9ec0014ff44e7e174f6d7a5c74590de5f8fe664f",
"resolvedCommit": "99b4420c6a2e50749c8bb0b3a8d02186b9aa2b41",
"requestedRef": "main",
"canonicalUrl": "https://github.com/Heretek-AI/heretek-rigs/tree/9ec0014ff44e7e174f6d7a5c74590de5f8fe664f/rigs/fullstack-and-web-studio"
"canonicalUrl": "https://github.com/Heretek-AI/heretek-rigs/tree/99b4420c6a2e50749c8bb0b3a8d02186b9aa2b41/rigs/fullstack-and-web-studio"
},
"configurationId": "build.go-backend-eng=pi,build.java-kotlin-eng=pi,build.python-backend-spec=pi,build.ts-node-fullstack=pi,design.a11y-specialist=pi,design.brand-copy-spec=pi,design.design-system-eng=pi,design.fe-perf-eng=pi,design.mobile-web-eng=pi,design.ui-ux-designer=pi,design.ux-research-analyst=pi",
"packageDigest": {
"algorithm": "sha256",
"value": "df5c93e32f21561bf94ebb2443f1fde50b8ed870fe7bac25b318ca92dd9faff4",
"value": "8348cc1caaf255d3c0a0af3458387cf9d830f6afe3c5b03d20e7c7ba967303c7",
"coverage": "openrig.package-digest/v1"
},
"assembler": {
@@ -5,14 +5,14 @@
"source": {
"repository": "https://github.com/Heretek-AI/heretek-rigs",
"folder": "rigs/game-dev-and-sim-rig",
"resolvedCommit": "9ec0014ff44e7e174f6d7a5c74590de5f8fe664f",
"resolvedCommit": "99b4420c6a2e50749c8bb0b3a8d02186b9aa2b41",
"requestedRef": "main",
"canonicalUrl": "https://github.com/Heretek-AI/heretek-rigs/tree/9ec0014ff44e7e174f6d7a5c74590de5f8fe664f/rigs/game-dev-and-sim-rig"
"canonicalUrl": "https://github.com/Heretek-AI/heretek-rigs/tree/99b4420c6a2e50749c8bb0b3a8d02186b9aa2b41/rigs/game-dev-and-sim-rig"
},
"configurationId": "engine.engine-systems-eng=pi,engine.graphics-shader-eng=pi,engine.physics-sim-eng=pi,gameplay.game-ai-dev=pi,gameplay.game-systems-dev=pi,gameplay.tech-artist-pipeline=pi",
"packageDigest": {
"algorithm": "sha256",
"value": "c498513b47ad27e6f89b26133433feca1c014a3a5dd83817c6cf7f1353ae4b3f",
"value": "ad5b75ae28b41b35d83d167e8d3c3fea4186c1d86fe8f6728b04dfa19cc93b8d",
"coverage": "openrig.package-digest/v1"
},
"assembler": {
@@ -5,14 +5,14 @@
"source": {
"repository": "https://github.com/Heretek-AI/heretek-rigs",
"folder": "rigs/heretek-omni-fleet",
"resolvedCommit": "9ec0014ff44e7e174f6d7a5c74590de5f8fe664f",
"resolvedCommit": "99b4420c6a2e50749c8bb0b3a8d02186b9aa2b41",
"requestedRef": "main",
"canonicalUrl": "https://github.com/Heretek-AI/heretek-rigs/tree/9ec0014ff44e7e174f6d7a5c74590de5f8fe664f/rigs/heretek-omni-fleet"
"canonicalUrl": "https://github.com/Heretek-AI/heretek-rigs/tree/99b4420c6a2e50749c8bb0b3a8d02186b9aa2b41/rigs/heretek-omni-fleet"
},
"configurationId": "command.exec-director=pi,command.system-architect=pi,command.tpm-scrum-lead=pi",
"packageDigest": {
"algorithm": "sha256",
"value": "d40547936a10a7a046e5974cdc035c414380a4760b17b8b540532a2c642f087c",
"value": "c936ce5827cd38cd417c30b94b0e4a4e53e5168abb8843918e247f2773cfc3b0",
"coverage": "openrig.package-digest/v1"
},
"assembler": {
@@ -5,14 +5,14 @@
"source": {
"repository": "https://github.com/Heretek-AI/heretek-rigs",
"folder": "rigs/qa-and-verification-gauntlet",
"resolvedCommit": "9ec0014ff44e7e174f6d7a5c74590de5f8fe664f",
"resolvedCommit": "99b4420c6a2e50749c8bb0b3a8d02186b9aa2b41",
"requestedRef": "main",
"canonicalUrl": "https://github.com/Heretek-AI/heretek-rigs/tree/9ec0014ff44e7e174f6d7a5c74590de5f8fe664f/rigs/qa-and-verification-gauntlet"
"canonicalUrl": "https://github.com/Heretek-AI/heretek-rigs/tree/99b4420c6a2e50749c8bb0b3a8d02186b9aa2b41/rigs/qa-and-verification-gauntlet"
},
"configurationId": "qa.api-contract-tester=pi,qa.e2e-browser-qa=pi,qa.load-stress-tester=pi,qa.release-qa-officer=pi,qa.sabotage-qa-tester=pi,qa.static-analysis-lead=pi",
"packageDigest": {
"algorithm": "sha256",
"value": "1468bdb0659d597e3c18fd0bd2e0784057086472adfc746340f181aecf5b93ee",
"value": "d2625b1da491c5632314c5e3d1403debc554bf54fa11a56f04eae8f6e5818ffa",
"coverage": "openrig.package-digest/v1"
},
"assembler": {
@@ -5,14 +5,14 @@
"source": {
"repository": "https://github.com/Heretek-AI/heretek-rigs",
"folder": "rigs/systems-and-mobile-foundry",
"resolvedCommit": "9ec0014ff44e7e174f6d7a5c74590de5f8fe664f",
"resolvedCommit": "99b4420c6a2e50749c8bb0b3a8d02186b9aa2b41",
"requestedRef": "main",
"canonicalUrl": "https://github.com/Heretek-AI/heretek-rigs/tree/9ec0014ff44e7e174f6d7a5c74590de5f8fe664f/rigs/systems-and-mobile-foundry"
"canonicalUrl": "https://github.com/Heretek-AI/heretek-rigs/tree/99b4420c6a2e50749c8bb0b3a8d02186b9aa2b41/rigs/systems-and-mobile-foundry"
},
"configurationId": "mobile.android-mobile-spec=pi,mobile.ios-mobile-spec=pi,systems.cpp-lowlevel-eng=pi,systems.rust-systems-spec=pi",
"packageDigest": {
"algorithm": "sha256",
"value": "0f9e97bfc580dc839da0ac92107880b8b5cd79ecb7d8711ff0a03a647e2a525d",
"value": "f6cb83210cd2005473a6543e52b4e23405ea5a2ad678a0031ade31c289f48486",
"coverage": "openrig.package-digest/v1"
},
"assembler": {
@@ -117,6 +117,8 @@ resources:
path: skills/typescript-astro
- id: using-git-worktrees
path: skills/using-git-worktrees
- id: using-superpowers
path: skills/using-superpowers
- id: variant-analysis
path: skills/variant-analysis
- id: verification-before-completion
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2025 Jesse Vincent
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
@@ -0,0 +1,65 @@
---
name: using-superpowers
description: Use when starting any conversation - establishes how to find and use skills, requiring skill invocation before ANY response including clarifying questions
---
<SUBAGENT-STOP>
If you were dispatched as a subagent to execute a specific task, ignore this skill.
</SUBAGENT-STOP>
<EXTREMELY-IMPORTANT>
If you think there is even a 1% chance a skill might apply to what you are doing, you ABSOLUTELY MUST invoke the skill.
IF A SKILL APPLIES TO YOUR TASK, YOU DO NOT HAVE A CHOICE. YOU MUST USE IT.
This is not negotiable. You cannot rationalize your way out of this.
</EXTREMELY-IMPORTANT>
## The Rule
**Invoke relevant or requested skills BEFORE any response or action** — including clarifying questions, exploring the codebase, or checking files. If it turns out wrong for the situation, you don't have to use it.
**Before entering plan mode:** if you haven't already brainstormed, invoke the brainstorming skill first.
Then announce "Using [skill] to [purpose]" and follow the skill exactly. If it has a checklist, create a todo per item.
## Skill Priority
When multiple skills apply, process skills come first — they set the approach, then implementation skills (frontend-design, etc.) carry it out. Brainstorming and systematic-debugging are Superpowers' most common process skills, but the rule holds for any of them.
- "Let's build X" → superpowers:brainstorming first, then implementation skills.
- "Fix this bug" → superpowers:systematic-debugging first, then domain skills.
## Red Flags
These thoughts mean STOP—you're rationalizing:
| Thought | Reality |
|---------|---------|
| "This is just a simple question" | Questions are tasks. Check for skills. |
| "I need more context first" | Skill check comes BEFORE clarifying questions. |
| "Let me explore the codebase first" | Skills tell you HOW to explore. Check first. |
| "I can check git/files quickly" | Files lack conversation context. Check for skills. |
| "Let me gather information first" | Skills tell you HOW to gather information. |
| "This doesn't need a formal skill" | If a skill exists, use it. |
| "I remember this skill" | Skills evolve. Read current version. |
| "This doesn't count as a task" | Action = task. Check for skills. |
| "The skill is overkill" | Simple things become complex. Use it. |
| "I'll just do this one thing first" | Check BEFORE doing anything. |
| "This feels productive" | Undisciplined action wastes time. Skills prevent this. |
| "I know what that means" | Knowing the concept ≠ using the skill. Invoke it. |
## Platform Adaptation
If your harness appears here, read its reference file for special instructions:
- Claude Code: `references/claude-code-tools.md`
- Codex: `references/codex-tools.md`
- Pi: `references/pi-tools.md`
- Antigravity: `references/antigravity-tools.md`
- Hermes Agent: `references/hermes-tools.md`
- Muse: `references/muse-tools.md`
## User Instructions
User instructions (CLAUDE.md, AGENTS.md, GEMINI.md, etc, direct requests) take precedence over skills, which in turn override default behavior. Only skip skill workflows or instructions when your human partner has explicitly told you to.
@@ -0,0 +1,23 @@
# Antigravity CLI (`agy`) Tool Mapping
Skills speak in actions ("dispatch a subagent", "create a todo", "read a file"). On the Antigravity CLI (`agy`) these resolve to the tools below.
| Action skills request | Antigravity CLI equivalent |
|----------------------|----------------------|
| Dispatch a subagent (`Subagent (general-purpose):` template) | `invoke_subagent` with a built-in `TypeName` — `self` for full-capability work, `research` for read-only |
| Task tracking ("create a todo", "mark complete") | a **task artifact** — `write_to_file` with `IsArtifact: true` and `ArtifactType: "task"` (see [Task tracking](#task-tracking)). **Not** `manage_task`, which manages background processes. |
## Task tracking
Antigravity has **no todo tool** (`manage_task` manages background
processes — `list`/`kill`/`status`/`send_input` — it is *not* a checklist). When a
skill says to create a todo list or track tasks, maintain a **task artifact**: a
markdown checklist saved with `write_to_file` (`IsArtifact: true`,
`ArtifactMetadata.ArtifactType: "task"`), edited with `replace_file_content` /
`multi_replace_file_content` as you go.
At the start of any multi-step task, create the task artifact listing every step of
your plan. As you complete each step, edit the artifact to mark it done (`- [x]`).
If the plan changes, update the checklist. Keep it current — it is your source of
truth for what remains; once the conversation gets long, re-read it before starting
each step.
@@ -0,0 +1,29 @@
# Claude Code Tool Notes
Claude Code is the reference harness: skills speak its vocabulary
(`Agent` for a subagent dispatch, todos, `Skill`). These notes cover the
one place Claude Code can run a plan cheaper than the skills' default
shape. It is opt-in by your human partner and changes nothing the skills
require.
## Cheaper orchestration for subagent-driven development
The controller session is the most expensive seat in a
superpowers:subagent-driven-development run: it reads every dispatch
result and every report, and it usually runs on the session's most
capable model. Claude Code supports nested subagents (three layers below
the main conversation by default; `CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH`
adjusts it), so the whole loop can run one layer down.
When your human partner asks for it — or has said the session model is
too expensive to spend on coordination — dispatch ONE orchestrator
subagent on a mid-tier model with the plan path and the instruction to
use superpowers:subagent-driven-development end to end. The orchestrator
dispatches its own implementers and reviewers per that skill's Model
Selection; the workspace and ledger live on disk, so nothing is lost to
the extra layer. Its final message must carry the "Rulings I made" list
verbatim — that list is how the decisions reach your human partner, and
you relay it, not summarize it.
Do this only for a whole plan. Nesting a single task's dispatch buys
nothing and adds a seat.
@@ -0,0 +1,108 @@
## Subagent dispatch requires multi-agent support
Add to your Codex config (`~/.codex/config.toml`):
```toml
[features]
multi_agent = true
```
This enables the multi-agent tools that skills like
`dispatching-parallel-agents` and `subagent-driven-development` use.
Which tools you get depends on the multi-agent version your model
preset selects (current presets run V2; older ones run V1). Trust your
actual tool list over any table — including this one — when they
disagree.
- **Spawning:** give children a clean context with
`spawn_agent {fork_turns: "none"}`; the default `"all"` copies your
entire transcript into the child. On Codex 0.145+, role files under
`~/.codex/agents/` attach to isolated forks via `agent_type`.
Full-history forks accept `model` and `reasoning_effort` overrides
(only `agent_type` is refused there) — isolated forks are the SDD
default for context hygiene, not because overrides require them.
- **Fix rounds:** resume the implementer with `followup_task` — it
delivers your message, triggers a turn, and transparently reloads a
child the harness evicted. Never dispatch a fresh implementer on the
theory that a spawned agent cannot be messaged again; on V2 it
always can.
- **Lifecycle:** V2 has no `close_agent`. Finished children are
evicted automatically when slots are needed; leaving them unclosed
costs nothing. Only V1 sessions have `close_agent` — there, close
reviewers when their review returns, and close each implementer
after its task's review passes.
- **Model names:** never copy a model name from a skill, table, or old
session into `spawn_agent` without checking it against your current
spawn allowlist — V2 accepts only V2-capable presets and hard-errors
on the rest.
## Waiting on children
`wait_agent` is an event subscription, not a poll: a long wait wakes
the moment a child produces mailbox activity, with the same latency as
a short one. Short-timeout polling buys nothing and costs a tool call —
and a context rebill — per poll. In measured sessions, roughly
two-thirds of all wait calls were short polls that timed out.
- While you still have local work, do not wait at all. A completed
child's final answer is pushed into your mailbox and arrives with
your next turn.
- When you are genuinely idle with children outstanding, wait in
bounded stretches: `wait_agent` with `timeout_ms` 300000-600000
(5-10 minutes). After each stretch — wake or timeout — post one
status line, run `list_agents`, and chase any child that finished
without reporting. Never stack polls shorter than five minutes; the
event subscription wakes a bounded stretch just as fast as a short
one.
- Completion mail cannot wake an idle controller (it is delivered
without triggering a turn); covering that idle window is
`wait_agent`'s only job. A stretch that times out with no activity
is your cue to reconcile, not to shorten the next stretch.
## Model routing on spawns
Every `spawn_agent` you issue — including when you are yourself a
spawned child running a fan-out — sets `model` AND `reasoning_effort`
explicitly, per the Model Selection rules of the skill you are
executing. Setting `model` alone is a trap: the child's effort
silently resets to that model's default, not to yours.
Ask your human partner to add a machine-level backstop to
`~/.codex/config.toml` so any spawn that slips through still routes to
a deliberate tier instead of silently inheriting the session's most
expensive model:
```toml
[agents]
default_subagent_model = "<a mid-tier model from your spawn allowlist>"
default_subagent_reasoning_effort = "medium"
```
## Environment Detection
Skills that create worktrees or finish branches should detect their
environment with read-only git commands before proceeding:
```bash
GIT_DIR=$(cd "$(git rev-parse --git-dir)" 2>/dev/null && pwd -P)
GIT_COMMON=$(cd "$(git rev-parse --git-common-dir)" 2>/dev/null && pwd -P)
BRANCH=$(git branch --show-current)
```
- `GIT_DIR != GIT_COMMON` → already in a linked worktree (skip creation)
- `BRANCH` empty → detached HEAD (cannot branch/push/PR from sandbox)
See `using-git-worktrees` Step 0 and `finishing-a-development-branch`
Step 1 for how each skill uses these signals.
## Codex App Finishing
When the sandbox blocks branch/push operations (detached HEAD in an
externally managed worktree), the agent commits all work and informs
the user to use the App's native controls:
- **"Create branch"** — names the branch, then commit/push/PR via App UI
- **"Hand off to local"** — transfers work to the user's local checkout
The agent can still run tests, stage files, and output suggested branch
names, commit messages, and PR descriptions for the user to copy.
@@ -0,0 +1,63 @@
# Gemini CLI Tool Mapping
Skills speak in actions ("dispatch a subagent", "create a todo", "read a file"). On Gemini CLI these resolve to the tools below.
| Action skills request | Gemini CLI equivalent |
|----------------------|----------------------|
| Read a file | `read_file` |
| Read multiple files at once | `read_many_files` |
| Create a new file | `write_file` |
| Edit a file | `replace` |
| Run a shell command | `run_shell_command` |
| Search file contents | `grep_search` |
| Find files by name | `glob` |
| List files and subdirectories | `list_directory` |
| Fetch a URL | `web_fetch` |
| Search the web | `google_web_search` |
| Invoke a skill | `activate_skill` |
| Dispatch a subagent (`Subagent (general-purpose):` template) | `invoke_agent` with `agent_name: "generalist"` (invocable via `@generalist` chat syntax — see [Subagent support](#subagent-support)) |
| Multiple parallel dispatches | Multiple `invoke_agent` calls in the same response |
| Task tracking ("create a todo", "mark complete") | `write_todos` (statuses: pending, in_progress, completed, cancelled, blocked) |
## Instructions file
When a skill mentions "your instructions file", on Gemini CLI this is **`GEMINI.md`**. Gemini CLI loads `GEMINI.md` hierarchically: global at `~/.gemini/GEMINI.md`, project-level files in workspace directories and their ancestors, and sub-directory `GEMINI.md` files when a tool accesses files in those directories.
## Personal skills directory
User-level skills live at **`~/.gemini/skills/`**, with **`~/.agents/skills/`** as a cross-runtime alias (shared with Codex and Copilot CLI). When both directories exist at the same scope, `.agents/skills/` takes precedence. Each skill is a subdirectory containing a `SKILL.md` (with `name` and `description` frontmatter).
## Subagent support
Gemini CLI dispatches subagents through the `invoke_agent` tool, which takes `agent_name` and `prompt` parameters. The same dispatch is also surfaced as a chat-syntax shortcut: typing `@generalist <prompt>` is equivalent to calling `invoke_agent` with `agent_name: "generalist"`. Built-in agent names include `generalist`, `cli_help`, `codebase_investigator`, and (with browser tooling enabled) `browser_agent`.
Skills dispatch with `Subagent (general-purpose):` and either reference a prompt-template file (e.g., `superpowers:subagent-driven-development`'s `./implementer-prompt.md`) or supply an inline prompt. On Gemini CLI:
| Skill dispatch form | Gemini CLI equivalent |
|---------------------|----------------------|
| References a `*-prompt.md` template (implementer, task-reviewer, code-reviewer, etc.) | Fill the template, then `invoke_agent` with `agent_name: "generalist"` and the filled prompt |
| References `superpowers:requesting-code-review`'s `./code-reviewer.md` | `invoke_agent` with `agent_name: "generalist"` and the filled review template |
| Inline prompt (no template referenced) | `invoke_agent` with `agent_name: "generalist"` and your inline prompt |
### Prompt filling
Skills provide prompt templates with placeholders like `{WHAT_WAS_IMPLEMENTED}` or `[FULL TEXT of task]`. Fill all placeholders before passing the complete prompt to `invoke_agent`. The prompt template itself contains the agent's role, review criteria, and expected output format — the subagent will follow it.
### Parallel dispatch
Gemini CLI supports parallel subagent dispatch. Issue multiple `invoke_agent` calls in the same response (or multiple `@generalist` invocations in one prompt) to run independent subagent work in parallel. Keep dependent tasks sequential, but do not serialize independent subagent tasks just to preserve a simpler history.
## Additional Gemini CLI tools
These tools are unique to Gemini CLI:
| Tool | Purpose |
|------|---------|
| `save_memory` (legacy) | Persist facts across sessions when `experimental.memoryV2 = false` |
| `get_internal_docs` | Look up Gemini CLI's bundled documentation |
| `ask_user` | Pose structured questions to the user (text / single-select / multi-select) |
| `enter_plan_mode` / `exit_plan_mode` | Switch into and out of read-only plan mode |
| `update_topic` | Update the current conversation's topic / strategic-intent metadata |
| `complete_task` | Signal that a Gemini subagent has completed and return its result to the parent agent |
| `tracker_create_task`, `tracker_update_task`, `tracker_get_task`, `tracker_list_tasks`, `tracker_add_dependency`, `tracker_visualize` | Rich task tracker with dependency and visualization support |
| `read_mcp_resource`, `list_mcp_resources` | MCP resource access |
@@ -0,0 +1,56 @@
# Hermes Agent Tool Mapping
Skills speak in actions ("dispatch a subagent", "create a todo", "read a file"). On Hermes Agent these resolve to the tools below.
## Tools
| Action skills request | Hermes tool |
|---|---|
| Read a file | `read_file` |
| Create a new file | `write_file` |
| Edit a file (targeted patch) | `patch` |
| Run a shell command | `terminal` |
| Search file contents | `search_files` |
| Find files by name | `terminal` with `find` |
| Fetch a URL / read a webpage | `web_extract(urls=[...])` |
| Search the web | `web_search(query=...)` |
| Dispatch a subagent | `delegate_task(goal=..., context=..., toolsets=[...], role="leaf")` |
| Task tracking | `todo` tool |
| Invoke a skill | `skill_view("skill-name")` |
## Instructions file
When a skill mentions "your instructions file," on Hermes Agent this is **`AGENTS.md`** in the project directory, or **`SOUL.md`** globally at `~/.hermes/SOUL.md`.
## Invoking a skill
Hermes Agent has a `skills` toolset with `skill_view` and `skills_list` tools.
To invoke a superpowers skill, use:
```
skill_view("brainstorming")
skill_view("test-driven-development")
```
If `skill_view` cannot find a superpowers skill (it may not appear in the catalog
until the plugin fully registers it), fall back to reading the SKILL.md directly:
```
read_file(path="~/.hermes/plugins/superpowers/skills/<skill-name>/SKILL.md")
```
This fallback is the same mechanism used by other harnesses without native skill loading.
## Subagent dispatch
Use `delegate_task` to spawn isolated subagents for parallel or sequential workstreams:
```
delegate_task(goal="...", context="...", toolsets=[...], role="leaf")
```
If `delegate_task` is unavailable, do the work inline rather than inventing tool calls.
## Task tracking
Use the `todo` tool for task tracking within a session. For multi-agent task boards, use `hermes kanban` CLI if available. Treat older `TodoWrite` references as the task-tracking action.
@@ -0,0 +1,35 @@
# Muse Tool Mapping
Skills speak in actions ("dispatch a subagent", "create a todo", "read a file"). On Muse these resolve to the tools below.
| Action skills request | Muse equivalent |
|----------------------|----------------|
| Read a file | `read_file` |
| Read multiple files | `read_file` (call multiple times) or `search` |
| Create a new file | `write_file` |
| Edit a file | `edit_file` |
| Run a shell command | `bash` |
| Search file contents | `search` |
| Find files by name | `search` with `glob` |
| Fetch a URL | `web_fetch` |
| Search the web | `web_search` |
| Invoke a skill | `read_file` on `skills/<name>/SKILL.md` or native skill tool |
| Dispatch a subagent (`Subagent (general-purpose):` template) | `subagent_spawn` with prompt filling |
| Task tracking ("create a todo", "mark complete") | `write_todos` or `bash` task file |
| Ask the user a question | `request_user_input` |
## Instructions file
When a skill mentions "your instructions file", on Muse this is **`CLAUDE.md`** or **`AGENTS.md`** in the project root. Muse loads these hierarchically where configured.
## Skill invocation
Muse has native skill support via `muse skills`. To invoke a Superpowers skill, read its `SKILL.md` and follow the instructions. The bootstrap (`using-superpowers`) is injected automatically at `SessionStart` via the plugin hook — you are already following it, do not re-load it.
## Subagent dispatch
Use `subagent_spawn` to delegate work to isolated subagents. Fill prompt templates (e.g., `implementer-prompt.md`, `task-reviewer-prompt.md`) before dispatching. If no subagent tool is available, do the work inline rather than inventing tool calls.
## Task tracking
Use `write_todos` for checklist tracking. Create one todo per skill checklist item, mark in_progress/completed as you go. If `write_todos` is unavailable, maintain a markdown task file via `write_file`/`edit_file`.
@@ -0,0 +1,16 @@
# Pi Tool Mapping
Skills speak in actions ("dispatch a subagent", "create a todo", "read a file"). On Pi these resolve to the tools below.
| Action skills request | Pi equivalent |
| --- | --- |
| Dispatch a subagent (`Subagent (general-purpose):` template) | Use an installed subagent tool such as `subagent` from `pi-subagents` if available |
| Task tracking ("create a todo", "mark complete") | Use an installed todo/task tool if available, otherwise track tasks in the plan or `TODO.md` |
## Subagents
Pi core does not ship a standard subagent tool. The `pi-subagents` package is a strong optional companion and provides a `subagent` tool with single-agent, chain, parallel, async, forked-context, and resume/status workflows. If no subagent tool is available, do not fabricate `Task` calls; execute sequentially in the current session or explain that the optional subagent capability is not installed.
## Task lists
Pi core does not ship a standard task-list tool. If a todo/task extension is installed, use its documented tool. Otherwise use Superpowers plan files, checklists in Markdown, or a repo-local `TODO.md` for task tracking. Older Superpowers docs may refer to `TodoWrite`; treat that as the task-tracking action above.
@@ -36,6 +36,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -43,6 +43,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -36,6 +36,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -43,6 +43,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -40,6 +40,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -47,6 +47,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -39,6 +39,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -46,6 +46,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -36,6 +36,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -43,6 +43,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -58,6 +58,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -67,6 +67,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -40,6 +40,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -47,6 +47,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -36,6 +36,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -43,6 +43,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -38,6 +38,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -45,6 +45,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -36,6 +36,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -43,6 +43,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -37,6 +37,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -44,6 +44,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
+43 -34
View File
@@ -28,7 +28,7 @@ agents:
version: '1.0'
path: agents/_shared
original_ref: local:../_shared
hash: 954498133668f5209742225f02a415b2c0d478a521220ab3ec4aeb2d9c261c50
hash: a0e0af955e71c9481c53f81203e673192105d327f903de5337f6dc8efbbf13ca
- name: k8s-orchestrator
version: '1.0'
path: agents/k8s-orchestrator
@@ -39,7 +39,7 @@ agents:
version: '1.0'
path: agents/_shared
original_ref: local:../_shared
hash: 954498133668f5209742225f02a415b2c0d478a521220ab3ec4aeb2d9c261c50
hash: a0e0af955e71c9481c53f81203e673192105d327f903de5337f6dc8efbbf13ca
- name: dependency-patcher
version: '1.0'
path: agents/dependency-patcher
@@ -50,7 +50,7 @@ agents:
version: '1.0'
path: agents/_shared
original_ref: local:../_shared
hash: 954498133668f5209742225f02a415b2c0d478a521220ab3ec4aeb2d9c261c50
hash: a0e0af955e71c9481c53f81203e673192105d327f903de5337f6dc8efbbf13ca
- name: sre-incident-eng
version: '1.0'
path: agents/sre-incident-eng
@@ -61,7 +61,7 @@ agents:
version: '1.0'
path: agents/_shared
original_ref: local:../_shared
hash: 954498133668f5209742225f02a415b2c0d478a521220ab3ec4aeb2d9c261c50
hash: a0e0af955e71c9481c53f81203e673192105d327f903de5337f6dc8efbbf13ca
- name: observability-eng
version: '1.0'
path: agents/observability-eng
@@ -72,7 +72,7 @@ agents:
version: '1.0'
path: agents/_shared
original_ref: local:../_shared
hash: 954498133668f5209742225f02a415b2c0d478a521220ab3ec4aeb2d9c261c50
hash: a0e0af955e71c9481c53f81203e673192105d327f903de5337f6dc8efbbf13ca
- name: dba-specialist
version: '1.0'
path: agents/dba-specialist
@@ -83,7 +83,7 @@ agents:
version: '1.0'
path: agents/_shared
original_ref: local:../_shared
hash: 954498133668f5209742225f02a415b2c0d478a521220ab3ec4aeb2d9c261c50
hash: a0e0af955e71c9481c53f81203e673192105d327f903de5337f6dc8efbbf13ca
- name: cache-streaming-eng
version: '1.0'
path: agents/cache-streaming-eng
@@ -94,7 +94,7 @@ agents:
version: '1.0'
path: agents/_shared
original_ref: local:../_shared
hash: 954498133668f5209742225f02a415b2c0d478a521220ab3ec4aeb2d9c261c50
hash: a0e0af955e71c9481c53f81203e673192105d327f903de5337f6dc8efbbf13ca
- name: data-pipeline-eng
version: '1.0'
path: agents/data-pipeline-eng
@@ -105,7 +105,7 @@ agents:
version: '1.0'
path: agents/_shared
original_ref: local:../_shared
hash: 954498133668f5209742225f02a415b2c0d478a521220ab3ec4aeb2d9c261c50
hash: a0e0af955e71c9481c53f81203e673192105d327f903de5337f6dc8efbbf13ca
- name: analytics-metrics-eng
version: '1.0'
path: agents/analytics-metrics-eng
@@ -116,7 +116,7 @@ agents:
version: '1.0'
path: agents/_shared
original_ref: local:../_shared
hash: 954498133668f5209742225f02a415b2c0d478a521220ab3ec4aeb2d9c261c50
hash: a0e0af955e71c9481c53f81203e673192105d327f903de5337f6dc8efbbf13ca
- name: mlops-serving-eng
version: '1.0'
path: agents/mlops-serving-eng
@@ -127,7 +127,7 @@ agents:
version: '1.0'
path: agents/_shared
original_ref: local:../_shared
hash: 954498133668f5209742225f02a415b2c0d478a521220ab3ec4aeb2d9c261c50
hash: a0e0af955e71c9481c53f81203e673192105d327f903de5337f6dc8efbbf13ca
- name: vector-rag-spec
version: '1.0'
path: agents/vector-rag-spec
@@ -138,14 +138,14 @@ agents:
version: '1.0'
path: agents/_shared
original_ref: local:../_shared
hash: 954498133668f5209742225f02a415b2c0d478a521220ab3ec4aeb2d9c261c50
hash: a0e0af955e71c9481c53f81203e673192105d327f903de5337f6dc8efbbf13ca
integrity:
algorithm: sha256
files:
CULTURE.md: 138469da9119bebdc81c706e748d38989504a0b2f281619470763b81c492c833
README.md: c4170fbe8e1f862882fc672c05c194861789e63221bc0465e9a70ba0e91ef97a
SETUP.md: a01048df4f1b0a0d68cc0c8349ad32d8b970676b8acc83851f8efc7f1adb3e6a
agents/_shared/agent.yaml: 954498133668f5209742225f02a415b2c0d478a521220ab3ec4aeb2d9c261c50
agents/_shared/agent.yaml: a0e0af955e71c9481c53f81203e673192105d327f903de5337f6dc8efbbf13ca
agents/_shared/skills/address-sanitizer/LICENSE: 7abe19ec9bb73b36141b999b861d24ad855e808bafe0f81e84cce28556f6c297
agents/_shared/skills/address-sanitizer/SKILL.md: eb9ea8210fa55d50477fbe52993a704e320c88739c10d619864b6ce377ebce25
agents/_shared/skills/address-sanitizer/agents/openai.yaml: cbad1378f4912a71dec8c1c9307b806f787c559e751a5fd1926028f1c0c2e7b5
@@ -553,6 +553,15 @@ integrity:
agents/_shared/skills/typescript-astro/SKILL.md: 6db8903dc14702a1cfde72da1ea5d00c2ed799aba8f71c125a8ab1bc46948bc7
agents/_shared/skills/using-git-worktrees/LICENSE: a37e0e9697144819e1d965176ac4ae5bc3fa02d11e7812036bbcadf6dafe2400
agents/_shared/skills/using-git-worktrees/SKILL.md: 8cfb86f121269e8f7f12361e6795c4f6738828340e28964c9229d365666c9edd
agents/_shared/skills/using-superpowers/LICENSE: a37e0e9697144819e1d965176ac4ae5bc3fa02d11e7812036bbcadf6dafe2400
agents/_shared/skills/using-superpowers/SKILL.md: 82c5c8866ad7f5dd4440ce66bd7806ba48a2f13771beae5cf112e53f08fe36ba
agents/_shared/skills/using-superpowers/references/antigravity-tools.md: 4880f6de3da4e32f9659ebe7a72b9e0ebfff04e028c2ed96173f86d0387a04c0
agents/_shared/skills/using-superpowers/references/claude-code-tools.md: 21479a3fee27448cab8748a3b5687e53bb257883bda9c070426f9a1ab5cebf1b
agents/_shared/skills/using-superpowers/references/codex-tools.md: 1a38ad9b188c393052f58d95657a1c35ea6aafc8b5a27f198f3922912f70bbe7
agents/_shared/skills/using-superpowers/references/gemini-tools.md: 62b9157bcb0ee3c6784e3d0da0798ddfa5872f9e0c34bea48f3079dabea71965
agents/_shared/skills/using-superpowers/references/hermes-tools.md: e2185c976a3c87503910e05e2aea58cc89bc8e569bb624b93df9958ac47a9190
agents/_shared/skills/using-superpowers/references/muse-tools.md: 5a1da5c575fe18456ca71cd47ebfd8a38c745f8d82a67fe64d5b83080000eeb3
agents/_shared/skills/using-superpowers/references/pi-tools.md: 703dbc83d23ecab9c6f388460c38abc482e9dee2fe6772a8c7a255152ad3a4d5
agents/_shared/skills/variant-analysis/LICENSE: 7abe19ec9bb73b36141b999b861d24ad855e808bafe0f81e84cce28556f6c297
agents/_shared/skills/variant-analysis/SKILL.md: 7b6b78e499bcb88d05c68254ffc91ebc28edabf4e9808adcc40e2628ebb9407e
agents/_shared/skills/variant-analysis/agents/openai.yaml: 6d6b67250ba8300e79491ac12e73262f54f2bf50776276fd04607ae4e3006fde
@@ -609,89 +618,89 @@ integrity:
agents/analytics-metrics-eng/agent.yaml: 338adde4b99a5f094ea6123553173a83d4966bbf9fc15c9be193c4403ebe1e47
agents/analytics-metrics-eng/guidance/role.md: 2b118ec3cbc30a56e8d84b4f231c244526ed2a273f0c74c89f9c5ef6f2950758
agents/analytics-metrics-eng/runtime/mcp.json: dcc25e47c4334888a8aaf9a0a702aeba095b16d62f8937b9e51458dc812d84ef
agents/analytics-metrics-eng/runtime/pi-permission-config.json: eec9a554e77750b535d0b5387aeaaad5b61b68ff6fa390789a6536f530d30781
agents/analytics-metrics-eng/runtime/pi-permission-config.json: c36775ca09c3cb77a90bde56d89604f54dcd5b31a9de876d85ad6dee040cabd7
agents/analytics-metrics-eng/runtime/pi-settings.json: 56d9cda1f64c99524b01561abd9db68e1ded823962fac7b79cf957c7fe7922be
agents/analytics-metrics-eng/runtime/policy-enforcement.json: 01ef42e2ccffb5bf3dcf045c46c317fe4d9c05d98b611cb90b2c34ef1b91cd9f
agents/analytics-metrics-eng/runtime/policy-enforcement.json: 7ea5aca90cb91504b889ade73862a3ba509f5e1d2b4c0efaf5f5e0f890714df1
agents/analytics-metrics-eng/skills/clickhouse-schema-and-aggregation-optimization/SKILL.md: d142343caf7ef2934478aa944e4182dd839045eda94906f82c7149da09952623
agents/analytics-metrics-eng/startup/context.md: c038545136b1c2d0323110d81df16b872a3f8fb96a8aa1cd713bf9f69c1a0983
agents/cache-streaming-eng/agent.yaml: 766985ab267a8204fb0a7526f2791586ca134503a082495fc9a8d44b9b3fcad8
agents/cache-streaming-eng/guidance/role.md: 14e2f8f53fd61cb2de791bbf1727f7631b747a5458d1e8c1009ceaaa1182bf76
agents/cache-streaming-eng/runtime/mcp.json: 3592e3c862e24b45c5d79130fca0e85fec96c062b4ad5ead8bb71e7b5e6cc95d
agents/cache-streaming-eng/runtime/pi-permission-config.json: 8b864657c9b49b9de158289222a05a6641861a63658849c261d95151d72f46f4
agents/cache-streaming-eng/runtime/pi-permission-config.json: 690af98989cef7d399437e91f7ddc6b9c5479247621963c0069ca757aab142ec
agents/cache-streaming-eng/runtime/pi-settings.json: 56d9cda1f64c99524b01561abd9db68e1ded823962fac7b79cf957c7fe7922be
agents/cache-streaming-eng/runtime/policy-enforcement.json: 4d889e396db05bec6b97602ab738defa814decbaa69c80f056c08700d370fd00
agents/cache-streaming-eng/runtime/policy-enforcement.json: 88f956347c9f5407c5cc4763482a4668e8b2626a6e330ebccc28e1bc6ab37831
agents/cache-streaming-eng/skills/kafka-topic-and-consumer-tuning/SKILL.md: b5ceab25d16e6718ca37f7b2e2b25c840d40a4e230c76a882afc3dda6b014dba
agents/cache-streaming-eng/startup/context.md: 7a748372d89d05ef6c51279ea1c8b847091eb1ceeda55d7995b94dbd1af8b993
agents/cloud-platform-eng/agent.yaml: b7f324934f48248a33ba30bb5145f597bf40136c82058acd1ba2e6a0eea7dd3b
agents/cloud-platform-eng/guidance/role.md: 69eabffdacf6db5a75c56bfa3049fe29aaa382c169aa58cffebd71ada98f99ba
agents/cloud-platform-eng/runtime/mcp.json: 553dfbd3fc0e0521d23ef369fc83be477f5e4fc2f2c25be764aa7dee9b575313
agents/cloud-platform-eng/runtime/pi-permission-config.json: b96b33578cba45d8d7542b89bc103e2eb82f5d2d5538d588c6ade6bb331b9109
agents/cloud-platform-eng/runtime/pi-permission-config.json: d9b2ec369f392eaafe267ec0c9ac3ad72f24f13c94dec865a78015f107685c2b
agents/cloud-platform-eng/runtime/pi-settings.json: 56d9cda1f64c99524b01561abd9db68e1ded823962fac7b79cf957c7fe7922be
agents/cloud-platform-eng/runtime/policy-enforcement.json: f4fa9a255600c033822ea047ef7f3d46e03235cde6df22bbd190839a933aa26d
agents/cloud-platform-eng/runtime/policy-enforcement.json: f017e283ad87286c2724face243c97082e754802996b989c88e07962f618c224
agents/cloud-platform-eng/skills/opentofu-plan-and-validation/SKILL.md: baacb5cbafb36c54f17a275bf7b477f31e390d25c23746c2d3db75df40d11179
agents/cloud-platform-eng/startup/context.md: dea46f54986a0000e534a10f76a5c4524177e6bf95cd8eec641f370e86f58e07
agents/data-pipeline-eng/agent.yaml: 68ffaca2254155ac2011bcf20365281ada1477777584111530418097cfe78298
agents/data-pipeline-eng/guidance/role.md: 9b9ffc17b198c8602ef105e539636c53e1d6fc20c51949fa56a3971aa96c0d4d
agents/data-pipeline-eng/runtime/mcp.json: cad448898aa8e2d4340e887be203eecb7924b83b228a645ff96cbf63e230cf65
agents/data-pipeline-eng/runtime/pi-permission-config.json: 464f0150804cce69cdb383557e704d505e2e4f1a2c1c9ebf6e170c6d4b4ce282
agents/data-pipeline-eng/runtime/pi-permission-config.json: f54590cf81673c0ea88d090a5fe6bcd603997659a87c13c8646ad36b5e7eb2be
agents/data-pipeline-eng/runtime/pi-settings.json: 56d9cda1f64c99524b01561abd9db68e1ded823962fac7b79cf957c7fe7922be
agents/data-pipeline-eng/runtime/policy-enforcement.json: 929c31349bb38ea77b63b69c9974c43980c721614ed10d4ddc2365aed51da5e7
agents/data-pipeline-eng/runtime/policy-enforcement.json: cb0b548d39ce9888f985b79a07eda664ff28c21ddd51b2a4c1e7f55c5ed6e94e
agents/data-pipeline-eng/skills/duckdb-dbt-pipeline-execution/SKILL.md: 5839d91c6174428233172be16e8f0d11091f93716240865c8e85d2dc2e10f5c1
agents/data-pipeline-eng/startup/context.md: eb3d7f71b13f3d5e9aa62afde35319e4fd6bf657d8d23642a87ed3b00a0d6ae1
agents/dba-specialist/agent.yaml: 415b87df3ff6cee91352f1276cdd4db15a36d2983eb5315adb9421dbd4f19963
agents/dba-specialist/guidance/role.md: 72009873d11289d4209650aab09138200721152c69cc3f6707bb283bed4525a2
agents/dba-specialist/runtime/mcp.json: 05c957e2c2e4980e9a32e54010f7e07c6d3892271d5fc64b3f4e3f9f82208ff9
agents/dba-specialist/runtime/pi-permission-config.json: ada4629cfa220150e790ee8b7df8bbc55ea9846b98fc58e30544539905303a12
agents/dba-specialist/runtime/pi-permission-config.json: 3eb30dedb22125db7e065b66852e745d76e1cf15f6130d695c52807f19f2e261
agents/dba-specialist/runtime/pi-settings.json: 56d9cda1f64c99524b01561abd9db68e1ded823962fac7b79cf957c7fe7922be
agents/dba-specialist/runtime/policy-enforcement.json: e7e1fc5f430526b2d1cdaca4292177e6767e9a09cb9ee48fc2da3bed582091ec
agents/dba-specialist/runtime/policy-enforcement.json: 7ac82208a87e1dbd3e39c07fae7971c02601de4dcfa3d4b499e01a106425b8c3
agents/dba-specialist/skills/zero-downtime-migration-audit/SKILL.md: f913f16991d487d783a8ed278ffd11af0bd2c1b2eeeb19292015b4fb76972ca1
agents/dba-specialist/startup/context.md: 525f78a65562b8462774adc0944b54b9b4cbd2fc640342b5f08c82f8e6c2af8f
agents/dependency-patcher/agent.yaml: 89acb9cd6141ab3ac9c6a350304d9b1a7ec9a7f6274024e1be22ffd58426be16
agents/dependency-patcher/guidance/role.md: 08e3adbf0b7576d361a8d28440e1916499655b7e2c962b7354a30fd21fd2abe9
agents/dependency-patcher/runtime/mcp.json: 29a117630a6b587fb3a7f02b8a3a4d0b0cbc9d7f1f7bdbfdc653aba3ed482c04
agents/dependency-patcher/runtime/pi-permission-config.json: f535ce76a05ed058403fd90a9b1fe3c228211045d127c4f74900bbb59b284ea5
agents/dependency-patcher/runtime/pi-permission-config.json: 693eb6cb761099c007c263f0798e02a306d518a71ce079f33dd9b1fa7a7ea873
agents/dependency-patcher/runtime/pi-settings.json: 56d9cda1f64c99524b01561abd9db68e1ded823962fac7b79cf957c7fe7922be
agents/dependency-patcher/runtime/policy-enforcement.json: 08119e37f0009605844fe60de8336d30e89ccf2576ce0d0f0a33a08b7f10a0ea
agents/dependency-patcher/runtime/policy-enforcement.json: 117eea64a74352d61bb1495782b812ff9740bbc8401c5881f620040a334fe3f0
agents/dependency-patcher/skills/automated-lockfile-patching/SKILL.md: 4495da482d777cfce34ba492086c5130c2b935b670fbdbb3530f8efdefadb705
agents/dependency-patcher/startup/context.md: 3e057eb714af4019515c28d03869d0a8c5958b8742fe37123565d7a497c6ed31
agents/k8s-orchestrator/agent.yaml: bc6950bc4c5a6a00c63eac32be9758ae264dd243366418e48902c46cea80f1be
agents/k8s-orchestrator/guidance/role.md: 4402185eaf69f22687553d0f825378a0c0fed99f28e9d0fc5b68dcf0a6790f89
agents/k8s-orchestrator/runtime/mcp.json: 51d32def56562221a7a0bf4f1ca9c598d38687f25f742538a23d0f2b716f743d
agents/k8s-orchestrator/runtime/pi-permission-config.json: 559da1e2d7645f5e69c94696f852eb61136bc5c982109f0eb21ad07215015271
agents/k8s-orchestrator/runtime/pi-permission-config.json: 9bbe9e3d2842922f1c3b7c5d94b2c615e2eedb70e50f5f890def0991e95a5272
agents/k8s-orchestrator/runtime/pi-settings.json: 56d9cda1f64c99524b01561abd9db68e1ded823962fac7b79cf957c7fe7922be
agents/k8s-orchestrator/runtime/policy-enforcement.json: 1cae5009711036b7f6399c1cca5aad5ecea91f062a945cb5a6c6fe100718ca88
agents/k8s-orchestrator/runtime/policy-enforcement.json: 68b802e1a781a5eb49ba0698673cfab287c44f1026b90f8b1f9dbac7cf477628
agents/k8s-orchestrator/skills/helm-chart-security-hardening/SKILL.md: 577578cf6f3539f62894e91a4b0ecf04bdcf76b3a450e0906eb850bfa6520e4a
agents/k8s-orchestrator/startup/context.md: 8567c1794fd4e3e6c68ac07b770dc2eb780e8aee9765e045480109929f644f7a
agents/mlops-serving-eng/agent.yaml: 1e9c12a614ddc1ae54f5dfb868e24792540b1b63cd4e873eba0bf33b519f0571
agents/mlops-serving-eng/guidance/role.md: fec79971f1e3899ff483479afabeec1faa9ce761259dab5fe7fefbaa3dcee16f
agents/mlops-serving-eng/runtime/mcp.json: d8e397af03b5b032f21d0aa967086f0c78b33c87b76f2e9898ae0a144df7de02
agents/mlops-serving-eng/runtime/pi-permission-config.json: 1c438e8a9120cb3511c1f61f6d0cf8c589bda8ee63b73c6b3d1f4c3615f5efab
agents/mlops-serving-eng/runtime/pi-permission-config.json: 4a3f322e40394c3a0b2235e635101e4084530e26e64d5e5faa545fc7f8f4f6d7
agents/mlops-serving-eng/runtime/pi-settings.json: ed0f22e6beec11ce958f1cf0f206b4f0d7b899a77cbb1aba8f3d042caa7423e9
agents/mlops-serving-eng/runtime/policy-enforcement.json: 64fb9c0d4f46959a56e421229b76fbc47b10825386e9fbebab7facbb7bf5cc1c
agents/mlops-serving-eng/runtime/policy-enforcement.json: ae9dbee2f8c28694372a4795d56805b8496d5c53f3ebd8b78e7df0a1f3b064b8
agents/mlops-serving-eng/skills/vllm-serving-benchmarking/SKILL.md: 90923f787e04584f76a48f515cf0f18b92ec9aeb9b9ba30da5b8bfb60e9e1ce5
agents/mlops-serving-eng/startup/context.md: 5479124f8640c7cfe63cfc0f243fb0a93cdf9e863934cb0a64ce5d42b800216f
agents/observability-eng/agent.yaml: 9af98694529c15c845d3cdda9596b3c0be5657d62d5667ba4887fb8946a291c4
agents/observability-eng/guidance/role.md: 1a6bcdab14f535f0f97a1d99c7e19e81498b6ca631c5e3f5266361ebf36d457f
agents/observability-eng/runtime/mcp.json: 3c971773f081d7d977b84cf7b6d8baf0a8366d07ed9b2e943d3d45e33dd7c5a9
agents/observability-eng/runtime/pi-permission-config.json: 4b470e254195e1a0b7009b260555ac690cd9897a641301602555f3baba32235a
agents/observability-eng/runtime/pi-permission-config.json: d5bae2138533c9f86f96b25b8a2a54b0cd9e5c780d8b0d3b669bbfb8434ee34a
agents/observability-eng/runtime/pi-settings.json: 56d9cda1f64c99524b01561abd9db68e1ded823962fac7b79cf957c7fe7922be
agents/observability-eng/runtime/policy-enforcement.json: 3696ea5c52feb43ddbabdf983f5a59543c268579e52ff5c9cafe6d332cff03c0
agents/observability-eng/runtime/policy-enforcement.json: 257e594c40f7dd40c0ca11ee07a2037b125051ff15a20ec3a06530c6a8593b2d
agents/observability-eng/skills/prometheus-rule-validation/SKILL.md: 640ecafcdb9a694eb9718f8587351739a40aded5d30c7cf23a2820ba9e6347d0
agents/observability-eng/startup/context.md: 4753bd10ca95132e0fc04b0851cc8dba152b7025f8af6423448dfd557e2ae27b
agents/sre-incident-eng/agent.yaml: 54645d26e75e2f4b38de0cbcdd739f500f594f7803ba5ba0c949f9bd099c7d5f
agents/sre-incident-eng/guidance/role.md: 278e01e1215ad49f2b7084161cbac9da4758d888336b56b4d1fc76801206e06d
agents/sre-incident-eng/runtime/mcp.json: 9204205ddc81553e9b576f00a782fab384e03cf3aaaec2e19a00a1dc4bc3d9e8
agents/sre-incident-eng/runtime/pi-permission-config.json: fb9ac39dffd41b928389bcec2dd7baa6bce67c66ecbd94d16722c2786da01898
agents/sre-incident-eng/runtime/pi-permission-config.json: 69a1d067cb49127c2875cbfd708e8716e7a5727d2fea5ee32f4bed3528f83c07
agents/sre-incident-eng/runtime/pi-settings.json: 56d9cda1f64c99524b01561abd9db68e1ded823962fac7b79cf957c7fe7922be
agents/sre-incident-eng/runtime/policy-enforcement.json: 00e8d2cbc3dd03d7b2171b4d2f49285ae335a0508739b6c4a1ca30d1bbbf977d
agents/sre-incident-eng/runtime/policy-enforcement.json: 853162d771b2172a7b37b8caf688b65f3071cecc73bc03b3c2bc8a74ce235f61
agents/sre-incident-eng/skills/blameless-incident-triage-and-postmortem/SKILL.md: 8eaeeaf872e87bce263319354b7c84933d4458bcd0dcb9a4757f5cf48e460e7c
agents/sre-incident-eng/startup/context.md: fad3cd909aeaa2bd27641eede094dc65733c1d45d0f8491d125e77e918fdabb1
agents/vector-rag-spec/agent.yaml: 79ac788d254e348575611b3075d77e14ea0b029a3e26a53fc408b253f0741fd5
agents/vector-rag-spec/guidance/role.md: 5ae5563b0ed9dfdf9b49814342644496f02f52f1d6b4edd7693109f56dd8be7d
agents/vector-rag-spec/runtime/mcp.json: 0a110c2d23edc18fc5f697210dfac9e373b103db8ab06a70f64bde647cb26b54
agents/vector-rag-spec/runtime/pi-permission-config.json: 72fc70e38f390688a351ea74cf1a53a877b67b4e8acd995c1214d088306206ee
agents/vector-rag-spec/runtime/pi-permission-config.json: 792acf6e362c862abbab7a958d317ddf4b9fce573b69da1d7dfd9b97f17df349
agents/vector-rag-spec/runtime/pi-settings.json: 56d9cda1f64c99524b01561abd9db68e1ded823962fac7b79cf957c7fe7922be
agents/vector-rag-spec/runtime/policy-enforcement.json: 391c43dfdf90cb890cbe14a39f8c8bc4b0a131e8a5cc0b71f02bee4f4b053ef3
agents/vector-rag-spec/runtime/policy-enforcement.json: 6736a06ddc634226597fb26ec2912442ad662205230265313430b5eaf4581d7d
agents/vector-rag-spec/skills/rag-retrieval-evaluation/SKILL.md: 6354f5cbbd82844026861b66ec0c316a2157aaeeb03e5c773b097f4f28d600dc
agents/vector-rag-spec/startup/context.md: 8e5be9a0725279a23f59c16470fbc6c2c98b05a0233820a17af73719c9d09cdc
configurations.yaml: abf3b6fd104f828ad11b2c710b1a2b2cff6e1fe99eba7a686a688b217e530fdc
@@ -117,6 +117,8 @@ resources:
path: skills/typescript-astro
- id: using-git-worktrees
path: skills/using-git-worktrees
- id: using-superpowers
path: skills/using-superpowers
- id: variant-analysis
path: skills/variant-analysis
- id: verification-before-completion
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2025 Jesse Vincent
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
@@ -0,0 +1,65 @@
---
name: using-superpowers
description: Use when starting any conversation - establishes how to find and use skills, requiring skill invocation before ANY response including clarifying questions
---
<SUBAGENT-STOP>
If you were dispatched as a subagent to execute a specific task, ignore this skill.
</SUBAGENT-STOP>
<EXTREMELY-IMPORTANT>
If you think there is even a 1% chance a skill might apply to what you are doing, you ABSOLUTELY MUST invoke the skill.
IF A SKILL APPLIES TO YOUR TASK, YOU DO NOT HAVE A CHOICE. YOU MUST USE IT.
This is not negotiable. You cannot rationalize your way out of this.
</EXTREMELY-IMPORTANT>
## The Rule
**Invoke relevant or requested skills BEFORE any response or action** — including clarifying questions, exploring the codebase, or checking files. If it turns out wrong for the situation, you don't have to use it.
**Before entering plan mode:** if you haven't already brainstormed, invoke the brainstorming skill first.
Then announce "Using [skill] to [purpose]" and follow the skill exactly. If it has a checklist, create a todo per item.
## Skill Priority
When multiple skills apply, process skills come first — they set the approach, then implementation skills (frontend-design, etc.) carry it out. Brainstorming and systematic-debugging are Superpowers' most common process skills, but the rule holds for any of them.
- "Let's build X" → superpowers:brainstorming first, then implementation skills.
- "Fix this bug" → superpowers:systematic-debugging first, then domain skills.
## Red Flags
These thoughts mean STOP—you're rationalizing:
| Thought | Reality |
|---------|---------|
| "This is just a simple question" | Questions are tasks. Check for skills. |
| "I need more context first" | Skill check comes BEFORE clarifying questions. |
| "Let me explore the codebase first" | Skills tell you HOW to explore. Check first. |
| "I can check git/files quickly" | Files lack conversation context. Check for skills. |
| "Let me gather information first" | Skills tell you HOW to gather information. |
| "This doesn't need a formal skill" | If a skill exists, use it. |
| "I remember this skill" | Skills evolve. Read current version. |
| "This doesn't count as a task" | Action = task. Check for skills. |
| "The skill is overkill" | Simple things become complex. Use it. |
| "I'll just do this one thing first" | Check BEFORE doing anything. |
| "This feels productive" | Undisciplined action wastes time. Skills prevent this. |
| "I know what that means" | Knowing the concept ≠ using the skill. Invoke it. |
## Platform Adaptation
If your harness appears here, read its reference file for special instructions:
- Claude Code: `references/claude-code-tools.md`
- Codex: `references/codex-tools.md`
- Pi: `references/pi-tools.md`
- Antigravity: `references/antigravity-tools.md`
- Hermes Agent: `references/hermes-tools.md`
- Muse: `references/muse-tools.md`
## User Instructions
User instructions (CLAUDE.md, AGENTS.md, GEMINI.md, etc, direct requests) take precedence over skills, which in turn override default behavior. Only skip skill workflows or instructions when your human partner has explicitly told you to.
@@ -0,0 +1,23 @@
# Antigravity CLI (`agy`) Tool Mapping
Skills speak in actions ("dispatch a subagent", "create a todo", "read a file"). On the Antigravity CLI (`agy`) these resolve to the tools below.
| Action skills request | Antigravity CLI equivalent |
|----------------------|----------------------|
| Dispatch a subagent (`Subagent (general-purpose):` template) | `invoke_subagent` with a built-in `TypeName` — `self` for full-capability work, `research` for read-only |
| Task tracking ("create a todo", "mark complete") | a **task artifact** — `write_to_file` with `IsArtifact: true` and `ArtifactType: "task"` (see [Task tracking](#task-tracking)). **Not** `manage_task`, which manages background processes. |
## Task tracking
Antigravity has **no todo tool** (`manage_task` manages background
processes — `list`/`kill`/`status`/`send_input` — it is *not* a checklist). When a
skill says to create a todo list or track tasks, maintain a **task artifact**: a
markdown checklist saved with `write_to_file` (`IsArtifact: true`,
`ArtifactMetadata.ArtifactType: "task"`), edited with `replace_file_content` /
`multi_replace_file_content` as you go.
At the start of any multi-step task, create the task artifact listing every step of
your plan. As you complete each step, edit the artifact to mark it done (`- [x]`).
If the plan changes, update the checklist. Keep it current — it is your source of
truth for what remains; once the conversation gets long, re-read it before starting
each step.
@@ -0,0 +1,29 @@
# Claude Code Tool Notes
Claude Code is the reference harness: skills speak its vocabulary
(`Agent` for a subagent dispatch, todos, `Skill`). These notes cover the
one place Claude Code can run a plan cheaper than the skills' default
shape. It is opt-in by your human partner and changes nothing the skills
require.
## Cheaper orchestration for subagent-driven development
The controller session is the most expensive seat in a
superpowers:subagent-driven-development run: it reads every dispatch
result and every report, and it usually runs on the session's most
capable model. Claude Code supports nested subagents (three layers below
the main conversation by default; `CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH`
adjusts it), so the whole loop can run one layer down.
When your human partner asks for it — or has said the session model is
too expensive to spend on coordination — dispatch ONE orchestrator
subagent on a mid-tier model with the plan path and the instruction to
use superpowers:subagent-driven-development end to end. The orchestrator
dispatches its own implementers and reviewers per that skill's Model
Selection; the workspace and ledger live on disk, so nothing is lost to
the extra layer. Its final message must carry the "Rulings I made" list
verbatim — that list is how the decisions reach your human partner, and
you relay it, not summarize it.
Do this only for a whole plan. Nesting a single task's dispatch buys
nothing and adds a seat.
@@ -0,0 +1,108 @@
## Subagent dispatch requires multi-agent support
Add to your Codex config (`~/.codex/config.toml`):
```toml
[features]
multi_agent = true
```
This enables the multi-agent tools that skills like
`dispatching-parallel-agents` and `subagent-driven-development` use.
Which tools you get depends on the multi-agent version your model
preset selects (current presets run V2; older ones run V1). Trust your
actual tool list over any table — including this one — when they
disagree.
- **Spawning:** give children a clean context with
`spawn_agent {fork_turns: "none"}`; the default `"all"` copies your
entire transcript into the child. On Codex 0.145+, role files under
`~/.codex/agents/` attach to isolated forks via `agent_type`.
Full-history forks accept `model` and `reasoning_effort` overrides
(only `agent_type` is refused there) — isolated forks are the SDD
default for context hygiene, not because overrides require them.
- **Fix rounds:** resume the implementer with `followup_task` — it
delivers your message, triggers a turn, and transparently reloads a
child the harness evicted. Never dispatch a fresh implementer on the
theory that a spawned agent cannot be messaged again; on V2 it
always can.
- **Lifecycle:** V2 has no `close_agent`. Finished children are
evicted automatically when slots are needed; leaving them unclosed
costs nothing. Only V1 sessions have `close_agent` — there, close
reviewers when their review returns, and close each implementer
after its task's review passes.
- **Model names:** never copy a model name from a skill, table, or old
session into `spawn_agent` without checking it against your current
spawn allowlist — V2 accepts only V2-capable presets and hard-errors
on the rest.
## Waiting on children
`wait_agent` is an event subscription, not a poll: a long wait wakes
the moment a child produces mailbox activity, with the same latency as
a short one. Short-timeout polling buys nothing and costs a tool call —
and a context rebill — per poll. In measured sessions, roughly
two-thirds of all wait calls were short polls that timed out.
- While you still have local work, do not wait at all. A completed
child's final answer is pushed into your mailbox and arrives with
your next turn.
- When you are genuinely idle with children outstanding, wait in
bounded stretches: `wait_agent` with `timeout_ms` 300000-600000
(5-10 minutes). After each stretch — wake or timeout — post one
status line, run `list_agents`, and chase any child that finished
without reporting. Never stack polls shorter than five minutes; the
event subscription wakes a bounded stretch just as fast as a short
one.
- Completion mail cannot wake an idle controller (it is delivered
without triggering a turn); covering that idle window is
`wait_agent`'s only job. A stretch that times out with no activity
is your cue to reconcile, not to shorten the next stretch.
## Model routing on spawns
Every `spawn_agent` you issue — including when you are yourself a
spawned child running a fan-out — sets `model` AND `reasoning_effort`
explicitly, per the Model Selection rules of the skill you are
executing. Setting `model` alone is a trap: the child's effort
silently resets to that model's default, not to yours.
Ask your human partner to add a machine-level backstop to
`~/.codex/config.toml` so any spawn that slips through still routes to
a deliberate tier instead of silently inheriting the session's most
expensive model:
```toml
[agents]
default_subagent_model = "<a mid-tier model from your spawn allowlist>"
default_subagent_reasoning_effort = "medium"
```
## Environment Detection
Skills that create worktrees or finish branches should detect their
environment with read-only git commands before proceeding:
```bash
GIT_DIR=$(cd "$(git rev-parse --git-dir)" 2>/dev/null && pwd -P)
GIT_COMMON=$(cd "$(git rev-parse --git-common-dir)" 2>/dev/null && pwd -P)
BRANCH=$(git branch --show-current)
```
- `GIT_DIR != GIT_COMMON` → already in a linked worktree (skip creation)
- `BRANCH` empty → detached HEAD (cannot branch/push/PR from sandbox)
See `using-git-worktrees` Step 0 and `finishing-a-development-branch`
Step 1 for how each skill uses these signals.
## Codex App Finishing
When the sandbox blocks branch/push operations (detached HEAD in an
externally managed worktree), the agent commits all work and informs
the user to use the App's native controls:
- **"Create branch"** — names the branch, then commit/push/PR via App UI
- **"Hand off to local"** — transfers work to the user's local checkout
The agent can still run tests, stage files, and output suggested branch
names, commit messages, and PR descriptions for the user to copy.
@@ -0,0 +1,63 @@
# Gemini CLI Tool Mapping
Skills speak in actions ("dispatch a subagent", "create a todo", "read a file"). On Gemini CLI these resolve to the tools below.
| Action skills request | Gemini CLI equivalent |
|----------------------|----------------------|
| Read a file | `read_file` |
| Read multiple files at once | `read_many_files` |
| Create a new file | `write_file` |
| Edit a file | `replace` |
| Run a shell command | `run_shell_command` |
| Search file contents | `grep_search` |
| Find files by name | `glob` |
| List files and subdirectories | `list_directory` |
| Fetch a URL | `web_fetch` |
| Search the web | `google_web_search` |
| Invoke a skill | `activate_skill` |
| Dispatch a subagent (`Subagent (general-purpose):` template) | `invoke_agent` with `agent_name: "generalist"` (invocable via `@generalist` chat syntax — see [Subagent support](#subagent-support)) |
| Multiple parallel dispatches | Multiple `invoke_agent` calls in the same response |
| Task tracking ("create a todo", "mark complete") | `write_todos` (statuses: pending, in_progress, completed, cancelled, blocked) |
## Instructions file
When a skill mentions "your instructions file", on Gemini CLI this is **`GEMINI.md`**. Gemini CLI loads `GEMINI.md` hierarchically: global at `~/.gemini/GEMINI.md`, project-level files in workspace directories and their ancestors, and sub-directory `GEMINI.md` files when a tool accesses files in those directories.
## Personal skills directory
User-level skills live at **`~/.gemini/skills/`**, with **`~/.agents/skills/`** as a cross-runtime alias (shared with Codex and Copilot CLI). When both directories exist at the same scope, `.agents/skills/` takes precedence. Each skill is a subdirectory containing a `SKILL.md` (with `name` and `description` frontmatter).
## Subagent support
Gemini CLI dispatches subagents through the `invoke_agent` tool, which takes `agent_name` and `prompt` parameters. The same dispatch is also surfaced as a chat-syntax shortcut: typing `@generalist <prompt>` is equivalent to calling `invoke_agent` with `agent_name: "generalist"`. Built-in agent names include `generalist`, `cli_help`, `codebase_investigator`, and (with browser tooling enabled) `browser_agent`.
Skills dispatch with `Subagent (general-purpose):` and either reference a prompt-template file (e.g., `superpowers:subagent-driven-development`'s `./implementer-prompt.md`) or supply an inline prompt. On Gemini CLI:
| Skill dispatch form | Gemini CLI equivalent |
|---------------------|----------------------|
| References a `*-prompt.md` template (implementer, task-reviewer, code-reviewer, etc.) | Fill the template, then `invoke_agent` with `agent_name: "generalist"` and the filled prompt |
| References `superpowers:requesting-code-review`'s `./code-reviewer.md` | `invoke_agent` with `agent_name: "generalist"` and the filled review template |
| Inline prompt (no template referenced) | `invoke_agent` with `agent_name: "generalist"` and your inline prompt |
### Prompt filling
Skills provide prompt templates with placeholders like `{WHAT_WAS_IMPLEMENTED}` or `[FULL TEXT of task]`. Fill all placeholders before passing the complete prompt to `invoke_agent`. The prompt template itself contains the agent's role, review criteria, and expected output format — the subagent will follow it.
### Parallel dispatch
Gemini CLI supports parallel subagent dispatch. Issue multiple `invoke_agent` calls in the same response (or multiple `@generalist` invocations in one prompt) to run independent subagent work in parallel. Keep dependent tasks sequential, but do not serialize independent subagent tasks just to preserve a simpler history.
## Additional Gemini CLI tools
These tools are unique to Gemini CLI:
| Tool | Purpose |
|------|---------|
| `save_memory` (legacy) | Persist facts across sessions when `experimental.memoryV2 = false` |
| `get_internal_docs` | Look up Gemini CLI's bundled documentation |
| `ask_user` | Pose structured questions to the user (text / single-select / multi-select) |
| `enter_plan_mode` / `exit_plan_mode` | Switch into and out of read-only plan mode |
| `update_topic` | Update the current conversation's topic / strategic-intent metadata |
| `complete_task` | Signal that a Gemini subagent has completed and return its result to the parent agent |
| `tracker_create_task`, `tracker_update_task`, `tracker_get_task`, `tracker_list_tasks`, `tracker_add_dependency`, `tracker_visualize` | Rich task tracker with dependency and visualization support |
| `read_mcp_resource`, `list_mcp_resources` | MCP resource access |
@@ -0,0 +1,56 @@
# Hermes Agent Tool Mapping
Skills speak in actions ("dispatch a subagent", "create a todo", "read a file"). On Hermes Agent these resolve to the tools below.
## Tools
| Action skills request | Hermes tool |
|---|---|
| Read a file | `read_file` |
| Create a new file | `write_file` |
| Edit a file (targeted patch) | `patch` |
| Run a shell command | `terminal` |
| Search file contents | `search_files` |
| Find files by name | `terminal` with `find` |
| Fetch a URL / read a webpage | `web_extract(urls=[...])` |
| Search the web | `web_search(query=...)` |
| Dispatch a subagent | `delegate_task(goal=..., context=..., toolsets=[...], role="leaf")` |
| Task tracking | `todo` tool |
| Invoke a skill | `skill_view("skill-name")` |
## Instructions file
When a skill mentions "your instructions file," on Hermes Agent this is **`AGENTS.md`** in the project directory, or **`SOUL.md`** globally at `~/.hermes/SOUL.md`.
## Invoking a skill
Hermes Agent has a `skills` toolset with `skill_view` and `skills_list` tools.
To invoke a superpowers skill, use:
```
skill_view("brainstorming")
skill_view("test-driven-development")
```
If `skill_view` cannot find a superpowers skill (it may not appear in the catalog
until the plugin fully registers it), fall back to reading the SKILL.md directly:
```
read_file(path="~/.hermes/plugins/superpowers/skills/<skill-name>/SKILL.md")
```
This fallback is the same mechanism used by other harnesses without native skill loading.
## Subagent dispatch
Use `delegate_task` to spawn isolated subagents for parallel or sequential workstreams:
```
delegate_task(goal="...", context="...", toolsets=[...], role="leaf")
```
If `delegate_task` is unavailable, do the work inline rather than inventing tool calls.
## Task tracking
Use the `todo` tool for task tracking within a session. For multi-agent task boards, use `hermes kanban` CLI if available. Treat older `TodoWrite` references as the task-tracking action.
@@ -0,0 +1,35 @@
# Muse Tool Mapping
Skills speak in actions ("dispatch a subagent", "create a todo", "read a file"). On Muse these resolve to the tools below.
| Action skills request | Muse equivalent |
|----------------------|----------------|
| Read a file | `read_file` |
| Read multiple files | `read_file` (call multiple times) or `search` |
| Create a new file | `write_file` |
| Edit a file | `edit_file` |
| Run a shell command | `bash` |
| Search file contents | `search` |
| Find files by name | `search` with `glob` |
| Fetch a URL | `web_fetch` |
| Search the web | `web_search` |
| Invoke a skill | `read_file` on `skills/<name>/SKILL.md` or native skill tool |
| Dispatch a subagent (`Subagent (general-purpose):` template) | `subagent_spawn` with prompt filling |
| Task tracking ("create a todo", "mark complete") | `write_todos` or `bash` task file |
| Ask the user a question | `request_user_input` |
## Instructions file
When a skill mentions "your instructions file", on Muse this is **`CLAUDE.md`** or **`AGENTS.md`** in the project root. Muse loads these hierarchically where configured.
## Skill invocation
Muse has native skill support via `muse skills`. To invoke a Superpowers skill, read its `SKILL.md` and follow the instructions. The bootstrap (`using-superpowers`) is injected automatically at `SessionStart` via the plugin hook — you are already following it, do not re-load it.
## Subagent dispatch
Use `subagent_spawn` to delegate work to isolated subagents. Fill prompt templates (e.g., `implementer-prompt.md`, `task-reviewer-prompt.md`) before dispatching. If no subagent tool is available, do the work inline rather than inventing tool calls.
## Task tracking
Use `write_todos` for checklist tracking. Create one todo per skill checklist item, mark in_progress/completed as you go. If `write_todos` is unavailable, maintain a markdown task file via `write_file`/`edit_file`.
@@ -0,0 +1,16 @@
# Pi Tool Mapping
Skills speak in actions ("dispatch a subagent", "create a todo", "read a file"). On Pi these resolve to the tools below.
| Action skills request | Pi equivalent |
| --- | --- |
| Dispatch a subagent (`Subagent (general-purpose):` template) | Use an installed subagent tool such as `subagent` from `pi-subagents` if available |
| Task tracking ("create a todo", "mark complete") | Use an installed todo/task tool if available, otherwise track tasks in the plan or `TODO.md` |
## Subagents
Pi core does not ship a standard subagent tool. The `pi-subagents` package is a strong optional companion and provides a `subagent` tool with single-agent, chain, parallel, async, forked-context, and resume/status workflows. If no subagent tool is available, do not fabricate `Task` calls; execute sequentially in the current session or explain that the optional subagent capability is not installed.
## Task lists
Pi core does not ship a standard task-list tool. If a todo/task extension is installed, use its documented tool. Otherwise use Superpowers plan files, checklists in Markdown, or a repo-local `TODO.md` for task tracking. Older Superpowers docs may refer to `TodoWrite`; treat that as the task-tracking action above.
@@ -39,6 +39,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -46,6 +46,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -47,6 +47,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -56,6 +56,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -40,6 +40,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -47,6 +47,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -39,6 +39,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -46,6 +46,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -39,6 +39,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -46,6 +46,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -40,6 +40,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -47,6 +47,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -36,6 +36,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -43,6 +43,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
+31 -22
View File
@@ -28,7 +28,7 @@ agents:
version: '1.0'
path: agents/_shared
original_ref: local:../_shared
hash: 954498133668f5209742225f02a415b2c0d478a521220ab3ec4aeb2d9c261c50
hash: a0e0af955e71c9481c53f81203e673192105d327f903de5337f6dc8efbbf13ca
- name: appsec-engineer
version: '1.0'
path: agents/appsec-engineer
@@ -39,7 +39,7 @@ agents:
version: '1.0'
path: agents/_shared
original_ref: local:../_shared
hash: 954498133668f5209742225f02a415b2c0d478a521220ab3ec4aeb2d9c261c50
hash: a0e0af955e71c9481c53f81203e673192105d327f903de5337f6dc8efbbf13ca
- name: cloud-sec-auditor
version: '1.0'
path: agents/cloud-sec-auditor
@@ -50,7 +50,7 @@ agents:
version: '1.0'
path: agents/_shared
original_ref: local:../_shared
hash: 954498133668f5209742225f02a415b2c0d478a521220ab3ec4aeb2d9c261c50
hash: a0e0af955e71c9481c53f81203e673192105d327f903de5337f6dc8efbbf13ca
- name: compliance-auditor
version: '1.0'
path: agents/compliance-auditor
@@ -61,7 +61,7 @@ agents:
version: '1.0'
path: agents/_shared
original_ref: local:../_shared
hash: 954498133668f5209742225f02a415b2c0d478a521220ab3ec4aeb2d9c261c50
hash: a0e0af955e71c9481c53f81203e673192105d327f903de5337f6dc8efbbf13ca
- name: ai-red-teamer
version: '1.0'
path: agents/ai-red-teamer
@@ -72,7 +72,7 @@ agents:
version: '1.0'
path: agents/_shared
original_ref: local:../_shared
hash: 954498133668f5209742225f02a415b2c0d478a521220ab3ec4aeb2d9c261c50
hash: a0e0af955e71c9481c53f81203e673192105d327f903de5337f6dc8efbbf13ca
- name: binary-reverse-eng
version: '1.0'
path: agents/binary-reverse-eng
@@ -83,7 +83,7 @@ agents:
version: '1.0'
path: agents/_shared
original_ref: local:../_shared
hash: 954498133668f5209742225f02a415b2c0d478a521220ab3ec4aeb2d9c261c50
hash: a0e0af955e71c9481c53f81203e673192105d327f903de5337f6dc8efbbf13ca
- name: firmware-sec-analyst
version: '1.0'
path: agents/firmware-sec-analyst
@@ -94,14 +94,14 @@ agents:
version: '1.0'
path: agents/_shared
original_ref: local:../_shared
hash: 954498133668f5209742225f02a415b2c0d478a521220ab3ec4aeb2d9c261c50
hash: a0e0af955e71c9481c53f81203e673192105d327f903de5337f6dc8efbbf13ca
integrity:
algorithm: sha256
files:
CULTURE.md: 138469da9119bebdc81c706e748d38989504a0b2f281619470763b81c492c833
README.md: 282c304c79cf2bdacef02d4e57d7c776470395554c39652acdaee6118d7093b3
SETUP.md: c98b347de133770a2df005afbd6304e892db6762a5aeceb0e2bbb75f83241002
agents/_shared/agent.yaml: 954498133668f5209742225f02a415b2c0d478a521220ab3ec4aeb2d9c261c50
agents/_shared/agent.yaml: a0e0af955e71c9481c53f81203e673192105d327f903de5337f6dc8efbbf13ca
agents/_shared/skills/address-sanitizer/LICENSE: 7abe19ec9bb73b36141b999b861d24ad855e808bafe0f81e84cce28556f6c297
agents/_shared/skills/address-sanitizer/SKILL.md: eb9ea8210fa55d50477fbe52993a704e320c88739c10d619864b6ce377ebce25
agents/_shared/skills/address-sanitizer/agents/openai.yaml: cbad1378f4912a71dec8c1c9307b806f787c559e751a5fd1926028f1c0c2e7b5
@@ -509,6 +509,15 @@ integrity:
agents/_shared/skills/typescript-astro/SKILL.md: 6db8903dc14702a1cfde72da1ea5d00c2ed799aba8f71c125a8ab1bc46948bc7
agents/_shared/skills/using-git-worktrees/LICENSE: a37e0e9697144819e1d965176ac4ae5bc3fa02d11e7812036bbcadf6dafe2400
agents/_shared/skills/using-git-worktrees/SKILL.md: 8cfb86f121269e8f7f12361e6795c4f6738828340e28964c9229d365666c9edd
agents/_shared/skills/using-superpowers/LICENSE: a37e0e9697144819e1d965176ac4ae5bc3fa02d11e7812036bbcadf6dafe2400
agents/_shared/skills/using-superpowers/SKILL.md: 82c5c8866ad7f5dd4440ce66bd7806ba48a2f13771beae5cf112e53f08fe36ba
agents/_shared/skills/using-superpowers/references/antigravity-tools.md: 4880f6de3da4e32f9659ebe7a72b9e0ebfff04e028c2ed96173f86d0387a04c0
agents/_shared/skills/using-superpowers/references/claude-code-tools.md: 21479a3fee27448cab8748a3b5687e53bb257883bda9c070426f9a1ab5cebf1b
agents/_shared/skills/using-superpowers/references/codex-tools.md: 1a38ad9b188c393052f58d95657a1c35ea6aafc8b5a27f198f3922912f70bbe7
agents/_shared/skills/using-superpowers/references/gemini-tools.md: 62b9157bcb0ee3c6784e3d0da0798ddfa5872f9e0c34bea48f3079dabea71965
agents/_shared/skills/using-superpowers/references/hermes-tools.md: e2185c976a3c87503910e05e2aea58cc89bc8e569bb624b93df9958ac47a9190
agents/_shared/skills/using-superpowers/references/muse-tools.md: 5a1da5c575fe18456ca71cd47ebfd8a38c745f8d82a67fe64d5b83080000eeb3
agents/_shared/skills/using-superpowers/references/pi-tools.md: 703dbc83d23ecab9c6f388460c38abc482e9dee2fe6772a8c7a255152ad3a4d5
agents/_shared/skills/variant-analysis/LICENSE: 7abe19ec9bb73b36141b999b861d24ad855e808bafe0f81e84cce28556f6c297
agents/_shared/skills/variant-analysis/SKILL.md: 7b6b78e499bcb88d05c68254ffc91ebc28edabf4e9808adcc40e2628ebb9407e
agents/_shared/skills/variant-analysis/agents/openai.yaml: 6d6b67250ba8300e79491ac12e73262f54f2bf50776276fd04607ae4e3006fde
@@ -565,9 +574,9 @@ integrity:
agents/ai-red-teamer/agent.yaml: f31a98385d78aed71e9b44d9b67b4024f70f4c58c429a5f5f202941bc493f47b
agents/ai-red-teamer/guidance/role.md: 333156455463b525d8e998b9a229840fd0b9b56db97a59ac36857ec297083ade
agents/ai-red-teamer/runtime/mcp.json: f4b1c84549b5099a5ec7db9c69ea685e45a333d7d1b9437c4f504f2274f6a34a
agents/ai-red-teamer/runtime/pi-permission-config.json: bcd9bfa1ed438029d5163e2565d38f66212be841bc71d015f4b04c8ce041a0d8
agents/ai-red-teamer/runtime/pi-permission-config.json: 79721f96c2daa345a24509cc591abdc9505f0ebcb25b5ea7072de35c059ec245
agents/ai-red-teamer/runtime/pi-settings.json: 42d649c0faf44344ef1bf015109a153ecc1872de08d993f58ee266683574f784
agents/ai-red-teamer/runtime/policy-enforcement.json: 52538cb2132dbdde111ab0a948197f398dbc38b70c09af5f02815d9874c9b6a8
agents/ai-red-teamer/runtime/policy-enforcement.json: 56e8e61f60be23b2db2ada07eaeb1ce4e37aa573fdd7e2897ccbd216ebdd99e3
agents/ai-red-teamer/skills/auditing-mcp-servers-for-tool-poisoning/SKILL.md: 742ba124a9dd9d5109654fcf566cbec63e0d87f941cbd480ecbaeab596d38e22
agents/ai-red-teamer/skills/detecting-ai-model-prompt-injection-attacks/SKILL.md: c6be759524e385194b85e79b7d38545a9914c79d95c65ad946a2e0444527cdcd
agents/ai-red-teamer/skills/detecting-indirect-prompt-injection/SKILL.md: 9a79a873c014dc192c7cc627591a7273e7a5efcaae3263e0d9357ee41455226e
@@ -577,50 +586,50 @@ integrity:
agents/appsec-engineer/agent.yaml: 10bd12005d94f41f15e5beb9c84e7cb9bcc14a7580d4d9447c3387fe7d3490f7
agents/appsec-engineer/guidance/role.md: eb579b8b7d4ffd5d28f5ce33c833d86b6a76627b58b3edd5d681873c6799ff1d
agents/appsec-engineer/runtime/mcp.json: dff664dd98151d63624d7036dcbc6ace995af2c99eab34d3071d4f1eec990858
agents/appsec-engineer/runtime/pi-permission-config.json: 2adac594741b23af8e0c3f9133f507e75a934ac10e80f12865efc17b4e946541
agents/appsec-engineer/runtime/pi-permission-config.json: 6064d4a3eaf1d54edc77e27f0bade743cce57910e96594ad870814980524b188
agents/appsec-engineer/runtime/pi-settings.json: 56d9cda1f64c99524b01561abd9db68e1ded823962fac7b79cf957c7fe7922be
agents/appsec-engineer/runtime/policy-enforcement.json: 5e0f62fe2dbcf2dc9fd5e7d17dcd680d915ed01c3c25d98c3c0d2bdc4cb1743f
agents/appsec-engineer/runtime/policy-enforcement.json: 101afecc880f9ac1a8914703f1fda7b3dae627e3a2b221fab5eafd52c46ec738
agents/appsec-engineer/skills/owasp-reachability-triage/SKILL.md: 2e8f032a90fbbf9fa47ad4f10c29f74cb463a16958a8e43bf1cd02af16fd4ff2
agents/appsec-engineer/startup/context.md: 099e13ed7fc0d8336d887010bef211fdbf7e97f800d3c46e269686871c6762f0
agents/binary-reverse-eng/agent.yaml: 261aa908185649b3db9e988aa643316441eb71c73bb036afcb0989043e34ed05
agents/binary-reverse-eng/guidance/role.md: 796e73d471432a2b51f08913cceea03aa71d052ce1cc452df8d99acd9553cae7
agents/binary-reverse-eng/runtime/mcp.json: 74d26e46b9d0c31243b110ea3f46d01312ebbed958d16d7fb2933f3c0d273333
agents/binary-reverse-eng/runtime/pi-permission-config.json: e67c30de3b1c87af1ddf8b876247d80e3b8f0d2e63b919cee02fdeb70184807e
agents/binary-reverse-eng/runtime/pi-permission-config.json: c800ac1088a207eac2080e570c2bcb5126f4020da7f3fbfb092b8978f603caf3
agents/binary-reverse-eng/runtime/pi-settings.json: 42d649c0faf44344ef1bf015109a153ecc1872de08d993f58ee266683574f784
agents/binary-reverse-eng/runtime/policy-enforcement.json: ce2eea555a97e43a10e0bbc1f81bb1407c4cc28ff2172ae7c80b767da6fd95c2
agents/binary-reverse-eng/runtime/policy-enforcement.json: e31ed86c944b910e12dfd3fec8df12ab1b87b66ff81e59a4d9becda7d3884a2b
agents/binary-reverse-eng/skills/radare2-defensive-disassembly/SKILL.md: 44607fb08d95a55234c11200e06ab5c51fe0507913d4aca196d7202c90e2f596
agents/binary-reverse-eng/skills/rea-evidence-based-decompilation/SKILL.md: 72d037437cf9bc393850d1eff5117230bcbd598258ff03b7a8b88ab916950d30
agents/binary-reverse-eng/startup/context.md: a58fee9618edc8d540decc3b82957adb91fc25903c9587e84652f6fb8cd90234
agents/cloud-sec-auditor/agent.yaml: f1c488b5edb3549eb9f167db63df521f0cb2bf13e67c78f81b0da3fb9ce49ffd
agents/cloud-sec-auditor/guidance/role.md: 41f00d4bca4a32b63e536fd9c70ff458ded5be38cd9421bab600da18598b0f7f
agents/cloud-sec-auditor/runtime/mcp.json: 0c8ddd8e6a54486e8efa4d90348f52a5317b3243560a4f4fe286effad1e5e373
agents/cloud-sec-auditor/runtime/pi-permission-config.json: 9c990f28f2fc6b075f7224c6a5fa9fbbe515cc3e9c6ab20993603ee1f86a56fb
agents/cloud-sec-auditor/runtime/pi-permission-config.json: 598e7bc3cbd291cee6b7ac7d824f87f398c40ec611163ca094956747263e7cd9
agents/cloud-sec-auditor/runtime/pi-settings.json: 56d9cda1f64c99524b01561abd9db68e1ded823962fac7b79cf957c7fe7922be
agents/cloud-sec-auditor/runtime/policy-enforcement.json: 3f691659b3e451b52de50fdc825e70fbe70992e09ec946274fc7e1d234db0adc
agents/cloud-sec-auditor/runtime/policy-enforcement.json: e0f2eda8e269224048a4de4ae460c8746cd5caa3e4e6ac9ed0ce0301d75b7fbd
agents/cloud-sec-auditor/skills/iam-least-privilege-audit/SKILL.md: 7f04f1c4c1db007c2cf3396d65254fcf22c109189c9d03d7a4a7f00c32f9170a
agents/cloud-sec-auditor/startup/context.md: 45e01e75b856b730ba63f061d84cdad5464fb5db21bdd32550cd1c7161850c9a
agents/compliance-auditor/agent.yaml: 4d484c8e88530c2e05faae18098799403e9828753cacd442376841fedf550013
agents/compliance-auditor/guidance/role.md: a0b9fd5eb55d1fd4467d52b4afe1bd5a9893f56d7b7ec018f877908454ddfb4c
agents/compliance-auditor/runtime/mcp.json: dd4f89175140cea1bffff81659645fd845386f0b48a8b3ba8e99d58df12609fd
agents/compliance-auditor/runtime/pi-permission-config.json: 6724efe9fded4526487dd2d6b86ec3386c5f3e75d27f6431334a2e73080cffcd
agents/compliance-auditor/runtime/pi-permission-config.json: 7cada5e8da614a63162bd0c21c352f1ad6266db4c860d5d2c53aefaaf19843bd
agents/compliance-auditor/runtime/pi-settings.json: 56d9cda1f64c99524b01561abd9db68e1ded823962fac7b79cf957c7fe7922be
agents/compliance-auditor/runtime/policy-enforcement.json: 7a0ff73e5356dcc53e271d88cfd8d1a84351098f83de22d921ca2cd57dde6462
agents/compliance-auditor/runtime/policy-enforcement.json: 53947c316beb7d805bd98c7dfa27dbbfdc8c7c624ba647989175ee865264f8bd
agents/compliance-auditor/skills/sbom-generation-and-license-audit/SKILL.md: 077033137006135c53214a4fd98affb402548c7e3bff7769ef347fa671fc8cdb
agents/compliance-auditor/startup/context.md: a4ea2fba53fb3ef0002ccce0812cce7feeee2e0732dad87b746dd8dcdb63cc79
agents/firmware-sec-analyst/agent.yaml: adf9c39628cf54c2da47c15de7e3a3d3caf36f880dad8f0347392539be6e40e3
agents/firmware-sec-analyst/guidance/role.md: fdd0fb74519a89b470d1fd52a5c23ea39c65efad7cd5f854a3ddfc916303db4e
agents/firmware-sec-analyst/runtime/mcp.json: 74d26e46b9d0c31243b110ea3f46d01312ebbed958d16d7fb2933f3c0d273333
agents/firmware-sec-analyst/runtime/pi-permission-config.json: e5d0b06ca639b9fe28e96bdc33bb6c97632137e50cc2829e6e6cf25356d32cb4
agents/firmware-sec-analyst/runtime/pi-permission-config.json: dfd08d0a15e6ea528517e0a17f4ee32a1971beb18ed5514c6b7cf1ebbbf8893e
agents/firmware-sec-analyst/runtime/pi-settings.json: 56d9cda1f64c99524b01561abd9db68e1ded823962fac7b79cf957c7fe7922be
agents/firmware-sec-analyst/runtime/policy-enforcement.json: 9d795cc958fb7fb935c8ede9ea64a3cb1b99c33fc18e01cf1742a82dec04a408
agents/firmware-sec-analyst/runtime/policy-enforcement.json: a9408a242acb5d155b9fd112edb4c120047d788f6ea0d09d037d60193da3a500
agents/firmware-sec-analyst/skills/firmware-extraction-and-hardening-audit/SKILL.md: 685b9523c26f8dd1f065b22f159be7b61f1b0d09609543401018e7571a028fb2
agents/firmware-sec-analyst/startup/context.md: 367bb017f4ee4f0b51a1fad4211f4e37b16007443fa00efc18dba8f8cbb4d56d
agents/threat-modeler/agent.yaml: 270a40ba9ac2739488f754e82c7607f8296ec65ac475111ff75a91a8222f074d
agents/threat-modeler/guidance/role.md: 1ff68992f2b6849a02ed859668fac1394ca166d603823a0ead7e7d6c29d90eb4
agents/threat-modeler/runtime/mcp.json: ecafd2a6e1b60bc5a3d3bc397326073c930c95630939d8d28d66b407ab237a0d
agents/threat-modeler/runtime/pi-permission-config.json: 54201552c4610f8dcdaa8bf771ce110e118118903809bb99a4606f36bd99af05
agents/threat-modeler/runtime/pi-permission-config.json: 0925a48810789b5b46ac5719b8caaf577a1868c105ab8594a65344799a2d4cfd
agents/threat-modeler/runtime/pi-settings.json: 42d649c0faf44344ef1bf015109a153ecc1872de08d993f58ee266683574f784
agents/threat-modeler/runtime/policy-enforcement.json: 4b4985511bec1ce1466cd52e8de579c2beba4984cfe4e75ffeea7d156449deca
agents/threat-modeler/runtime/policy-enforcement.json: 57efda023c37ed5759823193aa1c1b4bce29d1336fd73f838edc8236be8ce443
agents/threat-modeler/skills/stride-threat-modeling/SKILL.md: 7f7bdbb8aa2cab064c18573e9a946bffa9f7dd21f0fb254dd4a175ff9a4a3053
agents/threat-modeler/startup/context.md: 5eba727b91471a13478048345581db98ee31a5663e6545d7fcac7297cfcc7e6e
configurations.yaml: 20c35e92d8d48958eec90e8d5004784b5c976e93106fc0765c3dfde74b0f076e
@@ -117,6 +117,8 @@ resources:
path: skills/typescript-astro
- id: using-git-worktrees
path: skills/using-git-worktrees
- id: using-superpowers
path: skills/using-superpowers
- id: variant-analysis
path: skills/variant-analysis
- id: verification-before-completion
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2025 Jesse Vincent
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
@@ -0,0 +1,65 @@
---
name: using-superpowers
description: Use when starting any conversation - establishes how to find and use skills, requiring skill invocation before ANY response including clarifying questions
---
<SUBAGENT-STOP>
If you were dispatched as a subagent to execute a specific task, ignore this skill.
</SUBAGENT-STOP>
<EXTREMELY-IMPORTANT>
If you think there is even a 1% chance a skill might apply to what you are doing, you ABSOLUTELY MUST invoke the skill.
IF A SKILL APPLIES TO YOUR TASK, YOU DO NOT HAVE A CHOICE. YOU MUST USE IT.
This is not negotiable. You cannot rationalize your way out of this.
</EXTREMELY-IMPORTANT>
## The Rule
**Invoke relevant or requested skills BEFORE any response or action** — including clarifying questions, exploring the codebase, or checking files. If it turns out wrong for the situation, you don't have to use it.
**Before entering plan mode:** if you haven't already brainstormed, invoke the brainstorming skill first.
Then announce "Using [skill] to [purpose]" and follow the skill exactly. If it has a checklist, create a todo per item.
## Skill Priority
When multiple skills apply, process skills come first — they set the approach, then implementation skills (frontend-design, etc.) carry it out. Brainstorming and systematic-debugging are Superpowers' most common process skills, but the rule holds for any of them.
- "Let's build X" → superpowers:brainstorming first, then implementation skills.
- "Fix this bug" → superpowers:systematic-debugging first, then domain skills.
## Red Flags
These thoughts mean STOP—you're rationalizing:
| Thought | Reality |
|---------|---------|
| "This is just a simple question" | Questions are tasks. Check for skills. |
| "I need more context first" | Skill check comes BEFORE clarifying questions. |
| "Let me explore the codebase first" | Skills tell you HOW to explore. Check first. |
| "I can check git/files quickly" | Files lack conversation context. Check for skills. |
| "Let me gather information first" | Skills tell you HOW to gather information. |
| "This doesn't need a formal skill" | If a skill exists, use it. |
| "I remember this skill" | Skills evolve. Read current version. |
| "This doesn't count as a task" | Action = task. Check for skills. |
| "The skill is overkill" | Simple things become complex. Use it. |
| "I'll just do this one thing first" | Check BEFORE doing anything. |
| "This feels productive" | Undisciplined action wastes time. Skills prevent this. |
| "I know what that means" | Knowing the concept ≠ using the skill. Invoke it. |
## Platform Adaptation
If your harness appears here, read its reference file for special instructions:
- Claude Code: `references/claude-code-tools.md`
- Codex: `references/codex-tools.md`
- Pi: `references/pi-tools.md`
- Antigravity: `references/antigravity-tools.md`
- Hermes Agent: `references/hermes-tools.md`
- Muse: `references/muse-tools.md`
## User Instructions
User instructions (CLAUDE.md, AGENTS.md, GEMINI.md, etc, direct requests) take precedence over skills, which in turn override default behavior. Only skip skill workflows or instructions when your human partner has explicitly told you to.
@@ -0,0 +1,23 @@
# Antigravity CLI (`agy`) Tool Mapping
Skills speak in actions ("dispatch a subagent", "create a todo", "read a file"). On the Antigravity CLI (`agy`) these resolve to the tools below.
| Action skills request | Antigravity CLI equivalent |
|----------------------|----------------------|
| Dispatch a subagent (`Subagent (general-purpose):` template) | `invoke_subagent` with a built-in `TypeName` — `self` for full-capability work, `research` for read-only |
| Task tracking ("create a todo", "mark complete") | a **task artifact** — `write_to_file` with `IsArtifact: true` and `ArtifactType: "task"` (see [Task tracking](#task-tracking)). **Not** `manage_task`, which manages background processes. |
## Task tracking
Antigravity has **no todo tool** (`manage_task` manages background
processes — `list`/`kill`/`status`/`send_input` — it is *not* a checklist). When a
skill says to create a todo list or track tasks, maintain a **task artifact**: a
markdown checklist saved with `write_to_file` (`IsArtifact: true`,
`ArtifactMetadata.ArtifactType: "task"`), edited with `replace_file_content` /
`multi_replace_file_content` as you go.
At the start of any multi-step task, create the task artifact listing every step of
your plan. As you complete each step, edit the artifact to mark it done (`- [x]`).
If the plan changes, update the checklist. Keep it current — it is your source of
truth for what remains; once the conversation gets long, re-read it before starting
each step.
@@ -0,0 +1,29 @@
# Claude Code Tool Notes
Claude Code is the reference harness: skills speak its vocabulary
(`Agent` for a subagent dispatch, todos, `Skill`). These notes cover the
one place Claude Code can run a plan cheaper than the skills' default
shape. It is opt-in by your human partner and changes nothing the skills
require.
## Cheaper orchestration for subagent-driven development
The controller session is the most expensive seat in a
superpowers:subagent-driven-development run: it reads every dispatch
result and every report, and it usually runs on the session's most
capable model. Claude Code supports nested subagents (three layers below
the main conversation by default; `CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH`
adjusts it), so the whole loop can run one layer down.
When your human partner asks for it — or has said the session model is
too expensive to spend on coordination — dispatch ONE orchestrator
subagent on a mid-tier model with the plan path and the instruction to
use superpowers:subagent-driven-development end to end. The orchestrator
dispatches its own implementers and reviewers per that skill's Model
Selection; the workspace and ledger live on disk, so nothing is lost to
the extra layer. Its final message must carry the "Rulings I made" list
verbatim — that list is how the decisions reach your human partner, and
you relay it, not summarize it.
Do this only for a whole plan. Nesting a single task's dispatch buys
nothing and adds a seat.
@@ -0,0 +1,108 @@
## Subagent dispatch requires multi-agent support
Add to your Codex config (`~/.codex/config.toml`):
```toml
[features]
multi_agent = true
```
This enables the multi-agent tools that skills like
`dispatching-parallel-agents` and `subagent-driven-development` use.
Which tools you get depends on the multi-agent version your model
preset selects (current presets run V2; older ones run V1). Trust your
actual tool list over any table — including this one — when they
disagree.
- **Spawning:** give children a clean context with
`spawn_agent {fork_turns: "none"}`; the default `"all"` copies your
entire transcript into the child. On Codex 0.145+, role files under
`~/.codex/agents/` attach to isolated forks via `agent_type`.
Full-history forks accept `model` and `reasoning_effort` overrides
(only `agent_type` is refused there) — isolated forks are the SDD
default for context hygiene, not because overrides require them.
- **Fix rounds:** resume the implementer with `followup_task` — it
delivers your message, triggers a turn, and transparently reloads a
child the harness evicted. Never dispatch a fresh implementer on the
theory that a spawned agent cannot be messaged again; on V2 it
always can.
- **Lifecycle:** V2 has no `close_agent`. Finished children are
evicted automatically when slots are needed; leaving them unclosed
costs nothing. Only V1 sessions have `close_agent` — there, close
reviewers when their review returns, and close each implementer
after its task's review passes.
- **Model names:** never copy a model name from a skill, table, or old
session into `spawn_agent` without checking it against your current
spawn allowlist — V2 accepts only V2-capable presets and hard-errors
on the rest.
## Waiting on children
`wait_agent` is an event subscription, not a poll: a long wait wakes
the moment a child produces mailbox activity, with the same latency as
a short one. Short-timeout polling buys nothing and costs a tool call —
and a context rebill — per poll. In measured sessions, roughly
two-thirds of all wait calls were short polls that timed out.
- While you still have local work, do not wait at all. A completed
child's final answer is pushed into your mailbox and arrives with
your next turn.
- When you are genuinely idle with children outstanding, wait in
bounded stretches: `wait_agent` with `timeout_ms` 300000-600000
(5-10 minutes). After each stretch — wake or timeout — post one
status line, run `list_agents`, and chase any child that finished
without reporting. Never stack polls shorter than five minutes; the
event subscription wakes a bounded stretch just as fast as a short
one.
- Completion mail cannot wake an idle controller (it is delivered
without triggering a turn); covering that idle window is
`wait_agent`'s only job. A stretch that times out with no activity
is your cue to reconcile, not to shorten the next stretch.
## Model routing on spawns
Every `spawn_agent` you issue — including when you are yourself a
spawned child running a fan-out — sets `model` AND `reasoning_effort`
explicitly, per the Model Selection rules of the skill you are
executing. Setting `model` alone is a trap: the child's effort
silently resets to that model's default, not to yours.
Ask your human partner to add a machine-level backstop to
`~/.codex/config.toml` so any spawn that slips through still routes to
a deliberate tier instead of silently inheriting the session's most
expensive model:
```toml
[agents]
default_subagent_model = "<a mid-tier model from your spawn allowlist>"
default_subagent_reasoning_effort = "medium"
```
## Environment Detection
Skills that create worktrees or finish branches should detect their
environment with read-only git commands before proceeding:
```bash
GIT_DIR=$(cd "$(git rev-parse --git-dir)" 2>/dev/null && pwd -P)
GIT_COMMON=$(cd "$(git rev-parse --git-common-dir)" 2>/dev/null && pwd -P)
BRANCH=$(git branch --show-current)
```
- `GIT_DIR != GIT_COMMON` → already in a linked worktree (skip creation)
- `BRANCH` empty → detached HEAD (cannot branch/push/PR from sandbox)
See `using-git-worktrees` Step 0 and `finishing-a-development-branch`
Step 1 for how each skill uses these signals.
## Codex App Finishing
When the sandbox blocks branch/push operations (detached HEAD in an
externally managed worktree), the agent commits all work and informs
the user to use the App's native controls:
- **"Create branch"** — names the branch, then commit/push/PR via App UI
- **"Hand off to local"** — transfers work to the user's local checkout
The agent can still run tests, stage files, and output suggested branch
names, commit messages, and PR descriptions for the user to copy.
@@ -0,0 +1,63 @@
# Gemini CLI Tool Mapping
Skills speak in actions ("dispatch a subagent", "create a todo", "read a file"). On Gemini CLI these resolve to the tools below.
| Action skills request | Gemini CLI equivalent |
|----------------------|----------------------|
| Read a file | `read_file` |
| Read multiple files at once | `read_many_files` |
| Create a new file | `write_file` |
| Edit a file | `replace` |
| Run a shell command | `run_shell_command` |
| Search file contents | `grep_search` |
| Find files by name | `glob` |
| List files and subdirectories | `list_directory` |
| Fetch a URL | `web_fetch` |
| Search the web | `google_web_search` |
| Invoke a skill | `activate_skill` |
| Dispatch a subagent (`Subagent (general-purpose):` template) | `invoke_agent` with `agent_name: "generalist"` (invocable via `@generalist` chat syntax — see [Subagent support](#subagent-support)) |
| Multiple parallel dispatches | Multiple `invoke_agent` calls in the same response |
| Task tracking ("create a todo", "mark complete") | `write_todos` (statuses: pending, in_progress, completed, cancelled, blocked) |
## Instructions file
When a skill mentions "your instructions file", on Gemini CLI this is **`GEMINI.md`**. Gemini CLI loads `GEMINI.md` hierarchically: global at `~/.gemini/GEMINI.md`, project-level files in workspace directories and their ancestors, and sub-directory `GEMINI.md` files when a tool accesses files in those directories.
## Personal skills directory
User-level skills live at **`~/.gemini/skills/`**, with **`~/.agents/skills/`** as a cross-runtime alias (shared with Codex and Copilot CLI). When both directories exist at the same scope, `.agents/skills/` takes precedence. Each skill is a subdirectory containing a `SKILL.md` (with `name` and `description` frontmatter).
## Subagent support
Gemini CLI dispatches subagents through the `invoke_agent` tool, which takes `agent_name` and `prompt` parameters. The same dispatch is also surfaced as a chat-syntax shortcut: typing `@generalist <prompt>` is equivalent to calling `invoke_agent` with `agent_name: "generalist"`. Built-in agent names include `generalist`, `cli_help`, `codebase_investigator`, and (with browser tooling enabled) `browser_agent`.
Skills dispatch with `Subagent (general-purpose):` and either reference a prompt-template file (e.g., `superpowers:subagent-driven-development`'s `./implementer-prompt.md`) or supply an inline prompt. On Gemini CLI:
| Skill dispatch form | Gemini CLI equivalent |
|---------------------|----------------------|
| References a `*-prompt.md` template (implementer, task-reviewer, code-reviewer, etc.) | Fill the template, then `invoke_agent` with `agent_name: "generalist"` and the filled prompt |
| References `superpowers:requesting-code-review`'s `./code-reviewer.md` | `invoke_agent` with `agent_name: "generalist"` and the filled review template |
| Inline prompt (no template referenced) | `invoke_agent` with `agent_name: "generalist"` and your inline prompt |
### Prompt filling
Skills provide prompt templates with placeholders like `{WHAT_WAS_IMPLEMENTED}` or `[FULL TEXT of task]`. Fill all placeholders before passing the complete prompt to `invoke_agent`. The prompt template itself contains the agent's role, review criteria, and expected output format — the subagent will follow it.
### Parallel dispatch
Gemini CLI supports parallel subagent dispatch. Issue multiple `invoke_agent` calls in the same response (or multiple `@generalist` invocations in one prompt) to run independent subagent work in parallel. Keep dependent tasks sequential, but do not serialize independent subagent tasks just to preserve a simpler history.
## Additional Gemini CLI tools
These tools are unique to Gemini CLI:
| Tool | Purpose |
|------|---------|
| `save_memory` (legacy) | Persist facts across sessions when `experimental.memoryV2 = false` |
| `get_internal_docs` | Look up Gemini CLI's bundled documentation |
| `ask_user` | Pose structured questions to the user (text / single-select / multi-select) |
| `enter_plan_mode` / `exit_plan_mode` | Switch into and out of read-only plan mode |
| `update_topic` | Update the current conversation's topic / strategic-intent metadata |
| `complete_task` | Signal that a Gemini subagent has completed and return its result to the parent agent |
| `tracker_create_task`, `tracker_update_task`, `tracker_get_task`, `tracker_list_tasks`, `tracker_add_dependency`, `tracker_visualize` | Rich task tracker with dependency and visualization support |
| `read_mcp_resource`, `list_mcp_resources` | MCP resource access |
@@ -0,0 +1,56 @@
# Hermes Agent Tool Mapping
Skills speak in actions ("dispatch a subagent", "create a todo", "read a file"). On Hermes Agent these resolve to the tools below.
## Tools
| Action skills request | Hermes tool |
|---|---|
| Read a file | `read_file` |
| Create a new file | `write_file` |
| Edit a file (targeted patch) | `patch` |
| Run a shell command | `terminal` |
| Search file contents | `search_files` |
| Find files by name | `terminal` with `find` |
| Fetch a URL / read a webpage | `web_extract(urls=[...])` |
| Search the web | `web_search(query=...)` |
| Dispatch a subagent | `delegate_task(goal=..., context=..., toolsets=[...], role="leaf")` |
| Task tracking | `todo` tool |
| Invoke a skill | `skill_view("skill-name")` |
## Instructions file
When a skill mentions "your instructions file," on Hermes Agent this is **`AGENTS.md`** in the project directory, or **`SOUL.md`** globally at `~/.hermes/SOUL.md`.
## Invoking a skill
Hermes Agent has a `skills` toolset with `skill_view` and `skills_list` tools.
To invoke a superpowers skill, use:
```
skill_view("brainstorming")
skill_view("test-driven-development")
```
If `skill_view` cannot find a superpowers skill (it may not appear in the catalog
until the plugin fully registers it), fall back to reading the SKILL.md directly:
```
read_file(path="~/.hermes/plugins/superpowers/skills/<skill-name>/SKILL.md")
```
This fallback is the same mechanism used by other harnesses without native skill loading.
## Subagent dispatch
Use `delegate_task` to spawn isolated subagents for parallel or sequential workstreams:
```
delegate_task(goal="...", context="...", toolsets=[...], role="leaf")
```
If `delegate_task` is unavailable, do the work inline rather than inventing tool calls.
## Task tracking
Use the `todo` tool for task tracking within a session. For multi-agent task boards, use `hermes kanban` CLI if available. Treat older `TodoWrite` references as the task-tracking action.
@@ -0,0 +1,35 @@
# Muse Tool Mapping
Skills speak in actions ("dispatch a subagent", "create a todo", "read a file"). On Muse these resolve to the tools below.
| Action skills request | Muse equivalent |
|----------------------|----------------|
| Read a file | `read_file` |
| Read multiple files | `read_file` (call multiple times) or `search` |
| Create a new file | `write_file` |
| Edit a file | `edit_file` |
| Run a shell command | `bash` |
| Search file contents | `search` |
| Find files by name | `search` with `glob` |
| Fetch a URL | `web_fetch` |
| Search the web | `web_search` |
| Invoke a skill | `read_file` on `skills/<name>/SKILL.md` or native skill tool |
| Dispatch a subagent (`Subagent (general-purpose):` template) | `subagent_spawn` with prompt filling |
| Task tracking ("create a todo", "mark complete") | `write_todos` or `bash` task file |
| Ask the user a question | `request_user_input` |
## Instructions file
When a skill mentions "your instructions file", on Muse this is **`CLAUDE.md`** or **`AGENTS.md`** in the project root. Muse loads these hierarchically where configured.
## Skill invocation
Muse has native skill support via `muse skills`. To invoke a Superpowers skill, read its `SKILL.md` and follow the instructions. The bootstrap (`using-superpowers`) is injected automatically at `SessionStart` via the plugin hook — you are already following it, do not re-load it.
## Subagent dispatch
Use `subagent_spawn` to delegate work to isolated subagents. Fill prompt templates (e.g., `implementer-prompt.md`, `task-reviewer-prompt.md`) before dispatching. If no subagent tool is available, do the work inline rather than inventing tool calls.
## Task tracking
Use `write_todos` for checklist tracking. Create one todo per skill checklist item, mark in_progress/completed as you go. If `write_todos` is unavailable, maintain a markdown task file via `write_file`/`edit_file`.
@@ -0,0 +1,16 @@
# Pi Tool Mapping
Skills speak in actions ("dispatch a subagent", "create a todo", "read a file"). On Pi these resolve to the tools below.
| Action skills request | Pi equivalent |
| --- | --- |
| Dispatch a subagent (`Subagent (general-purpose):` template) | Use an installed subagent tool such as `subagent` from `pi-subagents` if available |
| Task tracking ("create a todo", "mark complete") | Use an installed todo/task tool if available, otherwise track tasks in the plan or `TODO.md` |
## Subagents
Pi core does not ship a standard subagent tool. The `pi-subagents` package is a strong optional companion and provides a `subagent` tool with single-agent, chain, parallel, async, forked-context, and resume/status workflows. If no subagent tool is available, do not fabricate `Task` calls; execute sequentially in the current session or explain that the optional subagent capability is not installed.
## Task lists
Pi core does not ship a standard task-list tool. If a todo/task extension is installed, use its documented tool. Otherwise use Superpowers plan files, checklists in Markdown, or a repo-local `TODO.md` for task tracking. Older Superpowers docs may refer to `TodoWrite`; treat that as the task-tracking action above.
@@ -36,6 +36,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -43,6 +43,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -38,6 +38,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -45,6 +45,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -36,6 +36,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -43,6 +43,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
@@ -31,6 +31,7 @@ profiles:
- heretek-shared:writing-plans
- heretek-shared:executing-plans
- heretek-shared:subagent-driven-development
- heretek-shared:using-superpowers
- madr-architecture-decision
guidance: []
subagents: []
@@ -44,6 +44,7 @@ Load a skill by reading its SKILL.md when the task matches its description.
- `writing-plans`
- `executing-plans`
- `subagent-driven-development`
- `using-superpowers`
- `madr-architecture-decision`
## 6. Coordination on openrig
@@ -45,6 +45,7 @@
"*(*": "deny",
"*)*": "deny",
"* -p*": "deny",
"*\t-p*": "deny",
"*--patch*": "deny",
"*--full-diff*": "deny",
"*--textconv*": "deny"
Loaded 100 of 439 files, more files were not shown because too many files have changed in this diff. Show more