Epic Harness

Un arnés de agente de codificación IA autoevolutivo — 3 comandos, 26 skills, 1 pipeline autónomo, aprende de tus fallos.

Menos que memorizar. Más inteligencia por tecla pulsada. Se vuelve más inteligente cada sesión.

English | 日本語 | 한국어 | Deutsch | Français | 简体中文 | 繁體中文 | Português | Español | हिन्दी

Stars Forks Issues Last commit

License Version Rust Claude Code Buy Me a Coffee

Un plugin de Claude Code que **consolida más de 30 comandos en 3 comandos + 26 skills de activación automática**, y **evoluciona nuevas habilidades** a partir de tus propios patrones de fallo.

características de epic harness

--- ![Demo](../../docs/demo/demo.gif) ### Panel web — se inicia automáticamente al comenzar la sesión 10 pantallas con métricas en tiempo real para puntuaciones eval, estadísticas de herramientas, pipelines de orbit, habilidades evolucionadas y estado de hooks. Se abre automáticamente con la primera sesión de Claude Code — sin configuración manual necesaria.

Dashboard Orbit Pipeline

```bash # Se inicia automáticamente en la primera sesión (predeterminado: http://localhost:7700) # Configura el puerto o desactívalo en ~/.harness/config.toml: [dashboard] port = 7700 # establece a 0 para desactivar el inicio automático auto_open = true # abrir navegador en la primera sesión ``` Pantallas: **Dashboard** · Pipeline de /orbit · Comandos (3) · Skills (26) · Agentes en vivo · Eval & Evolve · Hooks (6) · Integraciones (6) · harness-mem · Configuración --- ## Qué hace Un comando lleva una funcionalidad de extremo a extremo. Las habilidades se activan sin que tú las pidas. El agente se vuelve más inteligente después de cada sesión. ```bash $ /orbit "Agregar autenticación JWT a la API de login" → spec approved → go (TDD subagents) → check (PASS) → ship (PR + CI) → evolve ``` O invoca las skills del pipeline directamente: ```bash /spec "Agregar autenticación JWT a la API de login" # aclara requisitos → SPEC-*.md /go # planificación automática → subagentes TDD → 4 min /check # revisión paralela + seguridad + pruebas → PASS /ship # prueba aislada → PR → CI en verde ``` Las habilidades se activan automáticamente en segundo plano — sin comandos extra: ``` ¿Construyendo una funcionalidad? → tdd se activa (Red→Green→Refactor obligatorio) ¿Falló una prueba? → debug se activa (primero causa raíz, sin parches al azar) ¿Tocaste auth o BD? → secure se activa (checklist OWASP, sin atajos) ¿Archivo con más de 200 líneas? → simplify se activa (extraer, renombrar, reducir) ``` Al cerrar la sesión, el **bucle evolve** analiza qué falló, genera habilidades enfocadas y las carga en la siguiente sesión. El agente que tuvo problemas con fallos de build de TypeScript tendrá una habilidad `evo-ts-care` la próxima vez. --- ## Instalación > **¿Primera vez?** Lee la [Guía de inicio rápido (5 min)](../../docs/quickstart.md). epic-harness se distribuye como **plugin** — las skills, hooks y el servidor MCP `harness-mem` se cargan directamente desde el diseño del plugin (`skills/`, `hooks.json`, `mcp_config.json`). No hay subcomando `install`; cada herramienta lee el plugin desde el disco. ### Claude Code (recomendado) ``` /plugin marketplace add epicsagas/plugins /plugin install epic@epicsagas ``` Instala automáticamente el binario, las skills, los hooks y el servidor MCP `harness-mem` en un solo paso. ### Codex CLI ```bash codex plugin marketplace add epicsagas/plugins ``` Las skills y agentes están disponibles inmediatamente — no se necesitan pasos adicionales. ### agy (Antigravity CLI) ```bash agy plugin install . ``` Las 27 skills, los hooks y el servidor MCP `harness-mem` se descubren automáticamente desde `plugin.json` + `skills/` + `hooks.json` + `mcp_config.json` del plugin. ### Solo binario (sin host de plugin) ```bash brew install epicsagas/tap/epic-harness # macOS / Linux (Homebrew) cargo binstall epic-harness # binario precompilado (Rust) cargo install epic-harness # compilar desde el código fuente ``` ¿No tienes Homebrew? Usa el script de instalación: ```bash curl --proto '=https' --tlsv1.2 -LsSf \ https://github.com/epicsagas/epic-harness/releases/latest/download/install.sh | sh ``` Windows: ```powershell irm https://github.com/epicsagas/epic-harness/releases/latest/download/install.ps1 | iex ``` El binario crea automáticamente `~/.harness/config.toml` y `HARNESS.md` en la primera ejecución del hook — sin asistente de configuración ni paso `install`. > `epic-harness --version` para verificar. Actualiza con `brew upgrade epic-harness` o vuelve a ejecutar el script de instalación. Requisitos previos: **Git**. Las instalaciones desde el código fuente o binario también necesitan el [toolchain de Rust](https://rustup.rs). ### Verificación ```bash epic --version # Binario instalado ls ~/.harness/ # Directorio de datos (creado automáticamente en la primera sesión) ``` Dentro de una sesión de Claude Code: `/evolve status` > **Telemetría**: los informes de uso están activados por defecto (opt-out). Alterna con `epic-harness telemetry status|on|off`. --- ## Telemetría epic-harness recopila **telemetría anónima** de uso por defecto (opt-out) para mejorar la fiabilidad de los hooks y la evolución de skills. Los eventos se envían a Posthog. **Lo que recopilamos:** nombre del comando, duración, resultado (éxito/fallo), clase de fallo y eventos de bloqueo/fallo de hooks — además de `product`, `product_version`, `os` y un `install_id` aleatorio (UUID generado en la primera ejecución, almacenado en `~/.config/epic-harness/install-id`). **Lo que nunca recopilamos:** código fuente, contenido de archivos, rutas de archivos, variables de entorno, secretos ni información de identificación personal. **Control:** ```bash epic-harness telemetry status # mostrar el consentimiento actual epic-harness telemetry off # desactivar (detiene todo el envío) epic-harness telemetry on # reactivar ``` El consentimiento se almacena en `~/.config/epic-harness/telemetry-consent`. Cuando está off, no se envía telemetría. --- ## Comandos | Comando | Qué hace | |---------|----------| | `/orbit` | **Pipeline autónomo completo**: spec → go → check → ship → evolve en una sola ejecución | | `/team` | Explorar librerías de la organización, contratar equipos existentes o diseñar nuevos (3–6 agentes, sincronizados a `.claude/agents/`) | | `/evolve` | Disparador manual de evolución — analizar sesiones, ver panel, inspeccionar efectividad de habilidades, rollback | Las etapas del pipeline (`/spec`, `/go`, `/check`, `/ship`, `/discover`) ahora son **skills** — se activan automáticamente según el contexto o se pueden invocar por nombre. Los nombres antiguos de comandos siguen funcionando mediante enrutamiento de alias. --- ## /orbit — Pipeline Autónomo `/orbit` envuelve todo el pipeline en una única ejecución autónoma. Elige un modo — todo lo demás es automático hasta el PR. ```mermaid flowchart TD START(["/orbit"]) --> MODE{"requirement?"}:::human MODE -->|"unclear"| WAIT["Interactive\n/discover → /spec\nthen 'orbit go'"]:::human MODE -->|"clear + complex"| COUNCIL["Council\n4-voice auto-spec"]:::auto MODE -->|"clear + simple"| DIRECT["Direct\nauto-spec"]:::auto WAIT --> SPEC_LOAD["Load spec"] COUNCIL --> SPEC_LOAD DIRECT --> SPEC_LOAD SPEC_LOAD --> GO["Go\nplan → TDD → integrate"]:::auto GO --> CHECK["Check\nreview + audit + test"]:::auto CHECK -->|"PASS / WARN"| SHIP["Ship\nisolated test → PR → CI"]:::auto CHECK -->|FAIL| RETRY{"retry < 3?"} RETRY -->|yes| GO RETRY -->|no| PAUSE["Pause\nuser decides"]:::human PAUSE -->|continue| GO PAUSE -->|abort| ABORT(["Abort"]) SHIP --> EVOLVE["Evolve\nauto-analyze session"]:::auto EVOLVE --> DONE(["Orbit Complete\nconsolidated report"]):::auto classDef human fill:#4a4a6a,stroke:#9b9bcc,color:#fff classDef auto fill:#1a5c3a,stroke:#4caf7d,color:#fff ``` **Morado** — pasos humanos: selección de modo (requerimiento poco claro → interactivo), pausa por 3 fallos de check. **Verde** — claro + complejo → council auto-spec; claro + simple → construcción directa; ambos completamente autónomos. Estado persistido en `$HARNESS_DIR/orbit/PIPELINE-{timestamp}.json` — sobrevive a la compactación del contexto. > **Advertencias**: El agente puede omitir el pipeline cuando modifica orbit mismo o cuando solo edita documentación. Consulta [Problemas conocidos (Juicio del agente)](#problemas-conocidos-juicio-del-agente). --- ## Habilidades Automáticas (Ring 2) Las habilidades se activan automáticamente según el contexto. No las invocas tú. | Habilidad | Se activa cuando | |-----------|-----------------| | **spec** | Necesita definir requisitos — convierte a documento R + AC numerado | | **go** | Fase de build — planificación automática → sub-agentes TDD → ejecución paralela → verificación AC | | **check** | Fase de revisión — revisión de código paralela + auditoría de seguridad + tests con extras por ámbito | | **ship** | Fase de entrega — test aislado → PR con informe completo → monitorización CI + auto-fix | | **audit** | Auditoría completa — revisión paralela de calidad de código + seguridad + tests con deduplicación semántica | | **eval** | Evaluación de regresión de calidad con comparación de línea base — corrección, rendimiento, calidad | | **tdd** | Implementación de nueva funcionalidad o corrección de errores | | **debug** | Fallo de prueba o error en tiempo de ejecución | | **discover** | Solicitud vaga, solución sin problema, queja desenfocada | | **secure** | Código de auth / BD / API / secrets modificado | | **threat-model** | Alcance de seguridad — enumeración de límites de confianza, actores de amenazas, escenarios → THREAT_MODEL.md | | **vuln-scan** | Escaneo sistemático de vulnerabilidades — inyección, auth, exposición de datos, dependencias → VULN-FINDINGS.json | | **triage** | Validación adversarial — ajuste de severidad, análisis de encadenamiento, agrupación por causa raíz → TRIAGE.json | | **perf** | Bucles, consultas, renderizado, operaciones por lotes | | **simplify** | Archivo > 200 líneas o alta complejidad ciclomática | | **document** | API pública añadida o firma modificada | | **verify** | Antes de completar `/go` o `/ship` | | **context** | Ventana de contexto > 70% | | **council** | Decisiones arquitectónicas o de diseño ambiguas | | **orchestrate** | Estado de orquestación multi-agente e intervención de agentes en tiempo real | | **agent-introspection** | 3+ fallos consecutivos o patrón de reintentos circular | | **reflect** | Bajo demanda: ¿estás usando la IA como amplificador del pensamiento? Autoevaluación fría basada en evidencia | | **commit** | Generación de Conventional Commits — creado automáticamente desde git diff | > **Nota sobre presupuesto de tokens:** Claude Code carga las descripciones de skills en el contexto de cada sesión. Las 26 skills de epic caben dentro del `skillListingBudgetFraction: 0.01` predeterminado (1%). Si instalas skills adicionales (ej. episteme, alcove, obscura), el total combinado puede exceder el presupuesto y provocar una advertencia de "descriptions dropped". Añade esto a `~/.claude/settings.json` para solucionarlo: > > ```json > "skillListingBudgetFraction": 0.02 > ``` > > Usa `0.03` si tienes más de 20 skills instaladas. --- ## Evolve (Ring 3) El arnés monitorea cada llamada de herramienta, la puntúa en 3 ejes, detecta patrones de fallo y genera habilidades enfocadas — automáticamente, al final de la sesión. ### Puntuación ``` composite = 0.5 × tool_success + 0.3 × output_quality + 0.2 × execution_cost ``` Clasificación de fallos (9 tipos): `type_error` · `syntax_error` · `test_fail` · `lint_fail` · `build_fail` · `permission_denied` · `timeout` · `not_found` · `runtime_error` ### Detección de Patrones | Patrón | Detecta | Umbral predeterminado | |--------|---------|----------------------| | `repeated_same_error` | Mismo error N+ veces | 3 | | `fix_then_break` | Éxito de edición → fallo de build/test | 3 lookback, 2 ciclos | | `long_debug_loop` | Atascado en el mismo archivo | 5 operaciones | | `thrashing` | Alternancia Edit↔Error | 3 ediciones, 3 errores | ### Flujo de Evolución ``` Observe (PostToolUse — puntuación en 3 ejes) ↓ obs/session_{id}.jsonl Analyze (SessionEnd) ↓ puntuaciones por herramienta, por extensión + patrones Propose (Solver — graduado por puntuación: ≥0.90 omitir, ≥0.70 moderado, <0.70 completo) ↓ SkillProposal[] con confianza Curate (Aceptar/Fusionar/Omitir, retroalimentación enmascarada del solver) ↓ evolved/{skill}/SKILL.md + meta.json Gate (verificación de formato, dedup, límite 10, promoción con puerta ≥ 3 sesiones) ↓ evolved_backup/ (mejor punto de control) Instinct (patrones de alto éxito → nodos cross-project memory.db) ↓ Reload (siguiente sesión — resume carga habilidades evolucionadas) ``` Siembra de habilidades: herramienta débil (éxito <60%, mín. 5 obs), tipo de archivo débil (éxito <50%, mín. 3 obs), error de alta frecuencia (5+ ocurrencias). Estancamiento: 3 sesiones sin una mejora del 5% → rollback automático al mejor punto de control. ### Optimización Inspirada en SkillOpt Tres técnicas inspiradas en deep learning adaptadas de [SkillOpt](https://arxiv.org/abs/2605.23904): | Técnica | Cómo funciona | |----------|--------------| | **Búfer de Retroalimentación Negativa** | Las propuestas rechazadas se almacenan con expiración basada en TTL; las propuestas futuras se verifican contra el búfer antes de la generación | | **Reflexión por Minilotes** | Las observaciones se descomponen en lotes de tamaño fijo para extracción de patrones estructurales; reutilizables cuando el error dominante ≥60% + ≥2 archivos distintos | | **Actualización Lenta/Meta** | Regresión lineal sobre las últimas 5 sesiones clasifica las épocas como Improving / Regressing / PersistentFailure / StableSuccess; auto-evicta skills con bajo rendimiento | ### Auto-Ajuste de Prompts Las habilidades evolucionadas con bajo rendimiento reciben orientación de ajuste dirigida que se añade después del delimitador ``. El contenido original nunca se modifica. 3 sesiones consecutivas en declive → rollback automático del ajuste, historial limpiado. ### Efectividad de Habilidades Cada habilidad evolucionada se rastrea con atribución A/B: ``` /evolve history → Skill Effectiveness | Skill | With | Without | Delta | |--------------------|------|---------|-------| | evo-ts-care | 0.87 | 0.72 | +15% | | evo-bash-discipline| 0.65 | 0.68 | -3% | ``` Delta positivo = efectiva. Negativo = considera eliminarla mediante `/evolve rollback`. ### Presets de Inicio en Frío En la primera sesión, los presets de habilidades apropiados para el stack se aplican automáticamente: | Stack | Presets | |-------|---------| | Node.js/TypeScript | `evo-ts-care`, `evo-fix-build-fail` | | Go | `evo-go-care` | | Python | `evo-py-care` | | Rust | `evo-rs-care` | ### Aprendizaje de Instintos Los patrones de alto éxito se extraen y promocionan entre proyectos: ``` observe (100% confirmado) → extract_instincts() → instinct node (confianza ≥ 0.8) → promover a global cuando se observe en ≥ 2 proyectos ``` ```bash /evolve # Ejecutar ahora /evolve status # Panel: puntuaciones, tendencias, patrones, habilidades /evolve history # Historial completo + efectividad de habilidades /evolve cross-project # Análisis de patrones entre proyectos /evolve rollback # Restaurar el mejor anterior /evolve reset # Borrar todos los datos de evolución ``` --- ## Pipeline de Seguridad Pipeline de evaluación de vulnerabilidades en tres etapas adaptado de [defending-code](https://github.com/anthropics/defending-code-reference-harness): ```bash /threat-model # 1. Límites de confianza, actores de amenazas, escenarios → THREAT_MODEL.md /vuln-scan # 2. Escáner de 4 dimensiones (inyección, auth, exposición de datos, dependencias) → VULN-FINDINGS.json /triage # 3. Validación adversarial, ajuste de severidad, encadenamiento → TRIAGE.json ``` ### Modo Audit `--strict` Para evaluaciones de seguridad, el modo `--strict` impone independencia entre los modos de auditoría: - Los revisores de código, seguridad y tests reciben solo el diff + spec — sin contexto del builder - Independencia de verificación cruzada: los modos se ejecutan a ciegas hasta la síntesis - Puntuación ciega para prevenir sesgo de anclaje Contexto de engagement opcional mediante `.harness/engagement.md` en la raíz del proyecto (autorización, alcance, restricciones, exclusiones). Consulta `docs/references/engagement.md` para la plantilla. --- ## Hooks (Ring 0) Se ejecutan de forma invisible en cada sesión. Binario único de Rust (`epic-harness`) con subcomandos. | Hook | Cuándo | Qué hace | |------|--------|----------| | **resume** | Inicio de sesión | Restaurar contexto, cargar memoria, detectar stack | | **guard** | Antes de Bash | Bloquear force-push-to-main, `rm -rf /`, DROP prod | | **polish** | Después de Edit | Autoformatear (Biome/Prettier/ruff/gofmt) + verificación de tipos | | **observe** | Cada uso de herramienta | Registrar en `~/.harness/projects/{slug}/obs/` para evolución | | **snapshot** | Antes de compactar | Guardar estado en `~/.harness/projects/{slug}/sessions/` | | **reflect** | Fin de sesión | Analizar fallos, sembrar habilidades evolucionadas, gate, extraer instintos | Polish retroalimenta en observe: fallo de formato → `lint_fail`, error de TypeScript → `build_fail`. El thrashing Edit→Error se detecta incluso cuando los errores provienen de polish. Cada sesión escribe su propio `session_{date}_{pid}_{random}.jsonl` — múltiples sesiones concurrentes no corromperán los datos de las demás. ### Perfiles de Hook Mediante `~/.harness/config.toml` o la variable de entorno `EPIC_HOOK_PROFILE`: | Perfil | Hooks activos | |--------|--------------| | `minimal` | guard, observe, resume | | `standard` (predeterminado) | los anteriores + polish, reflect, snapshot | | `strict` | todos los hooks + futuras verificaciones solo de strict | ### Reglas de Guard Personalizadas Añade reglas específicas del proyecto mediante `.harness/guard-rules.yaml` en la raíz de tu proyecto: ```yaml blocked: - pattern: kubectl\s+delete\s+namespace | msg: Namespace deletion blocked warned: - pattern: docker\s+system\s+prune | msg: Docker prune — verify first ``` --- ## Equipo (`epic team`) Los equipos son de **nivel de organización**, no están vinculados al proyecto. Ejecutar `/team` en cualquier proyecto enriquece un grupo compartido de definiciones de agentes — nunca sobrescribe silenciosamente. ```bash epic team # Interactivo: escanear → diseñar → escribir → sincronizar epic team sync backend # Despachar agentes → .claude/agents/backend/ epic team link backend # Despachar + registrar proyecto en la configuración del equipo epic team list # Todos los equipos en la organización actual epic team list --org netflix # Equipos en una organización nombrada epic team show backend --playbook # Configuración + playbook completo epic team delete backend # Retirar del proyecto actual solo epic team delete backend --global # Eliminar permanentemente del almacén de la organización ``` Después de sincronizar, los agentes están disponibles en la próxima sesión: `@domain-expert`, `@reviewer`, `@tester`, etc. | Tipo | Palabra clave | Agentes predeterminados | |------|--------------|------------------------| | Alineado con el flujo | `stream` | domain-expert, reviewer, tester | | Plataforma | `platform` | api-designer, infra-specialist, dx-agent | | Habilitador | `enabling` | specialist | | Subsistema complicado | `subsystem` | domain-specialist, integration-tester | Multi-organización: `epic team --org netflix` — topología separada por organización. Estrategia de fusión: los agentes modificados solicitan confirmación (predeterminado: mantener existente, respaldar en `.history/`). El playbook siempre se añade. --- ## Soporte Multi-Herramienta Todas las herramientas comparten el mismo directorio de datos `~/.harness/projects/{slug}/`. | Herramienta | Ring 0 Hooks | Comandos | Habilidades | Agentes | |-------------|-------------|----------|-------------|---------| | **Claude Code** | ✓ Completo | ✓ 3 comandos (incl. /orbit) | ✓ 26 habilidades | Live | | **Codex CLI** | ✓ Completo¹ | ✓ 3 prompts (incl. /orbit) | ✓ 26 | — | | **Antigravity** | ✓ Parcial² | ✓ 3 comandos (incl. /orbit) | ✓ 26 | — | ¹ `plugin_hooks = true` en `~/.codex/config.toml` · ² Solo PreInvocation/PostInvocation — sin PreToolUse (guard/polish no disponible) --- ## Arquitectura: Modelo de 4 Anillos ```mermaid flowchart TB subgraph R0["Ring 0 — Autopilot (hooks, invisible)"] direction LR h1(resume) --- h2(guard) --- h3(polish) --- h4(observe) --- h5(snapshot) --- h6(reflect) end subgraph R1["Ring 1 — Commands (you call these)"] direction TB subgraph orbit_wrap[" /orbit "] direction LR c1("spec") --> c2("go") --> c3("check") --> c4("ship") --> c5("evolve") end c6("/team") c7("/evolve (manual)") end subgraph R2["Ring 2 — Auto Skills (context-triggered)"] direction LR s1(spec) --- s2(go) --- s3(check) --- s4(ship) --- s5(tdd) --- s6(debug) --- s7(secure) --- s8(perf) --- s9(simplify) --- s10(verify) --- s11(audit) --- s12(eval) --- s13(threat-model) --- s14(vuln-scan) --- s15(triage) end subgraph R3["Ring 3 — Evolve (self-improving)"] direction LR e1(observe) --> e2(analyze) --> e3(seed) --> e4(gate) --> e5(reload) end R0 -->|"observe every tool call"| R3 R3 -.->|"evolved skills"| R2 R1 -->|"auto-trigger skills"| R2 R0 -->|"resume: restore context"| R1 ``` --- ## Aprendizaje Entre Proyectos Activa para compartir patrones de fallo entre proyectos: ```bash touch ~/.harness/projects/{slug}/.cross-project-enabled ``` Fin de sesión → exporta patrones anonimizados a `~/.harness/global_patterns.jsonl`. Inicio de sesión → muestra sugerencias de las áreas débiles de otros proyectos. --- ## Memoria Unificada Todos los agentes comparten un grafo de conocimiento en `~/.harness/memory.db` (SQLite con búsqueda de texto completo). Sin runtime externo. ``` score = recency(25%) + importance(35%) + access_frequency(15%) + FTS_match(25%) ``` ### CLI ```bash epic mem recall "auth refactor" --project my-project # Recuperación inteligente epic mem add --title "JWT rotation" --type decision # Añadir nodo epic mem search "JWT" # Búsqueda FTS5 epic mem list --type decision --project my-project # Filtrar epic mem context --project my-project # Contexto del proyecto epic mem serve # Interfaz web → :7700 o puerto personalizado con --port 8800 epic mem mcp-install # Registrar servidor MCP epic mem export --out ./docs/memory # Exportar a Markdown ``` ### Herramientas MCP (6) | Herramienta | Propósito | |-------------|----------| | `mem_recall` | Recuperación contextual inteligente con hint + project + vecinos del grafo | | `mem_add` | Añadir nodo con importancia automática por tipo (o explícita 0.0–1.0) | | `mem_search` | Búsqueda por palabra clave (texto completo), clasificada por importancia | | `mem_query` | Filtrar por etiqueta/tipo/proyecto | | `mem_context` | Recuperación inteligente con ámbito de proyecto (sin hint) | | `mem_related` | Traversal del grafo desde un ID de nodo (encuentra conocimiento conectado) | ### Tipos de Nodo | Tipo | Creado por | Importancia | |------|-----------|-------------| | `decision` | Manual / MCP | 0.9 | | `resolution` | Manual / MCP | 0.8 | | `concept` | Manual / MCP | 0.7 | | `project` | Manual / MCP | 0.7 | | `instinct` | Auto (reflect) | 0.7 | | `pattern` | Auto (reflect) | 0.5 | | `error` | Auto (reflect) | 0.4 | | `session` | Auto (reflect) | 0.2 | Ciclo de vida: más de 30 días sin acceso → 10% de decaimiento de importancia (mínimo 0.05). Más de 180 días → etiquetado como `stale`, excluido de la recuperación. La etiqueta `pinned` evita el decaimiento. ---
Datos del Proyecto — estructura de directorios ## Datos del Proyecto Todos los datos viven en `~/.harness/` (directorio home), no en la raíz de tu proyecto. Sobrevive a la eliminación del proyecto, no contamina el historial de git. ``` ~/.harness/ ├── memory.db # Grafo de conocimiento SQLite (nodos + aristas + FTS5) ├── graph.json # Grafo en caché (para la interfaz web) ├── config.toml # Configuración del usuario ├── global_patterns.jsonl # Patrones entre proyectos (opt-in) ├── orgs/ # Almacén global del equipo │ └── {org}/teams/{team}/ │ ├── config.json, mission.md, playbook.md, agents/, .history/ └── projects/{slug}/ ├── memory/ # Patrones y reglas del proyecto ├── sessions/ # Snapshots de sesión (para resume) ├── obs/ # Registros de observación de uso de herramientas (JSONL) ├── evolved/ # Habilidades autoevolucionadas │ ├── manifest.json │ └── {skill}/SKILL.md + meta.json ├── evolved_backup/ # Mejor punto de control (para rollback) ├── dispatch/ # Registros de despacho de habilidades ├── evolution.jsonl # Historial completo de evolución └── metrics.json # Estadísticas agregadas + atribución de habilidades ``` Comparte reglas de seguridad con tu equipo: `.harness/guard-rules.yaml` en la raíz del proyecto (comprometido en git).
---
Configuración — referencia de config.toml ## Configuración Todos los parámetros ajustables en `~/.harness/config.toml`. Ausente = valores predeterminados en el código. ```toml # Prioridad: variable de entorno (EPIC_HOOK_PROFILE) > este archivo > valores predeterminados [hook] profile = "standard" # "minimal" | "standard" | "strict" gateguard_hints = true [scoring] weights = [0.5, 0.3, 0.2] # [success, quality, cost] [evolution] max_skills = 10 stagnation_limit = 3 improvement_threshold = 0.05 gated_promotion_min = 3 [pattern] # repeated_error_min = 3 # debug_loop_min = 5 # graduated_scope_skip = 0.90 # graduated_scope_moderate = 0.70 [instinct] # confidence_threshold = 0.8 # promotion_min_projects = 2 # max_instincts = 20 # min_observations = 10 # min_avg_score = 0.5 ```
--- ## Problemas conocidos (Juicio del agente) Estos problemas surgen de la interpretación del contexto por parte del agente en lugar de errores en el código. Se listan aquí para que los usuarios sepan qué vigilar. ### Problemas descubiertos | Problema | Cuándo | Qué sucede | Solución alternativa | |----------|--------|------------|---------------------| | **Omisión de autoduplicación en orbit** | Se pide a `/orbit` que mejore orbit mismo | El agente puede omitir el pipeline de orbit completamente y editar archivos ad-hoc en main, dejando cambios sin confirmar sin spec/PR/trazabilidad | Después de que orbit complete, verifica `git status`. Si hay cambios en main sin un estado de pipeline, confirma manualmente o vuelve a ejecutar `/orbit` desde una rama separada | | **Tarea solo de docs omite el protocolo** | `/orbit` recibe un cambio solo de markdown (sin código para probar) | El agente puede juzgar las fases de TDD/test como innecesarias y omitir el pipeline completo | Aceptable para cambios puramente de documentación. Para código+docs mixtos, asegúrate de que el agente no omita las fases relacionadas con código | | **Clasificación errónea de modo** | La solicitud está en el límite entre Direct y Council | El agente puede elegir Direct cuando Council (4 voces) capturaría más casos extremos, o Council cuando Direct bastaría | Si el agente elige un modo que no parece correcto, di "usa el modo Council" o "usa el modo Direct" explícitamente | ### Decisiones de diseño intencionales Se consideraron para mejora pero se mantuvieron tal cual después de la evaluación: | Decisión | Por qué no se mejoró | Fundamento | |----------|---------------------|------------| | **Worktree entra en la fase Go, no al inicio de orbit** | Podría aislar desde el preflight | Preflight/mode/spec son de solo lectura. Aislar antes añade complejidad sin beneficio — la rama no se crea hasta la fase Go de todos modos | | **Worktree preservado después de Ship** | Podría eliminarse automáticamente al fusionar el PR | La rama es la cabeza del PR. Eliminarla antes de fusionar rompe el PR. La limpieza se deja al usuario después de la fusión | | **Rama nombrada `orbit-{slug}` no `feature/{slug}`** | Podría coincidir con la nomenclatura convencional de ramas | `EnterWorktree` no permite `/` en los nombres. Renombrar post-creación añade un paso solo por beneficio cosmético | | **Sin pipeline ligero para cambios de docs** | Podría detectar solo-docs y omitir TDD/tests | La detección es frágil (¿qué cuenta como "doc"?). Añadir una ruta separada aumenta la complejidad del protocolo para una ganancia marginal | --- ## Solución de problemas
command not found: epic después de instalar Añade el directorio bin de Cargo a tu PATH: ```bash export PATH="$HOME/.cargo/bin:$PATH" ``` Añade esta línea a tu `~/.zshrc` o `~/.bashrc` para hacerlo permanente.
Los hooks no se ejecutan en Claude Code Reinstala el plugin para recargar los hooks: ``` /plugin install epic@epicsagas ``` Luego reinicia Claude Code. Los hooks se cargan desde el `hooks.json` del plugin.
Permission denied en macOS (Gatekeeper) macOS puede bloquear binarios sin firma descargados de internet: ```bash xattr -d com.apple.quarantine ~/.cargo/bin/epic-harness xattr -d com.apple.quarantine ~/.cargo/bin/epic ```
epic: binario no encontrado dentro de los hooks del plugin El plugin busca el binario primero en `hooks/bin/epic-harness`. Después de actualizar con `cargo install`, cópialo: ```bash cp ~/.cargo/bin/epic-harness hooks/bin/epic-harness ```
--- ## Desarrollo ```bash cargo install --path . # Compilar + instalar cp ~/.cargo/bin/epic-harness hooks/bin/epic-harness # Actualizar binario del plugin cargo test # Pruebas ``` Los hooks buscan el binario en dos lugares: `hooks/bin/epic-harness` (plugin local) → `~/.cargo/bin/epic-harness` (PATH). --- ## Enlaces - [Changelog](../../CHANGELOG.md) — historial de versiones - [Contributing](../../CONTRIBUTING.md) — cómo contribuir - [Security](../../SECURITY.md) — reportar vulnerabilidades - [Issues](https://github.com/epicsagas/epic-harness/issues) — informes de errores y solicitudes de funcionalidades ## Agradecimientos - [a-evolve](https://github.com/A-EVO-Lab/a-evolve) — Patrones de evolución automatizada y benchmarks - [agent-skills](https://github.com/addyosmani/agent-skills) — Sistema de habilidades de agente de Claude Code - [everything-claude-code](https://github.com/affaan-m/everything-claude-code) — Patrones exhaustivos de Claude Code - [gstack](https://github.com/garrytan/gstack) — Referencia de arquitectura de plugins - [harness](https://github.com/revfactory/harness) — Patrones de infraestructura de hooks y arnés - [serena](https://github.com/oraios/serena) — Diseño de agentes autónomos - [SuperClaude Framework](https://github.com/SuperClaude-Org/SuperClaude_Framework) — Arquitectura de framework multi-comando - [superpowers](https://github.com/obra/superpowers) — Patrones de extensión de Claude Code ## Licencia [Apache 2.0](../../LICENSE)