O Coding Harness (CodingAgent)

CodingAgent é um harness fino — fornecido em adk-agent atrás do recurso coding — que conecta as ferramentas de desenvolvimento, uma ferramenta de planejamento write_todos e um prompt de sistema mínimo de codificação em um LlmAgent normal. É configuração sobre LlmAgent, não um novo tipo de agente, então mantém a construção padrão de adk-agent enxuta (o recurso traz adk-devtools).

Construir um

use adk_agent::coding::CodingAgent;
use adk_devtools::Workspace;

let coding = CodingAgent::builder()
    .model(model)                              // any adk-model provider (required)
    .workspace(Workspace::new("./my-repo"))    // sandboxed (required)
    .instruction("Follow the project's existing style; prefer small diffs.") // optional, appended
    .build()?;

let agent = coding.agent();   // Arc<dyn Agent> — hand to a Runner

Opções do builder:

MétodoEfeito
.model(Arc<dyn Llm>)O modelo (obrigatório).
.workspace(Workspace)O workspace ao qual as ferramentas estão restritas (obrigatório).
.name("…")Nome do agente (padrão "coding-agent").
.instruction("…")Orientação extra anexada ao prompt de codificação base.
.tool(Arc<dyn Tool>)Registre uma ferramenta extra (MCP, ferramenta de função, …).
.without_todos()Desative a ferramenta de planejamento write_todos.

O que está integrado

  • O conjunto de ferramentas de dev — read/write/edit/glob/grep/bash, restrito ao workspace.

  • write_todos — uma ferramenta de planejamento que o modelo usa para registrar e atualizar uma lista curta de tarefas. Leia-a de volta do harness:

    for todo in coding.todos() {
        println!("[{}] {}", todo.status, todo.content);  // pending | in_progress | completed
    }
  • Um prompt mínimo — instruções base com menos de 1k tokens ("explore before you change", "read before you edit", "verify by running tests", "track a plan"), mantidas pequenas de propósito para que as capacidades venham de ferramentas e habilidades, e não de um prompt enorme.

O ciclo

Você executa uma CodingAgent como qualquer agente — por meio de uma Runner. Dentro de uma rodada, o LlmAgent subjacente já executa um ciclo plan → act → observe: ele chama ferramentas, vê seus resultados e continua até terminar. Uma rodada típica:

write_todos(...)            # plan
glob / grep / read_file     # explore
edit_file / write_file      # change
bash("…test…")              # verify
write_todos(... completed)  # update plan
→ final summary

Para trabalho multi-turn, reutilize o mesmo Runner + sessão entre chamadas e o agente se baseia no próprio trabalho anterior (ele relê e edita os arquivos que escreveu). Veja o exemplo de coding_agent em modo (multiturn).

Memória e habilidades

Como há um LlmAgent por baixo, todo o resto em ADK se compõe:

  • Anexe uma MemoryService (por exemplo, o grafo de conhecimento bi-temporal) ao Runner para memória de projeto entre sessões.
  • Adicione habilidades preguiçosas via adk-skill para estender capacidades sem inflar o prompt.
  • Hooks/guardrails (adk-plugin, adk-guardrail) controlam chamadas de ferramentas de forma determinística.

Executando isso

O harness produz um Arc<dyn Agent>; conduza-o com adk-runner (veja o guia rápido) ou use o CLI, que encapsula tudo isso.

Próximo: O CLI →