2026-10-21, Python SDK 2.0.0, TypeScript SDK 1.0.0, модели поколения 5.5, кэширование, batch, MCP и Claude Agent SDK. Примеры сверены с документацией, но не запускались против API.Anthropic SDK — официальные клиентские библиотеки для Claude API: генерация текста, изображения и документы, потоковые ответы, инструменты, структурированный вывод и пакетные задания. Claude Agent SDK запускает готовый цикл Claude Code в вашей среде; Managed Agents размещает агентную среду у Anthropic.
Для примеров нужны Python, ключ Claude API и доступный баланс либо применимые API-кредиты. Model ID храните в конфигурации. В руководстве используется claude-sonnet-5-5.
Как выбрать подходящий инструмент
| Инструмент | Что даёт | Когда выбирать |
| Anthropic Client SDK | Прямой доступ к Messages API и другим API Anthropic | Нужен собственный цикл приложения и полный контроль над инструментами |
| Claude Agent SDK | Готовый агентный цикл, встроенные инструменты, контекст и разрешения Claude Code | Агент должен работать с файлами, командами и кодовой базой |
| Claude Code CLI | Интерактивная работа из терминала | Разработка и разовые задачи без встраивания в приложение |
| Managed Agents | Размещённые Anthropic долгие или асинхронные агенты с управляемой инфраструктурой | Не хочется самостоятельно обслуживать среду выполнения и сессии |
Claude Agent SDK доступен как библиотека для Python и TypeScript. Если нужен прямой вызов Claude API, используйте Client SDK: цикл инструментов можно реализовать самостоятельно или применить предоставляемый SDK beta tool runner. Готовый цикл не отменяет проверку прав и входных данных.
Установка и авторизация
Для показанной версии клиентских библиотек установите:
python -m pip install "anthropic==2.0.0"
# Альтернатива для TypeScript-проекта:
npm install --save-exact @anthropic-ai/sdk@1.0.0Клиент новой версии принимает один источник авторизации: не передавайте одновременно API-ключ, auth token и другой профиль учётных данных. Лицензия основных новых Client SDK — Apache 2.0 вместо MIT; условия Agent SDK проверяйте отдельно.
Ключ задайте в ANTHROPIC_API_KEY через защищённую конфигурацию среды. Не помещайте его в репозиторий, браузерный код, скриншоты или журналы. Созданный через Anthropic() клиент читает эту переменную; загрузку .env нужно организовать отдельно.
Миграция на API 2026-10-21
Новые основные версии SDK используют API 2026-10-21. Перед обновлением зависимостей прогоните контрольные запросы и проверьте руководство миграции:
- Удалите
temperature,top_p,top_k, включая прежние значения по умолчанию: теперь они дают HTTP 400. - Новые SDK отправляют API-ключ через
Authorization: Bearer, а неX-Api-Key. Проверьте прокси и шлюз; не дублируйте секрет в обоих заголовках. Ручные HTTP-запросы по-прежнему могут использоватьx-api-key. - Прямые блоки
documentперенесите из сообщений ассистента в пользовательские. Документы внутриtool_result— отдельный допустимый случай. Непустыеcitationsв пользовательских текстовых блоках запрещены; это не запрет включать цитирование документов или сохранять цитаты в сообщениях ассистента. - Python
MessageParamтеперь объединение типов: создавайте обычные словари вместоMessageParam(...). В TypeScript учитывайте сужение типов по роли сообщения. - Клиентская компактизация TS/Ruby tool runner через
compactionControlудалена: переходите на поддерживаемую серверную компактизацию либо документированныйcompactBeforeNextTurn(). Beta-параметры Models используйте через beta-клиент. - В TypeScript обновляйте SDK провайдеров Bedrock/Vertex/Foundry/AWS/Google Cloud согласованно с основной библиотекой. Старые модели Bedrock до 4.7 не поддерживают новую версию API: для них нельзя механически обновить заголовок.
- Если обслуживаете Admin API, проверьте замену
workspace_idнаscope, роли и область доступа ключей. ВantCLI удалены аргументы ключа и токена в командной строке — используйте защищённую передачу через среду.
Изменения валидации касаются также Message Batches и подсчёта токенов. Предыдущая версия API 2023-06-01 не объявляется отключённой только из-за выхода новой. Закрепите зависимости и сохраните проверенный путь отката.
Текущая линейка моделей
Цены Claude API на 24 октября 2026 года: доллары США за миллион токенов, стандартный режим, без дополнительных инструментальных сборов.
| Модель и ID | Вход | Выход | Контекст | Максимальный синхронный вывод |
Fable 5.1 — claude-fable-5-1 | $10 | $50 | 1 млн | 128 тыс. |
Opus 5.5 — claude-opus-5-5 | $4 | $20 | 1 млн | 128 тыс. |
Sonnet 5.5 — claude-sonnet-5-5 | $2 | $10 | 1 млн | 128 тыс. |
Haiku 5.5 — claude-haiku-5-5, вход до 100 тыс. включительно | $0,10 | $0,50 | 1 млн | 128 тыс. |
| Haiku 5.5, вход больше 100 тыс. | $0,50 | $2,50 | 1 млн | 128 тыс. |
У Haiku 5.5 порог включает весь вход текущего запроса, в том числе чтение и запись кэша. При превышении порога повышенный тариф применяется ко всему этому запросу, а не только к превышению; предыдущие запросы не пересчитываются.
Запись кэша на 5 минут стоит 1,25 обычной цены входа, на час — 2 цены. Чтение миллиона кэшированных токенов стоит $0,25 у Fable 5.1, $0,20 у Opus 5.5 и $0,10 у Sonnet 5.5. У Haiku 5.5 — $0,01 или $0,05 в зависимости от порога входа. Не применяйте ко всем моделям одно правило скидки на чтение.
Message Batches даёт скидку 50% к стандартным токенным тарифам. Fast mode для Opus 5.5 стоит $8/$40 за вход/выход, не сочетается с batch и с 15 октября доступен без специального beta-заголовка. Выполнение только в США через inference_geo увеличивает соответствующие токенные тарифы в 1,1 раза. Эти суммы не равны стоимости подписки Claude.
Настройки усилия в API: Opus 5.5/Haiku 5.5 — medium, Sonnet 5.5/Fable 5.1 — high. Opus 5.5 и Fable 5.1 всегда используют адаптивное рассуждение. Sonnet 5.5 не принимает thinking: disabled; для уменьшения рассуждений есть between_tools при low/medium/high. Haiku 5.5 при этих уровнях разрешает отключение thinking, но старый режим enabled с budget_tokens ему не подходит.
При переносе с Haiku 4.5 пересчитайте токены: токенизатор изменился. Нельзя переносить старые оценки стоимости и объёма изображений без измерения.
Messages API: минимальный рабочий вызов
Messages API принимает историю сообщений и генерирует следующий ответ ассистента. Системную инструкцию передают в верхнеуровневом поле system; в показанном базовом запросе используем верхнеуровневый system. Актуальная схема также описывает SystemMessageParam; расширенные сценарии системных сообщений внутри диалога сверяйте с выбранной версией и соответствующим руководством, а не переносите старый запрет на роль system.
from anthropic import Anthropic
client = Anthropic()
response = client.messages.create(
model='claude-sonnet-5-5',
max_tokens=2048,
output_config={"effort": "low"},
system='Ты — технический ассистент. Отвечай кратко и по делу.',
messages=[
{
'role': 'user',
'content': 'Объясни разницу между REST и GraphQL',
}
],
)
for block in response.content:
if block.type == 'text':
print(block.text)Проверяйте response.stop_reason и response.usage, а не только наличие объекта ответа. max_tokens включает рассуждения: для короткого примера задайте output_config={"effort": "low"} и увеличьте лимит при max_tokens. Следующие фрагменты продолжают пример с уже созданным client. API-вызовы и обработка изображений описаны в Messages API.
Потоковый ответ
На уровне API поток включается параметром stream: true. В Python SDK потоковый интерфейс выглядит так:
with client.messages.stream(
model='claude-sonnet-5-5',
max_tokens=2048,
output_config={"effort": "low"},
messages=[
{'role': 'user', 'content': 'Составь план архитектуры API'}
],
) as stream:
for text in stream.text_stream:
print(text, end='', flush=True)Изображения и документы
Поле content может быть строкой или массивом типизированных блоков. В него можно включать текст, изображения и документы:
import base64
with open('diagram.png', 'rb') as file:
image_data = base64.standard_b64encode(file.read()).decode()
response = client.messages.create(
model='claude-sonnet-5-5',
max_tokens=2048,
output_config={"effort": "low"},
messages=[
{
'role': 'user',
'content': [
{
'type': 'image',
'source': {
'type': 'base64',
'media_type': 'image/png',
'data': image_data,
},
},
{
'type': 'text',
'text': 'Опиши архитектуру на диаграмме и найди слабые места.',
},
],
}
],
)Для больших файлов отдельно проверьте Files API и поддерживаемый тип документа для выбранной модели. Ограничения на размер, число страниц и формат могут меняться.
Вызов собственных инструментов
Инструмент состоит из описания, схемы и функции приложения. Модель предлагает вызов, но не получает право исполнять произвольный код. На Opus 5.5 и Sonnet 5.5 используйте tool_choice: {"type": "auto"}; принудительные any/tool не поддерживаются. strict: true улучшает соответствие схеме, но не заменяет проверку доступа.
Самодостаточный учебный пример ищет только в заданном словаре и не обращается к внешним сервисам:
import json
from anthropic import Anthropic
client = Anthropic()
documents = {"возврат": "Заявки на возврат принимает служба поддержки."}
tools = [{
"name": "search_docs",
"description": "Ищет фрагменты в учебном справочнике по ключевому слову.",
"strict": True,
"input_schema": {
"type": "object",
"properties": {"query": {"type": "string"}},
"required": ["query"],
"additionalProperties": False,
},
}]
messages = [{"role": "user", "content": "Как подать заявку на возврат?"}]
for step in range(10):
response = client.messages.create(
model="claude-sonnet-5-5", max_tokens=4096,
output_config={"effort": "low"}, tools=tools,
tool_choice={"type": "auto"}, messages=messages,
)
# Сохраняем все блоки, включая thinking и подписи, без перестройки.
messages.append({"role": "assistant", "content": response.content})
calls = [b for b in response.content if b.type == "tool_use"]
if response.stop_reason == "max_tokens":
raise RuntimeError("Ответ усечён: увеличьте лимит и повторите безопасно")
if not calls:
if response.stop_reason != "end_turn":
raise RuntimeError(f"Неожиданное завершение: {response.stop_reason}")
text = "\n".join(b.text for b in response.content if b.type == "text")
if not text:
raise RuntimeError("Нет окончательного текста")
print(text)
break
results = []
for call in calls:
args = call.input
valid = (
call.name == "search_docs" and isinstance(args, dict)
and set(args) == {"query"} and isinstance(args["query"], str)
and 0 < len(args["query"].strip()) <= 200
)
if not valid:
results.append({"type": "tool_result", "tool_use_id": call.id,
"is_error": True, "content": "Недопустимый запрос"})
continue
query = args["query"].strip().casefold()
found = [v for k, v in documents.items() if query in k or k in query]
results.append({"type": "tool_result", "tool_use_id": call.id,
"content": json.dumps(found, ensure_ascii=False)})
messages.append({"role": "user", "content": results})
else:
raise RuntimeError("Достигнут предел в 10 шагов")Если модель запросила несколько инструментов, верните все результаты одним пользовательским сообщением с соответствующими tool_use_id. Для сетевого поиска дополнительно нужны проверка прав на документы, таймаут, ограничения объёма и защита от недоверенных инструкций в найденном тексте. Для действий с побочными эффектами — подтверждение и защита от повторного выполнения. Не перестраивайте задним числом system, инструменты и раннюю историю с подписанными thinking-блоками: проверка префикса может отклонить продолжение.
Структурированный JSON
Если приложению нужен ответ по заданной схеме, передайте JSON Schema через output_config.format:
import json
text_to_analyze = "24 октября 2026 года компания Пример представила новый сервис."
response = client.messages.create(
model='claude-sonnet-5-5',
max_tokens=2048,
output_config={
'effort': 'low',
'format': {
'type': 'json_schema',
'schema': {
'type': 'object',
'properties': {
'persons': {
'type': 'array',
'items': {'type': 'string'},
},
'companies': {
'type': 'array',
'items': {'type': 'string'},
},
'dates': {
'type': 'array',
'items': {'type': 'string'},
},
},
'required': ['persons', 'companies', 'dates'],
'additionalProperties': False,
},
}
},
messages=[
{'role': 'user', 'content': text_to_analyze}
],
)
if response.stop_reason != 'end_turn':
raise RuntimeError(f'Ответ не завершён: {response.stop_reason}')
texts = [block.text for block in response.content if block.type == 'text']
if not texts:
raise RuntimeError('Нет JSON-ответа')
entities = json.loads(''.join(texts))
expected = {'persons', 'companies', 'dates'}
if (not isinstance(entities, dict) or set(entities) != expected
or any(not isinstance(v, list)
or any(not isinstance(x, str) for x in v)
for v in entities.values())):
raise ValueError('Ответ не соответствует ожидаемой структуре')
print(entities)Структурированный ответ не отменяет обработку отказа, усечения и смысловую проверку извлечённых значений. Он подходит для извлечения данных, классификации и передачи результата в следующий этап программы. Схема аргументов инструмента решает соседнюю задачу: описывает данные, которые модель должна передать конкретной функции.
Prompt caching: кэширование повторяющегося контекста
Prompt caching сохраняет префикс запроса: определения инструментов, системные инструкции и сообщения до контрольной точки. Это снижает задержку и стоимость повторной обработки одинакового большого контекста.
Есть два режима:
- автоматический:
cache_controlзадаётся на уровне запроса, а контрольная точка перемещается по мере роста диалога; - явный:
cache_controlставится на конкретный блок в конце стабильного префикса.
По умолчанию используется тип ephemeral со сроком жизни 5 минут. Для сценариев с большими паузами доступен TTL 1h; запись такого кэша стоит дороже.
response = client.messages.create(
model='claude-sonnet-5-5',
max_tokens=2048,
output_config={"effort": "low"},
system=[
{
'type': 'text',
'text': '<большой постоянный контекст>',
'cache_control': {'type': 'ephemeral'},
}
],
messages=[
{'role': 'user', 'content': 'Ответь по этому контексту'}
],
)
print(response.usage.cache_creation_input_tokens)
print(response.usage.cache_read_input_tokens)Автоматический режим включается так:
response = client.messages.create(
model='claude-sonnet-5-5',
max_tokens=2048,
output_config={"effort": "low"},
cache_control={'type': 'ephemeral'},
system='Постоянная системная инструкция',
messages=[{'role': 'user', 'content': 'Ответь по контексту'}],
)Для явного кэширования ставьте контрольную точку на последнем блоке, который остаётся полностью одинаковым между запросами. Если включить в префикс текущую дату или другой меняющийся блок, совпадения кэша не будет.
У API есть окно обратного поиска в 20 блоков и до четырёх контрольных точек. Минимальная длина кэшируемого префикса зависит от модели и платформы; для Fable 5.1, Opus 5.5, Sonnet 5.5 и Haiku 5.5 в Claude API — 512 токенов. Ограничения Bedrock проверяйте отдельно. Строки-заглушки в примерах ниже минимального порога: замените их реальным стабильным контекстом. Стоимость чтения Sonnet 5.5 — $0,10 за миллион токенов; запись на 5 минут — $2,50, на час — $4. Диагностика кэша доступна без beta-заголовка с 23 сентября; без запроса diagnostics поле диагностики может быть null.
Если cache_creation_input_tokens и cache_read_input_tokens равны нулю, проверьте длину префикса и точное совпадение блоков.
Message Batches: массовая асинхронная обработка
Message Batches API подходит для суммаризации, перевода, классификации, извлечения данных и массовых проверок, которым не нужен немедленный ответ. Пакетная обработка стоит на 50% дешевле стандартных вызовов Messages API.
Ограничения на дату проверки:
- до 100 000 запросов или 256 MB в одном batch, в зависимости от того, какой предел достигнут раньше;
- большинство пакетов завершается менее чем за час, предельное окно обработки составляет 24 часа;
- результаты доступны 29 дней после создания;
custom_idдолжен быть уникальным и содержать от 1 до 64 букв, цифр, дефисов или подчёркиваний;- результаты могут приходить не в порядке исходных запросов;
- внутри batch не поддерживаются
stream: true, Fast mode,fallbacksиmax_tokens: 0; - для каждого элемента batch значение
max_tokensдолжно быть не меньше 1.
from anthropic import Anthropic
from anthropic.types.message_create_params import MessageCreateParamsNonStreaming
from anthropic.types.messages.batch_create_params import Request
client = Anthropic()
batch = client.messages.batches.create(
requests=[
Request(
custom_id='post-1',
params=MessageCreateParamsNonStreaming(
model='claude-sonnet-5-5',
max_tokens=2048,
output_config={"effort": "low"},
messages=[
{
'role': 'user',
'content': 'Суммаризируй текст...',
}
],
),
),
Request(
custom_id='post-2',
params=MessageCreateParamsNonStreaming(
model='claude-sonnet-5-5',
max_tokens=2048,
output_config={"effort": "low"},
messages=[
{
'role': 'user',
'content': 'Извлеки ключевые факты...',
}
],
),
),
]
)
print(batch.id, batch.processing_status)Проверяйте client.messages.batches.retrieve(batch.id).processing_status; переходите к результатам после ended. Для поддерживаемых моделей вывод до 300 тыс. токенов требует beta output-300k-2026-03-24; он не доступен для Fable 5.1.
После завершения обрабатывайте каждую запись по custom_id и типу результата: succeeded, errored, canceled или expired.
for entry in client.messages.batches.results(batch.id):
print(entry.custom_id, entry.result.type)Prompt caching можно сочетать с batch. Попадания в кэш при параллельной асинхронной обработке предоставляются на основе доступности, поэтому для общего контекста имеет смысл рассмотреть TTL 1h и одинаковые контрольные точки во всех запросах.
MCP и внешние инструменты
MCP connector Claude API подключает удалённые HTTPS-серверы. В mcp_servers задаются сервер, имя и URL; в tools — соответствующий mcp_toolset с тем же именем. OAuth и обновление токена обеспечивает ваше приложение. Локальный stdio, ресурсы и prompts требуют другого MCP-клиента либо Agent SDK: API-коннектор не реализует весь протокол.
- Базовая beta —
mcp-client-2025-11-20. - Beta
mcp-client-2026-09-15включает базовые возможности и закрепление полученного списка инструментов; это возможность Claude API. - Ответ может содержать
mcp_tool_listingперед текстом. Сохраняйте его с сообщением ассистента и используйте ту же beta в продолжении, чтобы не потерять закреплённый набор инструментов. - Настройки доступа задаются в
mcp_toolset.default_configиconfigs, а не в старомtool_configurationна уровне сервера.
Начинайте с запрета по умолчанию и разрешайте только нужные инструменты чтения. Проверяйте домен сервера, запрашиваемые права и передаваемые данные; вызовы отправки, изменения и удаления требуют отдельной политики подтверждения. Ответ сервера считайте недоверенным содержимым.
С 20 октября администратор организации может запретить web fetch: запрос с таким инструментом вернёт HTTP 400. Признак поддержки в Models API не обходит политику организации.
Claude Agent SDK
Claude Agent SDK запускает процесс Claude Code в вашей среде и предоставляет встроенные инструменты, цикл, разрешения и работу с контекстом. Это отдельные пакеты claude-agent-sdk и @anthropic-ai/claude-agent-sdk, а не новые имена Client SDK. Для Managed Agents среда размещена у Anthropic.
По быстрому старту нужны Python 3.10+ либо Node.js 18+; бинарный файл Claude Code обычно входит в поставку, но это зависит от платформы и установки optional dependencies. Не путайте требования Agent SDK с Node.js 22+ для npm-установки самого Claude Code.
python -m pip install --upgrade claude-agent-sdkПосле проверки закрепите точную установленную версию в зависимостях. Пример анализа без инструментов записи:
import asyncio
from pathlib import Path
from claude_agent_sdk import ClaudeAgentOptions, ResultMessage, query
async def main():
options = ClaudeAgentOptions(
cwd=str(Path.cwd()),
model="claude-sonnet-5-5",
tools=["Read", "Glob", "Grep"],
allowed_tools=["Read", "Glob", "Grep"],
disallowed_tools=["Bash", "Write", "Edit"],
permission_mode="plan",
setting_sources=[],
strict_mcp_config=True,
mcp_servers={},
max_turns=5,
max_budget_usd=1.0,
)
async for message in query(
prompt="Изучи README и назови основные модули. Не изменяй файлы.",
options=options,
):
if isinstance(message, ResultMessage):
if message.is_error:
raise RuntimeError("Агент завершился с ошибкой или достиг лимита")
print(message.result)
asyncio.run(main())Параметр allowed_tools только предварительно одобряет инструменты, а не ограничивает их список; для выбора доступных встроенных инструментов используется tools. По умолчанию загружаются пользовательские, проектные и локальные настройки. setting_sources=[] отключает эти источники, но не все входные инструкции и не управляемую политику. В Python SDK 0.1.59 и старше пустой список не отключал загрузку настроек — обновитесь перед использованием такого ограничения.
Среди изменений сентября и октября — подписанная компактизация по запросу (compact-2026-09-04), beta-классы browser/computer toolset для Python и TypeScript, а также динамические workflows Managed Agents. Они требуют отдельного подключения: наличие Client SDK не предоставляет браузер, рабочий стол или безопасную среду исполнения автоматически. При компактизации возвращайте подписанный блок вместо старой истории согласно протоколу и сохраняйте последующие сообщения без перестройки.
API-кредиты Max и Team могут покрывать подходящие вызовы API и Agent SDK после привязки Console-организации; они не оплачивают подписочное использование Claude Code и не означают безлимитный доступ.
Эта конфигурация не заменяет изоляцию ОС. Запускайте процесс в отдельной копии проекта, без производственных секретов; проверяйте управляемые хуки и настройки. Авторизация через API-ключ или поддерживаемого провайдера отличается от подписки Claude. Нельзя предлагать пользователям стороннего продукта вход через claude.ai и расход их подписочных лимитов без предварительного разрешения Anthropic.
Ошибки, таймауты и повторные попытки
Обрабатывайте как минимум четыре класса сбоев:
- сетевые ошибки и таймауты;
- ограничение частоты запросов;
- ошибки запроса, которые нельзя исправить повтором;
- временные серверные ошибки и перегрузку.
Параметры ретраев, таймаутов и названия исключений зависят от версии SDK. Общая схема выглядит так:
import anthropic
client = anthropic.Anthropic(
max_retries=2,
timeout=120.0,
)
try:
response = client.messages.create(
model='claude-sonnet-5-5',
max_tokens=2048,
output_config={"effort": "low"},
messages=[{'role': 'user', 'content': 'Привет'}],
)
except anthropic.RateLimitError:
# Поставить запрос в очередь или повторить позже с backoff
...
except anthropic.APIStatusError as error:
print(error.status_code) # Не выводим тело запроса, ключи и документы
except anthropic.APIConnectionError:
# Проверить сеть и политику повторов
...Значения таймаута и числа повторов в примере — стартовая конфигурация, а не гарантия для любой нагрузки. Для длинного вывода используйте поток и общий срок задачи. SDK уже выполняет ограниченные повторы: не умножайте их дополнительным бесконтрольным циклом. Не повторяйте без изменений ошибку валидации. Для временных сбоев используйте экспоненциальную задержку с разбросом, ограничение числа попыток и идемпотентность операций вашего приложения.
Полезные сценарии
Ответы по внутренней базе знаний
Исходные данные: документы компании и поисковый инструмент. Приложение передаёт модели вопрос, модель вызывает поиск, а найденные фрагменты возвращаются через tool_result.
Наблюдаемый результат: финальный ответ опирается на найденные документы, а журнал показывает конкретный запрос и использованные результаты. Сценарий не подходит для действий с данными без отдельного уровня разрешений.
Извлечение данных из документов
Исходные данные: текст или поддерживаемый документ и JSON Schema. Приложение запрашивает структурированный вывод, проверяет обязательные поля и сохраняет результат.
Наблюдаемый результат: строка из ответа разбирается как JSON и проходит проверку схемы. Для юридически или финансово значимых документов добавьте проверку человеком.
Массовая обработка контента
Исходные данные: набор независимых текстов, для которых немедленный ответ не требуется. Каждый запрос получает уникальный custom_id и отправляется через Message Batches API.
Наблюдаемый результат: ответы сопоставляются с исходными задачами по custom_id; ошибки и истёкшие запросы попадают в отдельную очередь повторной обработки.
Агент для работы с репозиторием
Исходные данные: изолированная рабочая копия проекта, тестовая команда и ограниченный набор разрешений. Claude Agent SDK анализирует файлы, предлагает или вносит изменения и запускает проверку.
Наблюдаемый результат: изменённые файлы видны в diff, а тесты завершаются ожидаемым кодом выхода. Не предоставляйте агенту производственные секреты или неограниченный доступ к системе.
Как проверить интеграцию
Минимальная проверка Client SDK:
- Закрепите SDK и API-версию; проверьте заголовки шлюза и удалённые параметры. Установите SDK и задайте
ANTHROPIC_API_KEY. - Отправьте короткий Messages API-запрос.
- Проверьте, что ответ содержит текстовый блок.
- Запишите
response.id, используемую модель,stop_reasonи поляusage. - Повторите тест с заведомо неверным параметром и убедитесь, что приложение регистрирует ошибку.
Для инструментов дополнительно проверьте:
- неизвестное имя инструмента отклоняется приложением;
- параметры валидируются до выполнения;
- несколько параллельных
tool_useвозвращаются одним пользовательским сообщением с соответствующимиtool_result; - цикл останавливается по лимиту итераций;
- опасное действие требует отдельного разрешения.
Для prompt caching смотрите cache_creation_input_tokens на первом запросе и cache_read_input_tokens на повторном запросе с тем же префиксом. Для batch проверяйте финальный статус и число элементов во всех категориях результатов.
Чеклист перед запуском
2026-10-21custom_idcustom_id, а не по порядкуСледующий шаг
Claude Code — кодинг-агент от Anthropic
Если вы выбираете архитектуру приложения на Claude или определяете границы доступа агента, полезно заранее разобрать цикл инструментов, модель угроз и способ проверки результата.
Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov

