Visão Geral da Arquitetura¶
Leopold é um harness de agente. Um harness é tudo que envolve o modelo, exceto
o próprio modelo: execução de ferramentas, memória e estado, orquestração,
guardrails e observabilidade (Agent = Model + Harness). O Claude Code já é
um harness forte para um único turno interativo. O Leopold o estende para
trabalho longo e sem supervisão.
Princípios de design¶
- Reger, não substituir. O Leopold conduz o Claude Code e a biblioteca de skills gstack pelas suas próprias superfícies públicas (skills, hooks, ambiente). Nada de fork do Claude Code, nada de skill remendada.
- Orientado pelo modelo, não hardcoded. A lógica de orquestração vive em prompts, no charter e em descrições de ferramenta em linguagem natural, não num roteador rígido em código. Conforme o modelo melhora, o Leopold melhora junto.
- O brief é o contrato. Tudo que é autônomo deriva dos quatro artefatos do brief. A run nunca inventa intenção.
- Guardrails são cidadãos de primeira classe. O lock de git é imposto por um hook, não por um prompt que o modelo poderia racionalizar e contornar.
- Toda decisão é auditável. Uma decisão que o humano não tomou precisa ser
recuperável depois, com o raciocínio. O
DECISIONS.mdé essa trilha.
As camadas do harness, mapeadas¶
O Leopold se mapeia nas camadas padrão de um harness. O engine in-session da
v0.1 implementa as camadas de orquestração, memória, guardrails e
observabilidade inteiramente com as skills e hooks do próprio Claude Code. O
driver SDK (packages/driver/) adiciona as camadas de API e sandbox.
flowchart TB
subgraph IN["Engine in-session (v0.1)"]
direction TB
O1["Orquestração · Stop hook + PLAN.md"]
M1["Memória · artefatos do brief (System of Context)"]
G1["Guardrails · gate PreToolUse + condições de parada"]
OB1["Observabilidade · DECISIONS.md + events.jsonl"]
end
subgraph DR["Driver SDK (adiciona)"]
direction TB
A2["API · processo orquestrador externo"]
O2["Orquestração · worker novo por item"]
EX2["Execução · workers em sandbox (roadmap)"]
end
IN --> DR
| Camada do harness | v0.1 (in-session) | Driver SDK |
|---|---|---|
| Orquestração | loop do Stop hook + PLAN.md |
maestro persistente, worker novo por item |
| Memória / Contexto | artefatos do brief | + memória de longo prazo indexada (roadmap) |
| Ferramentas / MCP | skills do gstack + ferramentas do Claude Code | + roteamento MCP dinâmico (roadmap) |
| Guardrails | gate PreToolUse + condições de parada | gate canUseTool, mesma política |
| Observabilidade | DECISIONS.md + JSONL |
+ stream SSE + dashboard (roadmap) |
| Execução / Sandbox | o sandbox do próprio Claude Code | runners E2B / Daytona (roadmap) |
O loop da run¶
O loop é acoplado ao estado: a continuação é função do PLAN.md e das
condições de parada, nunca uma flag incondicional de "continua sempre". Essa é
a propriedade de confiabilidade mais importante de todas.
flowchart TD
Turn["turno N · pega o próximo item · faz o trabalho · resolve bifurcações · marca como feito"]
Turn --> Done{Claude termina o turno}
Done --> Cond{condição de parada atingida?}
Cond -- "não · ainda tem trabalho" --> Inject["reinjeta continue → turno N+1"]
Inject --> Turn
Cond -- "sim" --> Stop([permite parar · escreve o resumo · notifica])
Estado em disco¶
Tudo que uma run precisa vive em .leopold/ no projeto alvo (gitignored por
padrão), então uma run é inspecionável, retomável e revisável com um editor de
texto:
.leopold/
MISSION.md # what
CHARTER.md # how you would choose
GUARDRAILS.md # what stays locked
PLAN.md # the work queue
DECISIONS.md # the audit trail (append-only)
state.json # active, iteration, counters, timestamps
events.jsonl # structured event stream
STOP # kill switch (presence halts the loop)
ALLOW_GIT # per-session opt-in token (absent by default)
Por que in-session primeiro e driver SDK depois¶
O engine in-session prova a parte difícil (um decisor guiado pelo charter, mais continuidade acoplada ao estado, mais um lock de git rígido) com zero infraestrutura nova: são skills e hooks, e roda em qualquer lugar onde o Claude Code roda. O driver SDK é um superconjunto estrito que adiciona paralelismo, uma superfície de API e workers em sandbox para missões que não cabem mais numa única sessão.
Continue em: Engine In-Session, Driver SDK ou o Protocolo Maestro & Worker.