Блог • AI / Agent
Как работает AI Coding Agent? Claude Code, Codex, Xcode 27 Agent, Tool Calling и данные JSON
Откройте Claude Code, Codex или Xcode 27 — интерфейс как чат. Репозиторий правит, тесты гоняет и симулятор тыкает не этот ответ на естественном языке.
AI Coding Agent работает так: модель решает следующий шаг и шлёт Tool Calling; локальный или внутри IDE harness исполняет инструмент и возвращает структурированный результат. Параметры и результаты почти всегда JSON.
В этой статье:
- Какой слой Coding Agent добавляет сверх автодополнения
- Общий цикл: наблюдать → решать → исполнять → записывать обратно
- Почему arguments в Tool Calling приходят JSON-строкой
- Куда Claude Code, Codex и Xcode 27 Agent кладут ящик инструментов
- На каком слое проверяют JSON / JSON Schema и как это разложить локально в JSONNote
Запомните это: Интерфейс как чат. Реальная работа — Tool Calling. Модель выбирает инструмент и заполняет JSON-параметры. Сможет ли она править файлы, гонять тесты или достать симулятор, зависит от того, какие инструменты, права и проверки дал harness. Дальше: цикл → вызовы инструментов → три продукта → JSON-контракты.
Не окно чата — цикл
Автодополнение отвечает на «какая следующая строка». Coding Agent отвечает на «как довести цель в живом проекте»: прочитать контекст, выбрать инструмент, поправить код, запустить команду, посмотреть результат, решить снова.
В официальных документах слова меняются. Форма одна. Claude Code пишет: собрать контекст → действовать → проверить результат. Xcode 27 сначала планирует, потом правит, потом сам проверяет сборкой / тестами / Preview / симулятором. Под капотом оба — это:
-
1
Наблюдение
Читать файлы, искать символы, смотреть git status, тянуть логи упавших тестов. Без этого шага следующий патч — угадайка.
-
2
Решение
В контексте модель выбирает следующий шаг: ещё раз прочитать, ещё поискать, поправить одно место, запустить одну команду или спросить вас.
-
3
Исполнение
harness принимает tool call и реально гоняет его под правами и sandbox. Модель в этот момент диск не трогает.
-
4
Обратная запись
Результаты инструмента становятся текстом или JSON и возвращаются в контекст. Модель идёт дальше по новым уликам или объявляет работу сделанной.
Вы тоже в этом цикле: прервать, развернуть, одобрить рискованное действие. Модель рассуждает. harness владеет инструментами, правами, сессиями и тем, что значит «готово». Как четыре продукта дерутся за этот контроль, см.
Эта статья разбирает только, как крутится цикл и на каком переходе появляется JSON. Слои стека — в
Стек AI Agent 2026: как сочетать LLM, MCP, Function Calling и JSON Schema?.
Tool Calling: параметры — это JSON
Tool Calling (он же Function Calling) — не синоним «модель умеет писать код». Это структурированный вызов функции: модель выбирает имя из объявленных вами инструментов и генерирует JSON, который должен лечь в контракт параметров.
В OpenAI-совместимых API поле parameters в определении инструмента само по себе JSON Schema:
{
"type": "function",
"function": {
"name": "run_tests",
"description": "Run the project test suite and return a structured summary.",
"parameters": {
"type": "object",
"properties": {
"suite": { "type": "string", "enum": ["unit", "integration", "e2e"] },
"path": { "type": "string", "minLength": 1 }
},
"required": ["suite"],
"additionalProperties": false
}
}
}
Когда модель отвечает, arguments часто строка, а не уже распарсенный объект:
{
"id": "call_8f21",
"type": "function",
"function": {
"name": "run_tests",
"arguments": "{\"suite\":\"unit\",\"path\":\"src/auth\"}"
}
}
Поэтому бизнес-слой делает минимум два дела: распарсить строку в валидный JSON, затем проверить поля, типы и enum по объявленной schema. Пропавшие кавычки, лишние запятые и необъявленные ключи случаются на этом переходе — не на переходе «модель звучала умно».
Полный круг: запрос со schema → модель выбирает инструмент и генерирует arguments → вы парсите и проверяете → исполняете инструмент → кормите результат как tool message → модель продолжает. Ясная schema попадает в первые arguments. Размытая крутит цикл вхолостую.
Как писать контракт и чем JSON Mode отличается от Strict Schema — в
Зачем AI Agent нужен JSON Schema? От Tool Calling до Structured Output.
Claude Code: встроенные инструменты плюс слой расширений
Официальная документация Claude Code делит Agent на две части: модель, которая рассуждает, и инструменты, которые действуют. Без инструментов Claude умеет только вернуть текст. С инструментами — читать репозиторий, править файлы, гонять команды и искать в вебе.
Встроенные инструменты примерно пяти групп: файлы (Read / Edit / Write), поиск (Grep / Glob), исполнение (Bash), веб (WebSearch / WebFetch) и интеллекта кода, которому нужен плагин (переход к определению, ошибки типов). Субагенты и вопрос к вам тоже инструменты — для оркестрации.
Круг «починить упавшие тесты» в цикле может выглядеть так:
-
1
Bash гоняет тесты
Сначала увидеть, какой assert взорвался, а не сразу править код.
-
2
Grep / Read находят исходник
По стеку и символам втянуть нужный контекст в окно.
-
3
Edit делает точную замену
Документация требует сначала прочитать, потом править: old_string → new_string, чтобы не писать вслепую.
-
4
Снова прогнать тесты
Результаты возвращаются в контекст. При провале цикл крутится снова, а не вслух говорит «должно быть нормально».
Слой расширений сидит на этом цикле. Он его не заменяет:
- CLAUDE.md: договорённости проекта, которые должна знать каждая сессия
- Skills: рабочие процессы по требованию, чтобы не запихивать каждый урок в системный промпт
- MCP: инструменты внешних систем, по умолчанию ищутся по требованию, чтобы не раздувать контекст
- Hooks / Permissions: детерминированные стопы. Опасные команды и защищённые пути не должны зависеть от того, вспомнит ли модель в этот раз
Инженерный компромисс Claude Code ясен: вероятностный Agent плюс детерминированные Hooks. Сессии ещё пишутся в JSONL, чтобы продолжать и ветвить. Отлаживаете вы часто поток событий инструментов, а не «один чат».
Codex: sandbox, одобрения и JSONL
Codex тоже крутит цикл Agent, но центр продукта — как приземляется команда, которую сгенерировала модель. В терминале, когда запускаете
Codex CLI, сначала выбираете sandbox и одобрения, потом даёте модели действовать.
| Переключатель | Типичные значения | Что ограничивает |
|---|---|---|
| sandbox | read-only / workspace-write / danger-full-access | Куда командам можно писать и есть ли выход в сеть |
| approval-policy | untrusted / on-request / never | Нужен ли человеческий клик на повышение прав или рискованное действие |
Для автоматизации берите codex exec --json. stdout становится JSONL: старт и конец thread / turn, исполнение команд, правки файлов, вызовы MCP, обновления плана. Скрипты CI едят поток событий, не абзац прозы.
{"type":"item.completed","item":{"id":"item_12","type":"command_execution","command":"npm test -- src/auth","exit_code":1,"aggregated_output":"FAIL src/auth/session.test.ts"}}
{"type":"item.completed","item":{"id":"item_13","type":"file_change","path":"src/auth/session.ts","kind":"update"}}
{"type":"turn.completed","usage":{"input_tokens":18420,"output_tokens":966}}
Когда downstream нужны стабильные поля, используйте --output-schema, чтобы финальный ответ лёг в JSON Schema. Это тот же род контракта, что parameters у Tool Calling. Держит JSON в конце задачи, не каждую команду по пути.
По умолчанию codex exec — sandbox только на чтение. Чтобы править файлы, явно добавьте --sandbox workspace-write. Если нужны ещё каталоги, берите --add-dir, а не сразу danger-full-access.
Xcode 27 Agent: план, проверка, инструменты редактора
На WWDC 2026 Apple поставила Xcode 27 как место, где на платформах Apple пишут код вместе с Agent. В отличие от терминального Agent, ящик инструментов живёт в IDE.
What’s new in Xcode 27 проясняют несколько вещей:
- Диалог живёт в панели редактора: можно делить экран с кодом, смотреть diff и артефакты
/planсначала разведка репозитория и план, без правок исходников; субагенты могут собирать контекст параллельно- На этапе реализации проверяет своими инструментами Xcode: сборка, тесты, рендер SwiftUI Preview, тап по App в симуляторе или Device Hub
- Ошибки сборки сразу возвращаются Agent, он правит и собирает снова по логу падения
- Модель не заперта у одного вендора: Anthropic, Google, OpenAI и локальные модели
- MCP подключает внешние инструменты; ACP приводит внешних Agent (включая такие, как OpenCode) в Xcode
Лаборатория WWDC ставит Chat против Agent как разрыв возможностей, не разрыв текста: у Chat маленький фиксированный набор инструментов; режим Agent добавляет командную строку и внутренние инструменты Xcode (сборка, тесты, Preview, симулятор). Режим безопасности по умолчанию — запросы прав: Agent достаёт то, что нужно задаче, но по диску гулять не может.
Для тех, кто пишет JSON, смысл этого перехода в Xcode такой: результаты проверки тоже структурированная обратная запись. Падения сборки, сводки тестов и артефакты Preview становятся следующим входом Agent. На бэкенде вы по-прежнему видите свой API JSON. В IDE тот же цикл ест вывод инструментов Xcode.
Системный Siri AI идёт через App Intents, не через этого редакторного Agent. Не склеивайте две линии в «у Apple только один вид Agent». См.
Три продукта, один цикл, разные ящики инструментов
Списки функций будут всё больше похожи. Разница — в инструментах по умолчанию, границе исполнения и в том, как результат становится контекстом следующего круга.
| Слой | Claude Code | Codex | Xcode 27 Agent |
|---|---|---|---|
| Цикл | Наблюдать → действовать → проверять | Тот же цикл + поток событий | План → правка → проверка в IDE |
| Инструменты по умолчанию | Read / Edit / Bash / Grep | shell + MCP + plan | Сборка / тесты / Preview / симулятор |
| Расширения | Skills, MCP, Hooks | MCP, Agents SDK, output-schema | Плагины MCP, внешние Agent по ACP |
| Граница | Режимы прав + Hooks | sandbox + approval-policy | Запросы прав проекта + рабочий каталог |
| Машиночитаемый выход | JSONL сессии, результаты инструментов | exec --json, --output-schema | diff, артефакты, вывод сборки/тестов |
Выбор может остаться коротким: общие многоязычные репозитории и переиспользуемые Skills → Claude Code; гонять на живой машине и зашить права в CI → Codex; платформы Apple, где проверка обязана идти через toolchain Xcode → Xcode 27. ACP значит: последний вариант не обязан отвергать первые два — внешний Agent может войти в редактор, но сборка и Preview остаются инструментами Xcode.
Где сидит JSON и кто его проверяет
Три интерфейса разные. Место, где появляется JSON, стабильно:
| Где | Типичные поля | Кто жёстко проверяет |
|---|---|---|
| Объявление инструмента | parameters / inputSchema | Ваша schema + SDK |
| arguments модели | tool_calls.arguments | Сначала parse, потом schema |
| Обратная запись инструмента | structuredContent / JSON логов | outputSchema или своя проверка |
| Финальный ответ | response_format / output-schema | Strict Schema + бизнес-слой |
Главная фраза: schema на слое API ведёт генерацию; schema на бизнес-слое отсекает грязные данные. Одно другое не заменяет. Почему выводу ИИ сначала нужна schema — в
Для schema инструмента Coding Agent опишите, когда вызывать и когда не вызывать. Варианты кладите в enum, а не прячьте в description:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"required": ["action", "path"],
"properties": {
"action": { "type": "string", "enum": ["read", "edit", "test"] },
"path": { "type": "string", "minLength": 1 },
"suite": { "type": "string", "enum": ["unit", "integration"] },
"old_string": { "type": "string" },
"new_string": { "type": "string" }
},
"additionalProperties": false,
"allOf": [
{
"if": { "properties": { "action": { "const": "edit" } } },
"then": { "required": ["old_string", "new_string"] }
},
{
"if": { "properties": { "action": { "const": "test" } } },
"then": { "required": ["suite"] }
}
]
}
Если модель вернула {"action":"edit","path":"src/a.ts"} без old_string, schema остановит это на слое исполнения. Это дешевле, чем потом читать diff.
Отладить параметры инструмента в JSONNote
Самое медленное в работе с Agent часто не промпт. А один упавший tool call. JSONNote крутится локально в браузере. Ключи и содержимое репозитория не уезжают на сервер.
-
1
Проверить, парсятся ли arguments
Бросьте строку от модели в Формат JSON. Пропавшие кавычки, висячие запятые и hash, обрезанный чатом, всплывают здесь.
-
2
Потом проверить по schema
Положите определение инструмента и фактические arguments в JSON Schema. Неверный enum, дыра в required или лишние поля полезнее, чем «sorry» от модели.
-
3
Сравнить два вызова
После смены description или additionalProperties: false смотрите регрессии параметров через JSON Diff.
-
4
Поделиться сценой отладки
Через URL Hash-шаринг вложите JSON инструмента в ссылку. Коллега откроет и воспроизведёт. Данные на сервер не попадают.
FAQ
В чём принципиальная разница между AI Coding Agent и автодополнением кода?
Автодополнение предлагает только следующую строку. Coding Agent умеет читать репозиторий, править файлы, гонять команды, вызывать внешние инструменты и в цикле решать дальше по результатам. Разница не в качестве текста. А в том, может ли он действовать.
Модель сама правит файлы на моём диске?
Нет. Модель только генерирует tool call, обычно кусок JSON. Файлы пишет, shell гоняет и тыкает симулятор локальный harness. Нет инструмента, отказали в правах или параметры не прошли проверку — на диске ничего не случится.
Кто лучше: Claude Code, Codex или Xcode 27 Agent?
Единого чемпиона нет. Общий репозиторий плюс Skills и MCP — Claude Code. sandbox, одобрения и JSONL-события в CI — Codex. Платформы Apple, где нужна проверка через сборку, Preview и симулятор — Xcode 27 Agent. Xcode ещё может подключить внешнего Agent по ACP.
Зачем самому проверять JSON, если модель уже заполнила schema?
Заполнение параметров моделью — мягкое ограничение. arguments часто строка: поля могут пропасть, тип съехать, появиться необъявленные ключи. В проде всё равно нужен parse плюс JSON Schema, потом бизнес-слой. Codex --output-schema держит только финальный ответ. Это не замена проверки каждого результата инструмента.
Xcode 27 Agent умеет только модели Apple?
Нет. Xcode 27 подключает модели и Agent Anthropic, Google и OpenAI к одному редакторному потоку. Есть и локальные модели, ACP для внешних Agent, MCP для внешних инструментов. Меняется ящик инструментов и способ проверки, не сам цикл.
Итог
Три продукта и дальше будут выглядеть как чат. Фраза снизу не меняется:
Coding Agent = решение модели × Tool Calling × исполнение harness. JSON — общая форма параметров инструмента и результатов обратной записи.
Сначала увидьте цикл, потом берите ящик инструментов: Claude Code усиливает общего Agent, Codex держит sandbox и события, Xcode 27 делает сборку и Preview инструментами проверки. schema пишите в объявлении, проверку — на слое исполнения, отладку можно оставить в локальном браузере.
Дальше: вставить упавший tool call в JSONNote