Archyl Harness

Agentes de programação conhecem seu repositório perfeitamente — e sua arquitetura, nem um pouco. Eles reescrevem um serviço que outro agente está refatorando naquele mesmo instante, introduzem a dependência que seu time baniu em um ADR dois anos atrás e deixam sua documentação descrevendo um sistema que não existe mais.

O Archyl Harness resolve isso. Ele envolve qualquer agente de programação — Claude Code, Codex, Cursor, seu bot de CI ou os próprios agentes gerenciados do Archyl — em um ciclo governado, construído sobre sua arquitetura documentada:

Bloco O que faz Ferramenta
Context Dá ao agente apenas a fatia de arquitetura relevante para sua tarefa — elementos, decisões, guardrails, responsáveis find_relevant_context
Plan Transforma um pedido de funcionalidade em um plano de implementação que respeita seu modelo C4 e seus ADRs plan_work
Guard Bloqueia mudanças que violam suas regras de conformidade, antes que sejam escritas Hook Guard + run_conformance_check
Evolve Fecha o ciclo: os resultados viram memória dos elementos, e um rascunho de solicitação de mudança de arquitetura mantém o modelo em sincronia finish_work_session

O ciclo que um agente executa:

plan_work ──▶ start_work_session ──▶ code (Guard watches every write)
                                          │
finish_work_session ◀─── heartbeat ◀──────┘
      │
      ├─▶ leases released
      ├─▶ outcome pinned to the touched elements (memory)
      └─▶ draft Architecture Change Request (optional)

E como cada sessão adquire reservas consultivas (leases) sobre os elementos C4 que toca, dois agentes trabalhando no mesmo serviço enxergam um ao outro antes de colidir — nos briefings de cada um e ao vivo no seu diagrama.

Opcional por design

O harness é opt-in: nada nele é ativado só porque você documentou uma arquitetura. Um agente entra no ciclo apenas se você fizer uma destas três coisas — conectar o servidor MCP com ?profile=coding, instalar a skill archyl-harness que ensina o protocolo, ou adicionar o hook Guard. Desfaça isso e os agentes daquele repositório voltam a se comportar exatamente como antes.

Todo o resto do Archyl funciona sem ele. Recuperação de contexto, análise de impacto, propriedade dos elementos, verificações de conformidade, detecção de desvio e o sistema de memória estão todos acessíveis pelo catálogo completo, sem nenhuma sessão de trabalho. Usar o Archyl como uma arquitetura documentada que seus agentes conseguem ler — e pular este guia por inteiro — é uma forma perfeitamente prevista de usá-lo.

As duas metades são adotadas separadamente porque não têm as mesmas permissões. Um registro tira sua autoridade da curadoria humana: um ADR, uma regra de conformidade ou uma solicitação de mudança aprovada carregam um status porque uma pessoa os colocou ali, e uma entrada errada fica lá em silêncio até que alguém a leia e a corrija. Um protocolo, por outro lado, emite instruções sobre as quais os agentes agem: é um risco de outra natureza, que merece uma decisão deliberada em vez de um padrão.

Essa linha também é traçada dentro do produto, não apenas ao redor dele. Os agentes podem ler o registro e escrever nele, mas o que escrevem volta aos próximos agentes como contexto datado e atribuído — nunca como regra. Só os ADRs e as regras de conformidade são apresentados como vinculantes, e o único caminho entre algo que um agente registrou e esse estatuto passa por uma pessoa: um ADR, ou uma solicitação de mudança de arquitetura que alguém aprovou.

Configuração em cinco minutos

Você precisa de um projeto Archyl com arquitetura documentada (execute primeiro a descoberta com IA se o seu estiver vazio) e de uma chave de API com escopo write, criada em Perfil → Chaves de API.

Opção A — um único comando

Na raiz do seu repositório:

curl -fsSL https://raw.githubusercontent.com/archyl-com/agent-skills/main/templates/setup.sh | bash

