Claude Code в терминале — это удобно, но что если агент должен жить внутри твоей программы, бота или сервиса? Для этого есть Agent SDK: тот же движок, но в виде кода. Разберём, что это и как собрать первого агента.
Этот гайд — для тех, кто уже освоился с Claude Code в терминале и хочет шаг дальше: встроить агента в собственный продукт. Telegram-бот, который сам чинит баги по тикету. Скрипт, который ночами разбирает входящие письма. Сервис, где агент — часть бэкенда. Всё это собирается через Claude Agent SDK — библиотеку, которая даёт движок Claude Code в виде кода. Тема техническая, поэтому термины разберём по дороге, но предполагается, что код ты хотя бы читаешь.
Что узнаешь из гайда
Часть 1 · Понятие
Главное
Agent SDK — это движок Claude Code в виде библиотеки. Тот же агент, что в терминале, но вызывается из твоего кода функцией query(), а не руками в чате.
Разберём слова. SDK (software development kit) — это набор кода, который ты подключаешь к своей программе как библиотеку, чтобы пользоваться чужой функциональностью. Agent — сам Claude, который умеет читать файлы, запускать команды и править код. Сложив, получаем: Claude Agent SDK даёт тебе того же агента, что живёт в Claude Code, но управляешь ты им из кода — вызовом функции, а не набором в терминале.
SDK выходит в двух вариантах под популярные языки. Для TypeScript/JavaScript — пакет @anthropic-ai/claude-agent-sdk, ставится через npm. Для Python — пакет claude-agent-sdk, ставится через pip. API в обоих почти зеркальный, поэтому выбираешь язык, на котором уже пишешь свой продукт.
# TypeScript / JavaScript — через npm
npm install @anthropic-ai/claude-agent-sdk
# Python — через pip (в виртуальном окружении)
pip install claude-agent-sdkТерминал — это ты за рулём. SDK — это твоя программа за рулём, агент внутри неё.
Часть 2 · Разница
Главное
В терминале диалог ведёшь ты. Через SDK диалог ведёт твоя программа: вызывает агента, читает его сообщения в цикле и встраивает результат в продукт. Человек за клавиатурой не нужен.
Когда ты работаешь в Claude Code из терминала, цикл простой: ты пишешь — агент отвечает — ты смотришь — пишешь снова. Через SDK этот цикл берёт на себя код. Твоя программа отправляет запрос, получает поток сообщений от агента и сама решает, что с ними делать: показать пользователю, записать в базу, дёрнуть следующий шаг.
| Критерий | Терминал | Agent SDK |
|---|---|---|
| Кто ведёт диалог | Человек | Твоя программа |
| Где живёт агент | В терминале | Внутри твоего кода |
| Для чего | Ручная работа | Продукт, бот, сервис |
| Нужен ли человек | Да, за рулём | Нет, работает сам |
Важно
Если тебе нужно просто запустить агента без чата в скрипте или CI — не обязательно лезть в SDK. Часто хватает headless-режима (флаг -p у самой команды claude). SDK берут, когда нужен не один запуск, а агент как полноценная часть программы — с обработкой каждого сообщения и своей логикой вокруг.
Часть 3 · Код
Главное
Минимальный агент — это вызов query() с запросом и цикл по его сообщениям. Опции (системный промт, права, рабочая папка) задаются рядом.
Главная функция SDK — query(). Ты передаёшь ей запрос и опции, а она возвращает поток сообщений от агента, который ты обходишь циклом. Вот рабочий минимум на Python:
import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions
async def main():
# Опции: системный промт, режим прав, рабочая папка
options = ClaudeAgentOptions(
system_prompt="Ты аккуратный Python-разработчик",
permission_mode="acceptEdits", # сам принимает правки файлов
cwd="/home/user/project",
)
# query() возвращает поток сообщений — обходим его в цикле
async for message in query(prompt="Сделай простой веб-сервер", options=options):
print(message)
asyncio.run(main())Тот же агент на TypeScript выглядит почти так же — меняются только синтаксис и имена опций (в TS они в camelCase):
import { query } from "@anthropic-ai/claude-agent-sdk";
// Поток сообщений обходим через for await
for await (const message of query({
prompt: "Сделай простой веб-сервер",
options: {
systemPrompt: "Ты аккуратный разработчик",
permissionMode: "acceptEdits",
cwd: "/home/user/project",
},
})) {
console.log(message);
}Один нюанс про системный промт
По умолчанию SDK даёт агенту минимальный системный промт, а не тот развёрнутый, что у Claude Code в терминале. Если хочешь поведение «как у Claude Code», задай пресет явно: systemPrompt: { type: "preset", preset: "claude_code" }. Иначе агент будет проще — это сделано, чтобы ты сам управлял его характером.
Часть 4 · Инструменты
Главное
Агенту можно дать свои функции — посчитать, сходить в базу, дёрнуть сервис. В Python это декоратор tool плюс create_sdk_mcp_server; агент вызывает их сам по необходимости.
Настоящая сила SDK — когда агент умеет не только править код, но и выполнять твои действия. Это делается через инструменты (tools): обычные функции, которые ты помечаешь как доступные агенту. Он сам решает, когда их вызвать. Вот инструмент-калькулятор на Python:
from claude_agent_sdk import tool, create_sdk_mcp_server
# Помечаем функцию как инструмент: имя, описание, какие принимает аргументы
@tool("calculate", "Считает математическое выражение", {"expression": str})
async def calculate(args):
result = eval(args["expression"], {"__builtins__": {}})
return {"content": [{"type": "text", "text": f"Результат: {result}"}]}
# Собираем инструменты в локальный MCP-сервер — отдаём его агенту
my_server = create_sdk_mcp_server(name="utils", version="1.0.0", tools=[calculate])Дальше этот сервер передают агенту в опциях и разрешают конкретные инструменты — что не разрешено, агент вызвать не сможет. Тема прав отдельно важна для безопасности, про неё — в гайде про права Claude Code. А что такое MCP вообще — в гайде про MCP-серверы.
Коротко
@tool + create_sdk_mcp_server; агент зовёт их сам.Часть 5 · Граница
SDK — мощный, но не бесплатный по сложности: это код, который надо писать и поддерживать. Чтобы не строить ракету ради поездки в магазин, держи в голове, где он реально окупается:
Когда SDK не нужен
Если ты просто работаешь над своим проектом руками — хватит терминала, SDK тут лишний. Для разового запуска без чата в скрипте бери headless-режим, а не библиотеку. А если хочется «ИИ-команду» из нескольких агентов на каждый день без программирования — это субагенты, они настраиваются файлами, а не кодом.
Коротко
query() + цикл по сообщениям.Вопросы
Claude Agent SDK — это программная библиотека, которая даёт тот же движок, что и Claude Code в терминале, но в виде кода для встраивания в свои программы. Вместо того чтобы общаться с агентом руками в чате, ты вызываешь функцию query() из своего скрипта и получаешь ответы и действия агента программно. Есть версии для TypeScript (пакет @anthropic-ai/claude-agent-sdk) и для Python (пакет claude-agent-sdk).
Обычный Claude Code — это интерактивный агент в терминале, которым ты управляешь руками; Agent SDK — тот же агент, встроенный в твой код как библиотека. Разница в способе запуска: в терминале ты ведёшь диалог сам, а через SDK твоя программа вызывает агента в цикле, обрабатывает его сообщения и встраивает в свой продукт. SDK нужен, когда агент должен работать внутри сервиса, бота или скрипта без человека за клавиатурой.
Claude Agent SDK официально поддерживает TypeScript/JavaScript и Python. Для TypeScript ставится пакет @anthropic-ai/claude-agent-sdk через npm, для Python — пакет claude-agent-sdk через pip. API в обоих почти зеркальный: главная функция query() принимает запрос и опции и возвращает поток сообщений агента, который ты обходишь в цикле.
Да, через Agent SDK агенту можно дать собственные инструменты — функции, которые он вызывает по необходимости. В Python они объявляются декоратором tool и собираются в локальный MCP-сервер функцией create_sdk_mcp_server, в TypeScript логика аналогичная. Так агент получает доступ к твоим действиям — посчитать, сходить в твою базу или дёрнуть внешний сервис — оставаясь под контролем разрешённых инструментов.
Читать дальше
Прикладной материал, разборы и рабочие приёмы — то, чем пользуюсь сам, без воды. Залетай, там самое полезное.
Зайти в Telegram