Блог 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.

В этой статье:

Запомните это: Интерфейс как чат. Реальная работа — Tool Calling. Модель выбирает инструмент и заполняет JSON-параметры. Сможет ли она править файлы, гонять тесты или достать симулятор, зависит от того, какие инструменты, права и проверки дал harness. Дальше: цикл → вызовы инструментов → три продукта → JSON-контракты.

Не окно чата — цикл

Автодополнение отвечает на «какая следующая строка». Coding Agent отвечает на «как довести цель в живом проекте»: прочитать контекст, выбрать инструмент, поправить код, запустить команду, посмотреть результат, решить снова.

В официальных документах слова меняются. Форма одна. Claude Code пишет: собрать контекст → действовать → проверить результат. Xcode 27 сначала планирует, потом правит, потом сам проверяет сборкой / тестами / Preview / симулятором. Под капотом оба — это:

  1. 1
    Наблюдение

    Читать файлы, искать символы, смотреть git status, тянуть логи упавших тестов. Без этого шага следующий патч — угадайка.

  2. 2
    Решение

    В контексте модель выбирает следующий шаг: ещё раз прочитать, ещё поискать, поправить одно место, запустить одну команду или спросить вас.

  3. 3
    Исполнение

    harness принимает tool call и реально гоняет его под правами и sandbox. Модель в этот момент диск не трогает.

  4. 4
    Обратная запись

    Результаты инструмента становятся текстом или JSON и возвращаются в контекст. Модель идёт дальше по новым уликам или объявляет работу сделанной.

Вы тоже в этом цикле: прервать, развернуть, одобрить рискованное действие. Модель рассуждает. harness владеет инструментами, правами, сессиями и тем, что значит «готово». Как четыре продукта дерутся за этот контроль, см.

AI Coding Agent — это уже не только автодополнение: за что соревнуются Codex, Claude Code, OpenCode и DeepSeek Harness?

Эта статья разбирает только, как крутится цикл и на каком переходе появляется JSON. Слои стека — в

Стек AI Agent 2026: как сочетать LLM, MCP, Function Calling и JSON Schema?.

Tool Calling: параметры — это JSON

Tool Calling (он же Function Calling) — не синоним «модель умеет писать код». Это структурированный вызов функции: модель выбирает имя из объявленных вами инструментов и генерирует JSON, который должен лечь в контракт параметров.

В OpenAI-совместимых API поле parameters в определении инструмента само по себе JSON Schema:

Определение инструмента (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 часто строка, а не уже распарсенный объект:

Ответ модели tool_call (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. 1
    Bash гоняет тесты

    Сначала увидеть, какой assert взорвался, а не сразу править код.

  2. 2
    Grep / Read находят исходник

    По стеку и символам втянуть нужный контекст в окно.

  3. 3
    Edit делает точную замену

    Документация требует сначала прочитать, потом править: old_string → new_string, чтобы не писать вслепую.

  4. 4
    Снова прогнать тесты

    Результаты возвращаются в контекст. При провале цикл крутится снова, а не вслух говорит «должно быть нормально».

Слой расширений сидит на этом цикле. Он его не заменяет:

Инженерный компромисс 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 едят поток событий, не абзац прозы.

События codex exec --json (схема)
{"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.

Новость Apple в Newsroom и

Xcode, agents, and you,

What’s new in Xcode 27 проясняют несколько вещей:

Лаборатория WWDC ставит Chat против Agent как разрыв возможностей, не разрыв текста: у Chat маленький фиксированный набор инструментов; режим Agent добавляет командную строку и внутренние инструменты Xcode (сборка, тесты, Preview, симулятор). Режим безопасности по умолчанию — запросы прав: Agent достаёт то, что нужно задаче, но по диску гулять не может.

Для тех, кто пишет JSON, смысл этого перехода в Xcode такой: результаты проверки тоже структурированная обратная запись. Падения сборки, сводки тестов и артефакты Preview становятся следующим входом Agent. На бэкенде вы по-прежнему видите свой API JSON. В IDE тот же цикл ест вывод инструментов Xcode.

Системный Siri AI идёт через App Intents, не через этого редакторного Agent. Не склеивайте две линии в «у Apple только один вид Agent». См.

Siri AI станет AI 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 — в

Зачем ИИ нужен JSON Schema?.

Для schema инструмента Coding Agent опишите, когда вызывать и когда не вызывать. Варианты кладите в enum, а не прячьте в description:

Schema инструмента Coding Agent (вставить и проверить)
{
  "$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. 1
    Проверить, парсятся ли arguments

    Бросьте строку от модели в Формат JSON. Пропавшие кавычки, висячие запятые и hash, обрезанный чатом, всплывают здесь.

  2. 2
    Потом проверить по schema

    Положите определение инструмента и фактические arguments в JSON Schema. Неверный enum, дыра в required или лишние поля полезнее, чем «sorry» от модели.

  3. 3
    Сравнить два вызова

    После смены description или additionalProperties: false смотрите регрессии параметров через JSON Diff.

  4. 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 пишите в объявлении, проверку — на слое исполнения, отладку можно оставить в локальном браузере.

← Назад к блогу