Como usar o harness do Claude Code via SDK
🇬🇧 Read it in English
A maioria das pessoas usa o Claude Code como CLI. Você abre o terminal, conversa com o agente, e ele edita arquivos, roda comandos e faz review de PR.
Esse mesmo harness dá pra usar de dentro do seu código: tools, system prompt, agent loop e skills. Sem construir nada do zero.
O problema
Se você quer um agente que opera no seu codebase, o caminho óbvio é pegar a API da Anthropic e montar tudo na mão. Você define as tools, escreve o system prompt, implementa o loop de tool-use, cuida do contexto e das permissões. É muito código antes de chegar no que interessa.
E no fim você tem uma versão pior do que o Claude Code já faz.
O preset
O @anthropic-ai/claude-agent-sdk tem um preset que liga o Claude Code inteiro com uma linha pra cada peça:
import { query, startup } from "@anthropic-ai/claude-agent-sdk";
await startup({ initializeTimeoutMs: 10_000 });
const result = query({
prompt: "review PR #42",
options: {
tools: { type: 'preset', preset: 'claude_code' },
systemPrompt: { type: 'preset', preset: 'claude_code' },
skills: ['pr-review'],
permissionMode: 'bypassPermissions',
},
});
for await (const message of result) {
// handle messages: assistant turns, tool results, etc.
}
O harness vem em duas linhas: { type: 'preset', preset: 'claude_code' } em tools e em systemPrompt. O resto é iterar sobre as mensagens.
Como funciona por baixo
O SDK não chama a API da Anthropic direto. Ele sobe o claude CLI como subprocesso e conversa com ele por stdin/stdout, em JSON. Daí saem três consequências:
- Você precisa do
claudeCLI instalado. - As tools são as mesmas que você usa no CLI.
- Atualizou o CLI, mudou o comportamento do seu agente.
O que vem de graça
- Tools built-in: Read, Write, Edit, Bash, Grep, Glob, Agent, TodoWrite, WebSearch e outras.
- Skills: carrega do
~/.claude/skills/comskills: ['nome-da-skill']. Session management: retomar conversas e manter contexto.Context compaction: o SDK gerencia o contexto sozinho.- Hooks de ciclo de vida, pra interceptar e mudar comportamento.
- Suporte a servidores MCP (Model Context Protocol).
Referência
O ChatML é um projeto real que faz exatamente isso. É um app desktop pra macOS que usa o mesmo SDK com o preset claude_code pra entregar a experiência do Claude Code numa interface nativa.
No time a gente usa um wrapper interno, o cc-harness, que não é público. São ~300 linhas sobre o SDK que fazem a primeira passada de code review nos PRs de um projeto. Ele carrega as skills de review, abre o app no Chrome via MCP pra testar as mudanças de frontend e comenta no PR.
Ele nunca aprova nada. A IA faz a primeira passada, e uma pessoa faz a segunda.
Se você já usa Claude Code e quer automatizar ou embutir num produto, o SDK é o caminho mais curto. O que já existe não precisa ser reimplementado.
Por hoje é só.