O script pede sua chave de API e seu projeto e então configura tudo o que vem a seguir. Pronto — pule direto para Sua primeira sessão.

Opção B — passo a passo

1. Conecte o servidor MCP com o perfil coding. No seu repositório, crie ou complemente o .mcp.json:

{
  "mcpServers": {
    "archyl": {
      "type": "http",
      "url": "https://api.archyl.com/mcp?profile=coding",
      "headers": { "X-API-Key": "${ARCHYL_API_KEY}" }
    }
  }
}

?profile=coding faz diferença: ele reduz a superfície de 189 ferramentas para as 16 de que um agente de programação precisa, o que mantém o contexto dele pequeno e suas escolhas óbvias.

2. Instale o plugin (Claude Code):

/plugin marketplace add archyl-com/agent-skills
/plugin install archyl-developer@archyl-marketplace

Isso instala as skills (incluindo a archyl-harness, que ensina o protocolo de sessão ao seu agente) e o hook Guard.

3. Ative o Guard. Exporte duas variáveis onde quer que seu agente rode:

export ARCHYL_API_KEY=arch_...
export ARCHYL_PROJECT_ID=<your project uuid>

É tudo de que o Guard precisa. Ele é fail-open: sem essas variáveis (ou sem rede) ele não faz nada, então nunca pode quebrar seu fluxo de trabalho.

Sua primeira sessão

Peça qualquer mudança ao seu agente — digamos, "adicione limitação de requisições à API pública". Com o harness instalado, é isto que acontece:

Antes de programar, o agente declara o trabalho:

▶ start_work_session(task: "add rate limiting to the public API",
                     agentName: "claude-code/vincent")

# Harness Session
- Session ID: 4c2e…
- Gate: warn
  - error-level guardrail applies: no-direct-db-from-handlers
- Leased elements: container `ApiGateway`, component `RateLimiter`
- Conflicts: none

## Most relevant elements
- ApiGateway (container) — handles all public traffic …
## Related decisions (respect these)
- ADR-017: All throttling is enforced at the gateway [accepted]
## What previous sessions did here
- ApiGateway (claude-code/sarah, 3 days ago): extracted auth middleware …

O agente agora sabe onde trabalhar, quais decisões o restringem e o que o último agente fez ali — sem ler todo o seu repositório.

Durante a programação, o Guard confere cada arquivo que o agente está prestes a escrever contra suas regras de conformidade. Uma violação crítica bloqueia a escrita mostrando a regra e sua sugestão; o agente se ajusta e continua.

Ao terminar, o agente fecha o ciclo:

▶ finish_work_session(sessionId: "4c2e…",
    summary: "Added token-bucket rate limiting in ApiGateway middleware",
    decisions: ["limits configured per-plan in Redis"],
    createChangeRequest: true)

As reservas são liberadas, o resumo fica fixado como memória em ApiGateway para o próximo agente, e um rascunho de solicitação de mudança de arquitetura chega ao Archyl para que uma pessoa avalie como o modelo C4 deve ser atualizado.

Cada decisão é registrada como uma memória própria: uma sessão posterior pode substituí-la, reconfirmá-la ou deixá-la envelhecer sem tocar em nada mais do que a sua sessão deixou. As decisões voltam aos próximos agentes como contexto datado e atribuído — nunca como regras. A um agente só são apresentados como vinculantes os ADRs e as regras de conformidade, e a solicitação de mudança é o caminho pelo qual uma decisão alcança esse estatuto.

Acompanhando seus agentes: o console Fleet

Abra Agent Hub → Fleet para ver o trabalho em andamento: quantos agentes estão trabalhando, quais elementos C4 estão reservados agora, e um cartão por sessão ativa com sua tarefa, os elementos que detém, seu gate e a atualidade do seu heartbeat. Sessões encerradas vão para Sessões recentes com o resumo que cada uma reportou.

