Soy Fernando Gómez y construí Custom Harness para convertir el trabajo con agentes de código en un proceso que puedas entender, adaptar y gobernar. Coordina leader, implementer y reviewer sin quitarte el control sobre las decisiones ni sobre tu repositorio.
Lo hice porque la velocidad no sirve de mucho cuando un mismo agente planea, implementa y aprueba su propio trabajo. La separación de roles, las pruebas y una revisión independiente devuelven al desarrollo con IA los límites que exige la ingeniería real.
Mi filosofía es sencilla: herramientas pequeñas, componibles y fáciles de cambiar. El harness aporta disciplina sin adueñarse de tu proceso; tú defines las políticas, el contexto y el nivel de autonomía.
Los agentes de código pueden avanzar rápido y aun así dejar un resultado difícil de confiar: el mismo agente planea, implementa y aprueba; las tareas grandes consumen el contexto; una validación tardía descubre cambios parciales; y cada repositorio termina copiando reglas que pertenecían a otro proyecto.
Custom Harness convierte ese trabajo en un ciclo explícito y verificable:
init → análisis → implementación → pruebas → reviewer → correcciones → init final
El proyecto combina dos piezas distintas:
- Una skill para el agente: enseña a clasificar tareas, separar responsabilidades y respetar las políticas del repositorio consumidor.
- Un instalador de harness: aplica archivos concretos de coordinación al repositorio objetivo mediante plantillas para Codex, Claude Code o Cursor.
Instalar la skill no modifica automáticamente tu repositorio. Aplicar las plantillas sí crea archivos en el target, siempre después de un preflight visible.
- Evita que el leader implemente o apruebe su propio trabajo.
- Clasifica solicitudes como
small,mediumolargesegún alcance y riesgo. - Delega cambios al implementer y exige revisión independiente del reviewer.
- Conserva estado en
.harness/task-status.jsony continuidad en.harness/context/task-context.toon. - Mantiene comandos, permisos, rutas protegidas e idioma como políticas configurables del consumidor.
- Detiene la instalación ante colisiones, symlinks, hardlinks o rutas de backup inseguras.
- Ofrece
--dry-run, instalación idempotente y validación semántica de los adaptadores.
| Responsabilidad | Contrato |
|---|---|
| Leader | Clasifica, registra, delega y coordina. No implementa ni se autoaprueba. |
| Implementer | Modifica solo el alcance delegado, preserva cambios existentes y ejecuta pruebas. |
| Reviewer | Revisa sin editar, aporta evidencia y aprueba o rechaza explícitamente. |
La clasificación orienta el nivel de razonamiento y el grado de coordinación, sin fijar nombres de modelos que una plataforma podría no ofrecer:
| Clase | Señales típicas |
|---|---|
small |
Cambio localizado, bajo riesgo y pocos archivos. |
medium |
Varios archivos, una integración o ambigüedad moderada. |
large |
Arquitectura transversal, persistencia, seguridad, distribución o alto impacto. |
Solo el leader puede marcar una tarea como done, y únicamente cuando el reviewer aprobó y el init final pasó.
El CLI de skills.sh permite seleccionar la skill y el agente de destino:
npx skills@latest add Axus00/skillsSelecciona custom-harness y Codex, Claude Code o Cursor según tu entorno. Después puedes pedir al agente que use custom-harness para adaptar un repositorio.
Este comando instala conocimiento para el agente. No ejecuta por sí solo el instalador Python sobre tu proyecto.
Esta vía es la más transparente para inspeccionar, desarrollar y ejecutar los scripts directamente:
git clone https://github.com/Axus00/skills.git
cd skills
./init.shRequisitos para los scripts locales:
- Python 3.
- Bash para
init.sh, o PowerShell parainit.ps1. - Node.js únicamente si eliges la instalación mediante
npx skills.
Ejecuta estos comandos desde el clone de skills. Sustituye /ruta/al/proyecto por el repositorio consumidor.
python3 custom-harness/scripts/install_harness.py \
--target /ruta/al/proyecto \
--platform codex \
--dry-runEl dry-run muestra el plan completo sin escribir. Si encuentra contenido diferente o una ruta estructural insegura, informa una colisión y aborta.
python3 custom-harness/scripts/install_harness.py \
--target /ruta/al/proyecto \
--platform codexPuedes repetir --platform para generar varios adaptadores en una sola operación:
python3 custom-harness/scripts/install_harness.py \
--target /ruta/al/proyecto \
--platform codex \
--platform claude \
--platform cursorpython3 custom-harness/scripts/validate_harness.py \
--target /ruta/al/proyecto \
--platform codexPara varios adaptadores, repite --platform igual que durante la instalación. La validación comprueba estructura, contratos por rol, ciclo de trabajo, estado, checkpoint y gates de finalización.
Todos los adaptadores conservan las mismas invariantes, pero usan las convenciones de cada producto:
| Plataforma | Archivos principales | Consideración |
|---|---|---|
| Codex | AGENTS.md y .agents/{leader,implementer,reviewer}.md |
Aprovecha coordinación de subagentes cuando está disponible. |
| Claude Code | CLAUDE.md y .claude/agents/*.md |
Define agentes nativos con herramientas acordes a cada rol. |
| Cursor | .cursor/rules/custom-harness.mdc |
Si no hay subagentes aislados, exige pases separados y registra la degradación. |
Los tres comparten:
.harness/config.toml.harness/task-status.json.harness/context/task-context.toon
El instalador es idempotente: volver a ejecutarlo con el mismo contenido produce operaciones unchanged.
Para actualizar desde el código fuente:
git pull --ff-only
python3 custom-harness/scripts/install_harness.py \
--target /ruta/al/proyecto \
--platform codex \
--dry-runSi aceptas reemplazar archivos divergentes, ejecuta de nuevo con --force. Esta opción es deliberadamente explícita y crea respaldos confinados al target en .harness/backups/ antes de reemplazar:
python3 custom-harness/scripts/install_harness.py \
--target /ruta/al/proyecto \
--platform codex \
--forceNo existe todavía un comando automático de desinstalación. Para retirar el harness, revisa el diff y restaura o elimina únicamente los archivos generados mediante tu sistema de control de versiones. No borres .harness/ sin comprobar antes si contiene estado o configuración que quieras conservar.
Skill y políticas del consumidor
│
▼
Core independiente
clasificación · workflow · estado
│
┌───────┼────────┐
▼ ▼ ▼
Codex Claude Cursor
│ │ │
└──── validación ┘
El core define invariantes y estado; .harness/config.toml conserva decisiones del consumidor; los adaptadores cambian sintaxis y capacidades, no el significado del flujo. Las referencias técnicas están dentro de custom-harness/references/.
- Las instrucciones de sistema, usuario y repositorio siempre tienen prioridad sobre los defaults del harness.
- El instalador preflighta destinos y backups antes de mutar archivos.
- Las colisiones abortan toda la operación por defecto;
--forcerequiere una decisión explícita. - Symlinks, destinos con múltiples hardlinks, ancestros inválidos y backups fuera del target se rechazan.
- La configuración no se ejecuta como comandos durante la instalación.
- Estado y checkpoints no deben contener secretos, tokens, credenciales ni payloads sensibles.
- Una tarea no puede pasar a
donesin review aprobada y validación final exitosa.
.
├── custom-harness/
│ ├── SKILL.md
│ ├── agents/openai.yaml
│ ├── assets/templates/
│ ├── references/
│ ├── scripts/
│ └── tests/
├── .agents/
├── assets/axus-profile.jpeg
├── AGENTS.md
├── init.sh
└── init.ps1
Hoy el repositorio ofrece una skill válida y un CLI Python local. Los siguientes canales están diseñados, pero aún no están publicados:
- Un paquete npm común consumible mediante npm/npx, pnpm y Bun.
- Una .NET tool distribuida como paquete NuGet separado.
- Versionado sincronizado y pruebas de conformidad sobre el mismo core para ambos wrappers.
Hasta que esos artefactos existan, usa npx skills para instalar la skill o clona este repositorio para aplicar el harness con Python.
Las contribuciones son bienvenidas. Antes de abrir un pull request:
- Mantén el core independiente del framework y coloca las políticas específicas en el consumidor.
- Añade regresiones para cualquier cambio de comportamiento.
- Ejecuta
./init.sh. - Comprueba que el instalador siga siendo idempotente y que los tres adaptadores conserven sus invariantes.
- Usa Conventional Commits para describir el cambio.
Publicado bajo la licencia MIT.
Creado y mantenido por Fernando Gómez — @Axus00.
Si este enfoque te resulta útil, adapta las políticas a tu equipo, prueba el flujo en un repositorio real y comparte los casos en los que el harness todavía pueda ser más claro o seguro.
