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étodo | Efeito |
|---|---|
.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) aoRunnerpara memória de projeto entre sessões. - Adicione habilidades preguiçosas via
adk-skillpara 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 →