@damiangilgonzalez/harness 1.3.16 → 1.3.18
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 +113 -658
- package/manifest.json +2 -2
- package/package.json +1 -1
- package/scripts/doctor.js +1 -1
- package/scripts/rsc.js +63 -1
- package/skills/building-agents/SKILL.md +1 -1
- package/skills/code-review/SKILL.md +3 -1
- package/skills/flujo-interfaz/SKILL.md +7 -0
- package/skills/grill-with-docs/SKILL.md +0 -1
- package/skills/harness/references/daily-curation-automation.md +2 -1
- package/skills/harness/references/wiki-protocol.md +3 -1
- package/skills/implement/SKILL.md +2 -1
- package/skills/implement-spec/SKILL.md +5 -4
- package/skills/init/SKILL.md +7 -5
- package/skills/orient/SKILL.md +3 -0
- package/skills/orient/references/orientation-contract.md +9 -0
- package/skills/postgresdb/SKILL.md +1 -1
- package/skills/pr/SKILL.md +15 -1
- package/skills/pr/evals/cases.yaml +6 -0
- package/skills/suggest/SKILL.md +5 -5
- package/skills/to-spec/SKILL.md +0 -1
- package/skills/to-tickets/SKILL.md +0 -1
- package/skills/wayfinder/SKILL.md +0 -1
- package/targets/_md-block.js +1 -1
- package/targets/claude.js +21 -1
- package/targets/danger-guard.mjs +114 -52
- package/targets/hook-once.mjs +44 -13
- package/targets/memory.js +6 -1
- package/targets/session-memory-adapter.mjs +4 -1
- package/targets/session-memory-core.mjs +40 -8
- package/targets/session-start.mjs +2 -1
- package/targets/ship-guard.mjs +26 -9
- package/targets/userprompt-gate.mjs +7 -2
- package/targets/worklog-checkpoint.mjs +16 -1
- package/targets/worktree-reaper.mjs +144 -4
package/README.md
CHANGED
|
@@ -1,755 +1,210 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+

