repo-harness 0.5.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.es.md +201 -53
  2. package/README.fr.md +203 -55
  3. package/README.ja.md +196 -40
  4. package/README.md +91 -32
  5. package/README.zh-CN.md +190 -25
  6. package/SKILL.md +1 -0
  7. package/assets/hooks/session-start-context.sh +130 -0
  8. package/assets/reference-configs/agentic-development-flow.md +2 -1
  9. package/assets/reference-configs/external-tooling.md +29 -2
  10. package/assets/reference-configs/sprint-contracts.md +4 -0
  11. package/assets/skill-commands/manifest.json +9 -2
  12. package/assets/skill-commands/repo-harness-goal/SKILL.md +51 -0
  13. package/assets/skill-commands/repo-harness-prd/SKILL.md +15 -6
  14. package/assets/skill-version.json +10 -2
  15. package/assets/skills/claude-review/SKILL.md +114 -4
  16. package/assets/templates/helpers/check-agent-tooling.sh +129 -5
  17. package/assets/templates/helpers/ensure-task-workflow.sh +1 -1
  18. package/assets/templates/helpers/verify-contract.sh +12 -4
  19. package/install.ps1 +53 -0
  20. package/install.sh +71 -0
  21. package/package.json +5 -2
  22. package/scripts/check-agent-tooling.sh +129 -5
  23. package/scripts/check-ci.sh +36 -0
  24. package/scripts/check-npm-release.sh +1 -17
  25. package/scripts/create-project-dirs.sh +9 -0
  26. package/scripts/ensure-task-workflow.sh +1 -1
  27. package/scripts/init-project.sh +9 -0
  28. package/scripts/lib/project-init-lib.sh +24 -1
  29. package/scripts/migrate-project-template.sh +93 -32
  30. package/scripts/sync-codex-installed-copies.sh +23 -7
  31. package/scripts/verify-contract.sh +12 -4
  32. package/src/cli/commands/doctor.ts +32 -8
  33. package/src/cli/commands/global-runtime.ts +2 -2
  34. package/src/cli/commands/init-hook.ts +59 -0
  35. package/src/cli/commands/init.ts +69 -35
  36. package/src/cli/commands/security.ts +148 -5
  37. package/src/cli/commands/status.ts +13 -1
  38. package/src/cli/hook/runtime.ts +1 -1
  39. package/src/cli/index.ts +2 -2
  40. package/src/cli/installer/managed-entries.ts +1 -1
package/README.es.md CHANGED
@@ -1,17 +1,30 @@
1
1
  # repo-harness
2
2
 
3
- Repo-local agentic development harness CLI y skill runtime para workflows de
4
- Claude/Codex.
3
+ <p align="center">
4
+ <img src="docs/images/image.png" alt="One next button joining Claude and Codex under repo-harness workflow rules" width="760">
5
+ </p>
6
+
7
+ `repo-harness` convierte las sesiones de programación con Claude/Codex en un
8
+ workflow repo-local repetible. Incluye un CLI y hooks de skill/runtime que
9
+ escriben contexto, planes, handoffs, checks y evidencias de review dentro del
10
+ proyecto, para que la siguiente sesión de agente continúe desde archivos y no
11
+ desde el historial de chat.
12
+
13
+ Úsalo para:
14
+
15
+ - adoptar un repositorio existente con un contrato de agente tasks-first
16
+ - mantener Claude y Codex alineados sobre los mismos planes, checks, handoffs y
17
+ límites de contexto
18
+ - gastar menos tokens redescubriendo estructura gracias a CodeGraph y la carga
19
+ progresiva de contexto
20
+
21
+ Entrega al agente un PRD o Sprint completo; después, tu bucle es solo review and
22
+ `next`, o iniciar `/goal` y quedar AFK.
5
23
 
6
24
  [English](README.md) | [简体中文](README.zh-CN.md) | [日本語](README.ja.md) | [Français](README.fr.md) | [Español](README.es.md)
7
25
 
8
26
  Dirección del repositorio: `https://github.com/Ancienttwo/repo-harness`
9
27
 
