@ericrisco/rsc 2.0.19 → 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.
Files changed (93) hide show
  1. package/README.md +40 -17
  2. package/manifest.json +18 -85
  3. package/package.json +9 -1
  4. package/scripts/consult.js +8 -8
  5. package/scripts/doctor.js +8 -2
  6. package/scripts/install-apply.js +40 -11
  7. package/scripts/lib/default-skill-floor.js +5 -4
  8. package/scripts/lib/divergence.js +7 -3
  9. package/scripts/lib/domains.js +2 -2
  10. package/scripts/lib/onboarding-apply.js +43 -26
  11. package/scripts/lib/onboarding.js +5 -5
  12. package/scripts/lib/recommend.js +1 -1
  13. package/scripts/lib/repair.js +4 -2
  14. package/scripts/lib/retired-skills.js +20 -0
  15. package/scripts/rsc.js +25 -19
  16. package/scripts/skill-behavior-rubric.md +1 -1
  17. package/scripts/skill-migration-brief.md +3 -3
  18. package/skills/analyze/SKILL.md +3 -8
  19. package/skills/analyze/evals/cases.yaml +1 -1
  20. package/skills/author-skill/SKILL.md +3 -3
  21. package/skills/author-skill/evals/cases.yaml +1 -1
  22. package/skills/author-skill/references/rsc-conventions.md +1 -1
  23. package/skills/clarify/SKILL.md +7 -14
  24. package/skills/clarify/evals/cases.yaml +2 -2
  25. package/skills/code-review/SKILL.md +1 -1
  26. package/skills/constitution/SKILL.md +10 -13
  27. package/skills/constitution/evals/cases.yaml +3 -3
  28. package/skills/continuous-learning/SKILL.md +1 -1
  29. package/skills/continuous-learning/evals/cases.yaml +1 -1
  30. package/skills/debug/SKILL.md +8 -12
  31. package/skills/debug/evals/cases.yaml +1 -1
  32. package/skills/decision-challenge/SKILL.md +1 -1
  33. package/skills/deprecation/SKILL.md +1 -1
  34. package/skills/ftd/SKILL.md +1 -3
  35. package/skills/ftd/evals/cases.yaml +1 -1
  36. package/skills/harness/SKILL.md +10 -9
  37. package/skills/harness/references/claude-md-template.md +1 -1
  38. package/skills/harness/references/wiki-protocol.md +5 -6
  39. package/skills/idea-refinement/SKILL.md +1 -1
  40. package/skills/implement/SKILL.md +14 -18
  41. package/skills/implement/evals/cases.yaml +1 -1
  42. package/skills/init/SKILL.md +26 -44
  43. package/skills/init/evals/README.md +3 -3
  44. package/skills/init/evals/cases.yaml +7 -7
  45. package/skills/init/references/accompaniment-and-profile.md +22 -40
  46. package/skills/init/references/discovery.md +2 -2
  47. package/skills/init/references/recommend-skills.md +5 -5
  48. package/skills/init/scripts/verify.sh +3 -7
  49. package/skills/knowledge-ops/SKILL.md +1 -1
  50. package/skills/orient/SKILL.md +52 -41
  51. package/skills/orient/evals/README.md +11 -9
  52. package/skills/orient/evals/cases.yaml +39 -29
  53. package/skills/orient/references/explain-ladder.md +93 -0
  54. package/skills/orient/references/orientation-contract.md +70 -18
  55. package/skills/parallel/SKILL.md +1 -1
  56. package/skills/parallel/evals/cases.yaml +2 -2
  57. package/skills/plan/SKILL.md +9 -13
  58. package/skills/review/SKILL.md +5 -8
  59. package/skills/roast-me/SKILL.md +1 -1
  60. package/skills/sdd/SKILL.md +10 -14
  61. package/skills/sdd/evals/README.md +2 -2
  62. package/skills/sdd/evals/cases.yaml +4 -4
  63. package/skills/sdd/references/model-routing.md +5 -12
  64. package/skills/sdd-init/SKILL.md +3 -3
  65. package/skills/ship/SKILL.md +6 -11
  66. package/skills/simplify-code/SKILL.md +1 -1
  67. package/skills/skill-scout/SKILL.md +1 -1
  68. package/skills/source-grounded-development/SKILL.md +1 -1
  69. package/skills/specify/SKILL.md +13 -14
  70. package/skills/specify/evals/cases.yaml +1 -1
  71. package/skills/specify/references/eliciting-requirements.md +5 -5
  72. package/skills/suggest/SKILL.md +3 -9
  73. package/skills/suggest/evals/cases.yaml +1 -1
  74. package/skills/tasks/SKILL.md +6 -7
  75. package/skills/tasks/evals/cases.yaml +1 -1
  76. package/skills/unslop/SKILL.md +39 -10
  77. package/skills/unslop/evals/README.md +7 -7
  78. package/skills/unslop/evals/cases.yaml +10 -9
  79. package/skills/verify/SKILL.md +5 -8
  80. package/skills/verify/evals/cases.yaml +1 -1
  81. package/skills/worktrees/SKILL.md +14 -18
  82. package/skills/worktrees/evals/cases.yaml +1 -1
  83. package/targets/clone-bootstrap.mjs +4 -1
  84. package/targets/session-start.mjs +1 -1
  85. package/skills/bro/SKILL.md +0 -76
  86. package/skills/bro/evals/README.md +0 -22
  87. package/skills/bro/evals/cases.yaml +0 -62
  88. package/skills/eli5/SKILL.md +0 -63
  89. package/skills/eli5/evals/README.md +0 -22
  90. package/skills/eli5/evals/cases.yaml +0 -54
  91. package/skills/show-me/SKILL.md +0 -140
  92. package/skills/show-me/evals/README.md +0 -23
  93. 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 harness accompaniment dial — it changes what you look at, not how much you narrate.
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 per the accompaniment dial 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.
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 accompaniment dial first
22
+ ## Honor the register first
23
23
 