|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
> Este proyecto es un fork del trabajo original de Eric Risco: [github.com/ericrisco/rsc-harness](https://github.com/ericrisco/rsc-harness).
|
|
5
|
+
**Tú decides qué construir. harness construye el arnés de tu agente:**
|
|
6
|
+
le da el método, la memoria y los reflejos.
|
|
8
7
|
|
|
9
8
|
[](https://www.npmjs.com/package/@damiangilgonzalez/harness)
|
|
10
|
-
[](https://www.npmjs.com/package/@damiangilgonzalez/harness)
|
|
11
|
-
[](#the-catalog)
|
|
12
|
-
[](LICENSE)
|
|
13
|
-
[](https://github.com/ericrisco/rsc-harness/stargazers)
|
|
14
|
-
|
|
15
|
-
**You decide what to build. rsc-harness builds your agent’s harness.** Tell it whether you are
|
|
16
|
-
shipping software, running operations, researching, creating content, or mixing them. Its wizard
|
|
17
|
-
reads the project, applies strict best practices, and shows the exact harness plan before writing.
|
|
18
|
-
|
|
19
|
-
Give this URL to your agent:
|
|
20
|
-
|
|
21
|
-
```text
|
|
22
|
-
Read https://ericrisco.github.io/rsc-harness/ and set up rsc for this project.
|
|
23
|
-
Ask me the onboarding questions, show me the exact plan, and wait for my acceptance before writing.
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
Or start from the terminal:
|
|
27
9
|
|
|
28
10
|
```bash
|
|
29
11
|
npx @damiangilgonzalez/harness@latest onboard
|
|
30
12
|
```
|
|
31
13
|
|
|
32
|
-
<img src="https://raw.githubusercontent.com/ericrisco/rsc-harness/main/site/meta-harness.png" alt="rsc-harness wizard turns an outcome into a verified plan: memory, tools, knowledge and rules selected, deferred or excluded according to evidence." width="960">
|
|
33
|
-
|
|
34
14
|
</div>
|
|
35
15
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
A model is only the brain. Real work also needs project memory, tools, domain knowledge, rules and
|
|
39
|
-
repeatable workflows. Add those pieces ad hoc and the result becomes a **Frankenstein harness**:
|
|
40
|
-
duplicated instructions, unrelated skills, premature hooks, unnecessary MCPs and no clear owner.
|
|
16
|
+
---
|
|
41
17
|
|
|
42
|
-
|
|
43
|
-
[MCP](https://modelcontextprotocol.io/) and [AGENTS.md](https://agents.md/) — but they do not decide
|
|
44
|
-
which complete harness this project needs. rsc-harness does that job through one guided flow:
|
|
18
|
+
## Qué es
|
|
45
19
|
|
|
46
|
-
|
|
47
|
-
2. **The wizard reads only the project root** and asks technical level, accompaniment, project kind,
|
|
48
|
-
goal and assistants.
|
|
49
|
-
3. **A proportional plan explains every choice.** Selected, deferred and excluded pieces all have a
|
|
50
|
-
reason. Nothing writes before you accept the exact plan.
|
|
51
|
-
4. **The result is verified.** Shared sources prevent duplication; knowledge loads progressively;
|
|
52
|
-
local state stays local; deterministic checks prove the installed harness matches the plan.
|
|
53
|
-
5. **It grows from evidence.** A deferred capability is proposed later only when the project actually
|
|
54
|
-
develops the need for it.
|
|
20
|
+

|
|
55
21
|
|
|
56
|
-
|
|
57
|
-
|
|
22
|
+
El modelo es el cerebro. El harness es todo lo demás.
|
|
23
|
+
Si esas piezas se añaden a ratos, sale un harness **Frankenstein**: reglas duplicadas, skills que no
|
|
24
|
+
vienen a cuento y hooks antes de tiempo.
|
|
58
25
|
|
|
59
|
-
|
|
26
|
+

|
|
60
27
|
|
|
61
|
-
|
|
28
|
+
Mismo modelo. Distinto resultado.
|
|
62
29
|
|
|
63
|
-
|
|
64
|
-
asked you to **install rsc / this harness / these skills**, run this in the **root of the
|
|
65
|
-
project they're equipping** — not inside a clone of this repo (see the note under *Install*):
|
|
30
|
+

|
|
66
31
|
|
|
67
|
-
|
|
68
|
-
npx @damiangilgonzalez/harness@latest onboard
|
|
69
|
-
```
|
|
32
|
+
Pides algo, te pregunta lo que falta, escribe el test primero y te entrega una PR con evidencia.
|
|
70
33
|
|
|
71
|
-
|
|
72
|
-
accompaniment, project kind and goal **before it writes anything**, reads only the selected project
|
|
73
|
-
root, and shows every selected or deferred skill, agent and hook with its reason. Relay those
|
|
74
|
-
questions to the user; never invent or default their answers. The first pass writes nothing and
|
|
75
|
-
prints a SHA-256 plan id. Only rerun with `--accept-plan <id>` after the user accepts that exact plan.
|
|
76
|
-
If the project already has a skill of its own with a catalog name, the plan lists it under
|
|
77
|
-
**Your own skills this plan replaces** — tell the user before accepting; renaming their folder and
|
|
78
|
-
regenerating the plan keeps theirs.
|
|
34
|
+
---
|
|
79
35
|
|
|
80
|
-
|
|
36
|
+
## Cómo trabajamos
|
|
81
37
|
|
|
82
|
-
|
|
83
|
-
npx @damiangilgonzalez/harness@latest onboard --technical-level mixed --accompaniment L1 \
|
|
84
|
-
--project-kind software --goal "small compound-interest website" \
|
|
85
|
-
--software-scope small --target codex
|
|
86
|
-
# After the user accepts the printed plan:
|
|
87
|
-
npx @damiangilgonzalez/harness@latest onboard --technical-level mixed --accompaniment L1 \
|
|
88
|
-
--project-kind software --goal "small compound-interest website" \
|
|
89
|
-
--software-scope small --target codex --accept-plan PRINTED_SHA256_ID
|
|
90
|
-
```
|
|
38
|
+

|
|
91
39
|
|
|
92
|
-
|
|
93
|
-
- **Two assistants already installed?** rsc asks instead of guessing. `--target` settles it in one word.
|
|
94
|
-
- **Already installed, just refreshing skills + hooks:** `rsc sync` (or re-run the command above).
|
|
95
|
-
- **Add one skill by id:** `rsc add <id>` · **browse the catalog:** `rsc consult "<what you want>"` or `rsc list`.
|
|
40
|
+
La cadena depende del **tamaño**. El agente la encadena solo; no hace falta escribir cada comando.
|
|
96
41
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
42
|
+
| Tamaño | Cadena |
|
|
43
|
+
|---|---|
|
|
44
|
+
| Una línea (errata, config) | Hazlo sin más |
|
|
45
|
+
| Pequeño (una sesión, un ticket) | `superpowers:brainstorming` o `grill-with-docs` → `implement` |
|
|
46
|
+
| Grande (varias sesiones, muchas piezas) | `grill-with-docs` o `wayfinder` → `to-spec` → `to-tickets` → `implement-spec` |
|
|
47
|
+
| Siempre, al final | `code-review` → `pr` |
|
|
101
48
|
|
|
102
|
-
|
|
49
|
+

|
|
103
50
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
An improvised harness tends to grow by accumulation: more files, more context and more rules, with
|
|
107
|
-
no method deciding whether each piece belongs. rsc-harness keeps that construction disciplined:
|
|
108
|
-
|
|
109
|
-
- **Granular by default.** The unit of installation is *one skill*. Install
|
|
110
|
-
`fastapi` without ever pulling `go`. Nothing you don't use touches your context.
|
|
111
|
-
- **Self-recommending.** Both the terminal (`rsc consult`) and the chat
|
|
112
|
-
(`rsc-suggest`, an always-on detector) watch what you're doing and propose the
|
|
113
|
-
*next* skill the moment a task needs it — a one-word confirm installs it.
|
|
114
|
-
- **Not code-only.** First-class support for running a *company*: bookkeeping,
|
|
115
|
-
invoicing, hiring, GDPR, pitch decks, SEO, a YouTube/TikTok/LinkedIn presence —
|
|
116
|
-
each wired to a `docs/` knowledge loop that learns from your own results.
|
|
117
|
-
- **Specialists follow the stack.** The four base agents stay small; installing a
|
|
118
|
-
supported stack adds only its reviewer and build resolver. `rsc add go`, for
|
|
119
|
-
example, adds the Go pair without pulling reviewers for every other language.
|
|
120
|
-
- **A new local session continues the old one.** Claude Code, Codex, Gemini CLI
|
|
121
|
-
and OpenCode load a bounded checkpoint for the current branch and worktree at
|
|
122
|
-
session start. Cursor desktop uses an assisted read-before-action fallback.
|
|
123
|
-
- **Honestly good.** Every skill was built by a research → spec → implement →
|
|
124
|
-
*adversarial review* pipeline and had to clear an objective rubric
|
|
125
|
-
(`scripts/skill-rubric.md`, written *before* any skill existed). The bar was
|
|
126
|
-
real: skills that scored 8.0 were sent back and fixed, not waved through.
|
|
127
|
-
|
|
128
|
-
`skills/<name>/` is the single source of truth. There are no bundles to argue
|
|
129
|
-
over: you start with a tiny floor and grow one piece at a time.
|
|
51
|
+
Cada paso deja un documento: glosario, spec, ADR, tickets, rama y PR.
|
|
52
|
+
La fuente de verdad es lo escrito, no el chat.
|
|
130
53
|
|
|
131
|
-
|
|
54
|
+

|
|
132
55
|
|
|
133
|
-
|
|
56
|
+
`implement-spec` coge los tickets libres y los reparte entre subagentes, cada uno en su worktree.
|
|
57
|
+
Todo confluye en una rama de integración.
|
|
134
58
|
|
|
135
|
-
|
|
136
|
-
boundaries: branch, worktree, HEAD, changed paths, commits and SDD ledger status.
|
|
137
|
-
When a new session opens in the same checkout, that state is injected before the
|
|
138
|
-
first agent action. A completed edit is preserved even if the previous client
|
|
139
|
-
closed before its normal session-end event.
|
|
59
|
+

|
|
140
60
|
|
|
141
|
-
-
|
|
142
|
-
|
|
143
|
-
trust is still required.
|
|
144
|
-
- **Assisted:** Cursor desktop. Its start hook is fire-and-forget, so rsc also
|
|
145
|
-
installs a local always-on rule that performs the read before acting.
|
|
146
|
-
- **Never cloud:** Cursor Cloud, Codex Cloud, remote agents, cloud storage and
|
|
147
|
-
synchronization are intentionally unsupported. The memory runtime makes no
|
|
148
|
-
network request.
|
|
61
|
+
`code-review` revisa contra los estándares del repo y contra la spec. `pr` abre la PR con
|
|
62
|
+
resumen, evidencia y peligro de fusión.
|
|
149
63
|
|
|
150
|
-
|
|
151
|
-
secrets. It stays in a git-excluded project-local path, retains 30 days, and
|
|
152
|
-
injects at most 4,096 bytes. Disable every memory surface for a project with
|
|
153
|
-
`rsc memory off`; re-enable it with `rsc memory on`.
|
|
64
|
+
La guía completa del método, fase a fase: [`docs/skills/`](docs/skills/).
|
|
154
65
|
|
|
155
66
|
---
|
|
156
67
|
|
|
157
|
-
##
|
|
68
|
+
## Instalar
|
|
158
69
|
|
|
159
|
-
|
|
160
|
-
npx @damiangilgonzalez/harness@latest onboard
|
|
161
|
-
```
|
|
70
|
+

|
|
162
71
|
|
|
163
|
-
|
|
72
|
+
Cuatro preguntas (nivel técnico, acompañamiento, tipo de proyecto, objetivo) y un plan exacto.
|
|
73
|
+
Lee solo la raíz del proyecto y **no escribe nada antes de que aceptes**.
|
|
164
74
|
|
|
165
75
|
```bash
|
|
166
|
-
|
|
76
|
+
npx @damiangilgonzalez/harness@latest onboard
|
|
167
77
|
```
|
|
168
78
|
|
|
169
|
-
|
|
170
|
-
itself? Clone and link:
|
|
79
|
+
¿Usas un agente? Pega esto en el chat:
|
|
171
80
|
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
|
|
81
|
+
```text
|
|
82
|
+
Lee https://github.com/damiangilgonzalez1995/rsc-harness y prepara rsc para este proyecto.
|
|
83
|
+
Hazme las preguntas del onboarding, enséñame el plan exacto y espera a que lo acepte antes de escribir.
|
|
175
84
|
```
|
|
176
85
|
|
|
177
|
-
>
|
|
178
|
-
>
|
|
179
|
-
> *from within a `rsc-harness` clone* resolves to the local (unlinked) bin and
|
|
180
|
-
> dies with `sh: rsc: command not found`. Working on the catalog itself? Use
|
|
181
|
-
> `node scripts/rsc.js …`, the `npm link` above, or pin the published build with
|
|
182
|
-
> `npx @damiangilgonzalez/harness@latest …`.
|
|
183
|
-
|
|
184
|
-
The first run asks **how technical the conversation should be**, the accompaniment level, what the
|
|
185
|
-
project is for, its goal and the assistants to target. It then presents the complete plan. A small
|
|
186
|
-
website can defer SDD, agents and code guards; an operations harness does not receive them merely
|
|
187
|
-
because it lives in a repository. Deferred components record the evidence that would make rsc
|
|
188
|
-
recommend them later. `rsc reassess` reports that evidence but still cannot install anything
|
|
189
|
-
without a newly accepted plan.
|
|
190
|
-
|
|
191
|
-
Everything stays **in the project**, and the real skill files are written
|
|
192
|
-
**once** to `.rsc/skills/<id>/`. Each assistant you pick gets a lightweight
|
|
193
|
-
symlink back to that shared base — no copy is duplicated across IDEs. (If the
|
|
194
|
-
filesystem can't symlink, it falls back to a real copy automatically.)
|
|
195
|
-
On targets with file-based agents, the four base agents are installed too;
|
|
196
|
-
stack specialists remain selective. Native command targets receive only entry
|
|
197
|
-
points whose backing skill, agent or local-memory capability actually exists.
|
|
86
|
+
<details>
|
|
87
|
+
<summary>Para agentes: el mismo flujo sin modo interactivo</summary>
|
|
198
88
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
## 30-second tour
|
|
89
|
+
Pasa las preguntas a la persona; no inventes ni rellenes sus respuestas. La primera pasada
|
|
90
|
+
no escribe nada e imprime un id de plan; solo se repite con `--accept-plan` cuando la persona lo acepta.
|
|
202
91
|
|
|
203
|
-
```
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
How much accompaniment do you want?
|
|
212
|
-
What are you building or running?
|
|
213
|
-
What do you want this project to achieve?
|
|
214
|
-
|
|
215
|
-
RSC_ONBOARDING_PLAN
|
|
216
|
-
Plan id: <sha256>
|
|
217
|
-
Selected: …
|
|
218
|
-
Deferred: …
|
|
219
|
-
Accept this exact harness plan?
|
|
92
|
+
```bash
|
|
93
|
+
npx @damiangilgonzalez/harness@latest onboard --technical-level mixed --accompaniment L1 \
|
|
94
|
+
--project-kind software --goal "small compound-interest website" \
|
|
95
|
+
--software-scope small --target claude
|
|
96
|
+
# Cuando la persona acepte el plan impreso:
|
|
97
|
+
npx @damiangilgonzalez/harness@latest onboard --technical-level mixed --accompaniment L1 \
|
|
98
|
+
--project-kind software --goal "small compound-interest website" \
|
|
99
|
+
--software-scope small --target claude --accept-plan PRINTED_SHA256_ID
|
|
220
100
|
```
|
|
221
101
|
|
|
222
|
-
|
|
223
|
-
changes between preview and acceptance, rsc returns `RSC_PLAN_CHANGED` and writes nothing. After an
|
|
224
|
-
accepted application it verifies the receipt and managed state before printing `RSC_ONBOARDING_READY`.
|
|
225
|
-
That verdict is not just about the receipt: it also requires the harness floor to exist —
|
|
226
|
-
`01-TOOLS/_TEMPLATE/` and `docs/wiki/harness/`.
|
|
227
|
-
If the floor is missing, the install applied but prints `RSC_ONBOARDING_INCOMPLETE` with each
|
|
228
|
-
missing path and the action that creates it, because a plan that promised little used to be able to
|
|
229
|
-
report success with three markdown files.
|
|
230
|
-
|
|
231
|
-
---
|
|
102
|
+
</details>
|
|
232
103
|
|
|
233
|
-
|
|
104
|
+

|
|
234
105
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
bypass onboarding in a new folder.
|
|
106
|
+
Empiezas pequeño. El resto se carga bajo demanda: el harness te propone una skill cuando la tarea
|
|
107
|
+
la pide, con la evidencia que lo justifica.
|
|
238
108
|
|
|
239
109
|
```bash
|
|
240
|
-
rsc
|
|
241
|
-
rsc
|
|
242
|
-
rsc
|
|
243
|
-
rsc add youtube-api remotion-video # …grow a channel, edit with Remotion
|
|
244
|
-
rsc add fastapi --target claude,codex # install into several assistants at once
|
|
245
|
-
rsc install --profile minimal # the base: orient + suggest + bro + unslop + show-me + eli5 + harness + init + teach
|
|
246
|
-
rsc install --profile core # floor + the full SDD workflow
|
|
247
|
-
rsc install --profile full # everything (all 294 skills)
|
|
248
|
-
rsc install --profile full --without go
|
|
249
|
-
rsc consult "I want to launch a SaaS" # recommend only, no install
|
|
250
|
-
rsc registry refresh # write .rsc/skill-registry.{json,md}
|
|
251
|
-
rsc list # installed skills, agents and commands
|
|
252
|
-
rsc capabilities # installed/available surfaces + memory mode
|
|
253
|
-
rsc doctor # health, missing backing, hooks and local memory; exits 1 when unhealthy
|
|
254
|
-
rsc memory status # full / assisted / unsupported / degraded
|
|
255
|
-
rsc memory save --session handoff # force a deterministic local checkpoint
|
|
256
|
-
rsc memory resume # print this branch/worktree continuation
|
|
257
|
-
rsc memory learn --text "…" --evidence "…" --confidence 0.8 --approve
|
|
258
|
-
rsc memory off # disable hooks, commands and injection project-wide
|
|
259
|
-
rsc sync --target claude,codex # refresh managed skills/hooks from the current package version
|
|
260
|
-
rsc backups # list project-local snapshots
|
|
261
|
-
rsc restore latest --dry-run # preview restoring the newest snapshot
|
|
262
|
-
rsc restore <snapshot-id> # restore a project-local snapshot
|
|
263
|
-
rsc upgrade --dry-run # show npm upgrade + sync commands
|
|
264
|
-
rsc uninstall postgresdb --dry-run # preview a removal
|
|
110
|
+
rsc install --profile minimal # la base: orient + suggest + bro + unslop + show-me + eli5 + harness + init + teach
|
|
111
|
+
rsc install --profile core # la base + el método completo
|
|
112
|
+
rsc install --profile full # todo el catálogo
|
|
265
113
|
```
|
|
266
114
|
|
|
267
115
|
---
|
|
268
116
|
|
|
117
|
+
## Qué se instala
|
|
269
118
|
|
|
270
|
-
|
|
119
|
+

|
|
271
120
|
|
|
272
|
-
|
|
121
|
+
Las skills se escriben una vez en `.rsc/skills/` y cada asistente las enlaza.
|
|
122
|
+
Lo que se comparte va a git; el estado de la máquina, no.
|
|
273
123
|
|
|
274
|
-
|
|
124
|
+

|
|
275
125
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
| `.rsc.json` | The decision: which assistants, which skills, **which catalog version**, the developer tier, which gates you disarmed |
|
|
279
|
-
| `01-TOOLS/` · `docs/` | Your tooling and your wiki, if you use them |
|
|
280
|
-
| Skills and agents you wrote by hand | They are yours. rsc does not claim them, does not count them as drift, and does not touch them |
|
|
126
|
+
Hooks que vigilan por ti: recuerdan la cadena, piden confirmación antes de un `rm -rf` o un
|
|
127
|
+
`git push --force` y paran antes de volver a `main` sin abrir la PR.
|
|
281
128
|
|
|
282
|
-
|
|
129
|
+

|
|
283
130
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
| `.rsc/` | Machine state: hook scripts, seals, logs and fallback session memory |
|
|
287
|
-
| `docs/raw/worklog/.rsc-memory/` | Preferred session journal when a local wiki exists; protected with git's local exclude |
|
|
288
|
-
| The skill entries rsc manages | Symlinks on macOS/Linux, real copies on Windows — two incompatible shapes of one thing |
|
|
131
|
+
En Claude Code quedan activados `skins`, `savvy-progress`, `filetree` y `cache-tax`
|
|
132
|
+
(mantiene caliente la caché, y eso gasta tokens). `superpowers` llega cuando el proyecto usa el método.
|
|
289
133
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
notices, in a clone, that the rest is not there yet. **Commit all three.** If your project
|
|
293
|
-
ignores the assistant's directory wholesale, rsc adds the lines that keep those files versioned —
|
|
294
|
-
verified against git, not against the pattern.
|
|
134
|
+
En cifras: 294 skills, 34 agentes y 43 entradas de comando, para 17 asistentes
|
|
135
|
+
(Claude Code, Codex, Cursor, Copilot, Gemini…). Detalle en la [referencia técnica](docs/referencia-tecnica.md).
|
|
295
136
|
|
|
296
|
-
|
|
297
|
-
runs on every session and every shell call, so a pull request that edits *that file* runs on the
|
|
298
|
-
machine of whoever reviews the branch. That is true of `.claude/settings.json` already, and of any
|
|
299
|
-
hook-based harness — but it is worth knowing before you agree to commit a third one. Review changes
|
|
300
|
-
to it the way you would review a CI workflow.
|
|
301
|
-
|
|
302
|
-
Whoever clones runs **one command** and ends up with the same harness — at the version the
|
|
303
|
-
project pinned, which is the `catalogVersion` in its `.rsc.json`:
|
|
304
|
-
|
|
305
|
-
```bash
|
|
306
|
-
npx @damiangilgonzalez/harness@<catalogVersion> sync
|
|
307
|
-
```
|
|
308
|
-
|
|
309
|
-
**You do not have to know that, or find it.** Open the project and the assistant tells you, in
|
|
310
|
-
the first message: what is missing, what would be installed, and the exact command, naming the
|
|
311
|
-
pinned version. It asks; it does not install anything on its own and it does not hold up
|
|
312
|
-
whatever you sat down to do. Say no and it stops asking on that machine.
|
|
313
|
-
|
|
314
|
-
Not `@latest`, and the difference is the whole point of sharing: a teammate who clones in three
|
|
315
|
-
months gets what you had, not what shipped since. Upgrading is something a person decides, writes
|
|
316
|
-
into `.rsc.json`, and commits — and then it reaches everyone through git, like any other change.
|
|
137
|
+
---
|
|
317
138
|
|
|
318
|
-
|
|
319
|
-
matches. **Nothing is ever written to your machine by a pull** — you are told, and you decide.
|
|
139
|
+
## El día a día
|
|
320
140
|
|
|
321
|
-
|
|
322
|
-
with no command at all. rsc never installs, updates or overwrites it: its version is the commit.
|
|
323
|
-
Installing a catalog skill of the same name is refused rather than silently winning, and `doctor`
|
|
324
|
-
lists what is yours by reading the files themselves — no list to keep in `.rsc.json`, because a
|
|
325
|
-
list somebody has to remember to update is a list that goes quietly stale. Declaring a skill under
|
|
326
|
-
`ownSkills` still works and still reports when someone is missing it.
|
|
141
|
+

|
|
327
142
|
|
|
143
|
+
En un proyecto que ya tiene harness, el mismo comando ofrece *Update this project*.
|
|
144
|
+
Respeta lo que quitaste a mano y hace una copia antes de tocar nada.
|
|
328
145
|
|
|
329
|
-
|
|
146
|
+
```bash
|
|
147
|
+
npx @damiangilgonzalez/harness@latest
|
|
148
|
+
```
|
|
330
149
|
|
|
331
|
-
|
|
150
|
+

|
|
332
151
|
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
| `This target has no hook injection` and you did not expect that | |
|
|
337
|
-
| Skills appear that you never asked for | |
|
|
338
|
-
| A hook seems to run several times per turn | |
|
|
339
|
-
| Template lines showed up inside your hand-written `AGENTS.md` | |
|
|
152
|
+
Tres ficheros llevan el harness por git. **Súbelos los tres:**
|
|
153
|
+
`.rsc.json` (lo que decidió el equipo), `.claude/settings.json` (el cableado) y
|
|
154
|
+
`.claude/rsc-bootstrap.mjs` (el que detecta, en un clon, que falta lo demás).
|
|
340
155
|
|
|
341
|
-
|
|
342
|
-
|
|
156
|
+
Quien clona abre el proyecto y el asistente te lo dice en el primer mensaje: qué falta y el
|
|
157
|
+
comando exacto, con la versión fijada (el `catalogVersion` de `.rsc.json`). Pregunta; no instala solo.
|
|
343
158
|
|
|
344
159
|
```bash
|
|
345
|
-
npx @damiangilgonzalez/harness
|
|
160
|
+
npx @damiangilgonzalez/harness@<catalogVersion> sync
|
|
346
161
|
```
|
|
347
162
|
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
nothing the second time. Add `--dry-run` to see the whole pass without a single write.
|
|
163
|
+
Nunca `@latest` a escondidas: quien clone dentro de tres meses tendrá lo mismo que tú.
|
|
164
|
+
Un `git pull` no escribe nada en tu máquina; `rsc doctor` te dice qué ya no cuadra.
|
|
351
165
|
|
|
352
|
-
|
|
353
|
-
|
|
166
|
+
> `.claude/rsc-bootstrap.mjs` es código que se ejecuta en cada sesión. Revisa los cambios a ese
|
|
167
|
+
> fichero como revisarías un workflow de CI.
|
|
354
168
|
|
|
355
|
-
**
|
|
356
|
-
|
|
169
|
+
**Skills propias.** Las que escribe tu equipo viven en el repo y funcionan al clonar.
|
|
170
|
+
rsc nunca las instala, actualiza ni sobrescribe: su versión es el commit.
|
|
357
171
|
|
|
358
|
-
|
|
359
|
-
so rsc does not repair, move or delete them — not even when rebuilding from scratch.
|
|
172
|
+

|
|
360
173
|
|
|
361
|
-
|
|
174
|
+
Al cerrar, guarda rama, ficheros y commits; al abrir, te dice dónde lo dejaste.
|
|
175
|
+
Nunca guarda prompts, respuestas ni secretos, y no sale de tu máquina. `rsc memory off` lo apaga.
|
|
362
176
|
|
|
363
|
-
|
|
364
|
-
re-sync what's already wired into your project:
|
|
177
|
+

|
|
365
178
|
|
|
366
|
-
|
|
367
|
-
npm install -g @damiangilgonzalez/harness@latest # global install: pull the newest catalog
|
|
368
|
-
rsc sync # refresh managed skills + hooks (auto-detects your assistant)
|
|
369
|
-
```
|
|
370
|
-
|
|
371
|
-
Not sure what a bump touches? Preview the exact commands without writing anything:
|
|
179
|
+
Cada rama en su worktree, cortada siempre desde `origin`.
|
|
372
180
|
|
|
373
181
|
```bash
|
|
374
|
-
rsc
|
|
182
|
+
rsc worktrees new avisos
|
|
183
|
+
rsc worktrees reap --merged --confirm # borra los ya fusionados, nunca los que tienen cambios
|
|
375
184
|
```
|
|
376
185
|
|
|
377
|
-
|
|
378
|
-
`npx @damiangilgonzalez/harness@latest` always fetches the latest published catalog; just run
|
|
379
|
-
`rsc sync` afterwards if the project already has skills installed.
|
|
186
|
+

|
|
380
187
|
|
|
381
|
-
|
|
188
|
+
`doctor` diagnostica; `repair` devuelve el harness a lo declarado. Enseña lo que va a tocar,
|
|
189
|
+
guarda una copia y nunca toca las skills que escribiste a mano.
|
|
382
190
|
|
|
383
191
|
```bash
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
rsc restore <snapshot-id> # restore it
|
|
192
|
+
npx @damiangilgonzalez/harness doctor
|
|
193
|
+
npx @damiangilgonzalez/harness@latest repair --dry-run
|
|
387
194
|
```
|
|
388
195
|
|
|
389
196
|
---
|
|
390
197
|
|
|
391
|
-
##
|
|
392
|
-
|
|
393
|
-
Two faces, one catalog (`manifest.json`):
|
|
394
|
-
|
|
395
|
-
- **In the terminal** — `rsc` / `rsc consult` rank the catalog against your words
|
|
396
|
-
(multilingual TF-IDF blended with exact tag/id weights and intent synonyms), merge that with what they
|
|
397
|
-
detect in your repo, and expand via each skill's `recommends`.
|
|
398
|
-
- **In the chat** — `rsc-suggest` is a tiny always-on skill. When a task would
|
|
399
|
-
benefit from a skill you don't have, it names it and (one-word confirm) runs
|
|
400
|
-
`rsc add <id>` for you. It's the floor — installed with every profile.
|
|
401
|
-
|
|
402
|
-
Repo detection maps real signals to skills: `package.json` + `next` → `nextjs`;
|
|
403
|
-
`go.mod` → `go`; `pyproject.toml` → `fastapi`; `*.sql`/`prisma/` → `postgresdb`;
|
|
404
|
-
`Dockerfile`/`.github/` → `docker`/`github-actions`; and so on. An empty repo
|
|
405
|
-
just asks in plain language.
|
|
406
|
-
|
|
407
|
-
---
|
|
408
|
-
|
|
409
|
-
## The catalog
|
|
410
|
-
|
|
411
|
-
294 skills, grouped by what you're trying to do. Click any skill to read its
|
|
412
|
-
`SKILL.md`. It fires on its own when a task matches.
|
|
413
|
-
|
|
414
|
-
### 🧭 Core & control plane
|
|
415
|
-
The front door and the workspace brain.
|
|
416
|
-
|
|
417
|
-
[init](skills/init/) · [harness](skills/harness/) · [orient](skills/orient/) · [suggest](skills/suggest/) · [bro](skills/bro/) · [unslop](skills/unslop/) · [author-skill](skills/author-skill/)
|
|
418
|
-
|
|
419
|
-
> **harness** is the Karpathy *chaos→knowledge* engine — a `01-TOOLS/` layer (one
|
|
420
|
-
> folder per provider, each with a working `test_connection`) and a `docs/`
|
|
421
|
-
> self-improving wiki. It governs software *or* a whole company. **orient** is the
|
|
422
|
-
> always-on compass that keeps a non-technical human oriented after every step.
|
|
423
|
-
> **bro** is installed with every profile and rewrites any answer in plain, natural
|
|
424
|
-
> language when the user asks — without making its full body always-on.
|
|
425
|
-
|
|
426
|
-
> #### 📦 The `docs/` brain is now 100% Open Knowledge Format (OKF v0.1) conformant
|
|
427
|
-
>
|
|
428
|
-
> Google Cloud published the [**Open Knowledge Format**](https://github.com/GoogleCloudPlatform/knowledge-catalog/tree/main/okf)
|
|
429
|
-
> — a vendor-neutral standard for portable, agent-readable knowledge — built on the
|
|
430
|
-
> same Karpathy *LLM-wiki* pattern our `docs/` engine has used from day one. We
|
|
431
|
-
> independently converged on the same design, so adopting the standard cost almost
|
|
432
|
-
> nothing. As of now, **every `docs/wiki/` is a valid, portable OKF bundle**:
|
|
433
|
-
>
|
|
434
|
-
> - **Markdown + YAML frontmatter**, `type` on every concept doc, OKF-standard
|
|
435
|
-
> fields (`title`, `description`, `resource`, `tags`, `timestamp`).
|
|
436
|
-
> - **Standard markdown links** (not wikilinks) form the knowledge graph — any OKF
|
|
437
|
-
> consumer reads it, *and* it stays a native Obsidian vault (graph, backlinks,
|
|
438
|
-
> Properties, Bases). Same files, no export step.
|
|
439
|
-
> - **Reserved files** honored: `index.md` (no frontmatter) for navigation,
|
|
440
|
-
> `log.md` (newest-first, ISO 8601) for history.
|
|
441
|
-
>
|
|
442
|
-
> Tarball a `wiki/` and any OKF tool — including Google's own viewer — can read it.
|
|
443
|
-
> And the brain now **keeps your repo clean**: a loose file it ingests (a PDF at the
|
|
444
|
-
> root, anything in `inbox/`) is *moved* into `raw/`, never left as clutter.
|
|
445
|
-
|
|
446
|
-
### 📐 Spec-Driven Development
|
|
447
|
-
Take a fuzzy intent to a shipped, verified change — phase by phase. `npx @damiangilgonzalez/harness install --profile core`.
|
|
448
|
-
|
|
449
|
-
[source-grounded-development](skills/source-grounded-development/) · [simplify-code](skills/simplify-code/)
|
|
450
|
-
|
|
451
|
-
> The actual spec-first chain lives in the personal catalog below, phase by phase. This section keeps
|
|
452
|
-
> the two skills that stay stack-agnostic in-phase regardless of which chain built the code:
|
|
453
|
-
> grounding an implementation or review in current version-specific docs, and simplifying working
|
|
454
|
-
> code without changing its behaviour.
|
|
455
|
-
|
|
456
|
-
### 💼 Run a business
|
|
457
|
-
|
|
458
|
-
[finance-ops](skills/finance-ops/) · [invoicing](skills/invoicing/) · [bookkeeping](skills/bookkeeping/) · [pricing](skills/pricing/) · [sales-pipeline](skills/sales-pipeline/) · [lead-gen](skills/lead-gen/) · [cold-outreach](skills/cold-outreach/) · [proposals](skills/proposals/) · [contracts](skills/contracts/) · [customer-support](skills/customer-support/) · [client-onboarding](skills/client-onboarding/) · [retention](skills/retention/) · [hiring](skills/hiring/) · [people-ops](skills/people-ops/) · [inventory](skills/inventory/) · [logistics-ops](skills/logistics-ops/) · [procurement](skills/procurement/) · [meeting-notes](skills/meeting-notes/) · [sop-builder](skills/sop-builder/) · [project-ops](skills/project-ops/)
|
|
459
|
-
|
|
460
|
-
### 💸 Raise & model money
|
|
461
|
-
|
|
462
|
-
[pitch-deck](skills/pitch-deck/) · [investor-materials](skills/investor-materials/) · [financial-model](skills/financial-model/) · [fundraising](skills/fundraising/) · [unit-economics](skills/unit-economics/) · [grants](skills/grants/)
|
|
463
|
-
|
|
464
|
-
### ⚖️ Legal, privacy & compliance
|
|
465
|
-
|
|
466
|
-
[gdpr-privacy](skills/gdpr-privacy/) · [terms-conditions](skills/terms-conditions/) · [compliance](skills/compliance/) · [data-policy](skills/data-policy/) · [ip-trademark](skills/ip-trademark/)
|
|
467
|
-
|
|
468
|
-
### 📣 Market & brand
|
|
469
|
-
|
|
470
|
-
[marketing](skills/marketing/) · [seo-geo](skills/seo-geo/) · [content-engine](skills/content-engine/) · [social-publisher](skills/social-publisher/) · [brand-voice](skills/brand-voice/) · [brand-identity](skills/brand-identity/) · [newsletter](skills/newsletter/) · [landing-copy](skills/landing-copy/) · [ads](skills/ads/) · [article-writing](skills/article-writing/) · [case-studies](skills/case-studies/) · [video-shorts](skills/video-shorts/) · [podcast](skills/podcast/) · [market-research](skills/market-research/) · [competitor-watch](skills/competitor-watch/) · [press-kit](skills/press-kit/) · [community](skills/community/) · [webinar](skills/webinar/) · [review-management](skills/review-management/)
|
|
471
|
-
|
|
472
|
-
### 🎬 Grow a channel
|
|
473
|
-
Each with a `docs` feedback loop that learns from your own results. `remotion-video` edits programmatically — transitions, Whisper captions, silence removal.
|
|
474
|
-
|
|
475
|
-
[youtube-api](skills/youtube-api/) · [youtube-strategy](skills/youtube-strategy/) · [youtube-ideation](skills/youtube-ideation/) · [youtube-thumbnails](skills/youtube-thumbnails/) · [youtube-packaging](skills/youtube-packaging/) · [remotion-video](skills/remotion-video/) · [tiktok-api](skills/tiktok-api/) · [instagram-api](skills/instagram-api/) · [shortform-strategy](skills/shortform-strategy/) · [shortform-ideation](skills/shortform-ideation/) · [shortform-packaging](skills/shortform-packaging/) · [shortform-editing](skills/shortform-editing/) · [viral-score](skills/viral-score/) · [linkedin-api](skills/linkedin-api/) · [linkedin-strategy](skills/linkedin-strategy/) · [linkedin-content](skills/linkedin-content/) · [linkedin-carousels](skills/linkedin-carousels/) · [linkedin-outreach](skills/linkedin-outreach/) · [medium-writing](skills/medium-writing/) · [medium-publishing](skills/medium-publishing/) · [medium-strategy](skills/medium-strategy/)
|
|
476
|
-
|
|
477
|
-
### 🔌 Connect & automate
|
|
478
|
-
|
|
479
|
-
[stripe](skills/stripe/) · [email-connector](skills/email-connector/) · [google-workspace](skills/google-workspace/) · [notion-connector](skills/notion-connector/) · [whatsapp-telegram](skills/whatsapp-telegram/) · [automation-flows](skills/automation-flows/) · [api-connector-builder](skills/api-connector-builder/) · [webhooks](skills/webhooks/) · [data-scraper](skills/data-scraper/) · [spreadsheet-ops](skills/spreadsheet-ops/) · [calendar-scheduling](skills/calendar-scheduling/) · [document-processing](skills/document-processing/) · [e-signature](skills/e-signature/)
|
|
480
|
-
|
|
481
|
-
### ⚙️ Automation
|
|
482
|
-
|
|
483
|
-
Operate the big automation platforms **programmatically or via MCP** — create and manage automations *dynamically*, not just design them on a canvas. `automation-strategy` decides whether / what / which platform; the platform skills drive the live REST API or MCP server (harness connectors ship for each). Complements `automation-flows` (visual design + importable workflow JSON).
|
|
484
|
-
|
|
485
|
-
[automation-strategy](skills/automation-strategy/) · [n8n](skills/n8n/) · [make](skills/make/) · [zapier](skills/zapier/) · [power-automate](skills/power-automate/)
|
|
486
|
-
|
|
487
|
-
### 📊 Data & analytics
|
|
488
|
-
|
|
489
|
-
[analytics](skills/analytics/) · [dashboard](skills/dashboard/) · [kpi-framework](skills/kpi-framework/) · [reporting](skills/reporting/) · [ab-testing](skills/ab-testing/) · [forecasting](skills/forecasting/) · [data-cleaning](skills/data-cleaning/) · [business-intelligence](skills/business-intelligence/)
|
|
490
|
-
|
|
491
|
-
### 🤖 AI — build it in
|
|
492
|
-
|
|
493
|
-
[building-agents](skills/building-agents/) · [rag](skills/rag/) · [embeddings-search](skills/embeddings-search/) · [prompt-engineering](skills/prompt-engineering/) · [llm-pipeline](skills/llm-pipeline/) · [agent-eval](skills/agent-eval/) · [chatbot](skills/chatbot/) · [ai-media](skills/ai-media/) · [replicate-images](skills/replicate-images/) · [structured-extraction](skills/structured-extraction/) · [agent-safety](skills/agent-safety/) · [cost-tracking](skills/cost-tracking/)
|
|
494
|
-
|
|
495
|
-
### 🛰️ AI — run it on
|
|
496
|
-
|
|
497
|
-
[replicate](skills/replicate/) · [runpod](skills/runpod/) · [modal](skills/modal/) · [huggingface](skills/huggingface/) · [ollama](skills/ollama/) · [together-fireworks](skills/together-fireworks/) · [fal](skills/fal/)
|
|
498
|
-
|
|
499
|
-
### 🎓 AI — train it
|
|
500
|
-
|
|
501
|
-
Train and adapt open models end to end: classic ML, deep learning, NLP, fine-tuning (with Unsloth), building training datasets, choosing open-weight models by license/size, and serving them at throughput with vLLM. Facts that move monthly (versions, model licenses) are verified at author time and hedged.
|
|
502
|
-
|
|
503
|
-
[machine-learning](skills/machine-learning/) · [deep-learning](skills/deep-learning/) · [nlp](skills/nlp/) · [finetuning](skills/finetuning/) · [training-data](skills/training-data/) · [unsloth](skills/unsloth/) · [open-weights](skills/open-weights/) · [vllm](skills/vllm/)
|
|
504
|
-
|
|
505
|
-
### 🗣️ Languages
|
|
506
|
-
|
|
507
|
-
[typescript](skills/typescript/) · [python](skills/python/) · [java](skills/java/) · [csharp-dotnet](skills/csharp-dotnet/) · [php](skills/php/) · [ruby](skills/ruby/) · [cpp](skills/cpp/) · [elixir](skills/elixir/) · [bash-scripting](skills/bash-scripting/) · [sql](skills/sql/) · [go](skills/go/)
|
|
508
|
-
|
|
509
|
-
### 🏗️ Frameworks & app stacks
|
|
510
|
-
|
|
511
|
-
[fastapi](skills/fastapi/) · [nextjs](skills/nextjs/) · [react](skills/react/) · [react-native](skills/react-native/) · [vue-nuxt](skills/vue-nuxt/) · [angular](skills/angular/) · [svelte](skills/svelte/) · [astro](skills/astro/) · [solid-js](skills/solid-js/) · [htmx](skills/htmx/) · [nodejs](skills/nodejs/) · [nestjs](skills/nestjs/) · [django](skills/django/) · [laravel](skills/laravel/) · [rails](skills/rails/) · [spring-boot](skills/spring-boot/) · [phoenix](skills/phoenix/) · [flutter](skills/flutter/) · [swift-ios](skills/swift-ios/) · [kotlin-android](skills/kotlin-android/) · [compose-multiplatform](skills/compose-multiplatform/) · [expo](skills/expo/) · [tauri](skills/tauri/) · [electron](skills/electron/) · [rust](skills/rust/) · [wordpress](skills/wordpress/) · [shopify](skills/shopify/) · [no-code-app](skills/no-code-app/) · [chrome-extension](skills/chrome-extension/) · [api-design](skills/api-design/)
|
|
512
|
-
|
|
513
|
-
### 🎮 Game development
|
|
514
|
-
|
|
515
|
-
Three engines + engine-agnostic disciplines. Every engine skill pins the current version and bans deprecated APIs, so the agent stops emitting stale Godot-3 / legacy-Unity code.
|
|
516
|
-
|
|
517
|
-
[godot](skills/godot/) · [unity](skills/unity/) · [unreal](skills/unreal/) · [game-design](skills/game-design/) · [game-storytelling](skills/game-storytelling/) · [level-design](skills/level-design/) · [gamedev-shaders](skills/gamedev-shaders/) · [gamedev-multiplayer](skills/gamedev-multiplayer/) · [gamedev-physics](skills/gamedev-physics/) · [gamedev-pathing](skills/gamedev-pathing/) · [gamedev-shipping](skills/gamedev-shipping/)
|
|
518
|
-
|
|
519
|
-
### 🗄️ Databases & data layer
|
|
520
|
-
|
|
521
|
-
[postgresdb](skills/postgresdb/) · [mysql](skills/mysql/) · [mongodb](skills/mongodb/) · [redis](skills/redis/) · [supabase](skills/supabase/) · [neon](skills/neon/) · [planetscale](skills/planetscale/) · [sqlite-turso](skills/sqlite-turso/) · [prisma-orm](skills/prisma-orm/) · [drizzle-orm](skills/drizzle-orm/) · [firebase](skills/firebase/) · [dynamodb](skills/dynamodb/) · [vector-db](skills/vector-db/) · [clickhouse-analytics](skills/clickhouse-analytics/) · [duckdb](skills/duckdb/) · [db-migrations](skills/db-migrations/) · [backups](skills/backups/)
|
|
522
|
-
|
|
523
|
-
### ☁️ Ship & operate — platforms
|
|
524
|
-
|
|
525
|
-
[vercel](skills/vercel/) · [netlify](skills/netlify/) · [cloudflare](skills/cloudflare/) · [railway](skills/railway/) · [render](skills/render/) · [fly-io](skills/fly-io/) · [coolify](skills/coolify/) · [hetzner](skills/hetzner/) · [digitalocean](skills/digitalocean/) · [aws-essentials](skills/aws-essentials/) · [gcp-essentials](skills/gcp-essentials/)
|
|
526
|
-
|
|
527
|
-
### 🛠️ Ship & operate — devops
|
|
528
|
-
|
|
529
|
-
[docker](skills/docker/) · [github-actions](skills/github-actions/) · [git-workflow](skills/git-workflow/) · [domains-dns](skills/domains-dns/) · [monitoring](skills/monitoring/) · [email-deliverability](skills/email-deliverability/) · [scaling](skills/scaling/) · [deployment](skills/deployment/) · [deprecation](skills/deprecation/)
|
|
530
|
-
|
|
531
|
-
### 🔒 Ship & operate — quality & security
|
|
532
|
-
|
|
533
|
-
[code-review](skills/code-review/) · [security-scan](skills/security-scan/) · [secure-coding](skills/secure-coding/) · [testing-py](skills/testing-py/) · [testing-web](skills/testing-web/) · [testing-go](skills/testing-go/) · [e2e-testing](skills/e2e-testing/) · [accessibility](skills/accessibility/) · [performance](skills/performance/) · [error-handling](skills/error-handling/) · [observability](skills/observability/)
|
|
534
|
-
|
|
535
|
-
### 🌀 Motion & interface craft
|
|
536
|
-
|
|
537
|
-
[motion-craft](skills/motion-craft/) · [ui-engineering](skills/ui-engineering/) · [variant-explorer](skills/variant-explorer/)
|
|
538
|
-
|
|
539
|
-
### 🎨 Design & content craft
|
|
540
|
-
|
|
541
|
-
[design-loop](skills/design-loop/) · [design](skills/design/) · [design-dna](skills/design-dna/) · [presentations](skills/presentations/) · [course-storytelling](skills/course-storytelling/) · [course-builder](skills/course-builder/) · [technical-writing](skills/technical-writing/) · [translation-l10n](skills/translation-l10n/)
|
|
542
|
-
|
|
543
|
-
### 🧠 Knowledge & meta
|
|
544
|
-
|
|
545
|
-
[knowledge-ops](skills/knowledge-ops/) · [codebase-onboarding](skills/codebase-onboarding/) · [research-ops](skills/research-ops/) · [continuous-learning](skills/continuous-learning/) · [skill-scout](skills/skill-scout/) · [context-budget](skills/context-budget/) · [roast-me](skills/roast-me/) · [show-me](skills/show-me/) · [eli5](skills/eli5/) · [fable-operator](skills/fable-operator/)
|
|
546
|
-
|
|
547
|
-
### 🇪🇸 Personal catalog — spec-driven development (Spanish)
|
|
548
|
-
|
|
549
|
-
The user's own 37-skill catalog, grouped by the phase of the cycle where each one is used.
|
|
550
|
-
The full guide, in Spanish, with one page per phase and a version for teaching: [`docs/skills/`](docs/skills/).
|
|
551
|
-
Bodies stay in Spanish; only each `description` was translated to English so Claude can still
|
|
552
|
-
decide when to fire them.
|
|
553
|
-
|
|
554
|
-
The source of truth is a written document, not a chat message. The chain, as the per-turn gate
|
|
555
|
-
routes it:
|
|
556
|
-
|
|
557
|
-

|
|
558
|
-
|
|
559
|
-
Always: `superpowers:test-driven-development` and `superpowers:verification-before-completion`.
|
|
560
|
-
Bugs start at `superpowers:systematic-debugging`.
|
|
561
|
-
|
|
562
|
-
#### 1 · Plan
|
|
563
|
-
|
|
564
|
-
Everything before code. What comes out is a spec and a plan, not an idea.
|
|
565
|
-
|
|
566
|
-

|
|
567
|
-
|
|
568
|
-
| Skill | What it does |
|
|
569
|
-
|---|---|
|
|
570
|
-
| [grill-with-docs](skills/grill-with-docs/) | Interrogates the plan and writes the glossary as it goes. The default way to ground an idea. |
|
|
571
|
-
| [wayfinder](skills/wayfinder/) | Only when the work does not fit one session: a map of decision tickets. |
|
|
572
|
-
| [to-spec](skills/to-spec/) | Turns the idea into a spec: what and why. `superpowers:brainstorming` is the alternative. |
|
|
573
|
-
| [write-adr](skills/write-adr/) | Records every hard-to-reverse decision under `docs/adr/`. |
|
|
574
|
-
| [research](skills/research/) | Investigates against primary sources and leaves the finding written and dated. |
|
|
575
|
-
| [to-questionnaire](skills/to-questionnaire/) | Turns a decision you cannot make alone into a questionnaire for whoever can. |
|
|
576
|
-
| [prototype](skills/prototype/) | A throwaway prototype to answer a design question. |
|
|
577
|
-
| [to-tickets](skills/to-tickets/) | Splits the work into one-sitting tickets. Used after `wayfinder`. |
|
|
578
|
-
| [claude-project-setup](skills/claude-project-setup/) | `CLAUDE.md`, rules, commands and agents. Once per repo. |
|
|
579
|
-
|
|
580
|
-
`grilling`, `grill-me` and `domain-modeling` are installed but rarely called by hand: they run
|
|
581
|
-
inside `grill-with-docs`.
|
|
582
|
-
[grilling](skills/grilling/) · [grill-me](skills/grill-me/) · [domain-modeling](skills/domain-modeling/)
|
|
583
|
-
|
|
584
|
-
#### 2 · Implement
|
|
585
|
-
|
|
586
|
-

|
|
587
|
-
|
|
588
|
-
| Skill | What it does |
|
|
589
|
-
|---|---|
|
|
590
|
-
| [implement-spec](skills/implement-spec/) | Builds a whole spec from its `to-tickets` graph: parallel subagents in worktrees, one integration branch, `code-review` at the end. |
|
|
591
|
-
| [implement](skills/implement/) | Builds one loose ticket from `to-tickets`. Ordinary work runs `superpowers:executing-plans` instead. |
|
|
592
|
-
|
|
593
|
-
#### 3 · Interface
|
|
594
|
-
|
|
595
|
-
When the work touches a screen. Sixteen overlapping skills; pick the one that matches the job.
|
|
596
|
-
|
|
597
|
-

|
|
598
|
-
|
|
599
|
-
| Skill | What it does |
|
|
600
|
-
|---|---|
|
|
601
|
-
| [flujo-interfaz](skills/flujo-interfaz/) | The router: which design skill leads and in what order the rest follow. Start here when the work touches a screen. |
|
|
602
|
-
| [ingeniero-diseno-web](skills/ingeniero-diseno-web/) | Runs the whole job: art direction, a declared design system, checkpoints and a scored critique. |
|
|
603
|
-
| [diseno-landing](skills/diseno-landing/) | A conversion landing end to end: structure, copy and a strict visual system. |
|
|
604
|
-
| [sitios-calidad-premio](skills/sitios-calidad-premio/) | Cinematic sites: GSAP, one smooth-scroll engine, Three.js only with a purpose. |
|
|
605
|
-
| [animar](skills/animar/) | Decides in order whether to animate, why, with what, which properties, curve and duration. |
|
|
606
|
-
| [diseno-apple](skills/diseno-apple/) | Fluid, physical motion: springs, interruptibility, velocity hand-off, materials. |
|
|
607
|
-
| [mejor-layout](skills/mejor-layout/) | Grouping, alignment, reading order, breakpoints, RTL. |
|
|
608
|
-
| [mejor-tipografia](skills/mejor-tipografia/) | Scale, line height, variable fonts, wrapping, truncation, punctuation. |
|
|
609
|
-
| [mejor-colores](skills/mejor-colores/) | Ramps, semantic tokens, measured contrast, dark mode. |
|
|
610
|
-
| [mejor-accesibilidad](skills/mejor-accesibilidad/) | Native before ARIA, focus, keyboard, hit areas, forms. |
|
|
611
|
-
| [mejor-ui](skills/mejor-ui/) | Concentric radii, optical alignment, surfaces, icon transitions. |
|
|
612
|
-
| [mejor-redaccion](skills/mejor-redaccion/) | Voice and tone, verb buttons, errors that say how to fix them, empty states. |
|
|
613
|
-
| [tastemaker](skills/tastemaker/) | UI that does not look AI-made: pixel-measured colour, generated palettes. |
|
|
614
|
-
| [leyes-de-percepcion](skills/leyes-de-percepcion/) | Gestalt for interfaces: proximity, similarity, figure-ground, hierarchy. |
|
|
615
|
-
| [leyes-de-retencion](skills/leyes-de-retencion/) | Why people abandon a flow: Hick, Fitts, Miller, Jakob, Doherty, peak-end. |
|
|
616
|
-
| [vocabulario-animacion](skills/vocabulario-animacion/) | Reverse glossary: turns "that thing that bounces" into the exact term. |
|
|
617
|
-
| [video-a-superprompt](skills/video-a-superprompt/) | Turns a reference video into a detailed recreation prompt. |
|
|
618
|
-
|
|
619
|
-
#### 4 · Review and close
|
|
620
|
-
|
|
621
|
-

|
|
622
|
-
|
|
623
|
-
| The work | Order |
|
|
624
|
-
|---|---|
|
|
625
|
-
| Did not touch a screen | `code-review` → `pr` |
|
|
626
|
-
| Touched a screen | `revision-de-cambios` → `revision-interfaz` → `code-review` → `pr` |
|
|
627
|
-
|
|
628
|
-
| Skill | What it does |
|
|
629
|
-
|---|---|
|
|
630
|
-
| [code-review](skills/code-review/) | Two axes in parallel: the repo's standards and the spec. |
|
|
631
|
-
| [revision-de-cambios](skills/revision-de-cambios/) | Reviews the change, reads the removed lines and classifies each finding. Only if it touched a screen. |
|
|
632
|
-
| [revision-interfaz](skills/revision-interfaz/) | Runs the six `mejor-*` skills as one report with a verdict. Only if it touched a screen. |
|
|
633
|
-
| [pr](skills/pr/) | Writes the PR body: a visual summary, before/after evidence, and the merge danger (one-way or two-way door, blast radius). |
|
|
634
|
-
| [handoff](skills/handoff/) | Compacts the session into a handoff document. Optional. |
|
|
635
|
-
|
|
636
|
-
#### 9 · Other
|
|
637
|
-
|
|
638
|
-
| Skill | What it does |
|
|
639
|
-
|---|---|
|
|
640
|
-
| [teach](skills/teach/) | Teaching across sessions. |
|
|
641
|
-
| [muscle-memory](skills/muscle-memory/) | A Python kata gym. |
|
|
642
|
-
| [wait-what](skills/wait-what/) | Handbrake: stop and restate. |
|
|
643
|
-
| [retro](skills/retro/) | Retrospective on a session: what to change in the agent's environment. You approve every change. |
|
|
644
|
-
| [writing-for-agents](skills/writing-for-agents/) | How to write documents an agent consumes. |
|
|
645
|
-
|
|
646
|
-
---
|
|
647
|
-
|
|
648
|
-
## Multi-target
|
|
649
|
-
|
|
650
|
-
`skills/<name>/` is the catalog source. On install the real files land **once**
|
|
651
|
-
in the project at `.rsc/skills/<id>/`; each assistant you pick gets a symlink
|
|
652
|
-
(or a converted file) back to that shared base — pick several and nothing is
|
|
653
|
-
duplicated. The wizard asks which ones; `--target a,b` does it non-interactively.
|
|
654
|
-
|
|
655
|
-
| Target | Skill destination (→ `.rsc/skills/<id>/`) | Always-on detector |
|
|
656
|
-
| --- | --- | --- |
|
|
657
|
-
| `claude` | `.claude/skills/<id>/` → symlink (copy on Windows) | SessionStart hook in `.claude/settings.json` |
|
|
658
|
-
| `codex` | `.codex/rsc/<id>/` → symlink | block in `AGENTS.md` |
|
|
659
|
-
| `copilot` | `.github/rsc/<id>/` → symlink | block in `.github/copilot-instructions.md` |
|
|
660
|
-
| `cursor` | `.cursor/rules/<id>.mdc` (converted) | always-apply rule |
|
|
661
|
-
| `gemini` | `.gemini/rsc/<id>/` → symlink | block in `GEMINI.md` |
|
|
662
|
-
| `windsurf` | `.windsurf/rsc/<id>/` → symlink | rule in `.windsurf/rules/rsc-suggest.md` |
|
|
663
|
-
| `cline` | `.clinerules/rsc/<id>/` → symlink | rule in `.clinerules/rsc-suggest.md` |
|
|
664
|
-
| `antigravity` | `.antigravity/rsc/<id>/` → symlink | block in `.antigravity/AGENTS.md` |
|
|
665
|
-
| `zed` | `.zed/rsc/<id>/` → symlink | block in `AGENTS.md` |
|
|
666
|
-
| `continue` | `.continue/rsc/<id>/` → symlink | rule in `.continue/rules/rsc-suggest.md` |
|
|
667
|
-
| `roo` | `.roo/rsc/<id>/` → symlink | rule in `.roo/rules/rsc-suggest.md` |
|
|
668
|
-
| `amp` | `.amp/rsc/<id>/` → symlink | block in `AGENTS.md` |
|
|
669
|
-
| `opencode` | `.opencode/rsc/<id>/` → symlink | block in `AGENTS.md` |
|
|
670
|
-
| `jules` | `.jules/rsc/<id>/` → symlink | block in `AGENTS.md` |
|
|
671
|
-
| `junie` | `.junie/rsc/<id>/` → symlink | block in `.junie/guidelines.md` |
|
|
672
|
-
| `kiro` | `.kiro/rsc/<id>/` → symlink | doc in `.kiro/steering/rsc-suggest.md` |
|
|
673
|
-
| `aider` | `.aider/rsc/<id>/` → symlink | block in `CONVENTIONS.md` |
|
|
674
|
-
|
|
675
|
-
> `codex`, `zed`, `amp`, `opencode` and `jules` all share the one root
|
|
676
|
-
> `AGENTS.md`; the block is idempotent, so picking several writes it once.
|
|
677
|
-
|
|
678
|
-
The richer surfaces are intentionally narrower than skill support:
|
|
679
|
-
|
|
680
|
-
| Targets | Stack agents | Native commands | Local session continuation |
|
|
681
|
-
| --- | --- | --- | --- |
|
|
682
|
-
| Claude Code | yes | agent + memory entries; skills already invoke natively | full |
|
|
683
|
-
| Codex | yes | no separate project-command surface | full after `/hooks` trust |
|
|
684
|
-
| Cursor desktop | yes | yes | assisted |
|
|
685
|
-
| Gemini CLI, OpenCode | yes | yes | full |
|
|
686
|
-
| GitHub Copilot | yes | yes | unsupported |
|
|
687
|
-
| Junie, Kiro | yes | unsupported | unsupported |
|
|
688
|
-
| Windsurf, Cline, Roo | unsupported | yes | unsupported |
|
|
689
|
-
| Antigravity, Zed, Continue, Amp, Jules, Aider | unsupported | unsupported | unsupported |
|
|
690
|
-
|
|
691
|
-
`manifest.json` is the generated public inventory: 34 agents (5 base + 29
|
|
692
|
-
selective specialists) and 43 command entries (10 fixed + 33 stack aliases).
|
|
693
|
-
Unsupported means rsc writes nothing for that surface; it does not emulate a
|
|
694
|
-
provider feature with an unverified file.
|
|
695
|
-
|
|
696
|
-
---
|
|
697
|
-
|
|
698
|
-
## Skill format
|
|
198
|
+
## Catálogo
|
|
699
199
|
|
|
700
|
-
|
|
701
|
-
drives both triggering and the installer's recommendations:
|
|
200
|
+

|
|
702
201
|
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
name: my-skill
|
|
706
|
-
description: Use when [specific triggers]… Triggers: 'phrase', 'frase'. NOT x (that is sibling).
|
|
707
|
-
tags: [keyword, keyword] # what the consult advisor searches over
|
|
708
|
-
recommends: [sibling-skill] # what the system offers to install next
|
|
709
|
-
profiles: [core, full] # optional: named-profile membership
|
|
710
|
-
origin: risco
|
|
711
|
-
---
|
|
712
|
-
```
|
|
202
|
+
294 skills en 25 dominios: software, negocio, contenido, datos e IA.
|
|
203
|
+
Cada una se activa sola cuando la tarea encaja.
|
|
713
204
|
|
|
714
|
-
|
|
715
|
-
[
|
|
205
|
+
**[Ver el catálogo completo →](docs/catalogo.md)** · [Referencia técnica](docs/referencia-tecnica.md) ·
|
|
206
|
+
[Cómo funciona por dentro](docs/como-funciona/README.md)
|
|
716
207
|
|
|
717
208
|
---
|
|
718
209
|
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
`skills/<name>/` is the **single source of truth** — every skill is authored
|
|
722
|
-
there, once. After editing any skill:
|
|
723
|
-
|
|
724
|
-
```bash
|
|
725
|
-
npm run manifest # regenerate manifest.json from skills/*/SKILL.md
|
|
726
|
-
npm run validate # ajv-validate frontmatter + check recommends integrity
|
|
727
|
-
npm test # unit + integration tests
|
|
728
|
-
bash scripts/eval-lint.sh # validate every skills/*/evals/cases.yaml
|
|
729
|
-
```
|
|
730
|
-
|
|
731
|
-
`manifest.json` is generated, never hand-edited; CI runs `npm run manifest:check`
|
|
732
|
-
and fails if it's stale or the skill count drifts. Adding a skill is: create
|
|
733
|
-
`skills/<id>/SKILL.md` with `tags` + `recommends`, run `npm run manifest`, done —
|
|
734
|
-
the rubric to hold it to is `scripts/skill-rubric.md`.
|
|
735
|
-
|
|
736
|
-
This is a personal catalog. Bug reports welcome via GitHub issues; PRs fixing
|
|
737
|
-
detector patterns, provider endpoints, or typos are appreciated.
|
|
738
|
-
|
|
739
|
-
## Third-party skills
|
|
740
|
-
|
|
741
|
-
Most of this catalog is written here. These are not, and they keep their author's credit:
|
|
742
|
-
|
|
743
|
-
| Skills | Source | License |
|
|
744
|
-
| --- | --- | --- |
|
|
745
|
-
| `design-eng` · `animate` · `animate-expo` · `review-animations` · `improve-animations` · `find-animation-opportunities` · `animation-vocabulary` · `apple-design` · `prototype` · `pick-ui-library` · `write-swift` · `ask-sonner` | [emilkowalski/skills](https://github.com/emilkowalski/skills) by Emil Kowalski, commit `d23d7f8` | MIT |
|
|
746
|
-
| part of the AI-tell corpus in `design` | [Leonxlnx/taste-skill](https://github.com/Leonxlnx/taste-skill) | MIT |
|
|
747
|
-
|
|
748
|
-
Adapted, not mirrored: each one carries rsc frontmatter, routing evals, hand-offs to its siblings
|
|
749
|
-
and — where it declares a binding rule — a checker with a test. The craft bar in them is the
|
|
750
|
-
original author's. If you want the source of the motion material rather than this adaptation, go to
|
|
751
|
-
[animations.dev](https://animations.dev/).
|
|
752
|
-
|
|
753
|
-
## License
|
|
754
|
-
|
|
755
|
-
MIT. See [LICENSE](LICENSE).
|
|
210
|
+
<sub>Deriva del trabajo de Eric Risco en [ericrisco/rsc-harness](https://github.com/ericrisco/rsc-harness).</sub>
|