10
- `repo-harness` es un harness de workflow que aterriza el proceso de programación
11
- con IA en archivos del repositorio. Es a la vez el repositorio fuente de la CLI
12
- `repo-harness` y de su skill runtime, y el ejemplo autoalojado del workflow
13
- repo-local que él mismo genera para los proyectos downstream.
14
-
15
28
  ## Por qué usar repo-harness
16
29
 
17
30
  - **El estado de la sesión vive en archivos, no en el historial de chat.** Las
@@ -34,43 +47,21 @@ repo-local que él mismo genera para los proyectos downstream.
34
47
  1KB o consulta el índice, en vez de gastar miles de tokens redescubriendo la
35
48
  estructura.
36
49
 
37
- ## Novedades en 0.2.1
38
-
39
- - **Comando de inicialización global (`repo-harness init`).** Un solo comando
40
- inicializa el entorno global de Claude: essential plugins, policy
41
- hooks configurables (worktree guard, atomic commit/pending), LSP plugins
42
- opcionales según el tipo de proyecto y cuatro hook profiles (`standard`,
43
- `minimal`, `biome`, `biome-strict`). Ejecuta
44
- `npx -y repo-harness init`; no necesitas clonar el repositorio fuente.
45
- - **Comando de adopción del repo (`repo-harness adopt`).** La instalación y el
46
- refresco de repos existentes tienen su propia superficie de comando, manteniendo
47
- la ruta de migración repo-local anterior mientras `init` queda dedicado al
48
- runtime global.
49
- - **Auto-recuperación del índice CodeGraph.** Si el prompt hook detecta intención
50
- de navegación estructural y el repo no tiene índice `.codegraph`, inicializa el
51
- índice con el binario CodeGraph local o visible en PATH antes de emitir la pista.
52
- Sigue siendo advisory: no instala dependencias, no ejecuta el readiness probe
53
- pesado y no bloquea el prompt si CodeGraph no está disponible.
54
- - **Centinela de seguridad (`repo-harness security scan` + `security-sentinel.sh`).**
55
- Una verificación de solo lectura sobre las superficies de inyección de
56
- configuración de alto valor (`~/.claude/settings.json`, `~/.codex/hooks.json`,
57
- el `.vscode/tasks.json` repo-local y los adapters legacy a nivel de proyecto
58
- `.claude`/`.codex`). Marca patrones de comando sospechosos —pipes de remote
59
- shell, base64-decode-to-exec, `osascript`, persistencia con
60
- `launchctl`/`crontab`, netcat, ejecución inline de intérpretes—, además de
61
- hooks no gestionados y tareas `folderOpen` de ejecución automática, y nunca
62
- modifica ninguna configuración. El centinela de `SessionStart` toma una huella
63
- de este conjunto y solo reescanea cuando la huella cambia, para no generar
64
- ruido en el session-start. Auditoría bajo demanda:
65
- `repo-harness security scan --json`.
66
- - **Ciclo de vida draft-plan de Claude/Codex.** El Plan mode tiene explícitamente
67
- dos etapas: Draft y Approved. Los hooks reconocen la intención de crear un plan
68
- y rastrean la pending orchestration; un stop gate (`stop-orchestrator.sh`) exige
69
- que la sesión haga una pasada de autorevisión antes de terminar con el plan sin
70
- definir. Captura un borrador con `scripts/capture-plan.sh --slug <slug> --title
71
- <title> --status Draft`, después promociónalo a Approved y proyéctalo a
72
- ejecución con `--execute` o `scripts/plan-to-todo.sh --plan <plan>`. Los plans
73
- se convierten en la fuente de verdad a nivel de archivo en `plans/`.
50
+ En un repositorio adoptado, la superficie se mantiene pequeña:
51
+
52
+ | Surface | Propósito |
53
+ | --- | --- |
54
+ | `docs/spec.md` y `docs/reference-configs/` | Estándares compartidos e intención de producto estable que cada sesión de agente puede leer. |
55
+ | `plans/`, `plans/prds/` y `plans/sprints/` | Work packages decision-complete antes de empezar la implementación. |
56
+ | `tasks/contracts/`, `tasks/reviews/` y `.ai/harness/checks/` | Scope, verificación y evidencia de review para probar que el trabajo terminó. |
57
+ | `.ai/harness/handoff/` y `tasks/current.md` | Session journal y estado resumible, derivados de workflow artifacts en vez de chat memory. |
58
+
59
+ ## Novedades en 0.5.2
60
+
61
+ - **Tooling advisories más silenciosos.** Los update checks de SessionStart usan por defecto un timestamp cache semanal, para que los avisos de Waza y CodeGraph no aparezcan en cada sesión.
62
+ - **Safety hooks locales revisados.** `repo-harness security scan` separa active findings y reviewed exceptions; los hooks user-level warning-only necesitan exact command match, y los comandos de alto riesgo siguen activos.
63
+ - **Setup checks más limpios.** `repo-harness setup check --check-updates` trata el skip de DB de gbrain fast-mode como readiness aceptado, pero mantiene visibles los warnings reales de gbrain.
64
+ - **Cross-review más resistente.** El skill bundled `claude-review` puede recuperar resultados print-mode con stdout vacío desde los transcripts de sesión de Claude Code.
74
65
 