O console Fleet: cada sessão de agente ao vivo, com os elementos que detém

Uma sessão cujo heartbeat para é sinalizada, e expira sozinha 30 minutos depois. Você também pode cancelá-la daqui, o que libera suas reservas imediatamente.

A mesma informação chega até você onde você realmente olha — no diagrama. Todo elemento que um agente detém exibe um selo com seu nome, e clicar nele equivale a perguntar o que ele está fazendo: a tarefa declarada, tudo o mais que ele detém, e há quanto tempo deu sinal de vida.

Um agente trabalhando no canvas — o selo o nomeia, o balão diz o que ele faz

Para os agentes gerenciados do Archyl você também pode guiar um agente em execução: escreva uma mensagem na página de execução e ela é injetada no próximo passo de raciocínio dele.

O gate

Toda sessão começa com um veredicto de preflight:

Gate Significado Comportamento do agente
allow Sem conflitos, sem guardrails de nível error Prosseguir
warn Outra sessão detém uma reserva sobre um elemento alvo, ou um guardrail de nível error se aplica Prosseguir, mas tratar cada motivo listado
deny Somente com exclusive: true — um elemento alvo já está sendo trabalhado Não contornar; reportar ao usuário

Use exclusive: true para mudanças que não podem concorrer com ninguém: migrações de schema, alterações de contrato.

Configuração do Guard

Variável Padrão Finalidade
ARCHYL_API_KEY Obrigatória para ativar o Guard
ARCHYL_PROJECT_ID Obrigatória para ativar o Guard
ARCHYL_API_URL https://api.archyl.com Implantações self-hosted
ARCHYL_GUARD_BLOCK critical critical bloqueia violações críticas; high bloqueia também as altas; off desativa o bloqueio

Em vez de variáveis de ambiente, um arquivo .archyl.json versionável na raiz do repositório pode carregar a metade não secreta: { "apiUrl": "…", "projectId": "…" }. Mantenha a chave de API no ambiente.

Memória

Os resultados de sessão são apenas a metade automática da memória. Agentes e colegas também podem escrever na memória deliberadamente:

▶ remember(projectId: …, element: "ApiGateway", kind: "pitfall",
    content: "The gateway strips custom headers longer than 8KB — payloads must go in the body.")
  • remember fixa um fato em um elemento (ou no projeto inteiro), tipado como note, convention ou pitfall. Use para o conhecimento que não aparece nem no código nem no modelo: manias do deploy, razões históricas, pontos frágeis.
  • recall busca em toda a memória — resultados, notas, convenções, armadilhas — por termos, por elemento ou por tipo. O ranking mistura significado com palavras, então um agente que pergunta por "rate limiting" encontra a nota que outra pessoa escreveu sobre "throttling". Passe o seu sessionId para que as memórias entregues a você possam receber o crédito depois.
  • find_relevant_context e start_work_session entregam automaticamente as memórias mais recentes dos elementos envolvidos, então o próximo agente já começa com o que os anteriores aprenderam.

Escrever uma memória é deduplicado: reafirmar um fato que já existe não guarda uma segunda cópia, e sim confirma a que já está lá (a resposta traz deduplicated: true) — porque um agente reafirmando o que aprendeu é evidência, não ruído. Uma memória parecida mas não idêntica é guardada e devolvida em similarTo, para que quem escreve substitua de propósito em vez de contradizer em silêncio.

A memória também aprende com o uso. Quando uma sessão termina, usedMemories nomeia as memórias em que ela realmente se apoiou. Essa citação é o sinal forte: as memórias citadas mantêm sua posição, enquanto uma memória entregue a cinco sessões e nunca nomeada por nenhuma delas é rebaixada como ruído. Nada é apagado automaticamente — as memórias ignoradas vão para uma fila de revisão, para uma pessoa julgar.

