@siddicky/oh-my-musecode 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +18 -0
- package/.claude-plugin/plugin.json +30 -0
- package/.muse-plugin/plugin.json +94 -0
- package/LICENSE +32 -0
- package/README.md +190 -0
- package/dist/mcp/state-server.d.ts +13 -0
- package/dist/mcp/state-server.js +109 -0
- package/dist/mcp/state-server.js.map +1 -0
- package/dist/paths.d.ts +58 -0
- package/dist/paths.js +167 -0
- package/dist/paths.js.map +1 -0
- package/dist/personas.d.ts +40 -0
- package/dist/personas.js +93 -0
- package/dist/personas.js.map +1 -0
- package/dist/state.d.ts +38 -0
- package/dist/state.js +59 -0
- package/dist/state.js.map +1 -0
- package/docs/recipe.md +253 -0
- package/hooks/hooks.json +34 -0
- package/hooks/lib.mjs +66 -0
- package/hooks/routing.mjs +99 -0
- package/hooks/session-start.mjs +34 -0
- package/hooks/stop.mjs +52 -0
- package/hooks/user-prompt-submit.mjs +16 -0
- package/package.json +57 -0
- package/personas/architect/SOUL.md +27 -0
- package/personas/code-reviewer/SOUL.md +30 -0
- package/personas/critic/SOUL.md +28 -0
- package/personas/debugger/SOUL.md +28 -0
- package/personas/executor/SOUL.md +25 -0
- package/personas/explore/SOUL.md +24 -0
- package/personas/manifest.json +119 -0
- package/personas/planner/SOUL.md +25 -0
- package/personas/test-engineer/SOUL.md +27 -0
- package/personas/verifier/SOUL.md +29 -0
- package/personas/writer/SOUL.md +27 -0
- package/scripts/install.mjs +303 -0
- package/scripts/preflight.mjs +121 -0
- package/scripts/settings-install.mjs +155 -0
- package/scripts/verify-manifest.mjs +211 -0
- package/scripts/verify-skills.mjs +78 -0
- package/skills/cancel/SKILL.md +76 -0
- package/skills/deep-dive/SKILL.md +73 -0
- package/skills/deep-interview/SKILL.md +101 -0
- package/skills/ralph/SKILL.md +111 -0
- package/skills/ralplan/SKILL.md +96 -0
- package/skills/team/SKILL.md +94 -0
- package/skills/trace/SKILL.md +75 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deep-dive
|
|
3
|
+
description: Two-stage front door for a fuzzy problem that might be a bug or might be a product question — run trace first to establish what is actually happening, then deep-interview to turn the confirmed problem into a spec. Use ONLY when the user explicitly asks for a deep dive or invokes /deep-dive, typically when they are not yet sure whether the issue is a defect or a scope question. Do NOT use when the nature of the problem is already clear: go straight to /trace for a known bug, or straight to /deep-interview for a known scoping gap.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Deep Dive
|
|
7
|
+
|
|
8
|
+
A front door for requests where it is not yet clear whether the real problem
|
|
9
|
+
is "something is broken" or "the scope is unclear." Runs two existing skills
|
|
10
|
+
in sequence rather than duplicating their logic.
|
|
11
|
+
|
|
12
|
+
Explicit invocation only, like every skill in this corpus. This skill does
|
|
13
|
+
not get triggered by Muse noticing an ambiguous or complex request on its
|
|
14
|
+
own — you invoke it, or the user does.
|
|
15
|
+
|
|
16
|
+
## When to use this
|
|
17
|
+
|
|
18
|
+
Use it when a request arrives as something like "this whole area feels off"
|
|
19
|
+
or "users are complaining about X but I don't know if it's a bug or a
|
|
20
|
+
missing feature" — genuine uncertainty about which lane the problem belongs
|
|
21
|
+
in. Do not use it when the lane is already obvious: a reproducible crash
|
|
22
|
+
goes straight to `/trace`; a clear "we need to decide how this should work"
|
|
23
|
+
goes straight to `/deep-interview`. Using this skill on an already-clear
|
|
24
|
+
request just adds a redundant stage.
|
|
25
|
+
|
|
26
|
+
## Stage 1 — Trace
|
|
27
|
+
|
|
28
|
+
Read the `trace` skill's body (`read_skill trace` or invoke it directly) and
|
|
29
|
+
run its method against the reported symptom: state the symptom, generate
|
|
30
|
+
competing hypotheses, spawn parallel evidence-gatherers via `subagent_spawn`,
|
|
31
|
+
and converge on a best-evidenced explanation. Do this stage in full — do not
|
|
32
|
+
skip straight to interviewing because the report sounds product-shaped; the
|
|
33
|
+
trace stage is what tells you whether it actually is.
|
|
34
|
+
|
|
35
|
+
Stop and evaluate after stage 1:
|
|
36
|
+
|
|
37
|
+
- **Root cause found, fix is small and well-understood** — this is no longer
|
|
38
|
+
a deep-dive matter. Report the cause and the fix in prose and ask the user
|
|
39
|
+
whether to apply it. Do not proceed to stage 2 for a confirmed simple bug.
|
|
40
|
+
- **Root cause found, but fixing it right implies a real design decision**
|
|
41
|
+
(multiple valid approaches, user-facing tradeoffs, or scope beyond the
|
|
42
|
+
original symptom) — proceed to stage 2.
|
|
43
|
+
- **No clear cause, but the investigation surfaced that the actual ask is
|
|
44
|
+
underspecified product scope rather than a defect** — proceed to stage 2.
|
|
45
|
+
- **No clear cause and no scope question — genuinely still stuck** — report
|
|
46
|
+
the trace's evidence table and the next most informative probe. Do not
|
|
47
|
+
force a transition into stage 2 just to have something to hand off.
|
|
48
|
+
|
|
49
|
+
## Stage 2 — Deep Interview
|
|
50
|
+
|
|
51
|
+
Read the `deep-interview` skill's body and run its method, seeded with the
|
|
52
|
+
trace stage's findings: state what was confirmed, what was ruled out, and
|
|
53
|
+
what remains genuinely open. Do not re-ask questions the trace stage already
|
|
54
|
+
answered — hand its evidence in as established fact base, not as unknowns to
|
|
55
|
+
reopen.
|
|
56
|
+
|
|
57
|
+
Carry the interview through to its own approval gate. Deep-interview owns
|
|
58
|
+
its own spec-writing and approval flow (`.omm/specs/<slug>.md`, explicit
|
|
59
|
+
`Approve`/`Request changes`/`Cancel`); do not shortcut it here.
|
|
60
|
+
|
|
61
|
+
## State
|
|
62
|
+
|
|
63
|
+
Trace state and interview state are each owned by their own skill
|
|
64
|
+
(`.omm/state/trace-<slug>.md`, `.omm/specs/<slug>.md`). This skill does not
|
|
65
|
+
introduce a separate state file — it is a sequencing wrapper, not an
|
|
66
|
+
independent stage with its own persistence.
|
|
67
|
+
|
|
68
|
+
## Handoff
|
|
69
|
+
|
|
70
|
+
Once the interview stage reaches an approved spec, follow deep-interview's
|
|
71
|
+
own handoff: tell the user in prose to run `/ralplan .omm/specs/<slug>.md`
|
|
72
|
+
next. If stage 1 alone resolved the matter, there is no further handoff —
|
|
73
|
+
say so and stop.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deep-interview
|
|
3
|
+
description: Run a Socratic interview that turns a vague request into a decision-complete spec, gated by a measured ambiguity score instead of a fixed question count. Use ONLY when the user explicitly asks for a deep interview, invokes /deep-interview, or asks to turn a fuzzy idea into a spec before planning. Do NOT use for ordinary implement/fix/debug requests, for questions with an obvious single answer, or as an automatic first step on complex-looking work — this skill never fires itself; the user or another skill's prose must name it.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Deep Interview
|
|
7
|
+
|
|
8
|
+
Convert an ambiguous request into a spec that `ralplan` can plan from, by asking
|
|
9
|
+
targeted questions and tracking how much ambiguity remains after each round.
|
|
10
|
+
|
|
11
|
+
This skill only runs when explicitly invoked (`/deep-interview`, or a direct user
|
|
12
|
+
ask). Muse never auto-selects a skill because a task looks complex or vague —
|
|
13
|
+
there is no hook or heuristic that fires this skill on your behalf. If you are
|
|
14
|
+
reading this body, something explicitly asked for it.
|
|
15
|
+
|
|
16
|
+
## When to use this
|
|
17
|
+
|
|
18
|
+
Use it when the user's goal is real but underspecified: "build something like
|
|
19
|
+
X", "make onboarding better", "port Y into this repo" with no locked scope.
|
|
20
|
+
Do not use it for requests that already have a clear, bounded shape — implement
|
|
21
|
+
those directly. Do not use it merely because a task touches many files; breadth
|
|
22
|
+
is not the same as ambiguity.
|
|
23
|
+
|
|
24
|
+
## Setup
|
|
25
|
+
|
|
26
|
+
State lives under `.omm/` at the workspace root — never under `.agents/` or
|
|
27
|
+
`.muse/`, both of which are muse-protected: a mediated `edit_file` write there
|
|
28
|
+
is held for human review with no standing grant, and a shell write fails
|
|
29
|
+
read-only at the sandbox. Create `.omm/specs/` if it does not exist (`.omm/`
|
|
30
|
+
is ordinary unprotected workspace state, so `edit_file` and shell writes both
|
|
31
|
+
work normally).
|
|
32
|
+
|
|
33
|
+
## Ambiguity model
|
|
34
|
+
|
|
35
|
+
Track an explicit ambiguity score (0-100%) across rounds, not a fixed question
|
|
36
|
+
budget:
|
|
37
|
+
|
|
38
|
+
1. Before round 1, enumerate the entities implied by the request (nouns like
|
|
39
|
+
"user", "state directory", "critic", "acceptance criteria") and mark each
|
|
40
|
+
Unknown, Assumed, or Locked.
|
|
41
|
+
2. Each round, ask the smallest set of questions (usually 1-3) that would lock
|
|
42
|
+
the most Unknown/Assumed entities. Prefer questions that collapse several
|
|
43
|
+
unknowns at once over exhaustive coverage.
|
|
44
|
+
3. After each answer, recompute ambiguity as the fraction of entities still
|
|
45
|
+
Unknown or Assumed, weighted by how load-bearing each entity is to the
|
|
46
|
+
final spec (a naming detail counts for less than a topology decision).
|
|
47
|
+
4. Stop asking and move to drafting when ambiguity falls below the configured
|
|
48
|
+
threshold (default 10%; read `execution.ambiguity_threshold` from muse
|
|
49
|
+
config if the project sets one, otherwise use the default and say so).
|
|
50
|
+
5. If ambiguity has not measurably dropped for two consecutive rounds, stop
|
|
51
|
+
the interview and report the stall rather than looping — hand the user a
|
|
52
|
+
partial spec with the stuck questions listed as open items instead of
|
|
53
|
+
asking indefinitely.
|
|
54
|
+
|
|
55
|
+
Optionally probe with a challenge mode for one round when the ontology looks
|
|
56
|
+
too comfortable — a Contrarian round ("what would make this the wrong
|
|
57
|
+
approach entirely?") or a Simplifier round ("what would the smallest version
|
|
58
|
+
that still satisfies the goal look like?"). Use at most one challenge round
|
|
59
|
+
unless the user asks for more; note which mode ran in the spec header.
|
|
60
|
+
|
|
61
|
+
## Producing the spec
|
|
62
|
+
|
|
63
|
+
Write the interview's output to `.omm/specs/<slug>.md` with:
|
|
64
|
+
|
|
65
|
+
- One-sentence goal.
|
|
66
|
+
- Fact base: what was established (from the codebase, from the user, from
|
|
67
|
+
probing tools) versus assumed.
|
|
68
|
+
- Locked decisions, each with the round it was settled in and why.
|
|
69
|
+
- Any stated-but-unconfirmed assumptions, flagged explicitly.
|
|
70
|
+
- Acceptance criteria the eventual implementation must satisfy.
|
|
71
|
+
- Final ambiguity percentage and threshold used.
|
|
72
|
+
|
|
73
|
+
Do not silently invent scope to fill a section. If a section has nothing real
|
|
74
|
+
to say (no risks, no deferred items), write "None" rather than padding it.
|
|
75
|
+
|
|
76
|
+
## Explicit approval gate
|
|
77
|
+
|
|
78
|
+
Present the complete spec in a normal reply and ask the user to `Approve`,
|
|
79
|
+
`Request changes`, or `Cancel`. Do not treat silence, a topic change, or your
|
|
80
|
+
own confidence as approval. On `Request changes`, revise the same spec file
|
|
81
|
+
and re-present it. On `Cancel`, stop and leave the spec file as a draft,
|
|
82
|
+
clearly marked unapproved at the top.
|
|
83
|
+
|
|
84
|
+
## Handoff
|
|
85
|
+
|
|
86
|
+
This skill does not chain into the next stage automatically — nothing in Muse
|
|
87
|
+
reads a "next-skill" field from frontmatter; that field does not exist here.
|
|
88
|
+
Once the spec is approved, say so in plain prose and tell the user the next
|
|
89
|
+
step in the pipeline: "Spec approved and saved to `.omm/specs/<slug>.md`. Run
|
|
90
|
+
`/ralplan .omm/specs/<slug>.md` next to turn this into a plan." Then stop.
|
|
91
|
+
Do not start planning or implementation yourself from inside this skill.
|
|
92
|
+
|
|
93
|
+
## Notes on personas
|
|
94
|
+
|
|
95
|
+
If parts of the interview benefit from a second perspective (for example,
|
|
96
|
+
probing technical feasibility of a locked decision), you may
|
|
97
|
+
`subagent_spawn` the `architect` or `explore` persona with a narrow objective
|
|
98
|
+
and read its result back with `subagent_read_result` before continuing the
|
|
99
|
+
interview. These are prompt personas rendered into the spawn call, not muse
|
|
100
|
+
Agent Definitions — muse rejects `agents` as a plugin capability, so no
|
|
101
|
+
persona is registered as a first-class agent type.
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ralph
|
|
3
|
+
description: Run a PRD-driven implementation loop against .omm/state/prd.json, iterating story by story until every acceptance criterion passes, then a final reviewer verification pass. Use ONLY when explicitly invoked (/ralph) against an approved PRD, normally right after /ralplan. Do NOT use without an approved prd.json (run /ralplan first), and do not invoke this for a single small edit — the loop overhead only pays for itself across multiple testable stories.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Ralph
|
|
7
|
+
|
|
8
|
+
Execute an approved PRD to completion: iterate its stories, implement each
|
|
9
|
+
one, verify its acceptance criteria, and loop until all pass or the loop
|
|
10
|
+
cannot make further progress. Named for the self-referential "Ralph Wiggum"
|
|
11
|
+
loop pattern — run the same verification cycle until it stops finding
|
|
12
|
+
problems, not for a fixed number of turns.
|
|
13
|
+
|
|
14
|
+
Explicit invocation only. This skill does not start itself when `ralplan`
|
|
15
|
+
finishes — ralplan's own body tells the user to invoke `/ralph` next in
|
|
16
|
+
prose; nothing in frontmatter chains them.
|
|
17
|
+
|
|
18
|
+
## Precondition
|
|
19
|
+
|
|
20
|
+
Require `.omm/state/prd.json` to exist and be approved (per `ralplan`'s
|
|
21
|
+
gate). If it is missing, stop and tell the user to run `/ralplan` first —
|
|
22
|
+
do not improvise a PRD inline just to proceed.
|
|
23
|
+
|
|
24
|
+
## Loop
|
|
25
|
+
|
|
26
|
+
For each story in `prd.json` with `status: "pending"`, in order unless the
|
|
27
|
+
PRD marks explicit parallelizable groups:
|
|
28
|
+
|
|
29
|
+
1. Set the story `status` to `"in_progress"` in `prd.json`.
|
|
30
|
+
2. Implement the story's described change directly, or delegate to the
|
|
31
|
+
`executor` persona via `subagent_spawn("executor", <story objective +
|
|
32
|
+
acceptance criteria>, worktree_isolation: true)` when the story is large
|
|
33
|
+
enough to isolate — worktree isolation matters here specifically because
|
|
34
|
+
multiple ralph iterations or a parallel `team` run may be touching the
|
|
35
|
+
same repo; an isolated worktree keeps one story's half-finished edits
|
|
36
|
+
from bleeding into another's verification.
|
|
37
|
+
3. Check every acceptance criterion for that story against real evidence —
|
|
38
|
+
run the command it names, inspect the output, do not mark a criterion
|
|
39
|
+
passed on the basis of "this should work." A criterion that cannot be
|
|
40
|
+
checked as written is a defect in the PRD, not a license to skip it;
|
|
41
|
+
fix the criterion's wording in `prd.json` and say so, rather than
|
|
42
|
+
silently treating it as satisfied.
|
|
43
|
+
4. If all criteria pass, set `status: "done"` and record what evidence
|
|
44
|
+
confirmed each criterion. If any fail, keep `status: "in_progress"`,
|
|
45
|
+
record what failed, and retry the implementation step. Cap retries per
|
|
46
|
+
story (default 3) — after the cap, mark `status: "blocked"` with the
|
|
47
|
+
failure detail and move to the next story rather than looping forever on
|
|
48
|
+
one blocker.
|
|
49
|
+
5. Move to the next pending story.
|
|
50
|
+
|
|
51
|
+
Stop the loop when every story is `"done"` or `"blocked"`. A run that ends
|
|
52
|
+
with any `"blocked"` story is not complete — report it as such.
|
|
53
|
+
|
|
54
|
+
## Reviewer verification pass
|
|
55
|
+
|
|
56
|
+
Once the loop ends with no pending stories, run a separate verification pass
|
|
57
|
+
— never self-approve inside the same implementation context that just wrote
|
|
58
|
+
the code:
|
|
59
|
+
|
|
60
|
+
- Default: `subagent_spawn("verifier", "verify every done story in
|
|
61
|
+
.omm/state/prd.json against its acceptance criteria with independent
|
|
62
|
+
evidence")`, then read its result.
|
|
63
|
+
- **`--critic=codex` or `--critic=claude` option.** Route this verification
|
|
64
|
+
pass through the named external CLI instead. This requires the session to
|
|
65
|
+
have been launched with `muse --disable-sandbox` (or `--yolo`). If it was
|
|
66
|
+
not, stop and tell the user rather than quietly downgrading to the
|
|
67
|
+
in-process verifier, since that is a materially different check.
|
|
68
|
+
|
|
69
|
+
**State the tradeoff plainly, every time this option is used, not just
|
|
70
|
+
once at setup.** Two distinct costs, and neither should be blurred into
|
|
71
|
+
the other:
|
|
72
|
+
|
|
73
|
+
1. The external critic's work happens outside Muse's append-only audit
|
|
74
|
+
trail. Its reasoning and any files it touches are not captured the way
|
|
75
|
+
an in-session `subagent_spawn` result is.
|
|
76
|
+
2. The escalation is **session-wide, not scoped to the critic call**.
|
|
77
|
+
`--disable-sandbox` removes filesystem and network sandboxing for
|
|
78
|
+
everything in that session, not just the one process that needed it.
|
|
79
|
+
|
|
80
|
+
There is no narrower route on this build: muse 1.0.3 exposes no way to
|
|
81
|
+
create a named permission profile (`muse exec --permission-profile <id>`
|
|
82
|
+
reports `profile does not exist`, and `execution.permission_profiles`
|
|
83
|
+
validates as `field_not_activated`). So the broad carve-out is the whole
|
|
84
|
+
cost of the external critic, not an implementation shortcut. This is a
|
|
85
|
+
deliberate, user-reaffirmed tradeoff — it buys genuine cross-model
|
|
86
|
+
adversarial review — but say as much in the final report rather than
|
|
87
|
+
letting it pass unmentioned.
|
|
88
|
+
|
|
89
|
+
## Enterprise policy interaction
|
|
90
|
+
|
|
91
|
+
If the workspace's execution policy sets `execution.forbid_sandbox_bypass`,
|
|
92
|
+
`--disable-sandbox` and `--yolo` are refused and the external critic cannot
|
|
93
|
+
run at all, regardless of `--critic`. Fail with a clear message naming the
|
|
94
|
+
policy and the blocked step — do not silently fall back to the in-process
|
|
95
|
+
critic/verifier and present it as if the requested external check ran.
|
|
96
|
+
|
|
97
|
+
## Completion report
|
|
98
|
+
|
|
99
|
+
Report, per story: id, final status, and the evidence that justified it.
|
|
100
|
+
Report the verification pass's mode (in-process or external) and its
|
|
101
|
+
verdict. If any story ended `"blocked"`, list it prominently — do not bury a
|
|
102
|
+
blocked story under a headline "done."
|
|
103
|
+
|
|
104
|
+
## Handoff
|
|
105
|
+
|
|
106
|
+
Ralph is a terminal stage in this pipeline. There is nothing further to
|
|
107
|
+
chain to automatically; report completion (or the blocked/failed state) and
|
|
108
|
+
stop. If new scope surfaces during implementation that the PRD did not
|
|
109
|
+
cover, say so in prose and suggest the user run `/deep-interview` or
|
|
110
|
+
`/ralplan` again for that new scope — do not silently fold unplanned work
|
|
111
|
+
into the current loop.
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ralplan
|
|
3
|
+
description: Turn an approved spec into a consensus-reviewed plan with a PRD (prd.json) of testable stories, gating vague /ralph or /team requests before they run unattended. Use ONLY when explicitly invoked (/ralplan), typically right after deep-interview hands off a spec, or when the user asks to plan before a ralph/team run. Do NOT use for direct small edits, and do not treat an invocation of /ralph or /team as implicitly requesting this — ralplan only runs when named.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Ralplan
|
|
7
|
+
|
|
8
|
+
Convert an approved spec (or a request specific enough to skip straight to
|
|
9
|
+
planning) into a `prd.json` of testable stories, reviewed for consensus
|
|
10
|
+
before `ralph` is allowed to run unattended against it.
|
|
11
|
+
|
|
12
|
+
Explicit invocation only — there is no hook that auto-routes a vague `/ralph`
|
|
13
|
+
or `/team` request into this skill. If you want that gating, say so in
|
|
14
|
+
prose to the user yourself: "this looks underspecified for an unattended
|
|
15
|
+
ralph run — recommend `/ralplan` first," and let the user decide.
|
|
16
|
+
|
|
17
|
+
## Inputs
|
|
18
|
+
|
|
19
|
+
- An approved spec at `.omm/specs/<slug>.md` (preferred), or
|
|
20
|
+
- A request detailed enough to plan directly, when the user explicitly says
|
|
21
|
+
to skip the interview stage.
|
|
22
|
+
|
|
23
|
+
## Producing the PRD
|
|
24
|
+
|
|
25
|
+
Write `.omm/state/prd.json` (create `.omm/state/` if missing) shaped as:
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
{
|
|
29
|
+
"goal": "one sentence",
|
|
30
|
+
"source_spec": ".omm/specs/<slug>.md",
|
|
31
|
+
"stories": [
|
|
32
|
+
{
|
|
33
|
+
"id": "US-001",
|
|
34
|
+
"title": "short title",
|
|
35
|
+
"description": "what this story delivers",
|
|
36
|
+
"acceptance_criteria": [
|
|
37
|
+
"testable, falsifiable statement",
|
|
38
|
+
"another testable statement"
|
|
39
|
+
],
|
|
40
|
+
"status": "pending"
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Every story's acceptance criteria must be testable by inspection, command
|
|
47
|
+
output, or reproducible check — not by opinion. "Code is cleaner" is not a
|
|
48
|
+
valid criterion; "muse skills validate <path> reports valid: true with zero
|
|
49
|
+
unsupported-skill-field diagnostics" is. `ralph` will iterate against this
|
|
50
|
+
file story by story, so vague criteria become the loop's failure mode later.
|
|
51
|
+
|
|
52
|
+
## Consensus review
|
|
53
|
+
|
|
54
|
+
Before presenting the plan, get a second opinion:
|
|
55
|
+
|
|
56
|
+
1. Default reviewer is the `critic` persona in-process:
|
|
57
|
+
`subagent_spawn("critic", "review prd.json at .omm/state/prd.json against
|
|
58
|
+
the spec for gaps, untestable criteria, and scope creep")`, then
|
|
59
|
+
`subagent_wait` / `subagent_read_result`.
|
|
60
|
+
2. **`--critic=codex` or `--critic=claude` option.** When the user passes
|
|
61
|
+
this, route the review through the named external CLI instead of the
|
|
62
|
+
in-process critic persona. This requires the session to have been
|
|
63
|
+
launched with `muse --disable-sandbox` (or `--yolo`) — say so explicitly
|
|
64
|
+
if it was not, and stop rather than silently falling back to the
|
|
65
|
+
in-process critic, since that changes what was actually reviewed.
|
|
66
|
+
|
|
67
|
+
**Be honest about the tradeoff.** Shelling out to an external `codex` or
|
|
68
|
+
`claude` CLI process costs two separate things. First, that review's work
|
|
69
|
+
happens outside Muse's append-only audit trail — the external process's
|
|
70
|
+
reasoning and any files it touches are not captured the way an in-session
|
|
71
|
+
`subagent_spawn` result is. Second, the escalation is session-wide:
|
|
72
|
+
`--disable-sandbox` removes filesystem and network sandboxing for
|
|
73
|
+
everything in the session, not just the critic call.
|
|
74
|
+
|
|
75
|
+
There is no narrower route on muse 1.0.3 — named permission profiles are
|
|
76
|
+
not creatable on this build — so the broad carve-out is the actual price
|
|
77
|
+
of an external critic. State this plainly in the review summary; do not
|
|
78
|
+
soft-pedal it as equivalent to the in-process critic.
|
|
79
|
+
3. Incorporate the critic's findings into the PRD before presenting it.
|
|
80
|
+
Untestable criteria, missing stories implied by the spec, and scope the
|
|
81
|
+
critic flags as unjustified should be fixed, not just noted.
|
|
82
|
+
|
|
83
|
+
## Approval gate
|
|
84
|
+
|
|
85
|
+
Present the final `prd.json` contents (or a readable summary of every story
|
|
86
|
+
and its criteria) in a normal reply, state which critic mode reviewed it,
|
|
87
|
+
and ask for `Approve`, `Request changes`, or `Cancel`. Do not let `ralph`
|
|
88
|
+
start from an unapproved PRD.
|
|
89
|
+
|
|
90
|
+
## Handoff
|
|
91
|
+
|
|
92
|
+
On approval, say in prose: "PRD approved at `.omm/state/prd.json`. Run
|
|
93
|
+
`/ralph` next (add `--critic=codex` or `--critic=claude` to keep the same
|
|
94
|
+
external reviewer for verification, and remember that needs the session
|
|
95
|
+
launched with `muse --disable-sandbox`)." There is no frontmatter field that
|
|
96
|
+
wires this handoff automatically — it exists only because this body says it.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: team
|
|
3
|
+
description: Run N coordinated persona subagents in parallel against a shared task list, each isolated in its own worktree, for work that splits cleanly into independent units. Use ONLY when explicitly invoked (/team) for genuinely parallelizable work — several independent files, stories, or investigations with no shared-state conflicts. Do NOT use for a single sequential task, for work with heavy cross-file coupling that would fight worktree isolation, or as an automatic response to "this is a big task."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Team
|
|
7
|
+
|
|
8
|
+
Coordinate multiple persona subagents working in parallel on a shared task
|
|
9
|
+
list, each isolated in its own worktree so simultaneous writers do not
|
|
10
|
+
collide on the same files.
|
|
11
|
+
|
|
12
|
+
Explicit invocation only. Nothing infers that a task "is big enough" to
|
|
13
|
+
warrant a team on its own — you decide that and invoke `/team`, or another
|
|
14
|
+
skill's prose (such as `ralph`, for a PRD with an explicit parallel group)
|
|
15
|
+
tells the user to.
|
|
16
|
+
|
|
17
|
+
## When to use this
|
|
18
|
+
|
|
19
|
+
Use it when the task list has real independence: separate stories, separate
|
|
20
|
+
files or modules, separate investigations that do not need to see each
|
|
21
|
+
other's intermediate state. Do not use it when tasks are tightly coupled —
|
|
22
|
+
sequential work through one context (or a single `ralph` loop) is both
|
|
23
|
+
simpler and avoids merge friction. Do not use it for a task list of one.
|
|
24
|
+
|
|
25
|
+
## Building the task list
|
|
26
|
+
|
|
27
|
+
Source the task list from, in order of preference:
|
|
28
|
+
1. An explicit list the user gives in the invocation.
|
|
29
|
+
2. `.omm/state/prd.json`, if it declares an explicit parallel group (see
|
|
30
|
+
`ralph`) — use exactly that group, not the whole PRD.
|
|
31
|
+
3. A list you derive directly from the request, stated back to the user
|
|
32
|
+
before spawning anything if it required real judgment to split.
|
|
33
|
+
|
|
34
|
+
Each task needs: an id, a scope narrow enough for one persona to own without
|
|
35
|
+
touching another task's files, and a definition of done.
|
|
36
|
+
|
|
37
|
+
## Spawning
|
|
38
|
+
|
|
39
|
+
For each task, choose the persona that fits its shape (`executor` for
|
|
40
|
+
implementation, `test-engineer` for test work, `writer` for docs,
|
|
41
|
+
`debugger` for isolated bug fixes, etc.) and:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
subagent_spawn(role, objective, worktree_isolation: true)
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Always set `worktree_isolation: true` for team members that write files —
|
|
48
|
+
this is the mechanism that keeps parallel writers from stepping on each
|
|
49
|
+
other; without it, concurrent edits to overlapping files are a real risk,
|
|
50
|
+
not a hypothetical one. Read-only investigation tasks may skip isolation if
|
|
51
|
+
they touch nothing.
|
|
52
|
+
|
|
53
|
+
Track every spawned id against its task. Do not spawn more than the
|
|
54
|
+
session's concurrent-child limit at once (muse caps concurrent subagent
|
|
55
|
+
children); queue remaining tasks and spawn the next as a slot frees up
|
|
56
|
+
rather than firing them all and hoping.
|
|
57
|
+
|
|
58
|
+
## Coordination
|
|
59
|
+
|
|
60
|
+
- Poll with `subagent_status` / `subagent_wait` rather than assuming
|
|
61
|
+
completion order matches spawn order.
|
|
62
|
+
- If one task's output changes what another in-flight task should do, use
|
|
63
|
+
`subagent_send_message` to update it rather than letting it finish on a
|
|
64
|
+
stale premise.
|
|
65
|
+
- If a task is no longer needed (superseded by another's findings, or the
|
|
66
|
+
user narrows scope mid-run), `subagent_cancel` it explicitly rather than
|
|
67
|
+
leaving it to finish pointless work.
|
|
68
|
+
- Read every terminal result with `subagent_read_result` before reporting —
|
|
69
|
+
a `subagent_wait` timeout is not a terminal state; keep waiting or check
|
|
70
|
+
status again rather than treating a timeout as failure.
|
|
71
|
+
|
|
72
|
+
## Merging results
|
|
73
|
+
|
|
74
|
+
Worktree isolation means each task's changes live in its own worktree until
|
|
75
|
+
merged. Review each task's diff before merging — do not merge blind because
|
|
76
|
+
the subagent reported success. Merge in an order that respects real
|
|
77
|
+
dependencies between tasks (a task that renamed a shared interface merges
|
|
78
|
+
before tasks that consume it, even if it finished later). Surface merge
|
|
79
|
+
conflicts to the user rather than silently picking a resolution when the
|
|
80
|
+
conflict touches logic, not just formatting.
|
|
81
|
+
|
|
82
|
+
## Completion report
|
|
83
|
+
|
|
84
|
+
Report per task: id, persona used, terminal status, whether its worktree was
|
|
85
|
+
merged, and any conflicts or cancellations. If any task is blocked or
|
|
86
|
+
failed, list it prominently rather than only reporting the successes.
|
|
87
|
+
|
|
88
|
+
## Handoff
|
|
89
|
+
|
|
90
|
+
Team has no fixed successor — what comes next depends on what the parallel
|
|
91
|
+
work was for. If it was a `ralph` parallel group, say so and return control
|
|
92
|
+
to the ralph loop's per-story verification. Otherwise, state completion and
|
|
93
|
+
let the user decide the next step; do not chain into another skill on your
|
|
94
|
+
own initiative.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: trace
|
|
3
|
+
description: Investigate a specific observed problem (a bug, a regression, an unexpected behavior) by running competing tracer hypotheses in parallel and converging on the best-evidenced explanation. Use ONLY when the user explicitly asks to trace, diagnose, or root-cause a concrete symptom, or invokes /trace. Do NOT use for vague goal-shaping ("make this better") — that belongs to deep-interview — and do not use it for routine debugging you can resolve with a single direct read; this skill is for when the cause is genuinely unclear and evidence needs to be gathered from multiple angles at once.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Trace
|
|
7
|
+
|
|
8
|
+
Find the real cause of an observed problem by running multiple competing
|
|
9
|
+
hypotheses against evidence in parallel, instead of debugging serially under
|
|
10
|
+
one assumption.
|
|
11
|
+
|
|
12
|
+
Explicit invocation only. Nothing in Muse decides on its own that a bug
|
|
13
|
+
"looks hard enough" to warrant this skill — you or the user must name it
|
|
14
|
+
directly, or another skill's prose must tell the user to invoke it (see
|
|
15
|
+
`deep-dive`, which routes here first).
|
|
16
|
+
|
|
17
|
+
## When to use this
|
|
18
|
+
|
|
19
|
+
Use it when: the symptom is clear (a failing test, a wrong output, a crash,
|
|
20
|
+
a regression between two known-good points) but the cause is not, and a
|
|
21
|
+
single obvious read of the code will not settle it. Do not use it for a bug
|
|
22
|
+
whose cause is already apparent from the error message or a quick grep —
|
|
23
|
+
just fix that directly. Do not use it for open-ended product questions;
|
|
24
|
+
route those to `deep-interview` instead.
|
|
25
|
+
|
|
26
|
+
## Setup
|
|
27
|
+
|
|
28
|
+
Write working state to `.omm/state/trace-<slug>.md` (create `.omm/state/` if
|
|
29
|
+
missing). Never write trace scratch files under `.agents/` or `.muse/` —
|
|
30
|
+
both are muse-protected paths that reject unmediated writes.
|
|
31
|
+
|
|
32
|
+
## Method
|
|
33
|
+
|
|
34
|
+
1. **State the symptom precisely.** Exact observed behavior, exact expected
|
|
35
|
+
behavior, and the smallest reproduction you have. If you cannot state a
|
|
36
|
+
precise symptom, this is not ready for tracing — ask the user to narrow
|
|
37
|
+
it or fall back to ordinary debugging.
|
|
38
|
+
2. **Generate competing hypotheses.** List 2-4 genuinely different candidate
|
|
39
|
+
causes, not variations on the same guess. Each hypothesis should predict
|
|
40
|
+
a different piece of evidence if true.
|
|
41
|
+
3. **Spawn parallel evidence-gatherers.** For each hypothesis, `subagent_spawn`
|
|
42
|
+
an `explore` or `debugger` persona with an objective narrowly scoped to
|
|
43
|
+
confirming or falsifying that one hypothesis — not to fixing anything.
|
|
44
|
+
Use `worktree_isolation` only if a hypothesis requires running code with
|
|
45
|
+
local mutations; pure read/grep investigation does not need it. Track the
|
|
46
|
+
spawned ids and poll with `subagent_status`/`subagent_wait`.
|
|
47
|
+
4. **Collect evidence, not verdicts.** Read each result with
|
|
48
|
+
`subagent_read_result`. Record what was found for and against each
|
|
49
|
+
hypothesis, including negative results — a hypothesis a subagent could not
|
|
50
|
+
confirm is evidence too.
|
|
51
|
+
5. **Score and converge.** Rank hypotheses by evidence weight. If one
|
|
52
|
+
hypothesis is clearly best-supported, state it and the confirming
|
|
53
|
+
evidence. If two remain close, say so plainly rather than picking one to
|
|
54
|
+
look decisive — an honest "still ambiguous between A and B, next probe
|
|
55
|
+
would be X" is a valid outcome of this skill.
|
|
56
|
+
6. **Recommend the next probe or the fix.** If the cause is confirmed,
|
|
57
|
+
describe the fix (do not apply it unless the user also asked for a fix in
|
|
58
|
+
the same request). If not confirmed, name the single most informative
|
|
59
|
+
next piece of evidence to gather.
|
|
60
|
+
|
|
61
|
+
## Output
|
|
62
|
+
|
|
63
|
+
Write the hypothesis table (hypothesis, evidence for, evidence against,
|
|
64
|
+
verdict) to the state file, then present it in a normal reply. Keep it
|
|
65
|
+
evidence-first: a hypothesis with no cited evidence is not a valid entry in
|
|
66
|
+
the table.
|
|
67
|
+
|
|
68
|
+
## Handoff
|
|
69
|
+
|
|
70
|
+
Trace does not automatically start a fix or hand off to another skill; there
|
|
71
|
+
is no frontmatter mechanism to chain skills. If the traced cause implies real
|
|
72
|
+
scope decisions (not just a one-line fix), say in prose: "Cause identified —
|
|
73
|
+
this touches enough surface that it's worth a spec before changing anything.
|
|
74
|
+
Run `/deep-interview` next if you want that, or ask me to apply the fix
|
|
75
|
+
directly." Then stop and let the user choose.
|