75
66
  ## Qué hace el producto
76
67
 
@@ -200,16 +191,41 @@ retoma contra un sprint concreto en vez de reinterpretar el chat original.
200
191
  Esta es la ruta más rápida para evaluar si un repositorio real es apto para
201
192
  adoptar este workflow.
202
193
 
203
- ### Instalar o refrescar el runtime local
194
+ ### Instalar el CLI
195
+
196
+ La ruta por defecto no requiere Node.js: el instalador usa Bun como runtime. Si
197
+ Bun no existe, instala Bun primero y después instala el CLI `repo-harness`.
204
198
 
205
199
  ```bash
200
+ # macOS / Linux
201
+ curl -fsSL https://raw.githubusercontent.com/Ancienttwo/repo-harness/main/install.sh | sh
202
+
203
+ # Windows (PowerShell)
204
+ irm https://raw.githubusercontent.com/Ancienttwo/repo-harness/main/install.ps1 | iex
205
+ ```
206
+
207
+ <details>
208
+ <summary>¿Ya tienes Bun o Node? Usa gestores de paquetes</summary>
209
+
210
+ ```bash
211
+ # Bun
212
+ bun add -g repo-harness
213
+ repo-harness init
214
+
215
+ # Node/npm, con Bun ya en PATH porque el CLI corre sobre Bun
206
216
  npx -y repo-harness init
207
217
  ```
208
218
 
209
- La npm package release line y el generated workflow stamp usan ahora la misma
210
- línea `0.4.x`. `repo-harness init` es el bootstrap
211
- global, `repo-harness update` es el refresco user-level y `repo-harness adopt`
212
- es el refresco repo-local. `repo-harness init`
219
+ </details>
220
+
221
+ ### Bootstrap del runtime del host
222
+
223
+ ```bash
224
+ repo-harness init
225
+ ```
226
+
227
+ `repo-harness init` es el bootstrap global, `repo-harness update` es el refresco
228
+ user-level y `repo-harness adopt` es el refresco repo-local. `repo-harness init`
213
229
  configura el CLI, los hook adapters de nivel usuario, Waza, Mermaid, el brain
214
230
  root y CodeGraph MCP; el viejo camino Claude plugin `scripts/setup-plugins.sh`
215
231
  queda retirado.
@@ -267,7 +283,7 @@ El comando debería terminar imprimiendo `=== Migration Report ===`, e incluir:
267
283
  - `Host hook config target: user-level ~/.claude/settings.json and ~/.codex/hooks.json`: dónde está la capa del adapter
268
284
  - `Host hook adapters are user-level:`: recordatorio de instalar los global adapters y de confiar en `~/.codex/hooks.json`
269
285
  - `Workflow migration:`: el plan de creación o refresco de las repo-local harness surfaces
270
- - `Helper scripts:`: la cadena de herramientas operativa que obtendrás tras aplicar
286
+ - `Helper runtime:`: la cadena de herramientas operativa que obtendrás tras aplicar
271
287
  - `--- External Tooling ---`: el routing de gstack/Waza/gbrain más las advisory de instalación/actualización
