código aberto · laboratório em infraestrutura própria
O harness inteiro, não só o loop
Um desktop persistente onde agentes autônomos trabalham: ferramentas, sandbox, privilégio, estado durável e observação de kernel. E um laço que sabe parar — inclusive quando entregou sem ter cumprido o pedido.
Trocar de modelo muda pouco. O que decide se um agente funciona é o que ele consegue tocar e o que ele faz até parar. Este repositório é essas duas camadas, construídas e medidas.
O modelo é o menor dos três. O laço decide o que ele faz até parar; o harness decide o que ele consegue tocar.
as duas camadas
Um teste separa as duas, e ele é curto
Se dá para corrigir mudando um prompt ou uma condição de parada, é o loop. Se é preciso mudar o que o agente consegue fazer, é harness. Quase todo diagnóstico de agente começa errando esta pergunta.
Harness
o que ele consegue tocar
10 ferramentas: shell, 6 de navegador, take-over, delegação a outro agente de código
Sandbox por usuário, com sudo em lista fechada
Cofre cifrado — o modelo usa a credencial sem lê-la
Estado durável num volume que sobrevive à máquina
Forma do erro: falha de ferramenta vira texto no histórico, não derruba a tarefa
Observação: OpenTelemetry no laço e eBPF no kernel
Muda recompilando e reinstalando. É o que o agente é capaz de fazer.
Loop
o que ele faz até parar
Até 60 iterações por invocação, 180 turnos somando retomadas
Detector de laço: 3 falhas idênticas seguidas
Teto de custo em dólar, por tarefa
Teto de tempo de parede
Verificação de conclusão antes de aceitar que terminou
Sete motivos de parada, cada um com o que pedir à pessoa
Muda com uma variável de ambiente. É o que o agente faz com o que tem.
loop engineering
Parar não é cumprir
O laço concluía a tarefa quando o modelo parava de chamar ferramentas. Isso mede que ele parou, não que fez o que foi pedido — e a diferença é onde mora o defeito silencioso: a tarefa fica “concluída”, ninguém olha, e o pedido não aconteceu.
A verificação exige evidência citada do histórico: um verificador que pudesse aprovar sem apontar onde aprovaria por inércia.
O sétimo motivo de parada aponta para o lado oposto dos outros
Cinco motivos descrevem o que o site exige — senha, 2FA, CAPTCHA, pagamento, presença humana. O sexto, guardrail, contém quem foi longe demais: laço, custo, turnos, tempo. O sétimo, unverified, marca quem parou cedo demais. Na tela, a pergunta é diferente em cada caso: num vale decidir se continua, no outro é saber o que ficou faltando.
harness engineering
Três pontos de extensão, e escolher o errado custa retrabalho
O mesmo teste da seção anterior decide onde uma capacidade nova entra. A cor de cada linha diz a camada.
habilidadeUm procedimento repetido, em markdown. Entra no prompt.loop
conectorUm manifesto que dá alcance a uma API — com credencial que o modelo usa e não lê.harness
runnerOutro agente de código, para o trabalho que é de escrever software.harness
O erro comum é uma habilidade que ensina a chamar a API com curl: a credencial passa a viver na linha de comando, ao alcance de quem ela deveria conter.
privilégio
O adversário declarado é o próprio modelo
A máquina não publica nada: só a porta 22 no firewall, com tela, navegador e API em loopback. A pergunta de segurança não é quem entra de fora — é o que o modelo alcança pela ferramenta de shell, que é a função do produto e não um defeito.
Usuário
Quem é
Alcança
agentd
o serviço
o cofre cifrado, /etc/agentd
agent
as ferramentas do modelo
/workspace, sudo por lista fechada
root
o operador, por chave que só existe no laptop
tudo
observação
Três camadas, porque uma não responde a pergunta inteira
A primeira sabe a intenção e é cega ao que o sistema fez. A segunda sabe o fato e é cega à intenção. Só juntas respondem “o modelo tentou X e a máquina fez Y”.
agentdTrechos OpenTelemetry no laço, com as convenções GenAI. Nenhum conteúdo de prompt ou comando sai da máquina — no lugar dos argumentos vai um hash.loop
agent-probeColetor eBPF próprio, em Go. Todo execve com caminho completo, toda conexão de saída marcada quando o destino é rede privada.harness
PSIPressão de CPU, memória e disco lidas do kernel. Não é eBPF, e dizer isso é parte do desenho: o kernel já calcula, e recalcular custaria mais e mediria pior.harness
A camada de kernel é a única que o modelo não desliga por dentro — e mesmo ela cai para quem tem sudo. Por isso a prova de que ela está viva mora fora da máquina: ausência de dado é o sinal.
estado da máquina — medido em 01/09/2026
sistemaNixOS 25.11 · kernel 6.12.93declarativo
volume/workspace · 20 GB · 282 conversasdurável
firewall22/tcp · o resto em 127.0.0.1invariante
agent-probeeBPF · execve + connectsobe no boot
tela 5parou sem cumprir o pedidoprecisa de você
contenção
Todo teto do loop se ajusta sem recompilar
Teto que só muda recompilando é teto desligado. E há um motivo a mais: o teste de contenção precisa forçá-lo, porque pedir ao modelo que falhe produz um teste que passa e reprova alternadamente — medido, com o mesmo prompt em duas rodadas.
Variável
Padrão
O que detém
AGENTD_MAX_TURNS
180
Turnos acumulados, atravessando retomadas
AGENTD_MAX_TOOL_FAILURES
3
Falhas idênticas seguidas — é o detector de laço
AGENTD_MAX_COST_USD
3.00
Inferência por tarefa, em dólar
AGENTD_MAX_VERIFY_ATTEMPTS
2
Devoluções da lacuna antes de chamar uma pessoa
AGENTD_MAX_CONCURRENT_TASKS
—
Tarefas simultâneas na máquina inteira
começar
Do zero à máquina observada
task checkConfere binários, token, chave e latência — antes de gastar
AGENT_OS=nixos task upVolume durável e droplet, sistema declarativo, validação ponta a ponta
task deploy && task vaultInstala o agente por SSH de root e provisiona o cofre cifrado
task obs:upSobe o backend de observação no laptop, com Nix
task probe:deployCompila os objetos BPF e instala o coletor de kernel
task openAbre a tela ao vivo por túnel — nada fica exposto