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 +366 -524
- package/README.fr.md +349 -517
- package/README.ja.md +372 -499
- package/README.md +289 -710
- package/README.zh-CN.md +345 -557
- package/agents/fleet/gatekeeper.md +3 -3
- package/assets/reference-configs/external-tooling.md +55 -14
- package/assets/reference-configs/harness-overview.md +37 -0
- package/assets/reference-configs/hook-operations.md +11 -0
- package/assets/skill-version.json +10 -2
- package/assets/templates/helpers/check-agent-tooling.sh +65 -5
- package/assets/templates/helpers/ensure-task-workflow.sh +2 -2
- package/assets/templates/helpers/install-agent-fleet.sh +3 -1
- package/assets/templates/helpers/run-bounded-verifier-command.ts +18 -0
- package/assets/templates/helpers/verify-sprint.sh +13 -1
- package/package.json +2 -2
- package/scripts/check-agent-tooling.sh +65 -5
- package/scripts/ensure-task-workflow.sh +2 -2
- package/scripts/install-agent-fleet.sh +3 -1
- package/scripts/lib/project-init-lib.sh +2 -2
- package/scripts/run-bounded-verifier-command.ts +18 -0
- package/scripts/verify-sprint.sh +13 -1
- package/src/cli/hook/command-observed.ts +13 -0
- package/src/cli/hook/event-telemetry.ts +9 -7
- package/src/cli/hook/handler-registry.ts +2 -1
- package/src/cli/hook/run-identity.ts +173 -0
- package/src/cli/hook/session-context.ts +61 -6
- package/src/cli/hook/subagent-handler.ts +10 -3
package/README.es.md
CHANGED
|
@@ -1,200 +1,50 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
2
|
|
|
3
|
-
|
|
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
|
-
|
|
5
|
+
### Un flujo de trabajo repetible y basado en archivos para sesiones de programación con Claude y Codex
|
|
10
6
|
|
|
11
|
-
-
|
|
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
|
-
|
|
18
|
-
|
|
9
|
+
[](https://www.npmjs.com/package/repo-harness)
|
|
10
|
+
[](https://opensource.org/licenses/MIT)
|
|
11
|
+
[](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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
181
|
-
|
|
182
|
-
|
|
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
|
-
##
|
|
25
|
+
## Índice
|
|
185
26
|
|
|
186
|
-
|
|
187
|
-
|
|
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
|
-
|
|
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
|
-
|
|
196
|
-
|
|
197
|
-
|
|
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
|
-
|
|
208
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
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
|
-
|
|
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
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
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
|
-
|
|
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
|
-
|
|
270
|
-
[`docs/reference-configs/hook-operations.md`](docs/reference-configs/hook-operations.md).
|
|
104
|
+
### Así se ve el éxito
|
|
271
105
|
|
|
272
|
-
|
|
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
|
-
|
|
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
|
|
286
|
-
repo-harness
|
|
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
|
-
|
|
290
|
-
con la URL `/mcp`. La guía generada se escribe en:
|
|
124
|
+
## Por qué usar repo-harness
|
|
291
125
|
|
|
292
|
-
|
|
293
|
-
|
|
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
|
-
|
|
146
|
+
En un repositorio adoptado, la superficie se mantiene intencionalmente
|
|
147
|
+
pequeña:
|
|
297
148
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
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
|
-
|
|
156
|
+
## Características clave
|
|
305
157
|
|
|
306
|
-
|
|
307
|
-
|
|
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
|
-
|
|
168
|
+
## Cómo funciona
|
|
311
169
|
|
|
312
|
-
|
|
313
|
-
|
|
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
|
-
|
|
317
|
-
|
|
318
|
-
|
|
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
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
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
|
-
|
|
327
|
-
|
|
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
|
-
|
|
331
|
-
|
|
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
|
-
|
|
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
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
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
|
-
|
|
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
|
-
|
|
346
|
-
|
|
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 |
|
|
280
|
+
| Route | Matcher | Handler | Function |
|
|
349
281
|
| --- | --- | --- | --- |
|
|
350
|
-
| `SessionStart.default` | all sessions | `src/cli/hook/session-context.ts` (in-process builder) |
|
|
351
|
-
| `PreToolUse.edit` | `Edit
|
|
352
|
-
| `PreToolUse.subagent` | `Task
|
|
353
|
-
| `PostToolUse.edit` | `Edit
|
|
354
|
-
| `PostToolUse.bash` | `Bash` | `command-observed` |
|
|
355
|
-
| `PostToolUse.always` | all tools | `trace-observer` |
|
|
356
|
-
| `UserPromptSubmit.default` | all prompts | `prompt` |
|
|
357
|
-
| `Stop.default` | session stop | `src/cli/hook/stop-handler.ts` (in-process handler) |
|
|
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
|
-
|
|
314
|
+
## Conector MCP
|
|
360
315
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
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
|
-
|
|
371
|
-
|
|
372
|
-
|
|
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
|
-
|
|
383
|
-
|
|
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
|
-
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
-
|
|
401
|
-
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
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
|
-
|
|
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
|
-
|
|
376
|
+
## Skills
|
|
442
377
|
|
|
443
|
-
|
|
444
|
-
|
|
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
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
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 ->
|
|
399
|
+
idea -> PRD mode -> Sprint mode -> Goal mode
|
|
483
400
|
```
|
|
484
401
|
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
510
|
-
de Claude/Codex
|
|
511
|
-
|
|
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
|
-
|
|
522
|
-
el
|
|
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
|
-
|
|
531
|
-
repo-harness docs
|
|
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
|
-
|
|
439
|
+
## Agradecimientos
|
|
563
440
|
|
|
564
|
-
|
|
565
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
```
|
|
574
|
-
|
|
459
|
+
```text
|
|
460
|
+
Co-authored-by: codex <codex@openai.com>
|
|
575
461
|
```
|
|
576
462
|
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
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
|
-
##
|
|
467
|
+
## Versión actual
|
|
607
468
|
|
|
608
|
-
- `
|
|
609
|
-
-
|
|
610
|
-
-
|
|
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
|
-
|
|
474
|
+
## Licencia
|
|
613
475
|
|
|
614
|
-
|
|
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).
|