272
288
 
273
289
  ### Los dos comandos siguientes
@@ -289,6 +305,22 @@ Si la salida del dry-run no es correcta, detente aquí primero y lee
289
305
  - Codex debe confiar en `~/.codex/hooks.json` en sus Settings para que los hooks se ejecuten.
290
306
  - Orden de depuración: user-level adapter config -> `repo-harness-hook` o el fallback `repo-harness hook` -> route registry -> `.ai/hooks/*`.
291
307
 
308
+
309
+ The installed adapter owns eight managed hook routes. The route tuple
310
+ `event + routeId + matcher` is the stable contract; script names are the current
311
+ implementation under `assets/hooks/` or a repo-pinned `.ai/hooks/` copy.
312
+
313
+ | Route | Matcher | Scripts | Function |
314
+ | --- | --- | --- | --- |
315
+ | `SessionStart.default` | all sessions | `session-start-context.sh`, `security-sentinel.sh` | Injects prior handoff, sprint status, and read-only config-security findings before work starts. |
316
+ | `PreToolUse.edit` | `Edit|Write` | `worktree-guard.sh`, `pre-edit-guard.sh` | Enforces worktree policy and plan/contract readiness before implementation edits. |
317
+ | `PreToolUse.subagent` | `Task|Agent|SendUserMessage` | `subagent-return-channel-guard.sh` | Keeps delegated work returning through the parent session instead of leaking completion claims. |
318
+ | `PostToolUse.edit` | `Edit|Write` | `post-edit-guard.sh` | Records edit traces, refreshes handoff/task status, and queues architecture drift when controlled files change. |
319
+ | `PostToolUse.bash` | `Bash` | `post-bash.sh` | Observes command results and captures verification evidence without replacing the command runner. |
320
+ | `PostToolUse.always` | all tools | `post-tool-observer.sh` | Provides low-noise always-on trace and runtime observation; stale pinned copies soft-skip with a refresh hint. |
321
+ | `UserPromptSubmit.default` | all prompts | `prompt-guard.sh` | Classifies prompt intent, routes planning/check/hunt hints, and renders host-safe workflow guidance. |
322
+ | `Stop.default` | session stop | `stop-orchestrator.sh` | Finalizes handoff and guards against ending with unresolved draft-plan or completion evidence gaps. |
323
+
292
324
  `SessionStart` ejecuta dos scripts ordenados antes de empezar el trabajo:
293
325
 
