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 claude CLI 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/ com skills: ['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ó.