A maioria das pessoas conhece o Claude Code como CLI: você abre o terminal, conversa com o agente, ele edita arquivos, roda comandos, faz review de PR. O que muita gente não sabe é que dá pra usar todo esse harness programaticamente — tools, system prompt, agent loop, skills — sem construir nada do zero.

O problema

Se você quer construir um agente que opera no seu codebase, a tentação é pegar a API da Anthropic e construir tudo na mão: definir tools, escrever system prompt, implementar o loop de tool-use, lidar com contexto,Permissions… é muito código antes de chegar no valor.

E no fim, você reimplementa uma versão pior do que o Claude Code já faz.

A descoberta

O @anthropic-ai/claude-agent-sdk tem um preset que ativa tudo do Claude Code em uma linha cada:

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: ['kooick-pr-review'],
    permissionMode: 'bypassPermissions',
  },
});

for await (const message of result) {
  // handle messages: assistant turns, tool results, etc.
}

São duas linhas que carregam todo o harness: { type: 'preset', preset: 'claude_code' } pra tools e systemPrompt. O resto é iterar sobre as mensagens.

Como funciona por baixo

O SDK não chama a API da Anthropic diretamente. Ele spawna o claude CLI como subprocess e se comunica via stdin/stdout com JSON. Isso significa:

  • Você precisa do claude CLI instalado
  • As tools são as mesmas que você usa no CLI
  • Atualiza o CLI = atualiza o comportamento do seu agente

O que você ganha de graça

  • Tools built-in: Read, Write, Edit, Bash, Grep, Glob, Agent, TodoWrite, WebSearch, e mais
  • Skills: carrega skills do ~/.claude/skills/ com skills: ['nome-da-skill']
  • Session management: retomar conversas, manter contexto
  • Context compaction: o SDK cuida do gerenciamento de contexto sozinho
  • Hooks: lifecycle hooks pra interceptar e modificar comportamento
  • MCP: suporte a Model Context Protocol servers

Referência

Um projeto real que faz exatamente isso é o ChatML — um app desktop macOS que usa o mesmo SDK com o preset claude_code pra oferecer a experiência do Claude Code numa interface nativa.

Se você quiser ver um wrapper minimalista (~300 linhas), dê uma olhada no cc-harness que montamos no time — funciona como uma camada fina sobre o SDK.


No fim das contas, se você já usa Claude Code e quer automatizar ou embedar num produto, o SDK é o caminho mais curto. Não precisa reimplementar o que já existe.