Workers e Intelligence Layer

Arc OS utiliza un sistema de workers para distribuir tareas entre agentes de IA especializados, y el Intelligence Layer garantiza la calidad de sus respuestas mediante cuatro módulos: Binary Evals, Context Router, Learnings y Karpathy Loop.


Sistema de workers

Cada worker es un agente de IA independiente con un rol, modelo y conjunto de herramientas definidos. Los workers operan dentro de un proyecto y están disponibles a través del Workspace UI o comandos de Telegram (/c, /d, /w:worker_id).

Workers integrados

Worker ID Modelo Tipo Max Turns Herramientas Propósito
Consultant consultant Sonnet 4.5 chat 10 Read, Glob, Grep, WebSearch, WebFetch, Bash Asesor estratégico, análisis, Q&A
Developer developer Opus 4.6 terminal 20 Todas Ejecución de tareas, código, deploy
UI/UX Designer ui-designer Sonnet 4.5 chat 8 Read, Glob, Grep, WebFetch Diseño, auditoría UX
Knowledge Archivist archivist Sonnet 4.5 terminal 15 Read, Glob, Grep, Write, Edit Documentación, wiki
Sentinel sentinel Sonnet 4.5 chat 5 Read, Glob, Grep, WebSearch, WebFetch Seguridad, auditoría
Product Owner product-owner Sonnet 4.5 chat 5 Read, Glob, Grep, WebSearch, WebFetch Roadmap, priorización

Tipos de workers

Crear un worker personalizado

Los workers personalizados se describen en el archivo config/workers_registry.json. Cada entrada define el comportamiento del agente:

{
  "id": "my-worker",
  "label": "My Worker",
  "icon": "🔧",
  "type": "chat",
  "model": "claude-sonnet-4-5",
  "max_turns": 10,
  "tools": ["Read", "Glob", "Grep"],
  "system_prompt": "You are...",
  "focus_dirs": ["src/"],
  "builtin": false
}

Campos de configuración

Campo Tipo Descripción
id string Identificador único del worker, usado en comandos (/w:id)
label string Nombre visible en la UI
icon string Emoji como avatar
type "chat" | "terminal" Modo de operación (ver arriba)
model string Modelo Claude (claude-sonnet-4-5, claude-opus-4-6, claude-haiku-3-5)
max_turns number Número máximo de ciclos tool-use por respuesta
tools "all" | string[] Herramientas disponibles. "all" otorga acceso completo
system_prompt string System prompt inline
system_prompt_skill string Ruta al archivo con el system prompt (alternativa al inline)
prompt_style "history" | "gsd" Estilo de prompting: history conserva el contexto, gsd es orientado a tareas
output_format "text" | "stream-json" Formato de salida
focus_dirs string[] Directorios en los que el worker se enfoca
log_category string Categoría para los logs
builtin boolean true para workers integrados (no se pueden eliminar desde la UI)

Binary Evals — Validación de respuestas

¿Qué son?

Reglas declarativas para verificar la calidad de las respuestas de los workers. Cada regla es determinista (sin IA), se ejecuta al instante y no bloquea la respuesta. Los resultados tienen severity warning o info — informan, no detienen.

6 tipos de reglas

Tipo Descripción Ejemplo
string_contains La respuesta contiene una cadena "verdict" en un code review
string_not_contains La respuesta NO contiene una cadena Sin --force en el output
regex_match La respuesta coincide con un regex Contiene una métrica (disk|RAM|CPU)
regex_not_match La respuesta NO coincide con un regex Sin credenciales en el output
max_length Longitud <= valor Respuesta de hasta 5000 caracteres
min_length Longitud >= valor Respuesta de mínimo 1000 caracteres

Formato del archivo evals

El archivo se coloca junto a la skill: skills/{skill_name}/{skill_name}.evals.json

{
  "version": 1,
  "skill": "code-review",
  "rules": [
    {
      "id": "cr-001",
      "name": "Must return JSON verdict",
      "type": "string_contains",
      "value": "\"verdict\"",
      "severity": "warning"
    }
  ]
}

Cada regla tiene un id único, un name legible por humanos, uno de los 6 tipos, un value para la comparación y un severity (warning o info).


Context Router — Selección automática de skills

¿Cómo funciona?

Con cada mensaje, el Context Router puntúa todas las skills de skills/_registry.json y selecciona automáticamente las más relevantes:

  1. Trigger match (+2 puntos) — coincidencia directa de una palabra trigger del mensaje
  2. Keyword match (+1 punto) — proximidad semántica por palabras clave
  3. Top-5 por puntaje total, inyectadas como SKILLS_HINT en el prompt del worker

Ejemplo

Mensaje: "review the git commit for security"

Formato del registro de skills

{
  "name": "code-review",
  "triggers": ["review", "audit", "security"],
  "keywords": ["vulnerability", "OWASP", "XSS"],
  "agents": ["summer"],
  "category": ["complex"]
}

Learnings — Memoria de correcciones

¿Cómo se crean?

Los Learnings son reglas acumuladas que surgen del feedback:

  1. Thumbs-down (👎) — se crea automáticamente un learning con source "negative" a partir de una respuesta problemática
  2. Fix It — volver a ejecutar una tarea genera un learning con source "fixit"
  3. Manuales — decisiones de arquitectura y reglas, source "manual" o "architecture"

Formato del archivo

El archivo learnings.md en la raíz del proyecto:

# Learnings
> Auto-generated. Injected into GSD prompt at session start.

## Rules
- [2026-04-03T20:00:00Z] [architecture] Rule text here...
- [2026-04-04T10:00:00Z] [security] Another rule...

¿Cómo se usan?


Karpathy Loop — Automejora nocturna

Ciclo automático de mejora de skills, inspirado en las ideas de Andrej Karpathy sobre la automejora iterativa.

¿Cómo funciona?

Cada noche a las 3:00 UTC se ejecuta un pipeline automático:

  1. Recopilación de métricas — lee quality-metrics.json de cada proyecto
  2. Detección de skills problemáticas — filtra skills con success rate < 80% o con más feedback negativo que positivo
  3. Análisis con Sage — Haiku genera una versión mejorada de la skill a partir de los errores recopilados
  4. Test A/B ciego — 3 escenarios, orden aleatorizado, puntuación dual:
    • Eval rules (60% del peso) + LLM judge (40% del peso)
  5. Creación de PR — si la nueva versión gana (new_wins > old_wins), se crea un pull request
  6. Reporte al CEO — los resultados se envían por Telegram para la decisión final

Métricas de calidad

Cada proyecto acumula estadísticas en quality-metrics.json:

{
  "total_invocations": 42,
  "total_successes": 40,
  "total_feedback_positive": 35,
  "total_feedback_negative": 2,
  "avg_duration_ms": 15000,
  "skills": [
    {
      "name": "code-review",
      "applied_count": 5,
      "success_count": 4
    }
  ]
}

Estas métricas permiten al sistema identificar objetivamente qué skills necesitan mejoras y hacer seguimiento del progreso tras las actualizaciones.