@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.
- package/README.md +40 -17
- package/manifest.json +18 -85
- package/package.json +9 -1
- package/scripts/consult.js +8 -8
- package/scripts/doctor.js +8 -2
- 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
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
skill: init
|
|
2
2
|
|
|
3
3
|
# Cases for the rsc-skills "init" front door / bootstrapper.
|
|
4
|
-
# init profiles the user (technical
|
|
4
|
+
# init profiles the user (one question: technical terms or analogies), discovers what
|
|
5
5
|
# they want to BUILD or GOVERN (code OR a non-code harness), recommends rsc
|
|
6
6
|
# skills, and hands off to the harness skill. It is NOT the scaffolder and NOT
|
|
7
7
|
# a specific stack skill.
|
|
8
8
|
|
|
9
9
|
should_trigger:
|
|
10
10
|
- prompt: "Quiero montar un proyecto nuevo pero no sé por dónde empezar."
|
|
11
|
-
why: "Canonical greenfield entry with explicit uncertainty ('no sé por dónde empezar') — init's job is to
|
|
11
|
+
why: "Canonical greenfield entry with explicit uncertainty ('no sé por dónde empezar') — init's job is to ask the register, discover, and recommend before anything is built."
|
|
12
12
|
|
|
13
13
|
- prompt: "I have an existing repo and I want to set up the harness on it. Where do I start?"
|
|
14
14
|
why: "Brownfield bootstrapping: pointing the rsc harness at an existing project is exactly init's front-door role (detect greenfield vs brownfield, profile, recommend skills)."
|
|
@@ -17,7 +17,7 @@ should_trigger:
|
|
|
17
17
|
why: "First-contact phrasing without naming any tool — init is the literal first thing you run; it should claim 'what do I do first' onboarding moments."
|
|
18
18
|
|
|
19
19
|
- prompt: "Tengo una idea para una app pero soy de negocio, no técnico. Ayúdame a arrancar esto desde cero."
|
|
20
|
-
why: "Greenfield + explicitly non-technical user — init leads with the
|
|
20
|
+
why: "Greenfield + explicitly non-technical user — init leads with the one register question (technical or analogies), the core reason it exists, before any stack choice."
|
|
21
21
|
|
|
22
22
|
- prompt: "I want to use this to run my company's operations, not to write code. Can I bootstrap that here?"
|
|
23
23
|
why: "Non-code harness (company/ops) bootstrap — init is domain-agnostic and explicitly governs non-code harnesses the same way; this is a deliberately non-obvious trigger."
|
|
@@ -38,7 +38,7 @@ should_not_trigger:
|
|
|
38
38
|
why: "init explicitly hands off scaffolding to the harness skill. The moment the user asks to actually BUILD 01-TOOLS/02-DOCS, it is harness's job, not init's (init writes only the profile + link)."
|
|
39
39
|
|
|
40
40
|
- prompt: "Set up a FastAPI backend with a Postgres database for my new service."
|
|
41
|
-
why: "User already knows the stack and wants a specific backend built — this is the fastapi/backend stack skill, not the
|
|
41
|
+
why: "User already knows the stack and wants a specific backend built — this is the fastapi/backend stack skill, not the profiling front door. init recommends skills; it does not implement stacks."
|
|
42
42
|
route_to: "fastapi"
|
|
43
43
|
|
|
44
44
|
- prompt: "Help me pick and configure a deploy target — Hetzner vs Vercel vs Fly.io — and ship it."
|
|
@@ -56,8 +56,8 @@ should_not_trigger:
|
|
|
56
56
|
capability:
|
|
57
57
|
- scenario: "A non-technical founder says: 'I want to build an app to connect dog owners but I don't know where to start.' Show how init opens the engagement."
|
|
58
58
|
must_include:
|
|
59
|
-
- "Asks
|
|
60
|
-
- "
|
|
59
|
+
- "Asks ONE first-contact question FIRST, before any discovery or recommendation ('¿Te hablo en lenguaje técnico o con analogías?'), and records technical_level as technical or non-technical"
|
|
60
|
+
- "Asks no second calibration question (no accompaniment/verbosity level); given a silent or unclear answer, records non-technical and speaks with plain words and analogies"
|
|
61
61
|
- "Persists the profile to 02-DOCS/wiki/harness/user-profile.md and an append-only 02-DOCS/wiki/harness/decisions.md, and links both from a ## Knowledge map section in root CLAUDE.md (creating CLAUDE.md if absent, additive only)"
|
|
62
62
|
- "Detects greenfield vs brownfield rather than assuming, and runs DISCOVER (goals, audience, constraints, surfaces) before recommending"
|
|
63
63
|
- "Recommends specific rsc skills matched to discovery (at minimum harness; nextjs/flutter + design if app surfaces justify it) and PRINTS the exact install commands (npx @ericrisco/rsc add <skill> ...)"
|
|
@@ -66,7 +66,7 @@ capability:
|
|
|
66
66
|
|
|
67
67
|
- scenario: "A user with an existing multi-package repo says: 'Point the harness at my project and get me started.' Show the brownfield front-door flow."
|
|
68
68
|
must_include:
|
|
69
|
-
- "Still asks the
|
|
69
|
+
- "Still asks the one register question first — profile before anything, even on brownfield"
|
|
70
70
|
- "Detects brownfield via manifests (package.json / pyproject.toml / pubspec.yaml / go.mod / Cargo.toml), source files, legacy XX-* folders, or existing 01-TOOLS/02-DOCS, with a read-only scan that ignores node_modules/.venv/.next/.git/dist/build"
|
|
71
71
|
- "Summarizes the detected stack and current state and CONFIRMS with the user instead of assuming"
|
|
72
72
|
- "Writes profile + decisions log under 02-DOCS/wiki/harness/ and adds the Knowledge-map link to CLAUDE.md without deleting existing content"
|
|
@@ -1,62 +1,45 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Register & Profile — the first-contact question and how it persists
|
|
2
2
|
|
|
3
|
-
This file holds the runtime detail behind the SKILL.md section "
|
|
3
|
+
This file holds the runtime detail behind the SKILL.md section "First contact". It defines: the first-contact question, the register it sets, the exact `02-DOCS` file formats, and the rule every downstream skill follows. (The filename is historical: the accompaniment dial it once described is retired.)
|
|
4
4
|
|
|
5
5
|
## Why this matters
|
|
6
6
|
|
|
7
|
-
The single biggest failure mode of a developer-built harness is talking like a developer to someone who is not one. This system inverts the default: it assumes
|
|
7
|
+
The single biggest failure mode of a developer-built harness is talking like a developer to someone who is not one. This system inverts the default: it assumes analogies, asks once before assuming otherwise, and keeps one voice for everyone. The profile is the contract; every skill honors it.
|
|
8
8
|
|
|
9
|
-
## The first-contact
|
|
9
|
+
## The first-contact question
|
|
10
10
|
|
|
11
|
-
Ask exactly
|
|
12
|
-
|
|
13
|
-
### Question 1 — technical level (the literal first message)
|
|
11
|
+
Ask exactly one thing before anything else. Do not bundle it with discovery questions.
|
|
14
12
|
|
|
15
13
|
Spanish:
|
|
16
14
|
|
|
17
|
-
> "
|
|
15
|
+
> "¿Te hablo en lenguaje técnico o con analogías?"
|
|
18
16
|
|
|
19
17
|
English:
|
|
20
18
|
|
|
21
|
-
> "
|
|
19
|
+
> "Should I talk to you in technical terms or with analogies?"
|
|
22
20
|
|
|
23
21
|
Map the answer to one of:
|
|
24
22
|
|
|
25
|
-
- `
|
|
26
|
-
- `
|
|
27
|
-
- `
|
|
28
|
-
|
|
29
|
-
If the user does not answer clearly, assume `non-technical`. Never guess "technical" from the fact that they opened a terminal — many non-technical people are handed one.
|
|
30
|
-
|
|
31
|
-
### Question 2 — the accompaniment dial
|
|
32
|
-
|
|
33
|
-
Present all four levels with their plain descriptions (do not show only labels):
|
|
23
|
+
- `technical` — technical terms used directly; can read code and configs.
|
|
24
|
+
- `non-technical` — plain words and everyday analogies; no undefined jargon; no code shown unless asked.
|
|
25
|
+
- `mixed` — still valid in older profiles; treat it like `non-technical`.
|
|
34
26
|
|
|
35
|
-
-
|
|
36
|
-
- **L1 — "Breve"**: una línea de *por qué* en cada paso.
|
|
37
|
-
- **L2 — "Explica decisiones"**: justifico cada decisión relevante a medida que avanzo.
|
|
38
|
-
- **L3 — "Acompañamiento total"**: te lo explico TODO, te hago muchas preguntas para entender tu contexto, y razono cada decisión. Ideal para no-técnicos.
|
|
27
|
+
`non-technical` and `mixed` (and no profile at all) also arm the danger guard, which blocks irreversible commands; `technical` never does. Say so when you record the answer.
|
|
39
28
|
|
|
40
|
-
|
|
29
|
+
If the user does not answer clearly, record `non-technical`. Never guess "technical" from the fact that they opened a terminal — many non-technical people are handed one. The user can change it any time ("háblame técnico", "con analogías"); update `user-profile.md` when they do.
|
|
41
30
|
|
|
42
31
|
## How every skill adapts
|
|
43
32
|
|
|
44
|
-
|
|
33
|
+
There is no per-user depth setting. Every skill speaks in the one voice the `orient` skill owns (`skills/orient/references/orientation-contract.md`): short sentences, one idea per sentence, simple words, active voice, the instruction before the reason, and every answer understandable on its own. `technical_level` only picks the register:
|
|
45
34
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
| L0 | Result line only | None beyond hard blockers | Pick the recommended option, log it, mention it in one line |
|
|
49
|
-
| L1 | One *why* line per step | Only on genuine ambiguity | Present the 3 options tersely, recommend, proceed on confirm |
|
|
50
|
-
| L2 | Justify each relevant decision | Ask before each significant decision | Full 3-option pattern with trade-offs |
|
|
51
|
-
| L3 | Narrate reasoning throughout | Many — contextualize every choice | Full 3-option pattern + explain each option in plain language and check understanding |
|
|
35
|
+
- `technical` — use the term directly; skip the 101 explanations.
|
|
36
|
+
- `non-technical` / `mixed` — translate every term ("a database is where the app remembers things"), prefer analogies, never paste raw config without explaining it.
|
|
52
37
|
|
|
53
|
-
|
|
38
|
+
If the person still does not understand, `orient` climbs its explanation ladder (text → diagram → one HTML page → a video, only offered).
|
|
54
39
|
|
|
55
|
-
|
|
56
|
-
- `mixed` — use the term, define it inline the first time.
|
|
57
|
-
- `technical` — use the term directly; skip the 101 explanations even at L3.
|
|
40
|
+
**Legacy keys.** A profile written by an older `init` or `onboard` may carry `accompaniment_level:` or the even older `accompaniment:`. Both are retired: ignore their value, and drop the line the next time you touch the profile.
|
|
58
41
|
|
|
59
|
-
**Rule:** read `user-profile.md` at the start of every session. If it is missing, you are likely being run before `init` —
|
|
42
|
+
**Rule:** read `user-profile.md` at the start of every session. If it is missing, you are likely being run before `init` — ask the first-contact question before doing the requested work, or at minimum speak with analogies and note that the profile is unset.
|
|
60
43
|
|
|
61
44
|
## Persistence format
|
|
62
45
|
|
|
@@ -64,16 +47,15 @@ Both files live under `02-DOCS/wiki/harness/`. `init` creates this directory eve
|
|
|
64
47
|
|
|
65
48
|
### `02-DOCS/wiki/harness/user-profile.md`
|
|
66
49
|
|
|
67
|
-
A living document — updated whenever the user reveals new goals, context, constraints, or changes the
|
|
50
|
+
A living document — updated whenever the user reveals new goals, context, constraints, or changes the register. It is the single source of truth other skills read.
|
|
68
51
|
|
|
69
52
|
```markdown
|
|
70
53
|
# User Profile
|
|
71
54
|
|
|
72
55
|
> Source of truth for how every rsc skill talks to this user. Updated continuously.
|
|
73
56
|
|
|
74
|
-
##
|
|
75
|
-
- technical_level: non-technical <!-- non-technical
|
|
76
|
-
- accompaniment_level: L3 <!-- L0 | L1 | L2 | L3 -->
|
|
57
|
+
## Register
|
|
58
|
+
- technical_level: non-technical <!-- technical | non-technical (mixed: legacy, reads as non-technical) -->
|
|
77
59
|
- language: es <!-- the user's working language -->
|
|
78
60
|
- last_updated: 2026-06-01
|
|
79
61
|
|
|
@@ -133,7 +115,7 @@ Add (or update) a `## Knowledge map` section that links BOTH files. Create `CLAU
|
|
|
133
115
|
```markdown
|
|
134
116
|
## Knowledge map
|
|
135
117
|
|
|
136
|
-
- [User profile](02-DOCS/wiki/harness/user-profile.md) — technical
|
|
118
|
+
- [User profile](02-DOCS/wiki/harness/user-profile.md) — register (technical or analogies), goals, context, constraints. **Every skill reads this first and speaks in that register.**
|
|
137
119
|
- [Decisions log](02-DOCS/wiki/harness/decisions.md) — append-only record of every significant decision and why.
|
|
138
120
|
```
|
|
139
121
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Discovery — greenfield & brownfield questionnaires (software AND non-code harnesses)
|
|
2
2
|
|
|
3
|
-
Phase 2 detail. Establish two things: **the state of the ground** (greenfield vs brownfield) and **what the user wants to build or govern**. Record everything to `02-DOCS/wiki/harness/user-profile.md` as you learn it. Ask in batches
|
|
3
|
+
Phase 2 detail. Establish two things: **the state of the ground** (greenfield vs brownfield) and **what the user wants to build or govern**. Record everything to `02-DOCS/wiki/harness/user-profile.md` as you learn it. Ask in short batches — never dump every question at once.
|
|
4
4
|
|
|
5
5
|
## First: greenfield vs brownfield (detect, then confirm)
|
|
6
6
|
|
|
@@ -31,7 +31,7 @@ Record `domain: software | non-code-harness`. Both are first-class. A non-code h
|
|
|
31
31
|
|
|
32
32
|
### Greenfield software
|
|
33
33
|
|
|
34
|
-
Ask in batches
|
|
34
|
+
Ask in short batches, only what changes the plan.
|
|
35
35
|
|
|
36
36
|
1. **The idea in one sentence.** What does it do, for whom?
|
|
37
37
|
2. **Surfaces.** Which of these does it need? (This drives the skill recommendation.)
|
|
@@ -7,7 +7,7 @@ and prints commands the user runs.
|
|
|
7
7
|
|
|
8
8
|
## The skill map
|
|
9
9
|
|
|
10
|
-
| Discovery signal | Skills | One-line *why* (
|
|
10
|
+
| Discovery signal | Skills | One-line *why* (in the user's register) |
|
|
11
11
|
| --- | --- | --- |
|
|
12
12
|
| Always (every project) | `harness` | The control plane — scaffolds and governs the whole workspace (`suggest` installs with it as the floor). |
|
|
13
13
|
| Backend / API / database | `fastapi` or `go`, `postgresdb` | The server, the API, the database that remembers things. |
|
|
@@ -28,7 +28,7 @@ usually does NOT want `fastapi`/`nextjs` unless they're also building software.
|
|
|
28
28
|
## What to print
|
|
29
29
|
|
|
30
30
|
One `npx @ericrisco/rsc add` line per recommendation (or batch them on one line), each with
|
|
31
|
-
its *why* in the user's language and
|
|
31
|
+
its *why* in the user's language and register.
|
|
32
32
|
|
|
33
33
|
```text
|
|
34
34
|
npx @ericrisco/rsc add <skill> [<skill> ...]
|
|
@@ -81,7 +81,7 @@ For any significant decision — deploy target, database, framework, hosting, wh
|
|
|
81
81
|
|
|
82
82
|
### 1. Gather the driving requirements first
|
|
83
83
|
|
|
84
|
-
Ask the questions that actually change the answer
|
|
84
|
+
Ask only the questions that actually change the answer, in one short batch. Checklists per decision type:
|
|
85
85
|
|
|
86
86
|
- **Deploy target:** expected number of users; concurrent users; budget; data region / residency rules; the team's comfort operating servers; scaling needs (steady vs spiky); existing org/cloud constraints.
|
|
87
87
|
- **Database:** data shape (relational vs documents vs key-value); expected size and growth; query patterns; consistency vs scale needs; managed vs self-hosted preference; budget.
|
|
@@ -92,9 +92,9 @@ Ask the questions that actually change the answer. Match question count/depth to
|
|
|
92
92
|
|
|
93
93
|
Three, with honest trade-offs — what each is good at, what it costs, what it demands. Not two (false binary), not ten (paralysis). If a fourth is genuinely worth knowing, mention it in one line under the third — but the choice is between three.
|
|
94
94
|
|
|
95
|
-
### 3. Recommend one, matched to their answers
|
|
95
|
+
### 3. Recommend one, matched to their answers
|
|
96
96
|
|
|
97
|
-
State your recommendation and why, in
|
|
97
|
+
State your recommendation and why, in their register. For a `non-technical` user, explain each option with an everyday analogy and check they followed before they pick.
|
|
98
98
|
|
|
99
99
|
### 4. Log the decision
|
|
100
100
|
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
#
|
|
5
5
|
# WHAT IT DOES (read-only; never edits or creates a file)
|
|
6
6
|
# Static checks that Phase 1 (PROFILE) actually landed in the workspace:
|
|
7
|
-
# 1. 02-DOCS/wiki/harness/user-profile.md exists and carries technical_level
|
|
8
|
-
#
|
|
7
|
+
# 1. 02-DOCS/wiki/harness/user-profile.md exists and carries a technical_level
|
|
8
|
+
# line — the one dial (technical, or with analogies). The accompaniment dial
|
|
9
|
+
# is retired: an old profile that still carries it is not flagged.
|
|
9
10
|
# 2. 02-DOCS/wiki/harness/decisions.md exists (append-only decisions log).
|
|
10
11
|
# 3. Root CLAUDE.md exists and its "## Knowledge map" section links the profile.
|
|
11
12
|
# Everything is detect-or-skip: a missing workspace piece is a WARNING, never a
|
|
@@ -79,11 +80,6 @@ else
|
|
|
79
80
|
else
|
|
80
81
|
warn "profile is missing a technical_level line"
|
|
81
82
|
fi
|
|
82
|
-
if has "$PROFILE" 'accompaniment_level'; then
|
|
83
|
-
ok "profile records accompaniment_level"
|
|
84
|
-
else
|
|
85
|
-
warn "profile is missing an accompaniment_level line"
|
|
86
|
-
fi
|
|
87
83
|
fi
|
|
88
84
|
|
|
89
85
|
# --- 2. decisions log -------------------------------------------------------
|
|
@@ -13,7 +13,7 @@ origin: risco
|
|
|
13
13
|
## Before you touch anything
|
|
14
14
|
|
|
15
15
|
1. **Confirm `02-DOCS/wiki/` exists.** If there is no wiki, stop and say: "Run `harness` to build the `02-DOCS/` wiki first, then come back to garden it." Why: this skill operates an existing engine; it never creates one. See `../harness/SKILL.md`.
|
|
16
|
-
2. **Read `wiki/harness/user-profile.md`**
|
|
16
|
+
2. **Read `wiki/harness/user-profile.md`** for `technical_level`, which sets your register (technical terms, or plain words with analogies). Why: a non-technical owner needs each decision explained with an analogy; a technical one reads the term directly. Either way, speak in the `orient` voice: short, and every answer understandable on its own.
|
|
17
17
|
3. **Read `wiki/index.md` and `wiki/scores.json` before any edit.** Why: you garden from the map and the score signal, never blind. `scores.json` tells you what is bloated, orphaned, or stale.
|
|
18
18
|
|
|
19
19
|
If `wiki/log.md` shows a Maintenance Pass ran in the last few minutes, let it finish — do not race the automation.
|
package/skills/orient/SKILL.md
CHANGED
|
@@ -1,65 +1,76 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: orient
|
|
3
|
-
description: "Always-on.
|
|
4
|
-
tags: [orient,
|
|
3
|
+
description: "Always-on. How the harness talks to the person: STE-style short sentences, every answer understandable on its own, technical or with analogies by the profile, and a ladder (text → diagram → HTML page → video on request) when the person does not follow. Closes every turn with the brújula. Fires on 'no entiendo', 'explícamelo', 'enséñame', 'dibújamelo', 'explain it from zero', '¿dónde estamos?'. NOT the missing-skill installer (that is `suggest`), NOT a text the user sends to others (that is `unslop`)."
|
|
4
|
+
tags: [orient, voice, ste, explain, diagram, eli5, show-me, compass, always-on]
|
|
5
5
|
recommends: []
|
|
6
6
|
profiles: [minimal, core, full]
|
|
7
7
|
origin: risco
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
# orient — the
|
|
10
|
+
# orient — talk so the person understands, then show them where they are
|
|
11
11
|
|
|
12
|
-
You
|
|
13
|
-
executes and falls silent; a mentor walks alongside. You are what makes the harness a mentor.
|
|
12
|
+
You own how the harness speaks to the person. Three rules, a register, a ladder, and the brújula.
|
|
14
13
|
|
|
15
|
-
|
|
16
|
-
equipped ("you are here, you did this, for this reason, next is X — which?"). The install prompt is
|
|
17
|
-
its job, never yours.
|
|
14
|
+
## The three rules
|
|
18
15
|
|
|
19
|
-
|
|
16
|
+
1. **Speak STE.** STE is the controlled writing style of aircraft manuals (ASD-STE100). Short
|
|
17
|
+
sentences. One idea per sentence. Simple words. Active voice. The instruction before the reason.
|
|
18
|
+
2. **Every answer stands alone.** The reader has not seen your reasoning, and may not remember earlier
|
|
19
|
+
messages. Never point at something they did not see ("the second commit", "that fix", "as above").
|
|
20
|
+
Name it, in one sentence.
|
|
21
|
+
3. **Short.** Say what the reader needs, then stop. No walls of paragraphs. Rules 2 and 3 meet in one
|
|
22
|
+
place: give the **minimum** context, never the whole story.
|
|
20
23
|
|
|
21
|
-
|
|
22
|
-
unsure closes with the brújula block. One block, at the end — never interrupt mid-work to orient.
|
|
24
|
+
Full rules and examples → `references/orientation-contract.md`.
|
|
23
25
|
|
|
24
|
-
## The
|
|
26
|
+
## The register
|
|
25
27
|
|
|
26
|
-
|
|
28
|
+
Read `technical_level` in `02-DOCS/wiki/harness/user-profile.md`.
|
|
27
29
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
| technical_level | Register |
|
|
31
|
+
|---|---|
|
|
32
|
+
| `technical` | Technical terms, used directly. No 101s. |
|
|
33
|
+
| `non-technical`, `mixed` | Plain words. One everyday analogy for each new idea. |
|
|
34
|
+
| no profile | Analogies. Ask once: "¿Te hablo en lenguaje técnico o con analogías?" and save the answer. |
|
|
35
|
+
|
|
36
|
+
The person can change it by saying so ("háblame más técnico", "con analogías"). Update
|
|
37
|
+
`technical_level` (`technical` or `non-technical`), confirm in one line, apply it from this turn.
|
|
38
|
+
Old profiles may carry `accompaniment_level:` or `accompaniment:` (the retired L0–L3 dial): ignore both.
|
|
34
39
|
|
|
35
|
-
|
|
36
|
-
Knowledge map or the repo before writing 📍 — an invented state is worse than a shorter block.
|
|
40
|
+
## The ladder — when the person does not follow
|
|
37
41
|
|
|
38
|
-
|
|
42
|
+
Climb **one** step per sign. Signs: they repeat the question, say "no entiendo" / "¿qué?" /
|
|
43
|
+
"explícamelo", answer short and annoyed, or ask about a term you just used. Weak signs are not signs:
|
|
44
|
+
guessing their mood reads as condescending.
|
|
39
45
|
|
|
40
|
-
|
|
41
|
-
|
|
46
|
+
| Step | What | Detail |
|
|
47
|
+
|---|---|---|
|
|
48
|
+
| 1 | Text, in the three rules | always |
|
|
49
|
+
| 2 | One diagram in the chat | the smallest form that carries the point |
|
|
50
|
+
| 3 | One self-contained HTML page | big pictures, few words; open it |
|
|
51
|
+
| 4 | Animated video | only offered, never made unasked |
|
|
42
52
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
| L0 — cavernícola | Only `✅` + `➡️`. One next option, a yes/no question. |
|
|
46
|
-
| L1 — breve | The four lines; `🧭` is one line of why. |
|
|
47
|
-
| L2 — explica decisiones | The four lines; `🧭` justifies the relevant decision; offer real forks. |
|
|
48
|
-
| L3 — acompañamiento total | The four lines, full why, each option explained in plain language. |
|
|
53
|
+
The person can also ask for any step directly ("dibújamelo", "hazme una página", "explícamelo desde
|
|
54
|
+
cero"). Forms, the from-zero page and the video step → `references/explain-ladder.md`.
|
|
49
55
|
|
|
50
|
-
|
|
51
|
-
a technical user skips the 101 explanations even at L3. No profile yet → assume non-technical + L3
|
|
52
|
-
(the non-technical-first default) and offer to set the dial.
|
|
56
|
+
## The brújula — close every turn
|
|
53
57
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
58
|
+
No turn ends in seco. One block, at the end, never mid-work.
|
|
59
|
+
|
|
60
|
+
```text
|
|
61
|
+
📍 Dónde estás — the state, in one sentence that stands alone
|
|
62
|
+
✅ Qué has hecho — only when something was done
|
|
63
|
+
🧭 Por qué — only when a decision was made; one sentence
|
|
64
|
+
➡️ Siguiente — 1-3 concrete options, ending in a question
|
|
65
|
+
```
|
|
57
66
|
|
|
58
|
-
|
|
67
|
+
📍 and ➡️ always. ✅ and 🧭 only when they carry something. Situate from what is **actually** built;
|
|
68
|
+
an invented state is worse than a shorter block. At a real fork, ask: the fork is where the person's
|
|
59
69
|
judgment is worth more than yours.
|
|
60
70
|
|
|
61
|
-
##
|
|
71
|
+
## Where this ends
|
|
62
72
|
|
|
63
|
-
-
|
|
64
|
-
|
|
65
|
-
|
|
73
|
+
- "Install the missing skill?" belongs to `suggest`.
|
|
74
|
+
- A text the person sends to others (email, post, README) belongs to `unslop`.
|
|
75
|
+
- Visual identity is `design`; a deck someone presents from is `presentations`; a course with
|
|
76
|
+
exercises is `course-builder`.
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
# Evals — orient
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
How the harness talks to the person. These cases check the voice (STE-style, short, every answer
|
|
4
|
+
stands alone), the register from `technical_level`, the explain ladder (text → diagram → HTML →
|
|
5
|
+
video on request), and the brújula at the end of a turn. Install prompts stay with `suggest`; text
|
|
6
|
+
for others stays with `unslop`.
|
|
6
7
|
|
|
7
8
|
| Prompt | Expected |
|
|
8
9
|
|---|---|
|
|
9
|
-
| "ya está instalado, ¿y ahora qué?" |
|
|
10
|
-
| "no
|
|
11
|
-
| "explícame
|
|
10
|
+
| "ya está instalado, ¿y ahora qué?" | short stand-alone state + next step as a question |
|
|
11
|
+
| "no entiendo nada" | one step up the ladder: a small diagram |
|
|
12
|
+
| "explícame Docker desde cero" | from-zero explanation with analogies |
|
|
13
|
+
| "háblame más técnico" | set technical_level, confirm, apply |
|
|
12
14
|
| "renombra esta variable" | no full brújula block (trivial mid-flow) |
|
|
13
|
-
| "
|
|
15
|
+
| "haz que este correo suene humano" | defer to `unslop` |
|
|
14
16
|
|
|
15
|
-
A pass =
|
|
16
|
-
|
|
17
|
+
A pass = short sentences, nothing that needs earlier context, the right register, one ladder step
|
|
18
|
+
per sign, and no turn ending in seco.
|
|
@@ -1,57 +1,67 @@
|
|
|
1
1
|
skill: orient
|
|
2
2
|
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
#
|
|
3
|
+
# How the harness talks to the person: STE-style short sentences, every answer stands alone,
|
|
4
|
+
# register (technical or with analogies) from technical_level, a ladder (text → diagram → HTML →
|
|
5
|
+
# video on request) when the person does not follow, and the brújula at the end of a turn.
|
|
6
|
+
# It defers "install a missing skill?" to suggest and text for others to unslop.
|
|
6
7
|
|
|
7
8
|
should_trigger:
|
|
8
9
|
- prompt: "Ya está instalado el postgresdb. ¿Y ahora qué?"
|
|
9
|
-
why: "An action just finished and the user is
|
|
10
|
-
|
|
11
|
-
- prompt: "Vale, hemos creado la landing. ¿Qué hago con esto?"
|
|
12
|
-
why: "A step finished and the user asks for direction — orient closes with the map + next options as a question."
|
|
10
|
+
why: "An action just finished and the user is unsure what to do next — orient situates them and proposes the next step."
|
|
13
11
|
|
|
14
12
|
- prompt: "No sé por dónde seguir con mi proyecto."
|
|
15
13
|
why: "The user is lost — the core trigger: situate on the map and propose 1-3 next steps."
|
|
16
14
|
|
|
17
|
-
- prompt: "
|
|
18
|
-
why: "A
|
|
15
|
+
- prompt: "No entiendo nada de lo que me has dicho."
|
|
16
|
+
why: "A clear sign the person does not follow — orient climbs one step of the ladder (a diagram)."
|
|
19
17
|
|
|
20
|
-
- prompt: "
|
|
21
|
-
why: "A
|
|
18
|
+
- prompt: "Dibújame cómo funciona el flujo de login."
|
|
19
|
+
why: "A direct request for step 2 of the ladder — the smallest diagram that carries the point."
|
|
22
20
|
|
|
23
|
-
- prompt: "
|
|
24
|
-
why: "
|
|
21
|
+
- prompt: "Explícame qué es Docker desde cero, que no sé nada."
|
|
22
|
+
why: "Zero background — a from-zero explanation with everyday analogies (the old eli5 job, now step 3 of the ladder)."
|
|
23
|
+
|
|
24
|
+
- prompt: "Háblame más técnico, que esto ya lo controlo."
|
|
25
|
+
why: "A spoken register change — orient sets technical_level to technical, confirms in one line, applies it."
|
|
26
|
+
|
|
27
|
+
- prompt: "¿En qué punto del proyecto vamos?"
|
|
28
|
+
why: "A 'where am I?' question — orient renders the state in sentences that stand alone."
|
|
25
29
|
|
|
26
30
|
should_not_trigger:
|
|
27
31
|
- prompt: "Renombra esta variable a `userCount`."
|
|
28
32
|
route_to: "none"
|
|
29
|
-
why: "A trivial mechanical edit mid-flow —
|
|
33
|
+
why: "A trivial mechanical edit mid-flow — no full brújula block over a one-line change."
|
|
30
34
|
|
|
31
35
|
- prompt: "Necesito una base de datos para guardar pedidos."
|
|
32
36
|
route_to: "suggest"
|
|
33
|
-
why: "
|
|
37
|
+
why: "An install gap — suggest owns it. orient must not duplicate the 'install it?' prompt."
|
|
34
38
|
|
|
35
|
-
- prompt: "
|
|
36
|
-
route_to: "
|
|
37
|
-
why: "A
|
|
39
|
+
- prompt: "Haz que este correo al cliente suene más humano."
|
|
40
|
+
route_to: "unslop"
|
|
41
|
+
why: "A text the user sends to others — unslop owns the human-register rewrite."
|
|
38
42
|
|
|
39
43
|
- prompt: "Arregla el test que falla."
|
|
40
44
|
route_to: "debug"
|
|
41
|
-
why: "Root-cause work owned by debug; orient
|
|
45
|
+
why: "Root-cause work owned by debug; orient only closes the turn."
|
|
42
46
|
|
|
43
47
|
capability:
|
|
44
|
-
- scenario: "The user just ran `npx @ericrisco/rsc add postgresdb` and says 'ya está, ¿y ahora qué?'. The profile shows
|
|
48
|
+
- scenario: "The user just ran `npx @ericrisco/rsc add postgresdb` and says 'ya está, ¿y ahora qué?'. The profile shows technical_level non-technical. Show how orient closes the turn."
|
|
45
49
|
must_include:
|
|
46
|
-
- "
|
|
47
|
-
- "
|
|
48
|
-
- "
|
|
49
|
-
- "
|
|
50
|
+
- "Short sentences, one idea each; no paragraph walls"
|
|
51
|
+
- "Every line understandable without earlier messages (names the database, does not say 'eso' or 'lo de antes')"
|
|
52
|
+
- "Plain words with an everyday analogy for any new idea (non-technical register)"
|
|
53
|
+
- "Closes with 📍 and ➡️, the next step ending in a question"
|
|
50
54
|
- "Does NOT re-prompt to install a skill (defers that to suggest)"
|
|
51
55
|
|
|
52
|
-
- scenario: "
|
|
56
|
+
- scenario: "Orient explained a caching bug in text. The user replies: '¿qué? no entiendo'. The profile shows technical_level technical. Show the next answer."
|
|
57
|
+
must_include:
|
|
58
|
+
- "Climbs exactly one step: a single small diagram (pseudocode, call tree or flow), not an HTML page or a video"
|
|
59
|
+
- "Uses real names from the code, not placeholders"
|
|
60
|
+
- "Keeps the technical register (no 101s)"
|
|
61
|
+
- "At most two lines of prose beside the diagram"
|
|
62
|
+
|
|
63
|
+
- scenario: "The profile carries `technical_level: mixed` and an old `accompaniment_level: L0`. The user asks what a migration is. Show how orient answers."
|
|
53
64
|
must_include:
|
|
54
|
-
- "
|
|
55
|
-
- "
|
|
56
|
-
- "
|
|
57
|
-
- "Still closes with a next-step question (no seco)"
|
|
65
|
+
- "Ignores accompaniment_level (retired)"
|
|
66
|
+
- "Uses the analogies register (mixed → analogies)"
|
|
67
|
+
- "Short, stand-alone answer that ends with the brújula"
|