@ericrisco/rsc 2.0.20 → 2.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/README.md +40 -17
- package/manifest.json +18 -85
- package/package.json +5 -1
- package/scripts/consult.js +8 -8
- package/scripts/install-apply.js +40 -11
- package/scripts/lib/default-skill-floor.js +5 -4
- package/scripts/lib/divergence.js +7 -3
- package/scripts/lib/domains.js +2 -2
- package/scripts/lib/onboarding-apply.js +43 -26
- package/scripts/lib/onboarding.js +5 -5
- package/scripts/lib/recommend.js +1 -1
- package/scripts/lib/repair.js +4 -2
- package/scripts/lib/retired-skills.js +20 -0
- package/scripts/rsc.js +25 -19
- package/scripts/skill-behavior-rubric.md +1 -1
- package/scripts/skill-migration-brief.md +3 -3
- package/skills/analyze/SKILL.md +3 -8
- package/skills/analyze/evals/cases.yaml +1 -1
- package/skills/author-skill/SKILL.md +3 -3
- package/skills/author-skill/evals/cases.yaml +1 -1
- package/skills/author-skill/references/rsc-conventions.md +1 -1
- package/skills/clarify/SKILL.md +7 -14
- package/skills/clarify/evals/cases.yaml +2 -2
- package/skills/code-review/SKILL.md +1 -1
- package/skills/constitution/SKILL.md +10 -13
- package/skills/constitution/evals/cases.yaml +3 -3
- package/skills/continuous-learning/SKILL.md +1 -1
- package/skills/continuous-learning/evals/cases.yaml +1 -1
- package/skills/debug/SKILL.md +8 -12
- package/skills/debug/evals/cases.yaml +1 -1
- package/skills/decision-challenge/SKILL.md +1 -1
- package/skills/deprecation/SKILL.md +1 -1
- package/skills/ftd/SKILL.md +1 -3
- package/skills/ftd/evals/cases.yaml +1 -1
- package/skills/harness/SKILL.md +10 -9
- package/skills/harness/references/claude-md-template.md +1 -1
- package/skills/harness/references/wiki-protocol.md +5 -6
- package/skills/idea-refinement/SKILL.md +1 -1
- package/skills/implement/SKILL.md +14 -18
- package/skills/implement/evals/cases.yaml +1 -1
- package/skills/init/SKILL.md +26 -44
- package/skills/init/evals/README.md +3 -3
- package/skills/init/evals/cases.yaml +7 -7
- package/skills/init/references/accompaniment-and-profile.md +22 -40
- package/skills/init/references/discovery.md +2 -2
- package/skills/init/references/recommend-skills.md +5 -5
- package/skills/init/scripts/verify.sh +3 -7
- package/skills/knowledge-ops/SKILL.md +1 -1
- package/skills/orient/SKILL.md +52 -41
- package/skills/orient/evals/README.md +11 -9
- package/skills/orient/evals/cases.yaml +39 -29
- package/skills/orient/references/explain-ladder.md +93 -0
- package/skills/orient/references/orientation-contract.md +70 -18
- package/skills/parallel/SKILL.md +1 -1
- package/skills/parallel/evals/cases.yaml +2 -2
- package/skills/plan/SKILL.md +9 -13
- package/skills/review/SKILL.md +5 -8
- package/skills/roast-me/SKILL.md +1 -1
- package/skills/sdd/SKILL.md +10 -14
- package/skills/sdd/evals/README.md +2 -2
- package/skills/sdd/evals/cases.yaml +4 -4
- package/skills/sdd/references/model-routing.md +5 -12
- package/skills/sdd-init/SKILL.md +3 -3
- package/skills/ship/SKILL.md +6 -11
- package/skills/simplify-code/SKILL.md +1 -1
- package/skills/skill-scout/SKILL.md +1 -1
- package/skills/source-grounded-development/SKILL.md +1 -1
- package/skills/specify/SKILL.md +13 -14
- package/skills/specify/evals/cases.yaml +1 -1
- package/skills/specify/references/eliciting-requirements.md +5 -5
- package/skills/suggest/SKILL.md +3 -9
- package/skills/suggest/evals/cases.yaml +1 -1
- package/skills/tasks/SKILL.md +6 -7
- package/skills/tasks/evals/cases.yaml +1 -1
- package/skills/unslop/SKILL.md +39 -10
- package/skills/unslop/evals/README.md +7 -7
- package/skills/unslop/evals/cases.yaml +10 -9
- package/skills/verify/SKILL.md +5 -8
- package/skills/verify/evals/cases.yaml +1 -1
- package/skills/worktrees/SKILL.md +14 -18
- package/skills/worktrees/evals/cases.yaml +1 -1
- package/targets/clone-bootstrap.mjs +4 -1
- package/targets/session-start.mjs +1 -1
- package/skills/bro/SKILL.md +0 -76
- package/skills/bro/evals/README.md +0 -22
- package/skills/bro/evals/cases.yaml +0 -62
- package/skills/eli5/SKILL.md +0 -63
- package/skills/eli5/evals/README.md +0 -22
- package/skills/eli5/evals/cases.yaml +0 -54
- package/skills/show-me/SKILL.md +0 -140
- package/skills/show-me/evals/README.md +0 -23
- package/skills/show-me/evals/cases.yaml +0 -61
|
@@ -103,7 +103,7 @@ End every review with exactly one, plainly — no mushy middle:
|
|
|
103
103
|
|
|
104
104
|
## Effort dial
|
|
105
105
|
|
|
106
|
-
Mirror the slash command's effort level: **low/medium** → fewer, high-confidence findings (raise the confidence floor, focus on passes 1–4). **high/max** → broader coverage; uncertain findings are allowed but must be labelled `[question]`, never inflated into blockers. This is *coverage vs precision*, not the
|
|
106
|
+
Mirror the slash command's effort level: **low/medium** → fewer, high-confidence findings (raise the confidence floor, focus on passes 1–4). **high/max** → broader coverage; uncertain findings are allowed but must be labelled `[question]`, never inflated into blockers. This is *coverage vs precision*, not the user's register — it changes what you look at, not how you word it.
|
|
107
107
|
|
|
108
108
|
## Emitting comments and applying fixes
|
|
109
109
|
|
|
@@ -17,18 +17,15 @@ Not this phase: *what to build* → `../specify/SKILL.md`; the technical approac
|
|
|
17
17
|
|
|
18
18
|
## Model tier — `heavy` (opt-in routing)
|
|
19
19
|
|
|
20
|
-
This phase's default model tier is **`heavy`** — it sets the project's non-negotiables, the highest-leverage decisions in the repo. Routing is **off** unless `models.enabled: true` in `02-DOCS/wiki/sdd/config.yaml`. When on: resolve this phase's tier (`models.overrides` wins over `models.phases`), map it to a model via `models.tiers`, and apply per `../sdd/references/model-routing.md` — announce the switch
|
|
20
|
+
This phase's default model tier is **`heavy`** — it sets the project's non-negotiables, the highest-leverage decisions in the repo. Routing is **off** unless `models.enabled: true` in `02-DOCS/wiki/sdd/config.yaml`. When on: resolve this phase's tier (`models.overrides` wins over `models.phases`), map it to a model via `models.tiers`, and apply per `../sdd/references/model-routing.md` — announce the switch in one line when it differs from the session model, and dispatch any `Task`/`parallel` subagents on that model. Routing off or no profile → honor the session model silently. Never fake a switch a tool can't make; skip routing on a one-line change.
|
|
21
21
|
|
|
22
|
-
## Honor the
|
|
22
|
+
## Honor the register first
|
|
23
23
|
|
|
24
|
-
Before asking anything, read `02-DOCS/wiki/harness/user-profile.md` and
|
|
24
|
+
Before asking anything, read `02-DOCS/wiki/harness/user-profile.md` and use its `technical_level`: technical terms, or plain words with analogies. No profile yet → use analogies and ask once "technical or with analogies?", or point the user at `init`; never assume fluency. The interview is the same for every reader:
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
| L1 — breve | One line of *why* per principle proposed. Ask 3-4 questions max. |
|
|
30
|
-
| L2 — explica decisiones | Justify each principle as you propose it; surface trade-offs where a rule constrains the team. |
|
|
31
|
-
| L3 — acompañamiento total | Explain what a constitution is and why each section matters, one kind question at a time, before writing anything. Non-technical framing. |
|
|
26
|
+
- Infer almost everything from the codebase and stack wiki. Ask only the few questions that genuinely change a principle.
|
|
27
|
+
- Give one line of *why* per principle proposed, and the trade-off where a rule constrains the team — in the `orient` voice.
|
|
28
|
+
- For a `non-technical` reader, say in one sentence what a constitution is (the house rules every later step obeys) before drafting.
|
|
32
29
|
|
|
33
30
|
## Reconcile before you write (do not duplicate the stack wiki)
|
|
34
31
|
|
|
@@ -58,7 +55,7 @@ Strong — "4. No secret is ever committed; secrets load from 01-TOOLS/<provider
|
|
|
58
55
|
|
|
59
56
|
## The interview (requirements-first, batched)
|
|
60
57
|
|
|
61
|
-
Gather what you cannot infer, then draft. Ask in
|
|
58
|
+
Gather what you cannot infer, then draft. Ask in one short batch — only the questions that matter. Cover these dimensions — skip any the stack wiki already answers, and confirm rather than re-ask:
|
|
62
59
|
|
|
63
60
|
1. **Stack canon** — languages, frameworks, runtime/versions, package manager. What is fixed vs. open?
|
|
64
61
|
2. **Quality bar** — formatter/linter (must pass clean?), type checking (strict?), test discipline (TDD? coverage floor? what kind of tests gate a merge?).
|
|
@@ -95,7 +92,7 @@ The constitution is versioned so `analyze` and `review` can cite "constitution v
|
|
|
95
92
|
|
|
96
93
|
- **Semantic-ish versioning.** MAJOR when a principle is removed or reversed (breaks existing work); MINOR when a principle is added or materially tightened; PATCH for wording/clarity with no behavior change.
|
|
97
94
|
- **Amendments are append-only in the log.** Never silently edit a ratified principle — strike it (mark superseded) and add the new one, bump the version, and record date + why in the amendment log.
|
|
98
|
-
- **Ratification.** A new or amended constitution is shown to the user and ratified explicitly before it takes effect.
|
|
95
|
+
- **Ratification.** A new or amended constitution is shown to the user and ratified explicitly before it takes effect. "Ratify" is an explicit yes on the shown draft; walk each change only if the user asks.
|
|
99
96
|
- **Downstream notice.** When a principle changes mid-project, flag that existing specs/plans may now be inconsistent — `analyze` will catch the drift on the next run.
|
|
100
97
|
|
|
101
98
|
## Anti-patterns
|
|
@@ -107,13 +104,13 @@ The constitution is versioned so `analyze` and `review` can cite "constitution v
|
|
|
107
104
|
| "Two stack articles disagree — I'll just pick the stricter one." | Contradictions are findings. Surface them; the user resolves. |
|
|
108
105
|
| "The principle is 'write good code' — everyone knows what that means." | Not checkable, not a principle. Make it testable or drop it. |
|
|
109
106
|
| "I'll rewrite the existing constitution to match what they said today." | Amend, don't overwrite. Strike + add + bump version + log the why. |
|
|
110
|
-
| "No profile yet, I'll assume they're technical
|
|
107
|
+
| "No profile yet, I'll assume they're technical." | Use analogies; ask once "technical or with analogies?" or send them to `init`. |
|
|
111
108
|
| "I'll add a Co-Authored-By so the commit credits the assist." | No. Git authorship is the human's — it's a fixed principle, enforced at `ship`. |
|
|
112
109
|
| "I'll ratify it myself since it's obvious." | The user ratifies. Show the draft, get the explicit yes, then it takes effect. |
|
|
113
110
|
|
|
114
111
|
## Checklist before handing off
|
|
115
112
|
|
|
116
|
-
- [ ] `02-DOCS/wiki/harness/user-profile.md` read;
|
|
113
|
+
- [ ] `02-DOCS/wiki/harness/user-profile.md` read; register matched to `technical_level` (or the register question asked).
|
|
117
114
|
- [ ] Reconciliation pass done against every `02-DOCS/wiki/stack/*` article; contradictions surfaced, not auto-resolved.
|
|
118
115
|
- [ ] Every principle is numbered, imperative, testable, and links its enforcer where one exists.
|
|
119
116
|
- [ ] The Definition-of-Done checklist is present (what `verify` runs against).
|
|
@@ -41,7 +41,7 @@ should_not_trigger:
|
|
|
41
41
|
|
|
42
42
|
- prompt: "I'm starting from scratch and don't know where to begin — help me bootstrap the project."
|
|
43
43
|
route_to: "init"
|
|
44
|
-
why: "Front-door bootstrapping (
|
|
44
|
+
why: "Front-door bootstrapping (ask the register question, write the profile, recommend bundles) is init; the constitution runs after the harness exists and the profile is set."
|
|
45
45
|
|
|
46
46
|
- prompt: "Show me how to actually configure Ruff and pytest with an 80% coverage gate in our FastAPI service."
|
|
47
47
|
route_to: "fastapi"
|
|
@@ -61,9 +61,9 @@ should_not_trigger:
|
|
|
61
61
|
# the file, and ratifies with the user — an ungrounded answer writes a vague,
|
|
62
62
|
# unversioned wall of aspirations.
|
|
63
63
|
capability:
|
|
64
|
-
- scenario: "Stand up the constitution for a new project that has a Next.js frontend and a FastAPI backend. The harness already wrote 02-DOCS/wiki/stack/nextjs.md and fastapi.md with some conventions. There is a user-profile
|
|
64
|
+
- scenario: "Stand up the constitution for a new project that has a Next.js frontend and a FastAPI backend. The harness already wrote 02-DOCS/wiki/stack/nextjs.md and fastapi.md with some conventions. There is a user-profile with technical_level: technical."
|
|
65
65
|
must_include:
|
|
66
|
-
- "Reads 02-DOCS/wiki/harness/user-profile.md and
|
|
66
|
+
- "Reads 02-DOCS/wiki/harness/user-profile.md and speaks in technical terms, briefly (one line of why per principle, few questions) rather than a long interview."
|
|
67
67
|
- "Runs the reconciliation pass: reads the existing wiki/stack/nextjs.md and fastapi.md, lifts only project-wide non-negotiables, and LINKS those articles instead of pasting their config; surfaces any contradiction for the user to resolve rather than auto-picking."
|
|
68
68
|
- "Every principle is numbered, imperative, and testable (a number, command, or named artifact), not an aspiration like 'write clean code'."
|
|
69
69
|
- "Includes the two fixed principles: git authorship is the human's (no Co-Authored-By AI / generated-with footer, enforced at ship) and significant decisions are logged."
|
|
@@ -12,7 +12,7 @@ This is the engine that makes the system get better every time it is wrong. When
|
|
|
12
12
|
|
|
13
13
|
One premise is load-bearing: **a lesson that lives only in chat is gone at the next compaction.** Verbal reflection only changes future behaviour when it is persisted to memory the agent actually reads next time (this is the Reflexion mechanism — self-reflection written to durable memory, not held in the conversation). In this harness, "memory" is a concrete set of surfaces: a `SKILL.md` body, `02-DOCS/wiki/harness/decisions.md`, `02-DOCS/wiki/harness/user-profile.md`, a root `CLAUDE.md` rule, or a `verify.sh` check. **Chat is not memory.** A lesson is "captured" only when it has landed in one of those.
|
|
14
14
|
|
|
15
|
-
Read `02-DOCS/wiki/harness/user-profile.md`
|
|
15
|
+
Read `technical_level` in `02-DOCS/wiki/harness/user-profile.md` before you narrate, and speak in the `orient` voice in that register. It governs the words only — the capture loop runs identically for every reader.
|
|
16
16
|
|
|
17
17
|
## Boundaries
|
|
18
18
|
|
|
@@ -29,7 +29,7 @@ should_not_trigger:
|
|
|
29
29
|
capability:
|
|
30
30
|
- scenario: "A user says: 'You've now twice deleted my .env when scaffolding a tool. I'm tired of catching it. Make sure this never happens again.' Show how continuous-learning captures it."
|
|
31
31
|
must_include:
|
|
32
|
-
- "Reads 02-DOCS/wiki/harness/user-profile.md
|
|
32
|
+
- "Reads technical_level from 02-DOCS/wiki/harness/user-profile.md and narrates briefly in that register (technical terms or analogies)."
|
|
33
33
|
- "States the root cause blamelessly as a system gap (a missing guardrail), not 'I was careless'."
|
|
34
34
|
- "Applies the 2+-recurrences rule: this is the 2nd time, so a structural fix is required — not another apology or note."
|
|
35
35
|
- "Routes to the right durable home via the table: a root CLAUDE.md rule and/or a verify.sh check on the scaffolding skill, naming the exact path."
|
package/skills/debug/SKILL.md
CHANGED
|
@@ -26,21 +26,17 @@ delegation table below.
|
|
|
26
26
|
|
|
27
27
|
## Model tier — `heavy` (opt-in routing)
|
|
28
28
|
|
|
29
|
-
This phase's default model tier is **`heavy`** — root-cause diagnosis is deep reasoning. Routing is **off** unless `models.enabled: true` in `02-DOCS/wiki/sdd/config.yaml`. When on: resolve this phase's tier (`models.overrides` wins over `models.phases`), map it to a model via `models.tiers`, and apply per `../sdd/references/model-routing.md` — announce the switch
|
|
29
|
+
This phase's default model tier is **`heavy`** — root-cause diagnosis is deep reasoning. Routing is **off** unless `models.enabled: true` in `02-DOCS/wiki/sdd/config.yaml`. When on: resolve this phase's tier (`models.overrides` wins over `models.phases`), map it to a model via `models.tiers`, and apply per `../sdd/references/model-routing.md` — announce the switch in one line when it differs from the session model, and dispatch any `Task`/`parallel` subagents on that model. Routing off or no profile → honor the session model silently. Never fake a switch a tool can't make; skip routing on a one-line change.
|
|
30
30
|
|
|
31
|
-
## Read the room first (
|
|
31
|
+
## Read the room first (register)
|
|
32
32
|
|
|
33
|
-
Before diagnosing, read `02-DOCS/wiki/harness/user-profile.md
|
|
34
|
-
|
|
35
|
-
never
|
|
36
|
-
dial — the volume does.
|
|
33
|
+
Before diagnosing, read `technical_level` in `02-DOCS/wiki/harness/user-profile.md`; it picks
|
|
34
|
+
technical terms or plain words with analogies. With no profile yet, use analogies. The *method*
|
|
35
|
+
never changes with the register — only the words do.
|
|
37
36
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
| **L1** brief | the cause + one line of *why* it produced this symptom | only what you can't observe yourself (e.g. exact error text) |
|
|
42
|
-
| **L2** decisions | each step's finding (repro, the half that isolated it, the cause) | confirm before a fix that changes behavior beyond the bug |
|
|
43
|
-
| **L3** full | narrate the whole loop, teach the binary-search reasoning aloud | ask to contextualize the environment, recent changes, expectations |
|
|
37
|
+
In the `orient` voice, show: the confirmed cause, one line of *why* it produced this symptom, and
|
|
38
|
+
the fix. Ask only what you can't observe yourself (e.g. exact error text). Confirm before a fix that
|
|
39
|
+
changes behavior beyond the bug.
|
|
44
40
|
|
|
45
41
|
## The loop — five steps, never skipped, never reordered
|
|
46
42
|
|
|
@@ -62,7 +62,7 @@ should_not_trigger:
|
|
|
62
62
|
capability:
|
|
63
63
|
- scenario: "Mid-implement, a FastAPI integration test for the orders endpoint fails intermittently (~3 of 10 runs) with a 500. The user says 'just wrap it in a retry so the suite goes green and we can keep moving'. Diagnose it properly."
|
|
64
64
|
must_include:
|
|
65
|
-
- "Reads
|
|
65
|
+
- "Reads technical_level from 02-DOCS/wiki/harness/user-profile.md (or, absent a profile, notes that and uses analogies) and reports cause, why and fix briefly, while keeping the diagnosis method unchanged by the register."
|
|
66
66
|
- "REFUSES the retry/wrap-it shortcut: names that a retry relocates the race and leaves the cause armed, so it does not address the root cause."
|
|
67
67
|
- "REPRODUCE: turns 'intermittent' into a measured rate by running the test N times and recording k/N failures, and captures the verbatim error/stack and exact command."
|
|
68
68
|
- "Frames the flake as having a real cause class — shared state / test-order dependence / a concurrency race / time / network — and sets out to identify which, not to accept intermittency."
|
|
@@ -110,4 +110,4 @@ PROCEED / HOLD / STOP — reason — unlock condition.
|
|
|
110
110
|
|
|
111
111
|
## Orientación (siempre)
|
|
112
112
|
|
|
113
|
-
|
|
113
|
+
Habla con la voz de `orient`: frases cortas, una idea por frase, y cada respuesta se entiende sola. Registro técnico o con analogías según `technical_level` en `02-DOCS/wiki/harness/user-profile.md`. Cierra cada turno con el **bloque-brújula** (📍 dónde estás · ➡️ siguiente, terminando en pregunta; ✅ y 🧭 cuando hay algo hecho o decidido). **Nunca termines en seco.** Protocolo completo: skill `orient` → `skills/orient/references/orientation-contract.md`. (Defiere a `suggest` el "¿instalo la skill que falta?".)
|
|
@@ -120,4 +120,4 @@ Disabled · observed · deleted · residual artifacts.
|
|
|
120
120
|
|
|
121
121
|
## Orientación (siempre)
|
|
122
122
|
|
|
123
|
-
|
|
123
|
+
Habla con la voz de `orient`: frases cortas, una idea por frase, y cada respuesta se entiende sola. Registro técnico o con analogías según `technical_level` en `02-DOCS/wiki/harness/user-profile.md`. Cierra cada turno con el **bloque-brújula** (📍 dónde estás · ➡️ siguiente, terminando en pregunta; ✅ y 🧭 cuando hay algo hecho o decidido). **Nunca termines en seco.** Protocolo completo: skill `orient` → `skills/orient/references/orientation-contract.md`. (Defiere a `suggest` el "¿instalo la skill que falta?".)
|
package/skills/ftd/SKILL.md
CHANGED
|
@@ -88,6 +88,4 @@ and never because the work turned out to be big.
|
|
|
88
88
|
|
|
89
89
|
## Orientación (siempre)
|
|
90
90
|
|
|
91
|
-
Cierra cada turno con el **bloque-brújula** (📍 dónde estás ·
|
|
92
|
-
terminando en pregunta), calibrado al dial de `02-DOCS/wiki/harness/user-profile.md`. Nunca termines
|
|
93
|
-
en seco. Protocolo completo: skill `orient`.
|
|
91
|
+
Habla con la voz de `orient`: frases cortas, una idea por frase, y cada respuesta se entiende sola. Registro técnico o con analogías según `technical_level` en `02-DOCS/wiki/harness/user-profile.md`. Cierra cada turno con el **bloque-brújula** (📍 dónde estás · ➡️ siguiente, terminando en pregunta; ✅ y 🧭 cuando hay algo hecho o decidido). **Nunca termines en seco.** Protocolo completo: skill `orient` → `skills/orient/references/orientation-contract.md`. (Defiere a `suggest` el "¿instalo la skill que falta?".)
|
|
@@ -45,7 +45,7 @@ should_not_trigger:
|
|
|
45
45
|
why: "Reading a finished diff for defects is a review, not a change. Nothing here authorises writing, so no feature document is created."
|
|
46
46
|
|
|
47
47
|
capability:
|
|
48
|
-
- scenario: "A developer
|
|
48
|
+
- scenario: "A developer whose profile says technical_level: technical says: 'Añade exportación a CSV usando los filtros del informe que ya existen.' Show how the lane runs from the first word to delivery."
|
|
49
49
|
must_include:
|
|
50
50
|
- "Names the lane out loud in one line before acting, as the decisor requires — this is FTD, not a question and not the chain"
|
|
51
51
|
- "Creates one feature document at 02-DOCS/wiki/ftd/<slug>.md BEFORE the first change, and says which document it created and how many tasks it holds"
|
package/skills/harness/SKILL.md
CHANGED
|
@@ -46,10 +46,11 @@ The **harness** is the control plane of a workspace. A workspace need not be cod
|
|
|
46
46
|
|
|
47
47
|
## How the harness talks to the user
|
|
48
48
|
|
|
49
|
-
Read `02-DOCS/wiki/harness/user-profile.md` before you start
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
first contact (it owns the
|
|
49
|
+
Read `02-DOCS/wiki/harness/user-profile.md` before you start. Its `technical_level` picks the
|
|
50
|
+
register: technical terms used directly, or plain words with everyday analogies. Everything else is
|
|
51
|
+
the one `orient` voice: short sentences, and every answer understandable on its own. No profile yet
|
|
52
|
+
→ use analogies, and let `init` run first contact (it owns the one register question; do not re-ask
|
|
53
|
+
it here).
|
|
53
54
|
|
|
54
55
|
Two files carry the state, both indexed from the root `CLAUDE.md` Knowledge map under `harness/`:
|
|
55
56
|
`user-profile.md` for the living portrait of the user, and `decisions.md` as an append-only log —
|
|
@@ -66,9 +67,9 @@ risks, commands. It is what lets the next agent resume without trusting chat his
|
|
|
66
67
|
|
|
67
68
|
For any significant decision (deploy target, database, hosting, tooling), gather the requirements
|
|
68
69
|
that actually drive the choice *before* presenting anything — for a deploy: expected and concurrent
|
|
69
|
-
users, budget, data residency, the team's ops comfort, scaling needs.
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
users, budget, data residency, the team's ops comfort, scaling needs. Ask only the ones that change
|
|
71
|
+
the answer, in one short batch. Then present exactly three options with honest trade-offs, recommend
|
|
72
|
+
one in their register, and log it.
|
|
72
73
|
|
|
73
74
|
The canonical deploy trio is Hetzner+Coolify (cheap, total control, self-managed), Vercel (zero-ops,
|
|
74
75
|
scales itself, costly at scale), and a third chosen from their answers. Apply the pattern yourself
|
|
@@ -241,7 +242,7 @@ Print a final report:
|
|
|
241
242
|
Once the structure stands, make sure the workspace has the rsc skills its stack and goals call for — detection here, not just at `init`:
|
|
242
243
|
|
|
243
244
|
1. **Detect → propose.** From the detected stacks/providers and the user's goals in `02-DOCS/wiki/harness/`, build a shortlist. Ask the CLI if unsure: `npx @ericrisco/rsc consult "<stack + goal>"`. (Map e.g. detected Stripe→`stripe`, Postgres→`postgresdb`, Next→`nextjs`+`design`, a company/ops focus→`finance-ops`/`invoicing`/`gdpr-privacy`…)
|
|
244
|
-
2. **Confirm, then install yourself.** Show the shortlist with a one-line *why* each (
|
|
245
|
+
2. **Confirm, then install yourself.** Show the shortlist with a one-line *why* each (in their register), get a one-word confirm, and run it via Bash — installing writes to their environment, so always confirm first:
|
|
245
246
|
```bash
|
|
246
247
|
npx @ericrisco/rsc add <skill> [<skill> ...]
|
|
247
248
|
```
|
|
@@ -297,5 +298,5 @@ This skill is fully self-contained. No external sub-skill required.
|
|
|
297
298
|
|
|
298
299
|
## Orientación (siempre)
|
|
299
300
|
|
|
300
|
-
|
|
301
|
+
Habla con la voz de `orient`: frases cortas, una idea por frase, y cada respuesta se entiende sola. Registro técnico o con analogías según `technical_level` en `02-DOCS/wiki/harness/user-profile.md`. Cierra cada turno con el **bloque-brújula** (📍 dónde estás · ➡️ siguiente, terminando en pregunta; ✅ y 🧭 cuando hay algo hecho o decidido). **Nunca termines en seco.** Protocolo completo: skill `orient` → `skills/orient/references/orientation-contract.md`. (Defiere a `suggest` el "¿instalo la skill que falta?".)
|
|
301
302
|
|
|
@@ -24,7 +24,7 @@ Read first, always:
|
|
|
24
24
|
|
|
25
25
|
| Area | Article |
|
|
26
26
|
|------|---------|
|
|
27
|
-
| User profile (technical
|
|
27
|
+
| User profile (register: technical or analogies) | `02-DOCS/wiki/harness/user-profile.md` |
|
|
28
28
|
| SDD constitution (project non-negotiables) | `02-DOCS/wiki/sdd/constitution.md` |
|
|
29
29
|
| **Everything else — full index** | `02-DOCS/wiki/index.md` |
|
|
30
30
|
|
|
@@ -107,12 +107,11 @@ plane keeps about the user and its own decisions. It is a normal wiki topic
|
|
|
107
107
|
(linted, scored, indexed) with two canonical articles:
|
|
108
108
|
|
|
109
109
|
- `wiki/harness/user-profile.md` — the living portrait of the user: technical
|
|
110
|
-
level,
|
|
111
|
-
skill reads this first** and
|
|
112
|
-
the
|
|
113
|
-
When absent, the agent
|
|
114
|
-
|
|
115
|
-
proceeding. See the "Core behavior" section of the parent `SKILL.md`.
|
|
110
|
+
level (the register: technical terms, or plain words with analogies), goals,
|
|
111
|
+
context, constraints. **Every skill reads this first** and speaks in that
|
|
112
|
+
register, in the one `orient` voice. Created/updated by `init` and `harness`.
|
|
113
|
+
When absent, the agent uses analogies and asks once "technical or with
|
|
114
|
+
analogies?" before proceeding. See the "Core behavior" section of the parent `SKILL.md`.
|
|
116
115
|
- `wiki/harness/decisions.md` — **append-only** log of every significant
|
|
117
116
|
decision (deploy target, database, framework, hosting, tooling…). One entry
|
|
118
117
|
per decision with date, requirements gathered, the 3 options presented (the
|
|
@@ -118,4 +118,4 @@ Method · audience · support signal · kill signal · timebox.
|
|
|
118
118
|
|
|
119
119
|
## Orientación (siempre)
|
|
120
120
|
|
|
121
|
-
|
|
121
|
+
Habla con la voz de `orient`: frases cortas, una idea por frase, y cada respuesta se entiende sola. Registro técnico o con analogías según `technical_level` en `02-DOCS/wiki/harness/user-profile.md`. Cierra cada turno con el **bloque-brújula** (📍 dónde estás · ➡️ siguiente, terminando en pregunta; ✅ y 🧭 cuando hay algo hecho o decidido). **Nunca termines en seco.** Protocolo completo: skill `orient` → `skills/orient/references/orientation-contract.md`. (Defiere a `suggest` el "¿instalo la skill que falta?".)
|
|
@@ -42,9 +42,9 @@ back — you do not write feature code anyway.
|
|
|
42
42
|
3. **Read the skill registry.** Open `.rsc/skill-registry.json` if present. Select only the
|
|
43
43
|
relevant stack/process skills for this task, then digest them into compact rules. If the
|
|
44
44
|
registry is missing, run or recommend `npx @ericrisco/rsc registry refresh` and record the fallback.
|
|
45
|
-
4. **Read the
|
|
46
|
-
|
|
47
|
-
below). No profile yet →
|
|
45
|
+
4. **Read the register.** Open `02-DOCS/wiki/harness/user-profile.md` and read `technical_level`.
|
|
46
|
+
It picks technical terms or plain words with analogies at each checkpoint (see "Checkpoints"
|
|
47
|
+
below). No profile yet → use analogies, and ask before any irreversible step.
|
|
48
48
|
5. **Confirm isolation.** Implementation happens on a feature branch or worktree, never directly on
|
|
49
49
|
the default branch. If you are on `main`/`master`, stop and hand to `worktrees` before the first
|
|
50
50
|
commit.
|
|
@@ -68,7 +68,7 @@ PROGRESS → append task/test/blocker/decision state to 02-DOCS/wiki/sdd/progres
|
|
|
68
68
|
COMMIT → commit this task as one logical unit (authorship = Eric; see ship for the rule).
|
|
69
69
|
REVIEW → dispatch a fresh reviewer subagent over THIS task's commits (see "Per-task review gate").
|
|
70
70
|
Fold its Critical/Important findings back in before you move on; Minor can wait.
|
|
71
|
-
CHECKPOINT → stop and show: what changed, test output, review verdict, the next task. Wait
|
|
71
|
+
CHECKPOINT → stop and show: what changed, test output, review verdict, the next task. Wait for the user.
|
|
72
72
|
```
|
|
73
73
|
|
|
74
74
|
The order is load-bearing. **Red before green** is not a suggestion — a test you write *after* the
|
|
@@ -254,21 +254,17 @@ gate on a genuinely trivial task (a one-line change), like the rest of the chain
|
|
|
254
254
|
|
|
255
255
|
## Model tier — `balanced` (opt-in routing)
|
|
256
256
|
|
|
257
|
-
This phase's default model tier is **`balanced`** — it is the bulk of TDD execution: cost-sensitive, with quality balanced handles well. Routing is **off** unless `models.enabled: true` in `02-DOCS/wiki/sdd/config.yaml`. When on: resolve this phase's tier (`models.overrides` wins over `models.phases`), map it to a model via `models.tiers`, and apply per `../sdd/references/model-routing.md` — announce the switch
|
|
257
|
+
This phase's default model tier is **`balanced`** — it is the bulk of TDD execution: cost-sensitive, with quality balanced handles well. Routing is **off** unless `models.enabled: true` in `02-DOCS/wiki/sdd/config.yaml`. When on: resolve this phase's tier (`models.overrides` wins over `models.phases`), map it to a model via `models.tiers`, and apply per `../sdd/references/model-routing.md` — announce the switch in one line when it differs from the session model, and dispatch any `Task`/`parallel` subagents on that model (this is where routing pays off most — fan-out runs on `balanced` while a hard sub-problem can be escalated to `heavy`). Routing off or no profile → honor the session model silently. Never fake a switch a tool can't make; skip routing on a one-line change.
|
|
258
258
|
|
|
259
|
-
##
|
|
259
|
+
## Checkpoints — what to say
|
|
260
260
|
|
|
261
|
-
|
|
261
|
+
Speak in the `orient` voice, in the register `technical_level` sets. At each checkpoint show: the
|
|
262
|
+
task, tests green or red, the one *why* behind any non-obvious choice, and the next task. Ask only
|
|
263
|
+
where the plan genuinely forked, and confirm before deviating from the plan or doing anything
|
|
264
|
+
irreversible.
|
|
262
265
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
| **L0** terse | one line: task done, tests green, moving on | none unless blocked or about to do something irreversible |
|
|
266
|
-
| **L1** brief | task + the one *why* behind any non-obvious choice | only where the plan genuinely forked |
|
|
267
|
-
| **L2** decisions | task + each relevant decision and its trade-off | confirm before deviating from the plan |
|
|
268
|
-
| **L3** full | task + reasoning, test output read aloud, what's next and why | ask to contextualize each decision; teach as you go |
|
|
269
|
-
|
|
270
|
-
The dial changes verbosity and question count — it **never** changes the engineering. TDD, the
|
|
271
|
-
done-checks, the constitution and decision logging hold at every level, including L0.
|
|
266
|
+
How short you are **never** changes the engineering. TDD, the done-checks, the constitution and
|
|
267
|
+
decision logging hold for every reader.
|
|
272
268
|
|
|
273
269
|
## Logging decisions (the 02-DOCS trail)
|
|
274
270
|
|
|
@@ -337,7 +333,7 @@ outranks the plan, and the plan outranks your in-the-moment preference.
|
|
|
337
333
|
- [ ] Apply progress appended to 02-DOCS/wiki/sdd/progress/<slug>.md
|
|
338
334
|
- [ ] Skill resolution recorded (used/missing/fallback/compact rules)
|
|
339
335
|
- [ ] Committed as one logical unit (authorship = Eric)
|
|
340
|
-
- [ ] Checkpoint shown
|
|
336
|
+
- [ ] Checkpoint shown in the orient voice; next task named
|
|
341
337
|
```
|
|
342
338
|
|
|
343
339
|
## Result envelope
|
|
@@ -383,5 +379,5 @@ the feature done.
|
|
|
383
379
|
|
|
384
380
|
## Orientación (siempre)
|
|
385
381
|
|
|
386
|
-
|
|
382
|
+
Habla con la voz de `orient`: frases cortas, una idea por frase, y cada respuesta se entiende sola. Registro técnico o con analogías según `technical_level` en `02-DOCS/wiki/harness/user-profile.md`. Cierra cada turno con el **bloque-brújula** (📍 dónde estás · ➡️ siguiente, terminando en pregunta; ✅ y 🧭 cuando hay algo hecho o decidido). **Nunca termines en seco.** Protocolo completo: skill `orient` → `skills/orient/references/orientation-contract.md`. (Defiere a `suggest` el "¿instalo la skill que falta?".)
|
|
387
383
|
|
|
@@ -38,6 +38,6 @@ capability:
|
|
|
38
38
|
- "GREEN: writes the least endpoint code to pass — no extra fields or features beyond what the done-check requires"
|
|
39
39
|
- "REFACTOR only after green, with a note to re-run and confirm still green"
|
|
40
40
|
- "Delegates the test mechanics to the FastAPI testing reference (ASGITransport in-process client + dependency_overrides + transactional rollback fixture) rather than hand-rolling a runner"
|
|
41
|
-
- "Stops at a checkpoint after the task (does not barrel into the next task) and
|
|
41
|
+
- "Stops at a checkpoint after the task (does not barrel into the next task) and reports the checkpoint briefly (task, tests, next task) in the register from technical_level in 02-DOCS/wiki/harness/user-profile.md"
|
|
42
42
|
- "Commits the task as one logical unit and notes authorship is Eric (no Co-Authored-By Claude)"
|
|
43
43
|
- "Logs any non-obvious choice (e.g. error envelope shape) to 02-DOCS/wiki/sdd/decisions.md, and ties done to the done-check + spec acceptance criterion (not 'looks right'), pointing to verify for the final whole-suite gate"
|
package/skills/init/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: init
|
|
3
|
-
description: "Use when starting from nothing or pointing rsc at an existing project — the front door.
|
|
3
|
+
description: "Use when starting from nothing or pointing rsc at an existing project — the front door. First asks one question — technical terms or analogies (analogies by default) — then discovers what the user wants to build or govern (any stack, or a non-code harness: company/ops, research, knowledge, content), writes the profile to 02-DOCS, and installs the skills discovery justified. NOT the scaffolder (that is `harness`), NOT a stack skill."
|
|
4
4
|
tags: [init, bootstrap, start, new, setup]
|
|
5
5
|
recommends: [harness]
|
|
6
6
|
profiles: [minimal, core, full]
|
|
@@ -22,43 +22,27 @@ It is **domain-agnostic**. The thing being built or governed may be software on
|
|
|
22
22
|
non-code harness — running a company, an ops desk, a research program, a knowledge base, a content
|
|
23
23
|
operation. No code required; the same structure governs it. Never assume "project" means "code".
|
|
24
24
|
|
|
25
|
-
## First contact:
|
|
25
|
+
## First contact: one question, set before anything else
|
|
26
26
|
|
|
27
|
-
The whole harness
|
|
27
|
+
The whole harness talks differently depending on this answer. Nothing — no discovery, no
|
|
28
28
|
recommendation — happens before the profile exists and `CLAUDE.md` links it.
|
|
29
29
|
|
|
30
|
-
**Step 1 —
|
|
31
|
-
|
|
30
|
+
**Step 1 — Ask the register.** Literally the first thing you say, before any discovery. Ask once,
|
|
31
|
+
in their language:
|
|
32
32
|
|
|
33
|
-
> "
|
|
34
|
-
> técnicos, o prefieres que te lo explique todo en cristiano? No hay respuesta mala — solo me ayuda
|
|
35
|
-
> a no aburrirte ni perderte."
|
|
33
|
+
> "¿Te hablo en lenguaje técnico o con analogías?"
|
|
36
34
|
|
|
37
|
-
> "
|
|
38
|
-
> would you rather I explain everything in plain language? There's no wrong answer — it just helps
|
|
39
|
-
> me not bore you or lose you."
|
|
35
|
+
> "Should I talk to you in technical terms or with analogies?"
|
|
40
36
|
|
|
41
|
-
Record `technical_level:
|
|
42
|
-
|
|
37
|
+
Record `technical_level: technical` (technical terms used directly) or `non-technical` (plain words
|
|
38
|
+
and everyday analogies). `mixed` stays valid in older profiles and reads like `non-technical`. No
|
|
39
|
+
clear answer → `non-technical`. There is no second question: every skill speaks in the one voice
|
|
40
|
+
`orient` owns (short sentences, one idea each, every answer understandable on its own), and this
|
|
41
|
+
value only picks its register. Full rules and file formats → `references/accompaniment-and-profile.md`.
|
|
43
42
|
|
|
44
|
-
**Step 2 —
|
|
45
|
-
just list letters.
|
|
43
|
+
**Step 2 — Persist immediately.** Before discovery, before any recommendation:
|
|
46
44
|
|
|
47
|
-
|
|
48
|
-
| --- | --- |
|
|
49
|
-
| L0 — cavernícola | Results, almost no explanation. One line of output; no questions beyond hard blockers. |
|
|
50
|
-
| L1 — breve | One line of *why* per step; questions only when genuinely ambiguous. |
|
|
51
|
-
| L2 — explica decisiones | Each relevant decision justified; asks before each significant one. |
|
|
52
|
-
| L3 — acompañamiento total | Explains everything, reasons out loud, asks a lot. Ideal for learning while building. |
|
|
53
|
-
|
|
54
|
-
Non-technical and silent → default **L3**. Technical and silent → **L1**. `technical_level` is an
|
|
55
|
-
orthogonal modifier: even at L0 a non-technical user gets plain phrasing; even at L3 a technical one
|
|
56
|
-
skips the 101s. Every rsc skill reads these two values and obeys them — L0 means *do it and stop
|
|
57
|
-
talking*. Full rules and file formats → `references/accompaniment-and-profile.md`.
|
|
58
|
-
|
|
59
|
-
**Step 3 — Persist immediately.** Before discovery, before any recommendation:
|
|
60
|
-
|
|
61
|
-
- `02-DOCS/wiki/harness/user-profile.md` — the living profile (levels, goals, context, constraints).
|
|
45
|
+
- `02-DOCS/wiki/harness/user-profile.md` — the living profile (register, goals, context, constraints).
|
|
62
46
|
- `02-DOCS/wiki/harness/decisions.md` — append-only. Entries are never edited or deleted.
|
|
63
47
|
- Root `CLAUDE.md` → a **short** `## Knowledge map` pointer: those two read-first entries plus a
|
|
64
48
|
"full index → `02-DOCS/wiki/index.md`" line. Keep it tiny; it loads on every turn, and every other
|
|
@@ -68,16 +52,16 @@ talking*. Full rules and file formats → `references/accompaniment-and-profile.
|
|
|
68
52
|
Greenfield? Create just `02-DOCS/wiki/harness/` to hold those two files. That plus the link is
|
|
69
53
|
everything `init` writes.
|
|
70
54
|
|
|
71
|
-
**Step
|
|
55
|
+
**Step 3 — Propose the developer model.** rsc installs a `developer` subagent (the implementation
|
|
72
56
|
worker) for every assistant supporting file-based agents. It runs at the **balanced** tier by
|
|
73
57
|
default — Sonnet on Anthropic tools, the provider's mid model elsewhere — and never the cheapest
|
|
74
|
-
`light` model, which is too weak to build with. Offer once,
|
|
58
|
+
`light` model, which is too weak to build with. Offer once, in one line:
|
|
75
59
|
|
|
76
60
|
> *"La implementación la hará un sub-agente `developer`. ¿Qué modelo? **balanced / Sonnet** (rápido y
|
|
77
61
|
> económico — recomendado) o **heavy / Opus** (máxima calidad, más caro)."*
|
|
78
62
|
|
|
79
|
-
Record to `.rsc/developer.json` and re-run install/sync so the agent files adopt it. Skipped
|
|
80
|
-
|
|
63
|
+
Record to `.rsc/developer.json` and re-run install/sync so the agent files adopt it. Skipped →
|
|
64
|
+
`balanced`, which install also writes by default.
|
|
81
65
|
|
|
82
66
|
**Opt-out.** A fresh session auto-starts `init` while `user-profile.md` is absent. If the user does
|
|
83
67
|
not want a harness in this repo, write an empty `.rsc/.no-harness` — that silences the auto-start
|
|
@@ -90,11 +74,11 @@ For **any** significant decision — deploy target, database, framework, hosting
|
|
|
90
74
|
documents live — never decide silently and never dump ten options.
|
|
91
75
|
|
|
92
76
|
1. **Gather the requirements that actually drive the choice.** For a deploy target: expected users,
|
|
93
|
-
concurrency, budget, data residency, the team's comfort operating servers, scaling needs.
|
|
94
|
-
the
|
|
77
|
+
concurrency, budget, data residency, the team's comfort operating servers, scaling needs. Ask only
|
|
78
|
+
the ones that change the choice.
|
|
95
79
|
2. **Present exactly three options** with honest trade-offs: what each is good at, what it costs,
|
|
96
80
|
what it demands of them.
|
|
97
|
-
3. **Recommend one**, matched to their answers
|
|
81
|
+
3. **Recommend one**, matched to their answers, and say why in their register.
|
|
98
82
|
4. **Log it** to `decisions.md` once they pick.
|
|
99
83
|
|
|
100
84
|
Canonical deploy example — Hetzner VPS + Coolify (cheapest, total control, you self-manage), Vercel
|
|
@@ -110,7 +94,7 @@ PROFILE → DISCOVER → INSTALL → GROUND → HANDOFF
|
|
|
110
94
|
|
|
111
95
|
### Phase 1 — PROFILE
|
|
112
96
|
|
|
113
|
-
Steps 1-
|
|
97
|
+
Steps 1-2 above. Do not proceed until `user-profile.md` exists and `CLAUDE.md` links it. The
|
|
114
98
|
framing of every later question depends on it, which is why it cannot wait until after discovery.
|
|
115
99
|
|
|
116
100
|
### Phase 2 — DISCOVER
|
|
@@ -127,7 +111,7 @@ the workspace is empty or holds only stray notes: interview from zero.
|
|
|
127
111
|
Then the domain. Software (backend, frontend, mobile, agents) or a non-code harness (company/ops,
|
|
128
112
|
research, knowledge, content)? Capture goals, audience, constraints, and any tools already in play.
|
|
129
113
|
Record to `02-DOCS/wiki/harness/` as you go. Questionnaires for both cases →
|
|
130
|
-
`references/discovery.md`. Ask in batches
|
|
114
|
+
`references/discovery.md`. Ask in short batches; never dump every question at once.
|
|
131
115
|
|
|
132
116
|
### Phase 3 — INSTALL
|
|
133
117
|
|
|
@@ -163,13 +147,13 @@ means the user starts clean.
|
|
|
163
147
|
docs instead of guessing from memory. Declined → `.rsc/.no-context7`.
|
|
164
148
|
3. **Skill audit.** Run `npx @ericrisco/rsc audit`. It inventories what is installed here and on the
|
|
165
149
|
machine and flags overlap or skills with no footprint, so the project starts with the right set
|
|
166
|
-
rather than a pile. Summarize
|
|
150
|
+
rather than a pile. Summarize it in their register.
|
|
167
151
|
4. **Tell them about the danger guard.** A `technical_level` of `non-technical` or `mixed` (and the
|
|
168
152
|
state before any profile exists) turns on a `PreToolUse` guard that blocks irreversible commands —
|
|
169
153
|
`rm -rf`, `git push --force`, `git reset --hard`, `DROP`/`TRUNCATE`, `DELETE`/`UPDATE` with no
|
|
170
154
|
`WHERE`, `dd` to a device, `curl | bash` — and asks for a safer alternative. A fully `technical`
|
|
171
155
|
user is never guarded. It turns off only if the user explicitly asks: `.rsc/.no-danger-guard`.
|
|
172
|
-
Mention it when you
|
|
156
|
+
Mention it when you record `non-technical`, so a later block is not a surprise.
|
|
173
157
|
|
|
174
158
|
### Phase 5 — HANDOFF
|
|
175
159
|
|
|
@@ -213,6 +197,4 @@ never fails).
|
|
|
213
197
|
|
|
214
198
|
## Orientación (siempre)
|
|
215
199
|
|
|
216
|
-
Cierra cada turno con el **bloque-brújula** (📍 dónde estás ·
|
|
217
|
-
terminando en pregunta), calibrado al dial de `02-DOCS/wiki/harness/user-profile.md`. Nunca termines
|
|
218
|
-
en seco. Protocolo completo: skill `orient` → `skills/orient/references/orientation-contract.md`.
|
|
200
|
+
Habla con la voz de `orient`: frases cortas, una idea por frase, y cada respuesta se entiende sola. Registro técnico o con analogías según `technical_level` en `02-DOCS/wiki/harness/user-profile.md`. Cierra cada turno con el **bloque-brújula** (📍 dónde estás · ➡️ siguiente, terminando en pregunta; ✅ y 🧭 cuando hay algo hecho o decidido). **Nunca termines en seco.** Protocolo completo: skill `orient` → `skills/orient/references/orientation-contract.md`. (Defiere a `suggest` el "¿instalo la skill que falta?".)
|
|
@@ -17,7 +17,7 @@ driver agent feeds prompts to Claude Code and judges the result against the rubr
|
|
|
17
17
|
|
|
18
18
|
1. Load **only** `init` into the agent (no other rsc skills available, so routing is honest).
|
|
19
19
|
2. For each `should_trigger` prompt: open a fresh session, paste the prompt verbatim, and
|
|
20
|
-
record whether `init` activates (the agent should lead with the
|
|
20
|
+
record whether `init` activates (the agent should lead with the register question /
|
|
21
21
|
profiling, not jump into building). Run **3–5 trials** per prompt.
|
|
22
22
|
3. For each `should_not_trigger` prompt: same procedure, but a **pass** = `init` does NOT fire.
|
|
23
23
|
Where a `route_to` sibling exists, sanity-check that the prompt genuinely belongs there.
|
|
@@ -41,8 +41,8 @@ the skill — or these rubrics — needs work.
|
|
|
41
41
|
|
|
42
42
|
- This is **LLM-as-judge / human-in-the-loop**, not deterministic. Use a consistent grader
|
|
43
43
|
(same model + rubric) across A/B to keep the comparison fair.
|
|
44
|
-
- The headline differentiators for `init`:
|
|
45
|
-
|
|
44
|
+
- The headline differentiators for `init`: the one register question ("technical or with
|
|
45
|
+
analogies?") **first**, writing **only** the profile + decisions log + CLAUDE.md Knowledge-map
|
|
46
46
|
link, and **handing off** scaffolding to `the harness skill` (never doing it itself).
|
|
47
47
|
- Watch the key confusable: the built-in `/init` (CLAUDE.md architecture doc generator) is a
|
|
48
48
|
different thing — the rsc `init` does discovery/profiling/recommendation, not codebase docs.
|