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
- chat — conversación por turnos con historial de contexto completo. El worker recibe toda la conversación anterior y responde como interlocutor.
- terminal — ejecución en streaming con tool events. El worker opera como una sesión de terminal, ejecutando herramientas en secuencia y transmitiendo el progreso en tiempo real.
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:
- Trigger match (+2 puntos) — coincidencia directa de una palabra trigger del mensaje
- Keyword match (+1 punto) — proximidad semántica por palabras clave
- Top-5 por puntaje total, inyectadas como
SKILLS_HINTen el prompt del worker
Ejemplo
Mensaje: "review the git commit for security"
code-review: trigger"review"encontrado → +2 puntosgit-manager: keyword"commit"encontrado → +1 punto- Resultado:
code-review(2),git-manager(1) inyectadas en el prompt
Formato del registro de skills
{
"name": "code-review",
"triggers": ["review", "audit", "security"],
"keywords": ["vulnerability", "OWASP", "XSS"],
"agents": ["summer"],
"category": ["complex"]
}
triggers— palabras que apuntan directamente a la skill (alta prioridad)keywords— términos adicionales para la asociación semánticaagents— qué workers pueden usar esta skillcategory— clasificación (simple,complex,critical)
Learnings — Memoria de correcciones
¿Cómo se crean?
Los Learnings son reglas acumuladas que surgen del feedback:
- Thumbs-down (👎) — se crea automáticamente un learning con source
"negative"a partir de una respuesta problemática - Fix It — volver a ejecutar una tarea genera un learning con source
"fixit" - 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?
- Se cargan al inicio de cada sesión del worker
- Se inyectan en el GSD-prompt del Developer (presupuesto: 2000 caracteres)
- Las reglas más recientes van primero (prioridad por tiempo)
- Actúan como memoria inmune — los errores cometidos una vez no se repiten en sesiones posteriores
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:
- Recopilación de métricas — lee
quality-metrics.jsonde cada proyecto - Detección de skills problemáticas — filtra skills con success rate < 80% o con más feedback negativo que positivo
- Análisis con Sage — Haiku genera una versión mejorada de la skill a partir de los errores recopilados
- Test A/B ciego — 3 escenarios, orden aleatorizado, puntuación dual:
- Eval rules (60% del peso) + LLM judge (40% del peso)
- Creación de PR — si la nueva versión gana (
new_wins > old_wins), se crea un pull request - 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.