Workers e Intelligence Layer
Arc OS utiliza um sistema de workers para distribuir tarefas entre agentes de IA especializados, e o Intelligence Layer garante a qualidade das respostas por meio de quatro módulos: Binary Evals, Context Router, Learnings e Karpathy Loop.
Sistema de workers
Cada worker é um agente de IA independente com papel, modelo e conjunto de ferramentas definidos. Os workers operam dentro de um projeto e estão disponíveis via Workspace UI ou comandos do Telegram (/c, /d, /w:worker_id).
Workers integrados
| Worker | ID | Modelo | Tipo | Max Turns | Ferramentas | Finalidade |
|---|---|---|---|---|---|---|
| Consultant | consultant |
Sonnet 4.5 | chat | 10 | Read, Glob, Grep, WebSearch, WebFetch, Bash | Conselheiro estratégico, análise, Q&A |
| Developer | developer |
Opus 4.6 | terminal | 20 | Todas | Execução de tarefas, código, deploy |
| UI/UX Designer | ui-designer |
Sonnet 4.5 | chat | 8 | Read, Glob, Grep, WebFetch | Design, auditoria de UX |
| Knowledge Archivist | archivist |
Sonnet 4.5 | terminal | 15 | Read, Glob, Grep, Write, Edit | Documentação, wiki |
| Sentinel | sentinel |
Sonnet 4.5 | chat | 5 | Read, Glob, Grep, WebSearch, WebFetch | Segurança, auditoria |
| Product Owner | product-owner |
Sonnet 4.5 | chat | 5 | Read, Glob, Grep, WebSearch, WebFetch | Roadmap, priorização |
Tipos de workers
- chat — conversa turn-based com histórico completo de contexto. O worker recebe toda a conversa anterior e responde como interlocutor.
- terminal — execução em streaming com tool events. O worker funciona como uma sessão de terminal, executando ferramentas sequencialmente e transmitindo o progresso em tempo real.
Criando um worker personalizado
Workers personalizados são descritos no arquivo config/workers_registry.json. Cada entrada define o comportamento do 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 configuração
| Campo | Tipo | Descrição |
|---|---|---|
id |
string | Identificador único do worker, usado nos comandos (/w:id) |
label |
string | Nome exibido na UI |
icon |
string | Emoji de avatar |
type |
"chat" | "terminal" |
Modo de operação (veja acima) |
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 de tool-use por resposta |
tools |
"all" | string[] |
Ferramentas disponíveis. "all" concede acesso completo |
system_prompt |
string | System prompt inline |
system_prompt_skill |
string | Caminho para arquivo com system prompt (alternativa ao inline) |
prompt_style |
"history" | "gsd" |
Estilo de prompt: history preserva contexto, gsd é orientado a tarefas |
output_format |
"text" | "stream-json" |
Formato de saída |
focus_dirs |
string[] | Diretórios nos quais o worker foca |
log_category |
string | Categoria para logs |
builtin |
boolean | true para workers integrados (não podem ser excluídos pela UI) |
Binary Evals — Validação de respostas
O que é isso?
Regras declarativas para verificar a qualidade das respostas dos workers. Cada regra é determinística (sem IA), executa instantaneamente e não bloqueia a resposta. Os resultados têm severity warning ou info — eles informam, não interrompem.
6 tipos de regras
| Tipo | Descrição | Exemplo |
|---|---|---|
string_contains |
A resposta contém uma substring | "verdict" em code review |
string_not_contains |
A resposta NÃO contém uma substring | Sem --force no output |
regex_match |
A resposta corresponde ao regex | Contém métrica (disk|RAM|CPU) |
regex_not_match |
A resposta NÃO corresponde ao regex | Sem credenciais no output |
max_length |
Comprimento <= valor | Resposta com até 5000 caracteres |
min_length |
Comprimento >= valor | Resposta com pelo menos 1000 caracteres |
Formato do arquivo de evals
O arquivo fica junto à 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 regra tem um id único, um name legível por humanos, um dos 6 tipos, value para comparação e severity (warning ou info).
Context Router — Seleção automática de skills
Como funciona?
A cada mensagem, o Context Router pontua todas as skills de skills/_registry.json e seleciona automaticamente as mais relevantes:
- Trigger match (+2 pontos) — ocorrência direta de uma palavra-gatilho da mensagem
- Keyword match (+1 ponto) — proximidade semântica por palavras-chave
- Top-5 pela soma de pontos, injetadas como
SKILLS_HINTno prompt do worker
Exemplo
Mensagem: "review the git commit for security"
code-review: trigger"review"encontrado → +2 pontosgit-manager: keyword"commit"encontrado → +1 ponto- Resultado:
code-review(2),git-manager(1) injetados no prompt
Formato do registro de skills
{
"name": "code-review",
"triggers": ["review", "audit", "security"],
"keywords": ["vulnerability", "OWASP", "XSS"],
"agents": ["summer"],
"category": ["complex"]
}
triggers— palavras que indicam claramente a skill (alta prioridade)keywords— termos adicionais para associação semânticaagents— quais workers podem usar essa skillcategory— classificação (simple,complex,critical)
Learnings — Memória de correções
Como são criados?
Learnings são regras acumuladas que surgem do feedback:
- Thumbs-down (👎) — um learning é criado automaticamente com source
"negative"a partir da resposta problemática - Fix It — reexecutar uma tarefa gera um learning com source
"fixit" - Manuais — decisões de arquitetura e regras com source
"manual"ou"architecture"
Formato do arquivo
Arquivo learnings.md na raiz do projeto:
# 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...
Como são usados?
- Carregados no início de cada sessão do worker
- Injetados no GSD prompt do Developer (orçamento de 2000 caracteres)
- As regras mais recentes ficam primeiro (prioridade por data)
- Funcionam como memória imune — erros cometidos uma vez não se repetem nas sessões seguintes
Karpathy Loop — Autoaperfeiçoamento noturno
Ciclo automático de melhoria de skills, inspirado nas ideias de Andrej Karpathy sobre iterative self-improvement.
Como funciona?
Todo dia às 3h UTC, um pipeline automático é executado:
- Coleta de métricas — lê
quality-metrics.jsonde cada projeto - Busca de skills problemáticas — filtra skills com success rate < 80% ou com mais feedback negativo do que positivo
- Análise pelo Sage — Haiku gera uma versão melhorada da skill com base nos erros coletados
- Blind A/B test — 3 cenários, ordem randomizada, dual scoring:
- Eval rules (60% do peso) + LLM judge (40% do peso)
- Criação de PR — se a nova versão vencer (
new_wins > old_wins), um pull request é criado - Relatório ao CEO — os resultados são enviados pelo Telegram para a decisão final
Métricas de qualidade
Cada projeto acumula estatísticas em 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
}
]
}
Essas métricas permitem que o sistema identifique objetivamente quais skills precisam de melhoria e acompanhe o progresso após as atualizações.