A memória tem um ciclo de vida, para continuar verdadeira em vez de só se acumular. Quando uma memória entregue pelo recall se mostra correta, confirme-a de novo com confirm_memory: o relógio de frescor reinicia e ela continua pesando mais do que a informação mais antiga. Quando um fato muda, não deixe as duas versões vivas: remember(supersedes: "Old title") substitui a memória antiga, que sai da busca mas permanece no histórico e no grafo. Tudo o que não é confirmado decai suavemente no ranking (meia-vida de 45 dias), e para um agente prestes a mexer no código as armadilhas sempre pesam mais que as notas simples.

As memórias formam um grafo de conhecimento, no estilo do Obsidian. Dê um title a uma memória e ela passa a ser endereçável: qualquer outra memória pode referenciá-la com [[Title]] no conteúdo. Os links também resolvem elementos C4 pelo nome ([[ApiGateway]]) e decisões ([[ADR-17]]) — e um link para um título que ainda não existe fica pendente e se conecta no momento em que essa memória é criada. Toda memória expõe seus backlinks, então o conhecimento é navegável nos dois sentidos — e o recall segue os links: os melhores resultados trazem junto seus vizinhos ligados por wiki-links, marcados com via.

A memória também percebe quando a arquitetura se move sob ela. Quando um elemento ao qual uma memória está fixada muda, essa memória é sinalizada para revisão: recall continua a servi-la, mas marcada com [VERIFY — the element drifted since this was written], e ela cai no ranking em vez de desaparecer. Um fato escrito sobre um serviço desde então dividido não é automaticamente falso — apenas deixa de ser confiável sem um olhar humano.

A memória é criptografada em repouso como toda coluna de conteúdo sensível, e se gerencia pela interface: o painel de Memória no Agent Hub, mais uma seção por elemento no painel de detalhes do diagrama. O painel foi feito para triagem — a coluna da esquerda conta o que precisa de revisão, o que está sendo ignorado e o que envelheceu, depois divide o resto por tipo, e cada linha carrega uma borda colorida dizendo num relance o quanto confiar.

Memória do projeto: convenções, armadilhas e resultados, triados pelo quanto confiar neles

Mude para o mapa de conhecimento para a outra pergunta: não o que sabemos mas onde. Uma célula por elemento C4, mostrando o que o projeto sabe sobre ele e quão fresco é esse saber — incluindo os elementos sobre os quais ninguém escreveu nada, que costuma ser a metade mais útil do quadro.

O mapa de conhecimento: o que o projeto sabe de cada elemento, e onde não sabe nada

Em CI

Os mesmos blocos rodam no seu pipeline com as GitHub Actions: generate-context faz commit de um briefing archyl.txt para agentes sem acesso MCP, conformance-check condiciona os pull requests às suas regras, e auto-cr abre solicitações de mudança de arquitetura a partir das mudanças mescladas.

Solução de problemas

Nenhuma sessão aparece no console Fleet. O agente está conectado sem o protocolo do harness. Verifique se o plugin está instalado (a skill archyl-harness ensina o protocolo) e se a URL do MCP inclui ?profile=coding — com o catálogo completo de 189 ferramentas, os agentes costumam explorar em vez de seguir o ciclo.

O Guard nunca bloqueia nada. É por design: ele falha em aberto. Confirme que ARCHYL_API_KEY e ARCHYL_PROJECT_ID estão exportadas no ambiente em que o agente roda, e que seu projeto tem regras de conformidade com severidade critical.

Uma sessão fica presa como ativa. As sessões expiram 30 minutos após o último heartbeat e liberam suas reservas automaticamente. Para liberá-las na hora, cancele a sessão pelo console Fleet.

Quais agentes são suportados? Tudo que fala MCP ganha Context, Plan e o protocolo de sessão. O hook Guard e as skills hoje visam o Claude Code; outros agentes podem aplicar as mesmas regras via run_conformance_check ou pelas actions de CI.