repo-harness 0.12.0 → 0.12.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.
package/README.es.md CHANGED
@@ -1,200 +1,50 @@
1
- # repo-harness
1
+ <div align="center">
2
2
 
3
- `repo-harness` convierte las sesiones de programación con Claude/Codex en un
4
- workflow repo-local repetible. Incluye un CLI y hooks de skill/runtime que
5
- escriben contexto, planes, handoffs, checks y evidencias de review dentro del
6
- proyecto, para que la siguiente sesión de agente continúe desde archivos y no
7
- desde el historial de chat.
3
+ # repo-harness
8
4
 
9
- Úsalo para:
5
+ ### Un flujo de trabajo repetible y basado en archivos para sesiones de programación con Claude y Codex
10
6
 
11
- - adoptar un repositorio existente con un contrato de agente tasks-first
12
- - mantener Claude y Codex alineados sobre los mismos planes, checks, handoffs y
13
- límites de contexto
14
- - gastar menos tokens redescubriendo estructura gracias a CodeGraph y la carga
15
- progresiva de contexto
7
+ <img src="docs/images/repo-harness-hook-carrot.png" alt="hooks de repo-harness guiando a Codex y Claude hacia adelante con estado de workflow repo-local" width="900">
16
8
 
17
- Entrega al agente un PRD o Sprint completo; después, tu bucle es solo review and
18
- `next`, o iniciar `/goal` y quedar AFK.
9
+ [![npm version](https://img.shields.io/npm/v/repo-harness.svg)](https://www.npmjs.com/package/repo-harness)
10
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
11
+ [![Runtime: Bun](https://img.shields.io/badge/runtime-Bun%20%E2%89%A5%201.1.35-black.svg)](https://bun.sh)
19
12
 
20
13
  [English](README.md) | [简体中文](README.zh-CN.md) | [日本語](README.ja.md) | [Français](README.fr.md) | [Español](README.es.md)
21
14
 
22
- Dirección del repositorio: `https://github.com/Ancienttwo/repo-harness`
23
-
24
- ## Por qué usar repo-harness
25
-
26
- - **El estado de la sesión vive en archivos, no en el historial de chat.** Las
27
- distintas sesiones de agente —Claude, Codex, ahora o más tarde— se mantienen
28
- sincronizadas a través del repositorio en lugar de un hilo de chat. Cuando
29
- arranca una sesión nueva, el session-context builder in-process
30
- (`src/cli/hook/session-context.ts`) inyecta el
31
- resume packet de la sesión anterior (`.ai/harness/handoff/resume.md`,
32
- `tasks/current.md`); al terminar la sesión y tras cada edición,
33
- los typed handlers `session-context`, `stop` y `mutation-observed` escriben de vuelta el siguiente
34
- handoff. Una tarea puede cortarse a mitad de camino y la siguiente sesión
35
- retoma directamente el next step exacto, los puntos de bloqueo y los archivos
36
- modificados sin tener que volver a inferirlos.
37
- - **Ahorra tokens por diseño.** En lugar de los bucles grep+read que reescanean
38
- el repositorio en cada sesión, el harness usa el índice pre-construido de
39
- CodeGraph para hacer consultas estructurales (quién llama, a qué llama, dónde
40
- está definido) y, además, carga de contexto progresiva mediante
41
- `.ai/context/context-map.json` y `capabilities.json`: un root context pequeño y
42
- estable (~12KB), más bloques de capability que solo se cargan cuando los
43
- archivos que tocas los necesitan. Un agente lee un contract de capability de
44
- 1KB o consulta el índice, en vez de gastar miles de tokens redescubriendo la
45
- estructura.
46
-
47
- En un repositorio adoptado, la superficie se mantiene pequeña:
48
-
49
- | Surface | Propósito |
50
- | --- | --- |
51
- | `docs/spec.md` y `docs/reference-configs/` | Estándares compartidos e intención de producto estable que cada sesión de agente puede leer. |
52
- | `plans/`, `plans/prds/` y `plans/sprints/` | Work packages decision-complete antes de empezar la implementación. |
53
- | `tasks/contracts/`, `tasks/reviews/` y `.ai/harness/checks/` | Scope, verificación y evidencia de review para probar que el trabajo terminó. |
54
- | `.ai/harness/handoff/` y `tasks/current.md` | Session journal y estado resumible, derivados de workflow artifacts en vez de chat memory. |
55
-
56
- ## Human Review Path
57
-
58
- Empieza por `tasks/reviews/<task>.review.md`. La `## Human Review Card` es la
59
- superficie de decisión de una sola pantalla: verdict, change type, archivos
60
- previstos vs reales, comandos que pasaron, external acceptance, riesgo residual,
61
- acción del reviewer y rollback. Luego inspecciona el contract activo, el último
62
- trace en `.ai/harness/checks/latest.json` y los archivos modificados. Acepta solo
63
- cuando la review recomiende pass, el verdict de la card sea pass y el external
64
- acceptance sea pass, `not_required` o un manual override explícito.
65
-
66
- ## Agent Tracking Path
67
-
68
- Los agentes leen los source artifacts antes que los resúmenes derivados:
69
-
70
- | Agent reads first | Human reviews first |
71
- | --- | --- |
72
- | Prompt actual del usuario y archivos referenciados | Human Review Card de `tasks/reviews/<task>.review.md` |
73
- | `AGENTS.md` / `CLAUDE.md` | Archivos modificados y diff |
74
- | Plan activo en `.ai/harness/active-plan` | Allowed paths y exit criteria del contract activo |
75
- | Contract activo en `tasks/contracts/` | `.ai/harness/checks/latest.json` y run trace |
76
- | Último handoff en `.ai/harness/handoff/` | Riesgos residuales y rollback |
77
-
78
- `tasks/current.md` es solo un snapshot de orientación. Si discrepa del plan
79
- activo, el contract, la review, los checks o el handoff, ganan los source
80
- artifacts.
81
-
82
- ## Novedades
83
-
84
- Las notas de versión viven en [`docs/CHANGELOG.md`](docs/CHANGELOG.md). La línea
85
- actual es `0.12.0`.
86
-
87
- ## Cómo funciona
88
-
89
- En conjunto hay tres capas y un único runtime typed para host events:
90
-
91
- 1. **Capa del paquete fuente**: este repositorio mantiene la CLI, los command
92
- skill facades, los templates, los hook assets, el workflow contract, los tests
93
- y el release gate.
94
- 2. **Capa del contract del repositorio objetivo**: `repo-harness init` o la
95
- migración escribe `docs/spec.md`, `plans/`, `tasks/`, `.ai/context/`,
96
- `.ai/harness/` y helper scripts. `.ai/hooks/lib/workflow-state.sh` es solo
97
- una proyección de operator helper.
98
- 3. **Capa del host adapter**: el `~/.claude/settings.json` y el
99
- `~/.codex/hooks.json` a nivel de usuario enrutan los events de Claude/Codex
100
- hacia `repo-harness-hook`. Tras validar `.ai/harness/workflow-contract.json`,
101
- el route registry usa `event + routeId + matcher` para invocar exactamente un
102
- typed handler.
103
-
104
- Todos los events siguen `host adapter -> repo-harness-hook -> route registry ->
105
- typed handler`. `UserPromptSubmit.default` usa `prompt`; edit/bash/stop usan
106
- `mutation-observed`, `command-observed` y `stop`. No existe un segundo shell
107
- dispatcher ni un runtime distinto por provider.
108
-
109
- El invariante central: los hechos persistentes viven en el repositorio, no en la
110
- ventana de chat. Los typed handlers son solo aceleradores y guardrails; la verdadera
111
- authority son los archivos de plan, contract, review, checks y handoff.
112
-
113
- ## Task Workflow: de Plan a Closeout
114
-
115
- El diagrama de abajo asume que el harness ya está instalado en el repositorio
116
- objetivo. Muestra el ciclo cerrado normal de una sola tarea: primero se forma un
117
- plan, luego se proyecta al sprint contract, cuando hace falta se hace checkout de
118
- un worktree aislado, se implementa bajo la protección de los hooks, y después se
119
- verifica, se hace review, external acceptance y, por último, closeout.
120
-
121
- ```mermaid
122
- flowchart TD
123
- UserTask["Tarea de usuario o planning prompt"] --> Discovery["Investigación previa<br/>P1 map, P2 trace, P3 decision"]
124
- Discovery --> PlanDraft["Draft plan<br/>plans/plan-*.md"]
125
- PlanDraft --> PlanReview{"¿El plan es ejecutable?"}
126
- PlanReview -->|no| Refine["Converger scope y evidence contract"]
127
- Refine --> PlanDraft
128
- PlanReview -->|sí| Approve["Approved plan<br/>Status: Approved"]
129
-
130
- Approve --> Project["Proyectar a la superficie de ejecución<br/>capture-plan.sh --execute<br/>o plan-to-todo.sh --plan"]
131
- Project --> Active["Active markers<br/>.ai/harness/active-plan<br/>.ai/harness/active-worktree"]
132
- Project --> Contract["Sprint contract<br/>tasks/contracts/YYYYMMDD-HHMM-task-slug.contract.md"]
133
- Project --> ReviewFile["Review file<br/>tasks/reviews/YYYYMMDD-HHMM-task-slug.review.md"]
134
- Project --> Notes["Task notes<br/>tasks/notes/YYYYMMDD-HHMM-task-slug.notes.md"]
135
-
136
- Contract --> WorktreePolicy{"¿Se necesita un contract worktree?"}
137
- WorktreePolicy -->|sí| Checkout["Checkout de worktree aislado<br/>contract-worktree.sh start --plan<br/>branch codex/task-slug"]
138
- WorktreePolicy -->|no| CurrentTree["Usar el worktree actual<br/>tarea pequeña o slice explícitamente permitido"]
139
- Checkout --> Implement
140
- CurrentTree --> Implement
141
-
142
- Implement["Editar y ejecutar comandos"] --> PreHooks["Pre-edit guards<br/>PlanStatusGuard, ContractScopeGuard, WorktreeGuard"]
143
- PreHooks -->|blocked| ScopeFix["Corregir plan, contract, worktree o scope"]
144
- ScopeFix --> Implement
145
- PreHooks -->|allowed| Changes["Cambios de código, docs, tests o configuración"]
146
- Changes --> PostHooks["Post-edit / post-bash hooks<br/>trace, drift request, handoff, check evidence"]
147
- PostHooks --> Verify["Ejecutar verificación<br/>tests plus repo workflow checks"]
148
-
149
- Verify --> Checks["Evidence estructurada<br/>.ai/harness/checks/latest.json<br/>.ai/harness/runs/*.json"]
150
- Checks --> CheckReview["Evaluator review<br/>Waza /check -> review file"]
151
- CheckReview --> External["External acceptance advice<br/>o manual override explícito"]
152
- External --> DoneGate{"¿Pasan contract, checks, review y acceptance?"}
153
- DoneGate -->|no| Repair["Reparar la evidence fallida o la implementación"]
154
- Repair --> Implement
155
- DoneGate -->|sí| Closeout["Closeout<br/>scripts/contract-worktree.sh finish"]
156
-
157
- Closeout --> Commit["Commit del contract branch"]
158
- Commit --> Merge["Fast-forward del target branch"]
159
- Merge --> Archive["Archivar plan/todo y refrescar el handoff"]
160
- Archive --> Cleanup["Limpiar el worktree ya fusionado<br/>contract-worktree.sh cleanup"]
161
- Cleanup --> Done["Tarea completada y auditable"]
162
- ```
163
-
164
- ## Bucles largos de producto
165
-
166
- Para trabajo Greenfield y Brownfield, adelanta la discovery y el juicio de
167
- engineering plan en el parent agent antes de pedirle a Codex que haga loops de
168
- ejecución:
15
+ **Dale al agente un PRD o Sprint completo; después, tu bucle es solo revisar y `next`, o inicia `/goal` y ponte AFK.**
169
16
 
170
- 1. Antes de crear un contract, el parent agent invoca `geju` para abrir el marco y
171
- después completa P1/P2/P3 con sus propias capacidades repo/runtime. Fija la
172
- intención de producto, la arquitectura, los riesgos, el falsifier y el evidence
173
- contract aceptados en los development documents.
174
- 2. Convierte esos documentos en un PRD Sprint bajo `plans/prds/`, con un
175
- backlog ordenado y sub-plans detallados para cada execution slice.
176
- 3. Crea un Codex Goal que apunte a ese archivo de sprint. repo-harness puede
177
- entonces proyectar cada sprint item por el flow normal plan -> contract ->
178
- worktree -> verification.
17
+ </div>
179
18
 
180
- Ese handoff mantiene precisos los loops largos: el parent agent se ocupa del juicio
181
- amplio al inicio, el PRD Sprint es la durable source of truth, y Codex Goal mode
182
- retoma contra un sprint concreto en vez de reinterpretar el chat original.
19
+ `repo-harness` distribuye un CLI junto con hooks de skill/runtime que escriben
20
+ contexto, planes, handoffs, checks y evidencia de review de vuelta en el
21
+ proyecto, de modo que la siguiente sesión de agente continúa desde archivos en
22
+ lugar del historial de chat. Adopta un repositorio existente con un contract
23
+ de agente tasks-first que mantiene alineados a Claude y Codex.
183
24
 
184
- ## Primeros 5 minutos
25
+ ## Índice
185
26
 
186
- Esta es la ruta más rápida para evaluar si un repositorio real es apto para
187
- adoptar este workflow.
27
+ - [Primeros pasos](#primeros-pasos)
28
+ - [Por qué usar repo-harness](#por-qué-usar-repo-harness)
29
+ - [Características clave](#características-clave)
30
+ - [Cómo funciona](#cómo-funciona)
31
+ - [Flujo de trabajo de tareas](#flujo-de-trabajo-de-tareas)
32
+ - [Hooks](#hooks)
33
+ - [Conector MCP](#conector-mcp)
34
+ - [Revisión del trabajo](#revisión-del-trabajo)
35
+ - [Skills](#skills)
36
+ - [Referencia para mantenedores](#referencia-para-mantenedores)
37
+ - [Agradecimientos](#agradecimientos)
38
+ - [Versión actual](#versión-actual)
39
+ - [Licencia](#licencia)
188
40
 
189
- Prerrequisitos: un Git working tree, `bash` y `bun` (para la verificación
190
- posterior y el template assembly). `jq` es opcional para `--dry-run`, pero se
191
- recomienda al aplicar el settings merge.
41
+ ## Primeros pasos
192
42
 
193
- ### Instalar el CLI
43
+ ### 1. Instalar el CLI
194
44
 
195
- La ruta por defecto no requiere Node.js: el instalador usa Bun >= 1.1.35 como
196
- runtime. Si Bun no existe o es anterior, lo instala o actualiza antes de
197
- instalar el CLI `repo-harness`.
45
+ Prerrequisitos: un Git working tree, `bash` y `bun`; `jq` es opcional. No se
46
+ necesita Node.js — el instalador usa Bun >= 1.1.35 como runtime, instalando o
47
+ actualizando Bun primero si hace falta.
198
48
 
199
49
  ```bash
200
50
  # macOS / Linux
@@ -204,431 +54,423 @@ curl -fsSL https://raw.githubusercontent.com/Ancienttwo/repo-harness/main/instal
204
54
  irm https://raw.githubusercontent.com/Ancienttwo/repo-harness/main/install.ps1 | iex
205
55
  ```
206
56
 
207
- <details>
208
- <summary>¿Ya tienes Bun >= 1.1.35? Usa Bun primero, o npx como fallback</summary>
57
+ Si ya tienes Bun >= 1.1.35 en el PATH, omite el instalador de shell. Las
58
+ instalaciones de Bun gestionadas por un gestor de paquetes fallan de forma
59
+ cerrada (fail closed) con el comando de actualización correspondiente
60
+ (`brew upgrade bun`), en lugar de sobrescribir archivos que pertenecen a ese
61
+ gestor.
209
62
 
210
63
  ```bash
211
- # Bun (recomendado)
212
- bun add -g repo-harness
64
+ bunx repo-harness@latest install # Bun one-shot bootstrap
65
+ bun add -g repo-harness # or install the persistent CLI first
213
66
  repo-harness install
214
-
215
- # Fallback con npx, con Bun ya en PATH porque el CLI corre sobre Bun
216
- npx -y repo-harness@latest install
67
+ npx -y repo-harness@latest install # npx fallback; the CLI still runs on Bun
217
68
  ```
218
69
 
219
- </details>
220
-
221
- ### Bootstrap del runtime del host
70
+ ### 2. Bootstrap del runtime del host
222
71
 
223
72
  ```bash
224
73
  repo-harness install
225
74
  ```
226
75
 
227
- `repo-harness install` es el bootstrap global, `repo-harness update` es el refresco
228
- user-level y `repo-harness init` es el refresco repo-local. `repo-harness install`
229
- configura el CLI, los hook adapters de nivel usuario, Waza, Mermaid, el brain
230
- root y CodeGraph MCP; el viejo camino Claude plugin `scripts/setup-plugins.sh`
231
- queda retirado.
232
-
233
- ### Empieza por aquí
76
+ El bootstrap global: instala el paquete npm como CLI global, refresca los
77
+ alias de skill de repo-harness, instala los hook adapters a nivel de usuario,
78
+ y registra un profile de instalación explícito. Es idempotente y no aplica
79
+ archivos de workflow repo-local al directorio actual. `--dry-run --json` lista
80
+ primero los componentes a instalar, omitir y eliminar. Profiles, modo de
81
+ delegación, comandos de refresco, y la auditoría de solo lectura
82
+ `setup check`: [`install-profiles.md`](docs/reference-configs/install-profiles.md).
234
83
 
235
- En un repositorio existente, ejecuta desde el repo root:
84
+ ### 3. Vista previa del contract repo-local
236
85
 
237
86
  ```bash
238
87
  repo-harness init --dry-run
239
88
  ```
240
89
 
241
- Aplica solo después de que el reporte del dry-run sea correcto:
242
-
243
- ```bash
244
- repo-harness init
245
- ```
246
-
247
- Para un proyecto o módulo nuevo, usa el modo scaffold de `repo-harness-setup`.
248
- Para un repositorio existente, usa `repo-harness init`; este instala o refresca
249
- el harness y no crea el stack tecnológico de la aplicación.
250
-
251
- ### Cómo se ve el éxito
252
-
253
- El comando debería terminar imprimiendo `=== Migration Report ===`, e incluir:
90
+ Ejecuta esto desde la raíz del repositorio objetivo. Reporta las
91
+ especificaciones, el estado de tareas, el helper runtime, el hook adapter de
92
+ destino y los archivos de verificación que se crearían o refrescarían. Nunca
93
+ crea un application stack; los proyectos y módulos nuevos usan en su lugar el
94
+ scaffold mode de `repo-harness-setup`.
254
95
 
255
- - `Project hooks synced from:`: de dónde proviene el comportamiento de los hooks generados
256
- - `Host hook config target: user-level ~/.claude/settings.json and ~/.codex/hooks.json`: dónde está la capa del adapter
257
- - `Host hook adapters are user-level:`: recordatorio de instalar los global adapters y de confiar en `~/.codex/hooks.json`
258
- - `Workflow migration:`: el plan de creación o refresco de las repo-local harness surfaces
259
- - `Helper runtime:`: la cadena de herramientas operativa que obtendrás tras aplicar
260
- - `--- External Tooling ---`: la guía de planning parent/Geju, la readiness de Waza y CodeGraph y las advisory de instalación/actualización
261
-
262
- ### Los dos comandos siguientes
96
+ ### 4. Aplicar y verificar
263
97
 
264
98
  ```bash
99
+ repo-harness init
265
100
  bash scripts/check-task-workflow.sh --strict
266
101
  bun test
267
102
  ```
268
103
 
269
- Si la salida del dry-run no es correcta, detente aquí primero y lee
270
- [`docs/reference-configs/hook-operations.md`](docs/reference-configs/hook-operations.md).
104
+ ### Así se ve el éxito
271
105
 
272
- ## MCP Connector Quickstart
106
+ Aplicar termina con `=== Migration Report ===`, indicando de dónde viene el
107
+ comportamiento de hooks generado, el destino del adapter a nivel de usuario
108
+ (`~/.claude/settings.json` y `~/.codex/hooks.json`), las superficies
109
+ repo-local creadas o refrescadas, el helper runtime `.ai/harness/scripts/*`, y
110
+ un bloque de readiness `--- External Tooling ---`. La intención estable vive
111
+ entonces en `docs/spec.md`, el estado de ejecución en `plans/` y `tasks/`, y
112
+ el estado de resume en `.ai/harness/handoff/`. Si el dry run se ve mal,
113
+ detente y lee primero
114
+ [`hook-operations.md`](docs/reference-configs/hook-operations.md).
273
115
 
274
- Como sidecar opcional, `repo-harness mcp` expone solo workflow artifacts a los
275
- clientes MCP. ChatGPT actúa como planner/reviewer que lee el estado y mueve una
276
- idea a través de PRD, Sprint checklist y artifacts de handoff de goal de Codex —
277
- sin acceso de escritura al código fuente, ejecución de shell arbitraria ni un
278
- runner de Codex por defecto. Codex sigue siendo el ejecutor.
279
-
280
- Este sidecar asume que el CLI ya está instalado según «Primeros 5 minutos» de
281
- arriba. Úsalo cuando quieras que ChatGPT planifique contra el estado real del
282
- repositorio y que Codex ejecute el Sprint file-backed resultante.
116
+ ### Actualizar y desinstalar
283
117
 
284
118
  ```bash
285
- repo-harness mcp setup chatgpt --repo .
286
- repo-harness mcp serve --repo . --transport http --host 127.0.0.1 --port 8765 --profile planner
119
+ repo-harness update # refresh user-level CLI and runtime pieces
120
+ repo-harness update --check # read-only repair guidance, no writes
121
+ repo-harness uninstall # remove managed host adapters only
287
122
  ```
288
123
 
289
- Expón ese server local a través de un túnel HTTPS y crea un Connector de ChatGPT
290
- con la URL `/mcp`. La guía generada se escribe en:
124
+ ## Por qué usar repo-harness
291
125
 
292
- ```text
293
- docs/repo-harness-chatgpt-mcp-setup.md
294
- ```
126
+ - **Sesiones respaldadas por archivos, no por historial de chat.** Las
127
+ sesiones separadas de Claude y Codex se mantienen coordinadas a través del
128
+ repositorio. `SessionStart` inyecta el resume packet de la sesión anterior,
129
+ `Stop` escribe el handoff, y cada edición registra un pequeño evento de
130
+ bitácora. Una sesión puede terminar a mitad de tarea, y la siguiente retoma
131
+ exactamente el próximo paso, los blockers y los archivos modificados, sin
132
+ tener que volver a inferirlos.
133
+ - **Ahorro de tokens por diseño.** En lugar de bucles de grep-and-read que
134
+ reescanean el repositorio en cada sesión, el harness se apoya en un índice
135
+ de CodeGraph pre-construido para consultas estructurales y en carga de
136
+ contexto progresiva: un root context estable de ~12KB más bloques de
137
+ capability que solo se cargan cuando los archivos que tocas los necesitan.
138
+ Un agente lee un capability contract de ~1KB en vez de redescubrir la
139
+ estructura.
140
+ - **Evidencia lista para review.** Cada tarea deja atrás un contract,
141
+ evidencia de check estructurada y una review card. La superficie de
142
+ decisión humana cabe en una sola pantalla — verdict, archivos previstos vs
143
+ reales, comandos que pasaron, riesgo residual, rollback — en lugar de una
144
+ reconstrucción de lo que el agente afirma haber hecho.
295
145
 
296
- El human workflow es:
146
+ En un repositorio adoptado, la superficie se mantiene intencionalmente
147
+ pequeña:
297
148
 
298
- 1. ChatGPT lee los archivos de workflow de repo-harness a través de MCP.
299
- 2. ChatGPT escribe un PRD con `write_prd_from_idea`.
300
- 3. ChatGPT escribe un Sprint checklist con `write_checklist_sprint`.
301
- 4. ChatGPT prepara `.ai/harness/handoff/codex-goal.md` con `prepare_codex_goal_from_sprint`.
302
- 5. Codex ejecuta el prompt host-native `/goal` y hace stage de cada Sprint phase completada.
149
+ | Superficie | Propósito |
150
+ | --- | --- |
151
+ | `docs/spec.md` y `docs/reference-configs/` | Estándares compartidos e intención de producto estable que toda sesión de agente puede leer. |
152
+ | `plans/`, `plans/prds/`, y `plans/sprints/` | Work packages decision-complete antes de empezar la implementación. |
153
+ | `tasks/contracts/`, `tasks/reviews/`, y `.ai/harness/checks/` | Alcance, verificación y evidencia de review para demostrar que el trabajo está terminado. |
154
+ | `.ai/harness/handoff/` y `tasks/current.md` | Bitácora de la sesión y estado resumible, derivados de artefactos de workflow en lugar de historial de chat. |
303
155
 
304
- Alternativa local para el último paso de handoff:
156
+ ## Características clave
305
157
 
306
- ```bash
307
- repo-harness mcp prepare-goal --repo . --prd plans/prds/<feature>.prd.md --sprint plans/sprints/<feature>.sprint.md
308
- ```
158
+ | | |
159
+ | --- | --- |
160
+ | **Sesiones respaldadas por archivos** | Plans, contracts, checks y handoffs viven en el repositorio, de modo que una sesión nueva retoma desde artefactos en vez de un hilo de chat |
161
+ | **Typed hook runtime** | Ocho managed routes compartidas, más tres delegation routes exclusivas de Codex, cada una atada a exactamente un typed handler in-process, con guards fail-closed en el límite de edición |
162
+ | **Plan → Contract → Review** | Un solo ciclo de vida desde el plan aprobado hasta el contract proyectado, el worktree aislado, la evidencia estructurada y un closeout revisable |
163
+ | **Carga de contexto progresiva** | Un root context estable de ~12KB más capability contracts de ~1KB que solo se cargan para los archivos que realmente se están tocando |
164
+ | **Integración con CodeGraph** | Consultas estructurales (callers, callees, definitions) respondidas desde un índice pre-construido en vez de pasadas repetidas de grep-and-read |
165
+ | **MCP planner sidecar** | ChatGPT lee el estado real del repositorio y escribe artefactos de PRD/Sprint/Goal; Codex los ejecuta, sin acceso de escritura al código fuente por defecto |
166
+ | **Alineación Claude + Codex** | Un solo adapter contract a nivel de usuario, un solo workflow contract, y un solo conjunto de artefactos repo-local compartidos por ambos hosts |
309
167
 
310
- El Skill orientado al agente se instala en:
168
+ ## Cómo funciona
311
169
 
312
- ```text
313
- .agents/skills/repo-harness-chatgpt-bridge/SKILL.md
314
- ```
170
+ 1. **Paquete fuente**: este repositorio posee el CLI, los command facades,
171
+ los templates, los typed hook handlers, el operator-helper asset, el
172
+ workflow contract, los tests y el release gate.
173
+ 2. **Contract del repositorio objetivo**: `repo-harness init` o la migración
174
+ escribe archivos repo-local como `docs/spec.md`, `plans/`, `tasks/`,
175
+ `.ai/context/`, `.ai/harness/`, helper scripts y `.ai/hooks/`.
176
+ 3. **Adapters del host**: a nivel de usuario, `~/.claude/settings.json` y
177
+ `~/.codex/hooks.json` enrutan los events de Claude/Codex hacia
178
+ `repo-harness-hook`.
179
+
180
+ El hook entrypoint termina en silencio para repos que no han hecho opt-in.
181
+ Para repos con opt-in, el route registry ata el event tuple público a
182
+ exactamente un typed handler empaquetado. `.ai/hooks/` solo contiene la
183
+ proyección de operator-helper; nunca es un host-event dispatcher.
184
+
185
+ El invariante central es que la verdad durable vive en el repositorio, no en
186
+ un hilo de chat. Los hooks son aceleradores y guardrails; la autoridad sigue
187
+ siendo los artefactos file-backed de plan, contract, review, checks y
188
+ handoff. Los gates de plan/spec/contract en la capa de prompt son advisory
189
+ routing; el enforcement estricto vive en el límite de edición. Los internals
190
+ del handler, la superficie de minimal-change y los policy modes:
191
+ [`hook-operations.md`](docs/reference-configs/hook-operations.md) y
192
+ [`minimal-change-hooks.md`](docs/reference-configs/minimal-change-hooks.md).
193
+
194
+ ## Flujo de trabajo de tareas
195
+
196
+ El diagrama asume que el harness ya está instalado. Muestra el ciclo de vida
197
+ normal desde un sprint backlog de programa hasta una sola contract task:
198
+ seleccionar la tarea, proyectarla en archivos de ejecución, hacer checkout
199
+ del contract worktree cuando la política lo exige, implementar bajo los
200
+ hooks, verificar, hacer review y cerrar (closeout).
315
201
 
316
- Ese Skill le indica a Codex cómo consumir los artifacts PRD/Sprint/Goal
317
- producidos por ChatGPT sin concederle a ChatGPT escritura sobre el source-code
318
- ni ejecución de shell.
202
+ ```mermaid
203
+ flowchart TD
204
+ Program["Program goal or release theme"] --> Sprint{"Sprint layer needed?"}
205
+ Sprint -->|yes| PRD["Upper-layer PRD<br/>plans/prds/*.prd.md"]
206
+ PRD --> SprintDoc["Sprint backlog<br/>plans/sprints/*.sprint.md"]
207
+ SprintDoc --> NextTask["Select next sprint task<br/>sprint-backlog.sh next"]
208
+ Sprint -->|no| UserTask["User task or planning prompt"]
209
+ Heartbeat["Heartbeat triage<br/>scripts/heartbeat-triage.sh<br/>.ai/harness/triage/"] --> UserTask
210
+ NextTask --> UserTask
211
+
212
+ UserTask --> Discovery["Due diligence<br/>P1 map, P2 trace, P3 decision"]
213
+ Discovery --> LoopEvidence["Loop evidence when routing changes<br/>state-snapshot --json<br/>route-nl-vs-ts / cutover gate"]
214
+ LoopEvidence --> PlanDraft["Draft plan<br/>plans/plan-*.md"]
215
+ PlanDraft --> PlanReview{"Plan ready for execution?"}
216
+ PlanReview -->|no| Refine["Refine plan, scope, evidence contract"]
217
+ Refine --> PlanDraft
218
+ PlanReview -->|yes| Approve["Approved plan<br/>Status: Approved"]
319
219
 
320
- El Dev Mode puede optar por la ejecución local de agentes a través de MCP. Está
321
- desactivado por defecto. Cuando el usuario activa el profile `orchestrator` con
322
- el ajuste dev runner, ChatGPT puede llamar a `run_agent_goal`, que solo lee
323
- `.ai/harness/handoff/codex-goal.md` y ejecuta el handoff fijo a través de un CLI
324
- local permitido como `codex exec` o `claude -p`.
220
+ Approve --> Project["Project plan into execution<br/>capture-plan.sh --execute<br/>or plan-to-todo.sh --plan"]
221
+ Project --> Active["Active markers<br/>.ai/harness/active-plan<br/>.ai/harness/active-worktree"]
222
+ Project --> SprintActive["Sprint projection<br/>active-sprint marker<br/>tasks/current.md"]
223
+ Project --> Contract["Sprint contract<br/>tasks/contracts/YYYYMMDD-HHMM-task-slug.contract.md"]
224
+ Project --> ReviewFile["Review file<br/>tasks/reviews/YYYYMMDD-HHMM-task-slug.review.md"]
225
+ Project --> Notes["Task notes<br/>tasks/notes/YYYYMMDD-HHMM-task-slug.notes.md"]
325
226
 
326
- ```bash
327
- repo-harness mcp serve --repo . --transport http --profile orchestrator --enable-dev-runner --dev-runner-agents codex
328
- ```
227
+ Contract --> Delegation["Delegation contract<br/>budget / permission_scope / roles"]
228
+ Delegation --> Delegate{"Use contract-run delegation?"}
229
+ Delegate -->|yes| ContractRun["Worker/verifier child run<br/>scripts/contract-run.ts"]
230
+ Delegate -->|no| WorktreePolicy{"Contract worktree required?"}
231
+ WorktreePolicy -->|yes| Checkout["Checkout isolated worktree<br/>contract-worktree.sh start --plan<br/>branch codex/task-slug"]
232
+ WorktreePolicy -->|no| CurrentTree["Use current worktree<br/>small or explicitly allowed slice"]
233
+ Checkout --> Implement
234
+ CurrentTree --> Implement
235
+ ContractRun --> Changes
329
236
 
330
- Este ajuste es solo para el Developer Mode local. Tiene límite de timeout, está
331
- auditado, y no es un shell arbitrario.
237
+ Implement["Edit and run commands"] --> PreHooks["Pre-edit guards<br/>PlanStatusGuard, ContractScopeGuard, WorktreeGuard"]
238
+ PreHooks -->|blocked| ScopeFix["Fix plan, contract, worktree, or scope"]
239
+ ScopeFix --> Implement
240
+ PreHooks -->|allowed| Changes["Code, docs, tests, or config changes"]
241
+ Changes --> PostHooks["Post-edit and post-bash hooks<br/>trace, drift request, handoff, check evidence"]
242
+ PostHooks --> ArchQueue["Architecture queue<br/>architecture-queue.sh record/reindex<br/>check-architecture-sync.sh"]
243
+ ArchQueue --> Verify["Run verification<br/>tests plus repo workflow checks"]
332
244
 
333
- ## Hook Authority Map
245
+ Verify --> Checks["Structured evidence<br/>.ai/harness/checks/latest.json<br/>.ai/harness/runs/*.json"]
246
+ Checks --> CheckReview["Evaluator review<br/>Waza /check -> review file"]
247
+ CheckReview --> External["External acceptance advice<br/>or explicit manual override"]
248
+ External --> DoneGate{"Contract, checks, review, and acceptance pass?"}
249
+ DoneGate -->|no| Repair["Repair failing evidence or implementation"]
250
+ Repair --> Implement
251
+ DoneGate -->|yes| SprintComplete{"Sprint task active?"}
252
+ SprintComplete -->|yes| MarkSprint["Mark backlog item complete<br/>sprint-backlog.sh complete-task"]
253
+ SprintComplete -->|no| Closeout["Closeout<br/>scripts/contract-worktree.sh finish"]
254
+ MarkSprint --> Closeout
255
+
256
+ Closeout --> Commit["Commit contract branch"]
257
+ Commit --> Merge["Fast-forward target branch"]
258
+ Merge --> Archive["Archive plan/todo and refresh handoff"]
259
+ Archive --> Cleanup["Cleanup merged worktree<br/>contract-worktree.sh cleanup"]
260
+ Cleanup --> Done["Reviewable completed task"]
261
+ ```
334
262
 
335
- `repo-harness-hook` es el único host-event runtime. El adapter a nivel de usuario
336
- solo entrega el event; route registry usa el tuple estable `event + routeId + matcher`
337
- para invocar exactamente un typed handler. `assets/hooks/lib/workflow-state.sh` y
338
- `.ai/hooks/lib/workflow-state.sh` son proyecciones de operator helper, no dispatchers.
263
+ Para los loops de producto de larga duración, mantén el discovery y el
264
+ juicio de engineering-plan con el agente padre antes de que Codex haga loops
265
+ de ejecución: `geju` abre el pre-contract frame, el agente padre completa
266
+ P1/P2/P3 y congela la dirección aceptada en un PRD de upper-layer bajo
267
+ `plans/prds/` y un sprint backlog ordenado bajo `plans/sprints/`, luego un
268
+ Codex Goal apunta a ese archivo de sprint. El PRD sigue siendo la fuente de
269
+ verdad superior y el backlog es la cola de ejecución durable, de modo que una
270
+ sesión de Goal reanudada nunca reinterpreta el chat original. Ver
271
+ [`agentic-development-flow.md`](docs/reference-configs/agentic-development-flow.md)
272
+ y [`workflow-orchestration.md`](docs/reference-configs/workflow-orchestration.md).
339
273
 
340
- - `~/.claude/settings.json`: Claude adapter a nivel de usuario.
341
- - `~/.codex/hooks.json`: Codex adapter a nivel de usuario; requiere confianza en Settings.
342
- - `.claude/settings.json` / `.codex/hooks.json` repo-locales: inputs legacy que se retiran durante migration.
343
- - Los cambios de handler viven en `src/cli/hook/`; sincroniza la proyección con `bun run sync:hooks`.
274
+ ## Hooks
344
275
 
345
- The installed adapter owns the managed hook routes. Each route invokes one typed
346
- handler; no existe un segundo runtime de shell ni un runtime específico por provider.
276
+ El adapter instalado posee ocho managed hook routes compartidas. El route
277
+ tuple `event + routeId + matcher` es el contract estable; cada tuple ata
278
+ exactamente un typed handler in-process.
347
279
 
348
- | Route | Matcher | Typed handler | Function |
280
+ | Route | Matcher | Handler | Function |
349
281
  | --- | --- | --- | --- |
350
- | `SessionStart.default` | all sessions | `src/cli/hook/session-context.ts` (in-process builder) | Injects prior handoff, sprint status, and read-only config-security findings before work starts. |
351
- | `PreToolUse.edit` | `Edit|Write` | `src/cli/hook/mutation-guard.ts` (in-process handler) | Enforces worktree policy and plan/contract readiness before implementation edits. |
352
- | `PreToolUse.subagent` | `Task|Agent|SendUserMessage` | `subagent` | Keeps delegated work returning through the parent session instead of leaking completion claims. |
353
- | `PostToolUse.edit` | `Edit|Write` | `mutation-observed` | Records the edit journal and controlled-file observations. |
354
- | `PostToolUse.bash` | `Bash` | `command-observed` | Observes command results and captures verification evidence without replacing the command runner. |
355
- | `PostToolUse.always` | all tools | `trace-observer` | Provides low-noise always-on trace and runtime observation. |
356
- | `UserPromptSubmit.default` | all prompts | `prompt` | Classifies prompt intent, routes planning/check/hunt hints, and renders host-safe workflow guidance. |
357
- | `Stop.default` | session stop | `src/cli/hook/stop-handler.ts` (in-process handler) | Finalizes handoff and guards against ending with unresolved draft-plan or completion evidence gaps. |
282
+ | `SessionStart.default` | all sessions | `src/cli/hook/session-context.ts` (in-process builder) | Inyecta el handoff anterior, el estado del sprint, guía de minimal-change y hallazgos de config-security de solo lectura antes de que empiece el trabajo. |
283
+ | `PreToolUse.edit` | `Edit\|Write` | `src/cli/hook/mutation-guard.ts` (in-process handler) | Aplica la worktree policy y la readiness de plan/contract antes de las ediciones de implementación. |
284
+ | `PreToolUse.subagent` | `Task\|Agent\|SendUserMessage` | `src/cli/hook/subagent-handler.ts` | Mantiene el trabajo delegado retornando a través de la sesión padre, en lugar de dejar escapar afirmaciones de finalización. |
285
+ | `PostToolUse.edit` | `Edit\|Write` | `src/cli/hook/mutation-observed.ts` (in-process handler) | Escribe como máximo un pequeño evento de bitácora con dirty bits por cada edición calificada; la verificación del contract, el sync de architecture/context/capability y la evidencia de minimal-change se difieren a Stop en vez de ejecutarse por cada edición. |
286
+ | `PostToolUse.bash` | `Bash` | `src/cli/hook/command-observed.ts` | Observa los resultados de comandos y captura evidencia de verificación sin reemplazar el command runner. |
287
+ | `PostToolUse.always` | all tools | `src/cli/hook/trace-observer.ts` | Provee trace y runtime observation de bajo ruido y siempre activo. |
288
+ | `UserPromptSubmit.default` | all prompts | `src/cli/hook/prompt-handler.ts` | Clasifica la intención del prompt, enruta hints de planning/check y renderiza guía de workflow host-safe. |
289
+ | `Stop.default` | session stop | `src/cli/hook/stop-handler.ts` (in-process handler) | Finaliza el handoff y protege contra terminar con draft-plans sin resolver o vacíos de evidencia de completion. |
290
+
291
+ Codex también instala tres Codex-only bounded-delegation routes —
292
+ `UserPromptSubmit.delegation`, `SubagentStart.context`, y
293
+ `SubagentStop.quality`, todas atadas a `src/cli/hook/subagent-handler.ts`;
294
+ Claude solo conserva la route compartida de return-channel,
295
+ `PreToolUse.subagent`.
296
+
297
+ `repo-harness-hook` y su typed handler registry son el host-event runtime;
298
+ `~/.claude/settings.json` y `~/.codex/hooks.json` son los adapters a nivel de
299
+ usuario, y Codex debe marcar su archivo como trusted en Settings antes de que
300
+ esos hooks corran. `.claude/settings.json` y `.codex/hooks.json` repo-locales
301
+ son config legacy a retirar. Depura en este orden: adapter config ->
302
+ `repo-harness-hook` -> route registry -> typed handler.
303
+
304
+ Cuando un hook bloquea el trabajo, lee primero el structured terminal
305
+ output: `guard`, `reason`, `fix`, `failure_class`, y `run_id`. Los registros
306
+ durables viven en `.ai/harness/failures/latest.jsonl`, con la actividad de
307
+ tools circundante en `.claude/.trace.jsonl`. Los guards comunes son
308
+ `PlanStatusGuard` (no hay plan activo o ejecutable), `ContractGuard` (falta
309
+ el contract scaffold, o se afirma completion antes de que el contract
310
+ pasara), y `WorktreeGuard` (escrituras desde el worktree equivocado).
311
+ Playbook completo:
312
+ [`docs/reference-configs/hook-operations.md`](docs/reference-configs/hook-operations.md).
358
313
 
359
- `SessionStart` ejecuta el session-context builder in-process, que ensambla el contexto antes de empezar el trabajo:
314
+ ## Conector MCP
360
315
 
361
- ```mermaid
362
- flowchart LR
363
- SessionStart["Claude/Codex SessionStart"] --> Ctx["session-context.ts<br/>in-process builder"]
364
- Ctx --> Resume["contexto de resume + handoff"]
365
- Ctx --> Sec["security scan<br/>escaneo de configuración de solo lectura, fingerprint-gated"]
366
- Resume --> SSOut["SessionStart additionalContext<br/>estado de la sesión anterior + hallazgos de SecurityConfig"]
367
- Sec --> SSOut
368
- ```
316
+ Como sidecar opcional, `repo-harness mcp` expone artefactos de workflow a
317
+ clientes MCP a través del profile `planner` por defecto. ChatGPT lee el
318
+ estado real del repositorio y mueve una idea a través de artefactos de PRD,
319
+ checklist Sprint y Codex goal handoff — sin acceso de escritura al código
320
+ fuente por defecto, sin ejecución arbitraria de shell, ni runner por
321
+ defecto. Codex sigue siendo el ejecutor.
369
322
 
370
- El prompt guard tiene un paso interno adicional:
371
-
372
- ```mermaid
373
- flowchart LR
374
- Host["Claude/Codex UserPromptSubmit"] --> Adapter["user-level adapter"]
375
- Adapter --> CLI["repo-harness-hook UserPromptSubmit --route default"]
376
- CLI --> Route["route registry"]
377
- Route --> Handler["prompt handler<br/>typed decision table"]
378
- Handler --> RouteHint["Waza route hint<br/>think/planning explícito coincide primero → /think"]
379
- Handler --> HostOutput["host-safe allow, advice, block, or done gate output"]
323
+ ```bash
324
+ repo-harness mcp setup chatgpt --repo .
325
+ repo-harness mcp serve --repo . --transport http --host 127.0.0.1 --port 8765 --profile planner
380
326
  ```
381
327
 
382
- El typed handler posee el parseo de entrada, el estado de archivos y los side effects
383
- declarados; el runtime solo unifica el host output. AcceptanceReceipt es la authority
384
- de closeout y review Markdown es una proyección.
385
-
386
- ## Hook Failure Playbook
387
-
388
- Cuando un hook block está activo, mira primero la salida estructurada en el
389
- terminal. Los campos centrales son `guard`, `reason`, `fix`, `failure_class` y
390
- `run_id`.
328
+ Expón ese servidor local a través de un túnel HTTPS, registra la URL `/mcp`,
329
+ y el human workflow es:
391
330
 
392
- - Failure log: `.ai/harness/failures/latest.jsonl`
393
- - Trace log: `.claude/.trace.jsonl`
394
- - Guía detallada: [`docs/reference-configs/hook-operations.md`](docs/reference-configs/hook-operations.md)
395
-
396
- Guards habituales:
397
-
398
- - `PlanStatusGuard`: no hay active plan, o el plan todavía no puede ejecutarse
399
- - `ContractGuard`: la approved execution aún no ha generado el scaffold de contract/review/notes
400
- - `ContractGuard`: la tarea afirma estar completa sin haber pasado la contract verification
401
- - `WorktreeGuard`: se escribe desde el primary worktree bajo una política que fuerza linked worktrees
402
-
403
- ## Repo Workflow
404
-
405
- - Root routing docs: `CLAUDE.md`, `AGENTS.md`
406
- - Typed hook runtime: `src/cli/hook/` (a través de `repo-harness-hook`)
407
- - Operator helper projection: `.ai/hooks/lib/workflow-state.sh`
408
- - User-level adapter layer: `~/.claude/settings.json`, `~/.codex/hooks.json`
409
- - Active execution surface: `tasks/`
410
- - Plan source of truth: `plans/`
411
- - Durable progress: `tasks/workstreams/`
412
- - Release history: `docs/CHANGELOG.md`
413
-
414
- ## Release actual
415
-
416
- - npm package: `repo-harness@0.12.0`
417
- - Generated workflow stamp: `repo-harness@0.12.0+template@0.12.0`
418
- - GitHub repository: `Ancienttwo/repo-harness`
419
- - Release history: [`docs/CHANGELOG.md`](docs/CHANGELOG.md)
420
-
421
- ## Agradecimientos
422
-
423
- Gracias a [Hylarucoder](https://x.com/hylarucoder) por su contribución
424
- metodológica. El método P1/P2/P3 due-diligence de `repo-harness`, y la práctica
425
- Geju que disciplina el planning, el trace y el decision rationale, vienen de su
426
- contribución e influencia.
427
-
428
- Gracias a [TW93](https://x.com/HiTw93), autor de Waza. Los skills centrales
429
- `think`, `hunt`, `check` y `health` dan forma al ritmo diario de planning, bug
430
- hunt y verification de `repo-harness`.
431
-
432
- Gracias a [Peter Steinberger](https://x.com/steipete), autor de Oracle
433
- (`@steipete/oracle`, MIT). Es el motor de consult de navegador GPT Pro / ChatGPT
434
- Web por defecto de `chatgpt-browser`: el provider Oracle ejecuta el binario oracle
435
- externo para los consults `gptpro`, sin descarga automática, y un binario ausente
436
- es un fallo explícito.
331
+ 1. ChatGPT lee los archivos de workflow de repo-harness a través de MCP.
332
+ 2. ChatGPT escribe un PRD con `write_prd_from_idea`.
333
+ 3. ChatGPT escribe un checklist Sprint con `write_checklist_sprint`.
334
+ 4. ChatGPT prepara `.ai/harness/handoff/codex-goal.md` con `prepare_codex_goal_from_sprint`.
335
+ 5. Codex ejecuta el prompt host-native `/goal` y hace stage de cada fase de Sprint completada.
336
+
337
+ Herramientas generales de reader/writer del repositorio, consistencia de
338
+ snapshot e índice, profiles de servidor y el dev runner opt-in:
339
+ [`general-repo-mcp.md`](docs/reference-configs/general-repo-mcp.md). Profile
340
+ de direct-coding:
341
+ [`chatgpt-coding-mcp.md`](docs/reference-configs/chatgpt-coding-mcp.md).
342
+ Operaciones de index-stale, CodeGraph caído y rollback:
343
+ [`general-repo-mcp-codegraph.md`](deploy/runbooks/general-repo-mcp-codegraph.md).
344
+
345
+ ## Revisión del trabajo
346
+
347
+ Empieza por `tasks/reviews/<task>.review.md`. Su `## Human Review Card` es
348
+ la superficie de decisión de una sola pantalla: verdict, change type,
349
+ archivos previstos vs reales, comandos que pasaron, external acceptance,
350
+ riesgo residual, acción del reviewer y rollback. Luego inspecciona el
351
+ contract activo, el último trace en `.ai/harness/checks/latest.json` y los
352
+ archivos modificados. Acepta solo cuando la review recomiende pass, el
353
+ verdict de la card sea pass, y el external acceptance sea pass,
354
+ `not_required`, o un override explícito.
355
+
356
+ Los agentes leen los artefactos fuente antes que los resúmenes derivados:
357
+
358
+ | El agente lee primero | El humano revisa primero |
359
+ | --- | --- |
360
+ | El prompt actual del usuario y los archivos referenciados | Human Review Card de `tasks/reviews/<task>.review.md` |
361
+ | `AGENTS.md` / `CLAUDE.md` | Archivos modificados y el diff |
362
+ | Plan activo en `.ai/harness/active-plan` | Allowed paths y exit criteria del contract activo |
363
+ | Contract activo en `tasks/contracts/` | `.ai/harness/checks/latest.json` y el run trace |
364
+ | Último handoff en `.ai/harness/handoff/` | Riesgos residuales y rollback |
437
365
 
366
+ `tasks/current.md` es solo un snapshot de orientación. Si discrepa del plan
367
+ activo, el contract, la review, los checks o el handoff, ganan los
368
+ artefactos fuente.
438
369
 
439
- ### Atribución de contribuidor en GitHub
370
+ Los validadores runtime-heavy (Unity, browser E2E, simuladores móviles,
371
+ hardware rigs, staging smoke tests) pueden publicar manifiestos de external
372
+ verification bajo la superficie ignorada de run-evidence — hoy una
373
+ convención manual, no un gate automático de `repo-harness check`. Ver
374
+ [external tooling](docs/reference-configs/external-tooling.md#external-verification-evidence).
440
375
 
441
- Cuando Codex contribuya materialmente a un commit, usa el trailer co-author estándar de GitHub al final del commit message:
376
+ ## Skills
442
377
 
443
- ```text
444
- Co-authored-by: codex <codex@openai.com>
445
- ```
378
+ Los packages canónicos rule-owner viven bajo `assets/skills/` y
379
+ `assets/skill-commands/`, manteniendo acotado el discovery de skills del
380
+ host mientras el CLI y los hooks poseen la ejecución.
446
381
 
447
- 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.
448
-
449
- ## Action Command Skills
450
-
451
- Los packages canónicos están en `assets/skills/` (packages canónicos
452
- activados) y en `assets/skill-commands/` (sobrevivientes que evolucionan en su
453
- sitio); preservan el alcance de discovery por skills, mientras el CLI y los
454
- hooks ejecutan:
455
-
456
- - Router: `repo-harness` (Skill raíz, sincronizado sin condición en cada
457
- profile)
458
- - Capa setup: `repo-harness-setup` (modos init, migrate, upgrade,
459
- repair, scaffold, y capability-configuration; router-only, nunca
460
- descubierto automáticamente por un profile)
461
- - Planning: `repo-harness-plan` (crea un plan decision-complete, o revisa uno
462
- existente)
463
- - Capa product planning: `repo-harness-product` (modos PRD, Sprint, y Goal; el
464
- modo PRD activa `$geju`, luego usa drafting Claude-first con `claude -p
465
- --model opus`, Codex queda solo como fallback; el modo Sprint convierte un
466
- PRD en un backlog ordenado bajo `plans/sprints/`, cada fila se expande con
467
- `$think` antes del contract flow; el modo Goal prepara prompts `/goal` de
468
- Codex/Claude desde un PRD o Sprint detallado y lo pide primero si falta)
469
- - Verificación: `repo-harness-check` (checks de workflow/release más una
470
- referencia deploy-readiness)
471
- - Release: `repo-harness-ship`
472
- - Architecture: `repo-harness-architecture`
473
- - Cross-model review: `repo-harness-cross-review` (host-aware; se instala en
474
- ambos hosts para el profile strict)
475
- - Integración ChatGPT: `repo-harness-chatgpt` (consult/continuation de Oracle
476
- browser/GPT Pro, setup de MCP Connector, bridge handoff, y read-back
477
- evidence; solo setup explícito, nunca implicado por product planning)
478
-
479
- La cadena de planning está separada por capas:
382
+ | Skill | Propósito |
383
+ | --- | --- |
384
+ | `repo-harness` | Skill router raíz, sincronizado sin condición en todo profile |
385
+ | `repo-harness-setup` | Modos init, migrate, upgrade, repair, scaffold y capability-configuration; router-only |
386
+ | `repo-harness-plan` | Crea un plan decision-complete, o revisa uno existente |
387
+ | `repo-harness-product` | Modos PRD, Sprint y Goal para el product planning de upper-layer |
388
+ | `repo-harness-check` | Checks de workflow y release, más una referencia de deploy-readiness |
389
+ | `repo-harness-ship` | Valida worktrees terminados, hace push de branches y abre PRs |
390
+ | `repo-harness-architecture` | Docs de architecture, drift requests y diagramas sin un refresh completo del harness |
391
+ | `repo-harness-cross-review` | Cross-model review independiente Claude/Codex, host-aware |
392
+ | `claude-plan` | Provider skill del lado Codex: consulta independiente en Claude plan mode para un design fork o una decisión de alto riesgo; no es un entrypoint directo de usuario |
393
+ | `repo-harness-chatgpt` | Consultas de Oracle browser/GPT Pro, setup del MCP Connector y bridge handoff; solo setup explícito |
394
+ | `merge-gate` (externo) | Gate final de exact-candidate; repo-harness no distribuye ningún Skill de merge-gate — ver [external tooling](docs/reference-configs/external-tooling.md) |
395
+
396
+ La cadena de planning está deliberadamente organizada en capas:
480
397
 
481
398
  ```text
482
- idea -> repo-harness-product (modo PRD) -> repo-harness-product (modo Sprint, from-prd) -> repo-harness-product (modo Goal)
399
+ idea -> PRD mode -> Sprint mode -> Goal mode
483
400
  ```
484
401
 
485
- Usa el modo PRD de `repo-harness-product` cuando la fuente todavía es una idea
486
- de producto: primero ejecuta un direction pass con `$geju`, luego pide a
487
- Claude vía `claude -p --model opus` que redacte el PRD, con Codex solo como
488
- fallback. Usa su modo Sprint (`from-prd <plans/prds/*.prd.md>`) para convertir
489
- un PRD aprobado en un Sprint backlog ordenado con acceptance lines
490
- verificables por máquina. Usa su modo Goal solo cuando ya exista un PRD o
491
- Sprint detallado; prepara un prompt `/goal` acotado para Codex/Claude y
492
- mantiene el PRD/Sprint como source of truth. Si falta ese documento, el modo
493
- Goal debe pedirlo antes de empezar implementación desde el chat.
402
+ `repo-harness init` es para un repositorio existente; el scaffold mode de
403
+ `repo-harness-setup` crea un proyecto o módulo nuevo. `hooks-init`,
404
+ `docs-init`, y `create-project-dirs` son pasos internos, no comandos
405
+ públicos. Boundaries de routing por modo:
406
+ [`agentic-development-flow.md`](docs/reference-configs/agentic-development-flow.md)
407
+ y `repo-harness docs show harness-overview`.
494
408
 
495
- `repo-harness init` se usa para repositorios existentes; el modo scaffold de
496
- `repo-harness-setup` queda para crear proyectos o módulos nuevos. `hooks-init`,
497
- `docs-init` y `create-project-dirs` son pasos internos, no commands públicos.
409
+ ## Referencia para mantenedores
498
410
 
499
- ## Maintainer Reference
500
-
501
- Quienes editan el propio paquete necesitan un checkout del código fuente:
411
+ Editar el paquete en sí requiere un checkout del source:
502
412
 
503
413
  ```bash
504
414
  git clone https://github.com/Ancienttwo/repo-harness.git ~/Projects/repo-harness
505
- cd ~/Projects/repo-harness
506
- bun src/cli/index.ts update
415
+ cd ~/Projects/repo-harness && bun src/cli/index.ts update
507
416
  ```
508
417
 
509
- `~/Projects/repo-harness` es la única source of truth editable; las rutas locales
510
- de Claude/Codex (`~/.claude/skills/repo-harness`, `~/.codex/skills/repo-harness`)
511
- son runtime entrypoints respaldados por symlinks. Solo
512
- `~/.codex/skills/repo-harness` expone `SKILL.md` y `assets/skill-commands/`;
513
- `scripts/sync-codex-installed-copies.sh` reconstruye estos alias y elimina los
514
- directorios retirados `repo-harness-skill` / `project-initializer`. El script
515
- enlaza las rutas al repo fuente por defecto; usa
516
- `AGENTIC_DEV_LINK_INSTALLED_COPIES=0` para staging por copia, o
517
- `CODEX_SKILLS_ROOT` / `CLAUDE_SKILLS_ROOT` para raíces alternativas.
518
-
519
- ### Verificar el workflow contract de este repositorio
418
+ Ese checkout es la única fuente de verdad editable; las rutas locales de
419
+ skill de Claude/Codex son runtime entrypoints respaldados por symlinks,
420
+ reconstruidos por `scripts/sync-codex-installed-copies.sh`.
520
421
 
521
- Ejecuta el gate completo en [Verification](#verification); `bun run check:ci` es
522
- el único comando equivalente a CI.
523
-
524
- ### Runtime reference docs
525
-
526
- Generic repo-harness runtime/reference docs live in the installed package under
527
- `assets/reference-configs/` and are resolved through the CLI:
422
+ `bun run check:ci` es el único gate equivalente a CI; `bun run check:release`
423
+ solo añade el preflight de unpublished-version de npm antes de delegar a ese
424
+ mismo gate.
528
425
 
529
426
  ```bash
530
- repo-harness docs list
531
- repo-harness docs path harness-overview
427
+ bun run check:ci # the whole gate
428
+ repo-harness docs list # runtime reference docs, resolved from the package
532
429
  repo-harness docs show harness-overview
533
- ```
534
-
535
- Los defaults del initializer y del runtime (question flow, plan menu, template
536
- vars, routing de external tooling) están documentados en `harness-overview.md`
537
- bajo **Initializer and Runtime Model**. Generated and migrated repos still keep
538
- `docs/reference-configs/*.md`, but those files are deterministic pointer stubs.
539
- Repo-local workflow state, policy, checks, runs, handoff packets, context maps,
540
- and helper snapshots stay under `.ai/`.
541
-
542
- ### Template assembly
543
-
544
- ```bash
545
430
  bun scripts/assemble-template.ts --plan C --name "MyProject"
546
- bun scripts/assemble-template.ts --target agents --plan C --name "MyProject"
547
- ```
548
-
549
- ### Verification
550
-
551
- ```bash
552
- bun test
553
- bash scripts/check-task-sync.sh
554
- bash scripts/check-task-workflow.sh --strict
555
- bun scripts/inspect-project-state.ts --repo . --format text
556
- bun src/cli/index.ts init --repo . --dry-run
557
- bash scripts/check-agent-tooling.sh --host both --check-updates
558
- bun run benchmark:skills --eval route-workflow-check
559
431
  ```
560
432
 
433
+ Los cambios de hook actualizan `assets/hooks/` canónico una vez, y luego
434
+ corren `bun run sync:hooks` con `bun run check:hooks` en la verificación. Los
435
+ reference docs son canónicos bajo `assets/reference-configs/` y se proyectan
436
+ en `docs/reference-configs/`; `bun run check:reference-configs` verifica esa
437
+ proyección.
561
438
 
562
- ### Local benchmark skeleton
439
+ ## Agradecimientos
563
440
 
564
- ```bash
565
- bun run benchmark:skills --eval route-workflow-check
566
- ```
441
+ `repo-harness` está construido alrededor de un pequeño conjunto de skills,
442
+ repos y agent runtimes externos que dieron forma al workflow contract. No
443
+ son dependencias empaquetadas ordinarias.
567
444
 
568
- Eval output is the release/readiness evidence path; dry-run benchmark wiring is only a smoke and is not skill-effectiveness evidence.
445
+ | Herramienta o repo | Usado para | Forma de la dependencia |
446
+ | --- | --- | --- |
447
+ | [Hylarucoder](https://x.com/hylarucoder) / Geju | El método de due diligence P1/P2/P3 y la práctica Geju que dieron forma a la disciplina de planning, tracing y decision-rationale de este workflow | Contribución metodológica y agradecimiento; no es una dependencia empaquetada |
448
+ | Waza de [TW93](https://x.com/HiTw93), incluyendo `think`, `hunt`, `check` y `health` | Planning diario, bug hunts, verificación, health checks y sync de skill Codex-first | Instalado a través del skills CLI en los host skill roots |
449
+ | `mermaid` | Diagramas de architecture y system-flow legibles por humanos cuando Mermaid no alcanza | Skill runtime-referenced, no vendored en los repos generados |
450
+ | CodeGraph (`@colbymchenry/codegraph`) | Navegación symbol-aware, impact tracing y readiness checks para este repo self-host | Dev dependency en este repo; los repos generados se mantienen global-MCP-first salvo que la policy haga opt-in |
451
+ | [Oracle](https://github.com/steipete/oracle) de [Peter Steinberger](https://x.com/steipete) (`@steipete/oracle`, MIT) | Motor de consulta de navegador GPT Pro / ChatGPT Web por defecto, al que el Oracle provider `chatgpt-browser` invoca externamente (shell out) para las consultas `gptpro` | Binario resuelto externamente (`--oracle-bin`, `REPO_HARNESS_ORACLE_BIN`, `node_modules/.bin`, o `PATH`); nunca se descarga automáticamente, y un binario ausente es un fallo duro de `ORACLE_NOT_INSTALLED` |
452
+ | OpenAI Codex | Agente de ejecución primario para implementación repo-local, verificación y GitHub contributor attribution cuando un commit incluye materialmente trabajo escrito por Codex | Un runtime de agente externo; la atribución es un trailer de commit explícito, no automatización oculta de hooks |
569
453
 
454
+ ### Atribución de contribuidor en GitHub
570
455
 
571
- ### Run one eval across both Claude and Codex
456
+ Cuando Codex contribuye materialmente a un commit, usa el trailer estándar
457
+ de co-author de GitHub al final del mensaje:
572
458
 
573
- ```bash
574
- bun run benchmark:skills --eval repair-agents-task-sync
459
+ ```text
460
+ Co-authored-by: codex <codex@openai.com>
575
461
  ```
576
462
 
577
- ## Key Files
578
-
579
- - Skill spec: `SKILL.md`
580
- - Root routing docs: `CLAUDE.md`, `AGENTS.md`
581
- - Plan mapping: `assets/plan-map.json`
582
- - Question-pack: `assets/initializer-question-pack.v4.json`
583
- - Shared hooks: `assets/hooks/`
584
- - Runtime reference docs: `assets/reference-configs/` via `repo-harness docs`
585
- - Workflow contract: `assets/workflow-contract.v1.json`
586
- - Hook operations reference: `docs/reference-configs/hook-operations.md`
587
- - Template assembler: `scripts/assemble-template.ts`
588
- - State inspector: `scripts/inspect-project-state.ts`
589
- - External tooling detector: `scripts/check-agent-tooling.sh`
590
- - Scaffolding scripts:
591
- - `scripts/init-project.sh`
592
- - `scripts/create-project-dirs.sh`
593
- - Canonical adoption planner: `src/core/adoption/standard-plan.ts`
594
-
595
- ## Generated vs Self-Hosted Hook Projection
596
-
597
- - El comportamiento downstream de hooks lo define la salida generada desde `assets/hooks/` y `assets/reference-configs/`.
598
- - 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.
599
- - Todo cambio de hook debe indicar si afecta a `self-host`, `generated` o `both`.
600
-
601
- ## Package Manager Defaults
602
-
603
- - Prioridad general por defecto: `bun > pnpm > npm`
604
- - **Plan G/H** (Python-centric) usa **`uv`** como primary package manager por defecto.
463
+ Mantén esta atribución opt-in y visible por commit. No la incorpores en
464
+ commit scripts o hooks downstream de repo-harness a menos que ese
465
+ repositorio adopte la misma política.
605
466
 
606
- ## Runtime Profiles
467
+ ## Versión actual
607
468
 
608
- - `Plan-only (recommended)` (default)
609
- - `Plan + Permissionless`
610
- - `Standard (ask before each action)`
469
+ - Paquete npm: `repo-harness@0.12.2`
470
+ - Sello de workflow generado: `repo-harness@0.12.2+template@0.12.2`
471
+ - Repositorio de GitHub: `Ancienttwo/repo-harness`
472
+ - Notas de versión e historial: [`docs/CHANGELOG.md`](docs/CHANGELOG.md)
611
473
 
612
- Se configura en `assets/initializer-question-pack.v4.json` y lo consume `scripts/initializer-question-pack.ts`.
474
+ ## Licencia
613
475
 
614
- ## Verification
615
-
616
- Para release review usa el gate único equivalente a CI:
617
-
618
- ```bash
619
- bun run check:ci
620
- ```
621
-
622
- 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.
623
-
624
- ```bash
625
- bun test
626
- bash scripts/check-deploy-sql-order.sh
627
- bash scripts/check-architecture-sync.sh
628
- bash scripts/check-task-sync.sh
629
- bash scripts/check-task-workflow.sh --strict
630
- bun scripts/inspect-project-state.ts --repo . --format text
631
- bun src/cli/index.ts init --repo . --dry-run
632
- bash scripts/check-agent-tooling.sh --host both --check-updates
633
- bun run benchmark:skills --eval route-workflow-check
634
- ```
476
+ MIT — ver [`LICENSE`](LICENSE).