294
326
  ```mermaid
@@ -346,8 +378,8 @@ Guards habituales:
346
378
 
347
379
  ## Release actual
348
380
 
349
- - npm package: `repo-harness@0.5.0`
350
- - Generated workflow stamp: `repo-harness@0.5.0+template@0.5.0`
381
+ - npm package: `repo-harness@0.5.2`
382
+ - Generated workflow stamp: `repo-harness@0.5.2+template@0.5.2`
351
383
  - GitHub repository: `Ancienttwo/repo-harness`
352
384
  - Release history: [`docs/CHANGELOG.md`](docs/CHANGELOG.md)
353
385
 
@@ -359,6 +391,13 @@ Guards habituales:
359
391
  - `scripts/inspect-project-state.ts`
360
392
  - `scripts/migrate-workflow-docs.ts`
361
393
  - `assets/workflow-contract.v1.json`
394
+ - Runtime mode is configurable with template vars:
395
+ - `{{RUNTIME_MODE}}`
396
+ - `{{RUNTIME_PROFILE}}`
397
+ - `{{RECOVERY_PROFILE}}`
398
+ - `{{STATE_PROFILE}}`
399
+ - Question-pack source of truth is in:
400
+ - `assets/initializer-question-pack.v4.json`
362
401
  - Los generated repos usan por defecto el repo-local harness flow:
363
402
  - `docs/spec.md -> plans/ -> tasks/contracts/ -> tasks/reviews/ -> .ai/context/context-map.json -> .ai/harness/*`
364
403
  - `repo-harness update` refresca las runtime pieces de usuario:
@@ -385,15 +424,45 @@ Gracias a [Garry Tan](https://x.com/garrytan), autor de gstack y gbrain. Ambos
385
424
  influyeron en el workflow de product discovery, plan/design review, release
386
425
  documentation, knowledge sync y handoff retrieval.
387
426
 
427
+
428
+ ### Atribución de contribuidor en GitHub
429
+
430
+ Cuando Codex contribuya materialmente a un commit, usa el trailer co-author estándar de GitHub al final del commit message:
431
+
432
+ ```text
433
+ Co-authored-by: codex <codex@openai.com>
434
+ ```
435
+
436
+ Mantén esta atribución opt-in y visible por commit. No la incorpores en scripts de commit ni hooks downstream de repo-harness salvo que ese repo adopte explícitamente la misma política.
437
+
388
438
  ## Action Command Skills
389
439
 
390
440
  Los command facades públicos están en `assets/skill-commands/`; preservan la
391
441
  compatibilidad de discovery por skills, mientras el CLI y los hooks ejecutan:
392
442
 
393
443
  - Planning / review: `repo-harness-plan`, `repo-harness-review`, `repo-harness-autoplan`
444
+ - Product planning layer: `repo-harness-prd` (activa `$geju`, luego usa drafting Claude-first con `claude -p --model opus`; Codex queda solo como fallback)
445
+ - Sprint program layer: `repo-harness-sprint` (convierte un PRD en un backlog ordenado bajo `plans/sprints/`)
446
+ - Goal session layer: `repo-harness-goal` / `repo-harness:goal` (prepara prompts `/goal` de Codex/Claude desde un PRD o Sprint detallado; si falta el documento, lo pide primero)
394
447
  - Repo workflow actions: `repo-harness-ship`, `repo-harness-init`, `repo-harness-migrate`, `repo-harness-upgrade`, `repo-harness-capability`, `repo-harness-architecture`, `repo-harness-handoff`, `repo-harness-deploy`, `repo-harness-repair`, `repo-harness-check`
395
448
  - Branch project creation: `repo-harness-scaffold`
396
449
 
450
+ La cadena de planning está separada por capas:
451
+
452
+ ```text
453
+ idea -> repo-harness-prd -> repo-harness-sprint from-prd -> repo-harness-goal
454
+ ```
455
+
456
+ Usa `repo-harness-prd` cuando la fuente todavía es una idea de producto: primero
457
+ ejecuta un direction pass con `$geju`, luego pide a Claude vía `claude -p --model opus` que
458
+ redacte el PRD, con Codex solo como fallback. Usa
459
+ `repo-harness-sprint from-prd <plans/prds/*.prd.md>` para convertir un PRD
460
+ aprobado en un Sprint backlog ordenado con acceptance lines verificables por
461
+ máquina. Usa `repo-harness-goal` solo cuando ya exista un PRD o Sprint detallado;
462
+ prepara un prompt `/goal` acotado para Codex/Claude y mantiene el PRD/Sprint como
463
+ source of truth. Si falta ese documento, el goal command debe pedirlo antes de
464
+ empezar implementación desde el chat.
465
+
397
466
  `repo-harness adopt` se usa para repositorios existentes; `repo-harness-scaffold`
398
467
  queda como branch command para crear proyectos o módulos nuevos. `hooks-init`, `docs-init` y
399
468
  `create-project-dirs` son pasos internos, no commands públicos.
@@ -409,6 +478,23 @@ bun scripts/inspect-project-state.ts --repo . --format text
409
478
  bash scripts/migrate-project-template.sh --repo . --dry-run
410
479
  ```
411
480
 
481
+
482
+ ### Runtime reference docs
483
+
484
+ Generic repo-harness runtime/reference docs live in the installed package under
485
+ `assets/reference-configs/` and are resolved through the CLI:
486
+
487
+ ```bash
488
+ repo-harness docs list
489
+ repo-harness docs path harness-overview
490
+ repo-harness docs show harness-overview
491
+ ```
492
+
493
+ Generated and migrated repos still keep `docs/reference-configs/*.md`, but
494
+ those files are deterministic pointer stubs. Repo-local workflow state,
495
+ policy, checks, runs, handoff packets, context maps, and helper snapshots stay
496
+ under `.ai/`.
497
+
412
498
  ### Template assembly
413
499
 
414
500
  ```bash
@@ -425,7 +511,23 @@ bash scripts/check-task-workflow.sh --strict
425
511
  bun scripts/inspect-project-state.ts --repo . --format text
426
512
  bash scripts/migrate-project-template.sh --repo . --dry-run
427
513
  bash scripts/check-agent-tooling.sh --host both --check-updates
428
- bun run benchmark:skills --dry-run
514
+ bun run benchmark:skills --eval route-workflow-check
515
+ ```
516
+
517
+
518
+ ### Local benchmark skeleton
519
+
520
+ ```bash
521
+ bun run benchmark:skills --eval route-workflow-check
522
+ ```
523
+
524
+ Eval output is the release/readiness evidence path; dry-run benchmark wiring is only a smoke and is not skill-effectiveness evidence.
525
+
526
+
527
+ ### Run one eval across both Claude and Codex
528
+
529
+ ```bash
530
+ bun run benchmark:skills --eval repair-agents-task-sync
429
531
  ```
430
532
 
431
533
  ## Key Files
@@ -435,8 +537,54 @@ bun run benchmark:skills --dry-run
435
537
  - Plan mapping: `assets/plan-map.json`
436
538
  - Question-pack: `assets/initializer-question-pack.v4.json`
437
539
  - Shared hooks: `assets/hooks/`
540
+ - Runtime reference docs: `assets/reference-configs/` via `repo-harness docs`
438
541
  - Workflow contract: `assets/workflow-contract.v1.json`
439
542
  - Hook operations reference: `docs/reference-configs/hook-operations.md`
440
543
  - Template assembler: `scripts/assemble-template.ts`
441
544
  - State inspector: `scripts/inspect-project-state.ts`
545
+ - External tooling detector: `scripts/check-agent-tooling.sh`
546
+ - Scaffolding scripts:
547
+ - `scripts/init-project.sh`
548
+ - `scripts/create-project-dirs.sh`
442
549
  - Legacy-doc migrator: `scripts/migrate-workflow-docs.ts`
550
+
551
+ ## Generated vs Self-Hosted Hook Parity
552
+
553
+ - El comportamiento downstream de hooks lo define la salida generada desde `assets/hooks/` y `assets/reference-configs/`.
554
+ - Este repo dogfoodea el mismo contract, pero el comportamiento self-host no se sincroniza mágicamente con los generated repos; cada cambio debe actualizar explícitamente ambas superficies cuando aplique.
555
+ - Todo cambio de hook debe indicar si afecta a `self-host`, `generated` o `both`.
556
+
557
+ ## Package Manager Defaults
558
+
559
+ - Prioridad general por defecto: `bun > pnpm > npm`
560
+ - **Plan G/H** (Python-centric) usa **`uv`** como primary package manager por defecto.
561
+
562
+ ## Runtime Profiles
563
+
564
+ - `Plan-only (recommended)` (default)
565
+ - `Plan + Permissionless`
566
+ - `Standard (ask before each action)`
567
+
568
+ Se configura en `assets/initializer-question-pack.v4.json` y lo consume `scripts/initializer-question-pack.ts`.
569
+
570
+ ## Verification
571
+
572
+ Para release review usa el gate único equivalente a CI:
573
+
574
+ ```bash
575
+ bun run check:ci
576
+ ```
577
+
578
+ Ese gate se expande a los checks propios del repo; `bun run check:release` solo añade el preflight de npm unpublished-version antes de delegar al mismo gate.
579
+
580
+ ```bash
581
+ bun test
582
+ bash scripts/check-deploy-sql-order.sh
583
+ bash scripts/check-architecture-sync.sh
584
+ bash scripts/check-task-sync.sh
585
+ bash scripts/check-task-workflow.sh --strict
586
+ bun scripts/inspect-project-state.ts --repo . --format text
587
+ bash scripts/migrate-project-template.sh --repo . --dry-run
588
+ bash scripts/check-agent-tooling.sh --host both --check-updates
589
+ bun run benchmark:skills --eval route-workflow-check
590
+ ```