24
- Before asking anything, read `02-DOCS/wiki/harness/user-profile.md` and match its `technical_level` and `accompaniment_level`. No profile yet → default to non-technical and ask the two gauging questions, or point the user at `init`; never assume fluency. The constitution interview adapts:
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
- | Level | How this skill behaves |
27
- |-------|------------------------|
28
- | L0 — cavernícola | Infer almost everything from the codebase and stack wiki. Ask only the 1-2 questions that genuinely change a principle. Draft, show, ratify. |
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 batches sized to the accompaniment level (L0: the 1-2 that matter; L3: one at a time, explained). Cover these dimensions — skip any the stack wiki already answers, and confirm rather than re-ask:
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. At L0, "ratify" is a quick yes; at L3, walk each change.
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 and skip the dial." | Default non-technical; ask the two gauging questions or send them to `init`. |
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; verbosity matched to the dial (or gauging questions asked).
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 (gauge the user, set the accompaniment dial, recommend bundles) is init; the constitution runs after the harness exists and the profile is set."
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 at L1 (brief)."
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 matches L1 verbosity (one line of why per principle, few questions) rather than a long interview."
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` for the accompaniment dial before you narrate. It governs narration only — the capture loop runs identically at every level.
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 for the accompaniment dial and adapts narration to L0–L3."
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."
@@ -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 per the accompaniment dial 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.
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 (accompaniment dial)
31
+ ## Read the room first (register)
32
32
 
33
- Before diagnosing, read `02-DOCS/wiki/harness/user-profile.md` for the technical + accompaniment
34
- level and match it; with no profile yet, assume non-technical — narrate the reasoning plainly and
35
- never apply a behavior-changing fix without a quick confirm. The *method* never changes with the
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
- | Level | While diagnosing you show… | Questions you ask |
39
- | --- | --- | --- |
40
- | **L0** terse | the confirmed cause and the one-line fix, once found | none unless you need a missing repro detail |
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 the accompaniment level from 02-DOCS/wiki/harness/user-profile.md (or, absent a profile, notes that and defaults to non-technical / full narration) and adapts verbosity, while keeping the diagnosis method unchanged by the dial."
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
- Cierra cada turno con el **bloque-brújula** (📍 dónde estás · ✅ qué hiciste · 🧭 por qué · ➡️ siguiente, terminando en pregunta), calibrado al dial de `02-DOCS/wiki/harness/user-profile.md`. **Nunca termines en seco.** Protocolo completo: skill `orient` → `skills/orient/references/orientation-contract.md`. (Defiere a `suggest` el “¿instalo la skill que falta?”.)
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
- Cierra cada turno con el **bloque-brújula** (📍 dónde estás · ✅ qué hiciste · 🧭 por qué · ➡️ siguiente, terminando en pregunta), calibrado al dial de `02-DOCS/wiki/harness/user-profile.md`. **Nunca termines en seco.** Protocolo completo: skill `orient` → `skills/orient/references/orientation-contract.md`. (Defiere a `suggest` el “¿instalo la skill que falta?”.)
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?".)
@@ -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 · ✅ qué hiciste · 🧭 por qué · ➡️ siguiente,
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 at accompaniment level L2 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."
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"
@@ -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 and adapt verbosity and question count
50
- to the `technical_level` and `accompaniment_level` you find. L0 means terse and almost silent; L3
51
- means explain everything and ask a lot. No profile yet → assume non-technical, and let `init` run
52
- first contact (it owns the two gauging questions and the dial; do not re-ask them here).
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. At L0 ask only the few that
70
- change the answer; at L3 ask all of them, one at a time. Then present exactly three options with
71
- honest trade-offs, recommend one in language matched to their level, and log it.
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 (matched to the dial), get a one-word confirm, and run it via Bash — installing writes to their environment, so always confirm first:
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
- Cierra cada turno con el **bloque-brújula** (📍 dónde estás · ✅ qué hiciste · 🧭 por qué · ➡️ siguiente, terminando en pregunta), calibrado al dial de `02-DOCS/wiki/harness/user-profile.md`. **Nunca termines en seco.** Protocolo completo: skill `orient` → `skills/orient/references/orientation-contract.md`. (Defiere a `suggest` el "¿instalo la skill que falta?".)
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 + accompaniment level) | `02-DOCS/wiki/harness/user-profile.md` |
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, accompaniment level (L0–L3), goals, context, constraints. **Every
111
- skill reads this first** and adapts verbosity + how many questions it asks to
112
- the level recorded here. Created/updated by `init` and `harness`.
113
- When absent, the agent defaults to non-technical framing and asks the two
114
- gauging questions (technical level, then accompaniment level) before
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
- Cierra cada turno con el **bloque-brújula** (📍 dónde estás · ✅ qué hiciste · 🧭 por qué · ➡️ siguiente, terminando en pregunta), calibrado al dial de `02-DOCS/wiki/harness/user-profile.md`. **Nunca termines en seco.** Protocolo completo: skill `orient` → `skills/orient/references/orientation-contract.md`. (Defiere a `suggest` el “¿instalo la skill que falta?”.)
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 accompaniment dial.** Open `02-DOCS/wiki/harness/user-profile.md` and read the
46
- technical + accompaniment level. It sets how loud you are at each checkpoint (see the dial table
47
- below). No profile yet → assume non-technical, narrate more, and ask before any irreversible step.
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 per the dial.
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 per the accompaniment dial 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.
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
- ## The accompaniment dial — how loud at each checkpoint
259
+ ## Checkpoints — what to say
260
260
 
261
- Read the level from `02-DOCS/wiki/harness/user-profile.md` and match it. Same work, different volume.
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
- | Level | At each checkpoint you show… | Questions you ask |
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 at the dial's level; next task named
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
- Cierra cada turno con el **bloque-brújula** (📍 dónde estás · ✅ qué hiciste · 🧭 por qué · ➡️ siguiente, terminando en pregunta), calibrado al dial de `02-DOCS/wiki/harness/user-profile.md`. **Nunca termines en seco.** Protocolo completo: skill `orient` → `skills/orient/references/orientation-contract.md`. (Defiere a `suggest` el "¿instalo la skill que falta?".)
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 adapts checkpoint verbosity to the accompaniment level in 02-DOCS/wiki/harness/user-profile.md"
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"
@@ -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. Gauges technical level and the accompaniment dial first (non-technical by default), 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."
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: two values, set before anything else
25
+ ## First contact: one question, set before anything else
26
26
 
27
- The whole harness behaves differently depending on these two. Nothing — no discovery, no
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 — Gauge technical level.** Literally the first thing you say, before any discovery, framed
31
- so nobody feels small. Ask once, in their language:
30
+ **Step 1 — Ask the register.** Literally the first thing you say, before any discovery. Ask once,
31
+ in their language:
32
32
 
33
- > "Antes de nada, para hablarte como te resulte más cómodo: ¿te manejas con código y términos
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
- > "First, so I talk to you the right way: are you comfortable with code and technical terms, or
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: non-technical | mixed | technical`. Until they say otherwise, assume
42
- non-technical: plain language, analogies over acronyms.
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 — Set the accompaniment dial.** Present it and let them pick; describe the options, do not
45
- just list letters.
43
+ **Step 2 — Persist immediately.** Before discovery, before any recommendation:
46
44
 
47
- | Level | What they get |
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 4 — Propose the developer model.** rsc installs a `developer` subagent (the implementation
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, calibrated to the dial:
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 (e.g.
80
- at L0) → `balanced`, which install also writes by default.
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. Match
94
- the number of questions to the dial.
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 and their level, and say why in language they follow.
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-3 above. Do not proceed until `user-profile.md` exists and `CLAUDE.md` links it. The
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 sized to the dial; never dump every question at once.
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 at their level.
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 set a non-technical level, so a later block is not a surprise.
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 · ✅ qué hiciste · 🧭 por qué · ➡️ siguiente,
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 technical-level question /
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`: technical-level question **first**, the L0–L3
45
- accompaniment dial, writing **only** the profile + decisions log + CLAUDE.md Knowledge-map
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.