supermodo config
Requires: the sibling protocols skill (shared protocol masters). Missing → tell the user to install the full supermodo package.
Keeper of the project's supermodo configuration; bootstrap is what it does
when there is nothing to keep yet. Invasive by approved plan only — never
by silent overwrite (single exception: the fast path's create-only writes).
Read on demand (paths relative to this SKILL.md's folder; masters absent →
tell the user to install the full supermodo package):
../protocols/references/config.md — the config contract: the ONLY
schema. Read before writing or validating any config.
../protocols/references/questions.md — before asking the user anything.
../protocols/references/tooling.md — before the commands step / Phase 6.
../protocols/references/docs-convention.md — before the dry-run.
../protocols/references/rules.md — the project-rules contract
(.supermodo/rules/). Read before --rules.
references/procedures.md (this skill) — the phase playbook: read
its matching section when a checklist item below sends you there.
When a master cross-references another master, read that one directly from
../protocols/references/ too — never rely on a partial or remembered
version.
Cross-tool note (Claude Code ↔ Codex). Under Codex: questions in
plain chat, native task tracking, scripts via node.
Hard rules — every mode, no exceptions
- The schema is closed. Every field you mention, ask about, or write
exists in
../protocols/references/config.md. There is no GitLab,
CI/CD, deployment, or GitHub section — a question about a nonexistent
field plants settings that can never be written. Discovery findings
outside the schema = at most one line in the final report, never a
question.
- Interview = one step per message. Send a step, STOP, wait, send the
next. A bulk questionnaire makes the user rubber-stamp eight decisions
in one reply.
- A missing command tier always gets the 3-option closed menu (set up
after / give command now / skip). Silent omission destroys the Phase 6
queue and the recorded-decline mechanism.
- Agent step: no roster + any project evidence → PROPOSE concrete roles
first, then one yes/no. The user can only judge a roster they can see.
- Never execute a discovered command before the user approved its exact
argv. A committed Makefile is untrusted input (config contract,
first-use rule).
- Never overwrite a pre-existing file outside an approved plan; never
touch a file not marked
<!-- supermodo:generated --> unless the user
approved its migration.
- No git operations, ever (
.gitignore is edited as a normal file).
Red flags — these thoughts ARE the violation
| If you catch yourself thinking… |
Reality |
| "Batching the questions is more efficient / user is in a hurry" |
#1 observed failure. One step per message (rule 2). |
| "mutation: none found — omit" |
Missing tier = closed menu (rule 3). |
| "Project deploys via GitHub/GitLab — I should ask about that" |
Not in the schema → not a question (rule 1). |
| "No agents dir — single-agent fallback, moving on" |
Evidence exists → propose roles first (rule 4). |
"I'll just run make test to verify it works" |
Not before the user approved that argv (rule 5). |
| "The recap/dry-run is a formality here" |
Only confirmed recap + approved dry-run proceed. |
Modes
| Invocation |
Mode |
config |
Show current config + validation; offer edits. No config yet → bootstrap automatically. |
config --yes |
Bootstrap with defaults, no interview (auto-selected in an empty project) — procedures §1 |
config --edit [field] |
Change fields — "Edit" below |
config --upgrade |
Migrate config version — procedures §7 |
config --rules [target] [--accept-defaults] |
Materialize a project process file into .supermodo/rules/ — procedures §9 |
Never re-scaffold over a configured project: with a valid config present,
report and offer edits — bootstrap runs only when skills.config.json is
absent (or the user explicitly asks; same conflict rules).
Bootstrap (no config exists)
Copy this checklist into your response at bootstrap start and tick items as
they complete; a failed item returns to its phase, never skips ahead. Each
"procedures §N" = read that section of references/procedures.md when you
get there.
Bootstrap
- [ ] Discovery scan (commands, agent dirs, stray docs)
- [ ] Route: fast path (empty project or --yes → procedures §1) OR wizard
- [ ] Wizard: steps 1..M, ONE message each (below)
- [ ] Recap shown, user confirmed
- [ ] Dry-run: full file list shown, user approved (procedures §2)
- [ ] Conflicts: per-file migration plan approved, or none (procedures §3)
- [ ] Written + manifest recorded (procedures §4)
- [ ] config-check.ts exit 0 (procedures §5)
- [ ] Tooling phase: queued tiers closed, or none (procedures §6)
- [ ] Final report + librarian --absorb pointer if stray docs (procedures §8)
The wizard — one step per message
Discover candidates BEFORE asking: package.json scripts,
deno.json/deno.jsonc tasks, Makefile targets, agent dirs
(.claude/agents, .codex/agents).
These 8 steps and NOTHING else — never add, remove, or reorder (rule 1).
M = how many apply; announce it at step 1, drop inapplicable steps
entirely. One step per message (rule 2); bare "ok"/empty accepts the
default. Only if the user unprompted says "defaults for everything": fill
remaining steps with defaults, jump to recap — never invite that shortcut.
Every step message uses exactly this shape:
Step N of M — <topic>
<one line: what this controls and which skills it affects>
<the question>
Default: <value>
Project name — reports and docs headers. Default: directory basename.
Docs entry — the router path every skill reads first. Default
docs/README.md.
Commands — argv arrays, never shell strings; tiers per the tooling
master. Discovered tier → show exact argv, confirm. Missing tier
(rule 3 — EVERY absent tier, mutation included) → one context line,
then:
1. Set up after (recommended) — queued for the tooling phase
2. Give the command now
3. Skip — recorded as a decline, not re-asked while tooling is unchanged
Do NOT invent commands; improvement ideas ("lint should also
type-check") are a one-line note for the tooling phase, not a wizard
question.
Coverage target — tests/tdd gates. Integer 1–100, default 80.
Agent team — context first: work dispatches teammates from this
roster (implementers, reviewers, test/quality, infra); without one,
skills run single-agent. Then (rule 4):
| Situation |
Do |
| Roster dir found |
Confirm as agents.dir; map files to the four role categories; offer to draft uncovered roles the project plausibly needs. |
| No roster, ANY project evidence |
PROPOSE roles immediately (filename + one-line each, grounded only in evidence), then ONE yes/no: create these? Default no. Never ask permission to propose; never invent an evidence-free role. |
| No roster, no evidence |
State single-agent fallback in one line, next step. No question. |
Accepted → files join the dry-run. Then, still inside this step, ask
ONE closed menu: which hosts do you use? (1) current host only —
default; (2) claude + codex; (3) name them. agents.dir = the
CANONICAL roster, defaulting to the current host's native dir
(.claude/agents/ on Claude Code, .codex/agents/ on Codex; any
path is a valid own answer); the chosen hosts land in agents.hosts
and sync-configs mirrors the roster one-way from canonical to each
other host's native dir — the user edits only the canonical dir,
never a mirror. More than one host chosen → close the step by naming
the mirror command (/supermodo:sync-configs). Declined →
single-agent fallback, recorded as default suggestion, re-asked only on
config --edit agents or materially changed evidence (class-(c),
never auto-resolved).
Question transport — default chat; offer tool only on Claude
Code (overrides apply uniformly to every skill).
Verbosity — default concise; standard for fuller chat reporting.
Workspace / worktree — context first: by default work and flow
run in the main working tree. Offer the alternative in one line — a
dedicated git worktree per task, not per subprocess, created on its own
branch off dev and merged back into dev when the task lands (cleanup
suggested at /release) — then ONE yes/no. Yes → workspace.worktree: true and add the worktree dir (worktrees/) to the .gitignore append.
Default no. The per-run --worktree / --no-worktree flags override this
either way.
Class-(c) preference fields (name, coverage, verbosity, transport,
worktree) always come from the user even when a default is obvious.
Recap + confirm: after the last step, show ALL answers (defaults
marked), one plain confirmation. A correction re-runs just that step, then
recaps again. Only a confirmed recap proceeds to the dry-run.
Phases after the wizard
Follow the checklist; detail lives in references/procedures.md. Essence:
- Dry-run (§2): COMPLETE file list (docs scaffold rooted at
docs.entry, skills.config.json shown verbatim, .gitignore append,
accepted agent files) — nothing written before approval.
- Conflicts (§3): existing non-generated content → per-file
move/merge/leave plan, approval per file; declined → HALT unchanged.
- Write (§4): temp-then-rename; every action recorded in
.skills/supermodo/config-manifest.json; real-path containment beneath
the project root on every write.
- Validate (§5):
node <dir-of-this-SKILL.md>/scripts/config-check.ts skills.config.json must exit 0 — fix errors before claiming success.
- Tooling phase (§6): queued tiers, one at a time, freshness method —
never remembered recipes.
- Report + docs handoff (§8): final report; stray docs found in
discovery → END with
/supermodo:librarian --absorb as the required
next step.
Edit (config --edit [field])
Load + validate first. Interview only the named field(s) — or ask which —
questions-protocol format. Before/after JSON diff, confirm, write
(temp-then-rename), manifest, re-validate. Class-(c) fields always confirm.
commands edits: same closed menu as wizard step 3 (manifest declines not
re-asked while tooling unchanged); new commands verified before recording.
Upgrade (config --upgrade)
Procedures §7. Short form: version equal → report, stop; lower → dry-run
migration, full bootstrap safety; higher → HALT, user must update the
supermodo skills.
Schema
Lives in ONE place: ../protocols/references/config.md. Read it — never a
remembered copy — whenever you need field names or values. A field not in
that file does not exist (rule 1).
Guardrails
- No git operations (rule 7); the user (or the
commit skill) handles git.
- Write only inside the project root (real-path resolved), and only paths
from an approved plan or the fast path's create-only exception: docs
scaffold,
skills.config.json, .gitignore, .skills/supermodo/,
.supermodo/rules/, accepted <agents.dir>/ files, approved tooling-phase
targets. Nothing else, ever.
- Halt-and-report on any conflict without an approved resolution.
Report
Config path + validation result, files created/moved/merged, manifest path,
conflicts left for the user. Steady-state runs may add ONE informational
line for missing/declined tiers — a nudge, never a repeated question.
Concise per verbosity; safety and conflict details never compressed.
1---2name: config3description: Keeper of a project's supermodo configuration (skills.config.json) and docs scaffold. Use whenever the user wants to view, check, change, fix, or upgrade the supermodo config, set up or onboard a project onto the supermodo skills, start a new supermodo project, or whenever another supermodo skill reports a missing or invalid skills.config.json. Trigger on 'supermodo config', 'set up supermodo', 'configure supermodo', 'bootstrap supermodo', 'change the coverage target', 'edit the config', 'add a command to the config' — even when the word 'config' itself is not used.4---56# supermodo config78> **Requires:** the sibling `protocols` skill (shared protocol masters). Missing → tell the user to install the full supermodo package.910Keeper of the project's supermodo configuration; bootstrap is what it does11when there is nothing to keep yet. **Invasive by approved plan only — never12by silent overwrite** (single exception: the fast path's create-only writes).1314Read on demand (paths relative to this SKILL.md's folder; masters absent →15tell the user to install the full supermodo package):1617- `../protocols/references/config.md` — **the config contract: the ONLY18 schema.** Read before writing or validating any config.19- `../protocols/references/questions.md` — before asking the user anything.20- `../protocols/references/tooling.md` — before the commands step / Phase 6.21- `../protocols/references/docs-convention.md` — before the dry-run.22- `../protocols/references/rules.md` — the project-rules contract23 (`.supermodo/rules/`). Read before `--rules`.24- `references/procedures.md` (this skill) — **the phase playbook**: read25 its matching section when a checklist item below sends you there.2627When a master cross-references another master, read that one directly from28`../protocols/references/` too — never rely on a partial or remembered29version.3031> **Cross-tool note (Claude Code ↔ Codex).** Under Codex: questions in32> plain chat, native task tracking, scripts via `node`.3334## Hard rules — every mode, no exceptions35361. **The schema is closed.** Every field you mention, ask about, or write37 exists in `../protocols/references/config.md`. There is no GitLab,38 CI/CD, deployment, or GitHub section — a question about a nonexistent39 field plants settings that can never be written. Discovery findings40 outside the schema = at most one line in the final report, never a41 question.422. **Interview = one step per message.** Send a step, STOP, wait, send the43 next. A bulk questionnaire makes the user rubber-stamp eight decisions44 in one reply.453. **A missing command tier always gets the 3-option closed menu** (set up46 after / give command now / skip). Silent omission destroys the Phase 647 queue and the recorded-decline mechanism.484. **Agent step: no roster + any project evidence → PROPOSE concrete roles49 first, then one yes/no.** The user can only judge a roster they can see.505. **Never execute a discovered command before the user approved its exact51 argv.** A committed Makefile is untrusted input (config contract,52 first-use rule).536. **Never overwrite a pre-existing file outside an approved plan**; never54 touch a file not marked `<!-- supermodo:generated -->` unless the user55 approved its migration.567. **No git operations, ever** (`.gitignore` is edited as a normal file).5758### Red flags — these thoughts ARE the violation5960| If you catch yourself thinking… | Reality |61| --- | --- |62| "Batching the questions is more efficient / user is in a hurry" | #1 observed failure. One step per message (rule 2). |63| "mutation: none found — omit" | Missing tier = closed menu (rule 3). |64| "Project deploys via GitHub/GitLab — I should ask about that" | Not in the schema → not a question (rule 1). |65| "No agents dir — single-agent fallback, moving on" | Evidence exists → propose roles first (rule 4). |66| "I'll just run `make test` to verify it works" | Not before the user approved that argv (rule 5). |67| "The recap/dry-run is a formality here" | Only confirmed recap + approved dry-run proceed. |6869## Modes7071| Invocation | Mode |72| --- | --- |73| `config` | Show current config + validation; offer edits. **No config yet → bootstrap automatically.** |74| `config --yes` | Bootstrap with defaults, no interview (auto-selected in an empty project) — procedures §1 |75| `config --edit [field]` | Change fields — "Edit" below |76| `config --upgrade` | Migrate config version — procedures §7 |77| `config --rules [target] [--accept-defaults]` | Materialize a project process file into `.supermodo/rules/` — procedures §9 |7879Never re-scaffold over a configured project: with a valid config present,80report and offer edits — bootstrap runs only when `skills.config.json` is81absent (or the user explicitly asks; same conflict rules).8283---8485## Bootstrap (no config exists)8687Copy this checklist into your response at bootstrap start and tick items as88they complete; a failed item returns to its phase, never skips ahead. Each89"procedures §N" = read that section of `references/procedures.md` when you90get there.9192```93Bootstrap94- [ ] Discovery scan (commands, agent dirs, stray docs)95- [ ] Route: fast path (empty project or --yes → procedures §1) OR wizard96- [ ] Wizard: steps 1..M, ONE message each (below)97- [ ] Recap shown, user confirmed98- [ ] Dry-run: full file list shown, user approved (procedures §2)99- [ ] Conflicts: per-file migration plan approved, or none (procedures §3)100- [ ] Written + manifest recorded (procedures §4)101- [ ] config-check.ts exit 0 (procedures §5)102- [ ] Tooling phase: queued tiers closed, or none (procedures §6)103- [ ] Final report + librarian --absorb pointer if stray docs (procedures §8)104```105106### The wizard — one step per message107108Discover candidates BEFORE asking: `package.json` scripts,109`deno.json`/`deno.jsonc` tasks, `Makefile` targets, agent dirs110(`.claude/agents`, `.codex/agents`).111112**These 8 steps and NOTHING else** — never add, remove, or reorder (rule 1).113`M` = how many apply; announce it at step 1, drop inapplicable steps114entirely. One step per message (rule 2); bare "ok"/empty accepts the115default. Only if the user unprompted says "defaults for everything": fill116remaining steps with defaults, jump to recap — never invite that shortcut.117118Every step message uses exactly this shape:119120```121Step N of M — <topic>122<one line: what this controls and which skills it affects>123<the question>124Default: <value>125```1261271. **Project name** — reports and docs headers. Default: directory basename.1282. **Docs entry** — the router path every skill reads first. Default129 `docs/README.md`.1303. **Commands** — argv arrays, never shell strings; tiers per the tooling131 master. Discovered tier → show exact argv, confirm. Missing tier132 (rule 3 — EVERY absent tier, `mutation` included) → one context line,133 then:134135 ```136 1. Set up after (recommended) — queued for the tooling phase137 2. Give the command now138 3. Skip — recorded as a decline, not re-asked while tooling is unchanged139 ```140141 Do NOT invent commands; improvement ideas ("lint should also142 type-check") are a one-line note for the tooling phase, not a wizard143 question.1444. **Coverage target** — tests/tdd gates. Integer 1–100, default `80`.1455. **Agent team** — context first: `work` dispatches teammates from this146 roster (implementers, reviewers, test/quality, infra); without one,147 skills run single-agent. Then (rule 4):148149 | Situation | Do |150 | --- | --- |151 | Roster dir found | Confirm as `agents.dir`; map files to the four role categories; offer to draft uncovered roles the project plausibly needs. |152 | No roster, ANY project evidence | PROPOSE roles immediately (filename + one-line each, grounded only in evidence), then ONE yes/no: create these? Default no. Never ask permission to propose; never invent an evidence-free role. |153 | No roster, no evidence | State single-agent fallback in one line, next step. No question. |154155 Accepted → files join the dry-run. Then, still inside this step, ask156 ONE closed menu: **which hosts do you use?** (1) current host only —157 default; (2) claude + codex; (3) name them. `agents.dir` = the158 CANONICAL roster, defaulting to the current host's native dir159 (`.claude/agents/` on Claude Code, `.codex/agents/` on Codex; any160 path is a valid own answer); the chosen hosts land in `agents.hosts`161 and `sync-configs` mirrors the roster one-way from canonical to each162 other host's native dir — the user edits only the canonical dir,163 never a mirror. More than one host chosen → close the step by naming164 the mirror command (`/supermodo:sync-configs`). Declined →165 single-agent fallback, recorded as default suggestion, re-asked only on166 `config --edit agents` or materially changed evidence (class-(c),167 never auto-resolved).1686. **Question transport** — default `chat`; offer `tool` only on Claude169 Code (overrides apply uniformly to every skill).1707. **Verbosity** — default `concise`; `standard` for fuller chat reporting.1718. **Workspace / worktree** — context first: by default `work` and `flow`172 run in the main working tree. Offer the alternative in one line — **a173 dedicated git worktree per task, not per subprocess**, created on its own174 branch off `dev` and merged back into `dev` when the task lands (cleanup175 suggested at `/release`) — then ONE yes/no. Yes → `workspace.worktree:176 true` and add the worktree dir (`worktrees/`) to the `.gitignore` append.177 Default no. The per-run `--worktree` / `--no-worktree` flags override this178 either way.179180Class-(c) preference fields (name, coverage, verbosity, transport,181worktree) always come from the user even when a default is obvious.182183**Recap + confirm:** after the last step, show ALL answers (defaults184marked), one plain confirmation. A correction re-runs just that step, then185recaps again. Only a confirmed recap proceeds to the dry-run.186187### Phases after the wizard188189Follow the checklist; detail lives in `references/procedures.md`. Essence:190191- **Dry-run (§2):** COMPLETE file list (docs scaffold rooted at192 `docs.entry`, `skills.config.json` shown verbatim, `.gitignore` append,193 accepted agent files) — nothing written before approval.194- **Conflicts (§3):** existing non-generated content → per-file195 move/merge/leave plan, approval per file; declined → HALT unchanged.196- **Write (§4):** temp-then-rename; every action recorded in197 `.skills/supermodo/config-manifest.json`; real-path containment beneath198 the project root on every write.199- **Validate (§5):** `node <dir-of-this-SKILL.md>/scripts/config-check.ts200 skills.config.json` must exit 0 — fix errors before claiming success.201- **Tooling phase (§6):** queued tiers, one at a time, freshness method —202 never remembered recipes.203- **Report + docs handoff (§8):** final report; stray docs found in204 discovery → END with `/supermodo:librarian --absorb` as the required205 next step.206207---208209## Edit (`config --edit [field]`)210211Load + validate first. Interview only the named field(s) — or ask which —212questions-protocol format. Before/after JSON diff, confirm, write213(temp-then-rename), manifest, re-validate. Class-(c) fields always confirm.214`commands` edits: same closed menu as wizard step 3 (manifest declines not215re-asked while tooling unchanged); new commands verified before recording.216217## Upgrade (`config --upgrade`)218219Procedures §7. Short form: version equal → report, stop; lower → dry-run220migration, full bootstrap safety; higher → HALT, user must update the221supermodo skills.222223## Schema224225Lives in ONE place: `../protocols/references/config.md`. Read it — never a226remembered copy — whenever you need field names or values. A field not in227that file does not exist (rule 1).228229## Guardrails230231- No git operations (rule 7); the user (or the `commit` skill) handles git.232- Write only inside the project root (real-path resolved), and only paths233 from an approved plan or the fast path's create-only exception: docs234 scaffold, `skills.config.json`, `.gitignore`, `.skills/supermodo/`,235 `.supermodo/rules/`, accepted `<agents.dir>/` files, approved tooling-phase236 targets. Nothing else, ever.237- Halt-and-report on any conflict without an approved resolution.238239## Report240241Config path + validation result, files created/moved/merged, manifest path,242conflicts left for the user. Steady-state runs may add ONE informational243line for missing/declined tiers — a nudge, never a repeated question.244Concise per verbosity; safety and conflict details never compressed.