Как делать12 октября 2026 г.9 мин чтения
Вайбкодинг: от прототипа к продуктуШаг 1 из 7

AI-ассистенты в разработке: Claude Code и Codex на практике

Коротко

Claude Code и Codex — агентные инструменты: они сами читают репозиторий, правят файлы и запускают команды, а не дописывают одну строку. Чтобы агент помогал, а не вредил, нужны три вещи: файл инструкций проекта (AGENTS.md или CLAUDE.md) с командами и запретами, разрешения и песочница, которые технически ограничивают его действия, и задача с проверяемыми критериями готовности. Результат агента проходит те же тесты и ревью, что и код человека.

РуководствоУровень: СреднийРазработка с AI-ассистентомПрактика: ~30–60 мин

После материала вы сможете

  • написать файл инструкций AGENTS.md для своего проекта и подключить его в Claude Code через CLAUDE.md
  • настроить разрешения Claude Code в .claude/settings.json и песочницу Codex в .codex/config.toml и проверить их командой doctor
  • поставить агенту задачу с контекстом, критериями готовности и командой проверки
  • провести ревью изменений агента по чек-листу: границы диффа, тесты, секреты, зависимости и лицензии

Проверено на

Claude Code 2.1.296Codex CLI 0.162.1markdownlint-cli2 0.23.3Node.js 24 LTS (24.18)

Сверено с документацией: 12 октября 2026 г.

Содержание
  1. 01Агент, а не автодополнение
  2. 02Установка и первый запуск
  3. 03Файл инструкций: AGENTS.md и CLAUDE.md
  4. 04Разрешения и песочница
  5. 05Как поставить задачу
  6. 06Рабочий цикл: план → изменения → тесты → ревью
  7. 07Ревью кода агента и где ему не доверять

Агент, а не автодополнение

Автодополнение предлагает следующую строку в редакторе, и человек принимает решение на каждом шаге. Агентный инструмент получает задачу целиком: сам находит нужные файлы, планирует, правит несколько файлов, запускает тесты и команды терминала, читает ошибки и исправляет их. Так работают Claude Code от Anthropic и Codex от OpenAI — в терминале, в расширениях IDE, в десктопных приложениях и в облаке.

Вместе с возможностями растёт и цена ошибки. Неудачная подсказка автодополнения — это одна строка, которую вы видите. Агент может изменить двадцать файлов, установить пакет, выполнить миграцию или прочитать файл с ключами. Поэтому работа с агентом держится на трёх опорах: инструкции проекта, технические ограничения и проверяемый результат.

Автодополнение

  • Подсказка в текущем файле
  • Человек принимает каждую строку
  • Не запускает команды
  • Контекст — открытый файл и соседние

Агент: Claude Code, Codex

  • Задача целиком, несколько файлов
  • Действует сам в рамках разрешений
  • Запускает тесты, сборку, git и утилиты
  • Сам ищет нужный контекст в репозитории

Установка и первый запуск

Оба инструмента ставятся одной командой. Для Claude Code документация рекомендует нативный установщик; есть также Homebrew, WinGet и npm-пакет — ему нужен Node.js 22 или новее. Codex CLI ставится установщиком с chatgpt.com, через npm или Homebrew. Нужен и аккаунт: Claude Code при первом запуске просит войти с подпиской Claude или аккаунтом Anthropic Console, Codex — через ChatGPT или другим доступным способом входа.

bash
# Claude Code: native installer (macOS, Linux, WSL)
curl -fsSL https://claude.ai/install.sh | bash

# Codex CLI: standalone installer (macOS, Linux)
curl -fsSL https://chatgpt.com/codex/install.sh | sh

# Alternative for both: global npm packages
npm install -g @anthropic-ai/claude-code
npm install -g @openai/codex
Команды из официальной документации. На Windows используйте PowerShell-варианты установщиков оттуда же
terminal
$ claude --version
2.1.296 (Claude Code)
$ codex --version
codex-cli 0.162.1
Проверка установки; это версии, на которых проверены примеры статьи

Запускайте агента из корня репозитория командой claude или codex. От рабочей папки зависят и файлы инструкций, которые он прочитает, и граница, внутри которой ему разрешено писать. Перед задачей закоммитьте текущее состояние или создайте ветку: документация Codex советует ставить Git-чекпоинты до и после задачи, чтобы изменения можно было откатить.

Файл инструкций: AGENTS.md и CLAUDE.md

Каждая сессия агента начинается с чистого контекста. То, что вы иначе объясняли бы каждый раз, записывают в файл инструкций проекта. Codex читает AGENTS.md: сначала глобальный из ~/.codex, затем файлы от корня проекта вниз до текущей папки; ближний к рабочей папке читается последним и уточняет общие правила. Суммарный объём по умолчанию ограничен 32 КиБ (project_doc_max_bytes). AGENTS.md — открытый формат, его поддерживают и другие агенты; описание опубликовано на agents.md.

Claude Code читает CLAUDE.md в проекте, ~/.claude/CLAUDE.md с личными правилами и CLAUDE.local.md с настройками, которые не попадают в git. Если в проекте есть только AGENTS.md, свежие версии Claude Code читают его напрямую, но при наличии CLAUDE.md — только его. Надёжный способ держать один источник правил для обоих инструментов — общий AGENTS.md и короткий CLAUDE.md, который импортирует его строкой @AGENTS.md. Черновик можно получить командой /init: Claude Code разберёт проект и предложит команды и соглашения.

Команды сборки, тестов и линтера, которые нельзя угадать

Не писать
То, что агент выяснит, прочитав код

Правила кода, которые отличаются от общепринятых

Не писать
Общие советы вроде «пиши чистый код»

Где что лежит и архитектурные решения проекта

Не писать
Описание каждого файла

Запреты: секреты, применённые миграции, деплой, git push

Не писать
Подробную документацию API — лучше ссылку

Критерии готовности задачи

Не писать
Сведения, которые часто меняются
Что включать в файл инструкций — по рекомендациям документации Claude Code
AGENTS.md
# AGENTS.md

## Project

- Online booking for a beauty salon: Next.js (App Router), TypeScript,
  PostgreSQL via Prisma.
- Application code is in `src/`, tests are in `tests/`,
  migrations are in `prisma/migrations/`.

## Commands

- Install dependencies: `npm ci`
- Type check: `npm run typecheck`
- Lint: `npm run lint`
- All tests: `npm test`
- One test file: `npm test -- tests/bookings.test.ts`

## Conventions

- TypeScript strict mode; no `any` in new code.
- Validate every external input with `zod` at the boundary
  (`src/schemas/`).
- Database access only through `src/db/`;
  never build SQL by string concatenation.
- New UI strings go to both `messages/ru.json` and `messages/en.json`.

## Workflow

- For changes that touch more than one file, propose a plan first
  and wait for confirmation.
- After changes, run type check, lint and the related tests,
  and show the output.
- Keep the diff limited to the task: no unrelated refactoring or reformatting.
- Ask before adding a production dependency.

## Security

- Never read, print or commit `.env` files, keys or tokens.
  If a new variable is needed, name it in the summary
  and leave the value to a human.
- Do not edit applied migrations in `prisma/migrations/`;
  create a new migration instead.
- Never run `git push`, deployments or commands
  against production databases.

## Definition of done

- Type check, lint and tests pass.
- New behavior is covered by a test.
- The summary lists what changed, how it was verified
  and what is still uncertain.
Шаблон для проекта на Next.js и Prisma: замените команды и пути на свои. Проверен markdownlint-cli2
CLAUDE.md
# CLAUDE.md

@AGENTS.md

## Claude Code

- Use plan mode for any change under `src/payments/`.
- Before reporting a task as done, review the diff
  against the acceptance criteria of the task.
CLAUDE.md импортирует общие правила и добавляет то, что относится только к Claude Code

Держите файл коротким. Документация Claude Code рекомендует меньше 200 строк на файл и для каждой строки спрашивать себя, ошибётся ли агент без неё: длинный файл расходует контекст, и важные правила в нём теряются. Повод дописать строку — агент дважды повторил одну ошибку или ревью нашло то, что он должен был знать. Правила для части кода выносят во вложенный AGENTS.md (Codex) или в .claude/rules/ с привязкой к путям (Claude Code).

Разрешения и песочница

Настоящая граница проходит здесь. Режим разрешений Claude Code задаёт, что агент делает без вопроса. С версии 2.1.283 интерактивные сессии в терминале и VS Code по умолчанию стартуют в режиме auto: действия проверяет отдельная модель-классификатор и блокирует рискованные. Режим меняется флагом --permission-mode, клавишами Shift+Tab в сессии или ключом permissions.defaultMode в настройках.

plan

Что делает без вопроса
Читает файлы и выполняет команды только для чтения
Когда уместен
Разведка, незнакомый код, план до изменений

manual (в настройках — default)

Что делает без вопроса
Только чтение; правки и команды — после подтверждения
Когда уместен
Чувствительный репозиторий, первые сессии

acceptEdits

Что делает без вопроса
Правит файлы и выполняет простые файловые команды в рабочей папке
Когда уместен
Понятная задача, дифф смотрите в конце

auto

Что делает без вопроса
Действия проверяет классификатор, рискованные блокируются
Когда уместен
Длинные задачи с настроенными правилами

dontAsk

Что делает без вопроса
Только то, что разрешено заранее; остальное молча отклоняется
Когда уместен
Скрипты и CI с узким набором команд

bypassPermissions

Что делает без вопроса
Всё, кроме немногих действий, которые не одобряет ни один режим
Когда уместен
Только контейнер или VM, где агенту нечего сломать

Поверх режима работают правила allow, ask и deny в .claude/settings.json. Порядок проверки — deny, затем ask, затем allow: широкий запрет не обходится узким разрешением, а правила deny действуют в любом режиме. Файл проекта коммитят, чтобы правила получила вся команда; личные исключения кладут в .claude/settings.local.json.

.claude/settings.json
{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "permissions": {
    "allow": [
      "Bash(npm run typecheck)",
      "Bash(npm run lint)",
      "Bash(npm test *)"
    ],
    "ask": [
      "Bash(git push *)",
      "Bash(npm install *)"
    ],
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)",
      "Bash(npx prisma migrate deploy *)"
    ],
    "disableBypassPermissionsMode": "disable"
  }
}
Проверки — без вопросов, git push и установка пакетов — с подтверждением, секреты и миграции на проде — под запретом. disableBypassPermissionsMode запрещает режим без проверок

Важная оговорка из документации: правила Read и Bash — не абсолютная защита. Запрет Read(./.env) срабатывает для встроенных инструментов и распознанных команд вроде cat, но не для скрипта на Node.js или Python, который сам откроет файл; правило Bash(curl *) не остановит sh -c 'curl …'. Ограничение на уровне ОС даёт песочница (/sandbox), а надёжнее всего — не держать боевые секреты в рабочей копии вовсе.

Codex разделяет два слоя. Режим песочницы sandbox_mode задаёт, что агент может технически: read-only, workspace-write или danger-full-access. Политика подтверждений approval_policy — когда он должен спросить: on-request или never. В пресете Auto (workspace-write и on-request) Codex пишет только в рабочей папке, сеть для команд выключена, папки .git и .codex защищены от записи, а для выхода за эти границы он спрашивает. Флаг --dangerously-bypass-approvals-and-sandbox (он же --yolo) отключает и песочницу, и вопросы — документация оставляет его для окружений, изолированных снаружи.

.codex/config.toml
# Project config: Codex loads it only after you mark the project as trusted
sandbox_mode = "workspace-write"
approval_policy = "on-request"

[sandbox_workspace_write]
network_access = false
Настройки проекта, закреплённые явно. Личные настройки — в ~/.codex/config.toml

Убедитесь, что настройки поняты так, как вы задумали. У обеих утилит есть команда doctor: она разбирает конфигурацию без запуска сессии и без обращения к модели.

terminal
$ codex doctor
  ✓ config       loaded
      config.toml parse        ok
  ✓ sandbox      restricted fs + restricted network · approval OnRequest

$ claude doctor
Invalid settings
- .claude/settings.json › permissions.defaultMode: Invalid value. Expected one of: "acceptEdits", "auto", "bypassPermissions", "default", "dontAsk", "plan"
Фрагменты реального вывода, пути сокращены: Codex с конфигом выше и Claude Code с намеренной опечаткой в режиме. С корректным settings.json раздела Invalid settings нет

Как поставить задачу

Агент останавливается, когда работа «выглядит готовой». Если в задаче нет проверки, которую он может запустить сам, проверкой становитесь вы. Хорошая задача отвечает на четыре вопроса: где искать (файлы, модули, связанная задача), что должно получиться (поведение, а не «улучши»), как это проверить (тест, команда, ожидаемый ответ) и чего не трогать.

TASK.md
# Task: limit booking attempts per phone number

## Context

- The booking handler is `src/app/api/bookings/route.ts`.
- A rate limit helper already exists in `src/lib/rate-limit.ts`; reuse it.
- Tests for bookings are in `tests/bookings.test.ts`.

## Goal

Reject more than 3 booking requests from the same phone number
within 10 minutes.

## Acceptance criteria

- [ ] The 4th request for the same phone within 10 minutes returns HTTP 429
  with the body `{ "error": "too_many_requests" }`.
- [ ] Requests for other phone numbers are not affected.
- [ ] The limit resets after 10 minutes; the test uses fake timers,
  not real waiting.
- [ ] No new dependencies and no changes outside `src/app/api/bookings/`,
  `src/lib/` and `tests/`.

## Verification

Run `npm run typecheck`, `npm run lint`
and `npm test -- tests/bookings.test.ts`, then show the output.

## Out of scope

- UI changes.
- Database schema changes.

## How to work

1. Read the files above and propose a plan. Wait for my confirmation.
2. Write a failing test first, then the implementation.
3. Summarize the diff and list anything you were unsure about.
Пример задачи с критериями готовности: текст вставляют в сессию или кладут файлом и ссылаются на него
  • Критерии формулируйте как проверяемые факты — код ответа, тело, граничный случай, — а не «работает корректно».
  • Называйте существующий код для переиспользования, иначе агент может написать собственную копию.
  • Ограничивайте область: список папок и раздел «вне задачи» защищают от попутного рефакторинга.
  • Просите показать вывод проверок, а не фразу «тесты прошли»: по выводу ревью идёт быстрее.
  • Одна сессия — одна задача. Документация Claude Code советует очищать контекст командой /clear между несвязанными задачами, а после двух неудачных исправлений — начать заново с уточнённым запросом.

Рабочий цикл: план → изменения → тесты → ревью

ПланИзмененияТестыРевьюPull request
Каждый этап заканчивается тем, что можно проверить: планом, диффом, выводом тестов, замечаниями
  1. План

    Включите режим plan в Claude Code или read-only в Codex (команда /permissions). Агент читает код и предлагает, какие файлы изменить. Исправьте план до появления кода: переделать план дешевле, чем дифф. Для правки, которую можно описать одним предложением, план не нужен.

  2. Изменения

    Переключитесь в рабочий режим и попросите реализовать план, начиная с падающего теста. Работайте в отдельной ветке, параллельные задачи разводите по отдельным worktree.

  3. Тесты

    Агент запускает типизацию, линтер и тесты из AGENTS.md и исправляет ошибки, пока проверки не пройдут. Требуйте устранять причину, а не отключать проверку или тест.

  4. Ревью

    Сначала автоматическое: в Codex команда /review проверяет незакоммиченные изменения или ветку относительно базовой, в Claude Code — встроенный /code-review или субагент, который сверяет дифф с критериями задачи. Затем ваше ревью по чек-листу ниже.

  5. Pull request

    Изменения агента проходят тот же путь, что и код человека: pull request, CI, ревью коллеги, защищённая ветка.

Ревью кода агента и где ему не доверять

Сгенерированный код выглядит уверенно независимо от того, верен ли он. Читайте весь дифф, а не только итоговый отчёт агента: отчёт описывает намерение, дифф — результат.

  • Дифф ограничен задачей: нет правок в посторонних файлах, форматирования «заодно» и удалённых тестов
  • Тесты проверяют поведение из критериев, а не подогнаны под реализацию; нет пропущенных и ослабленных проверок
  • Проверки запущены, их вывод показан, CI зелёный
  • Нет секретов в коде, логах, тестовых данных и сообщениях коммитов
  • Новые зависимости действительно нужны, существуют под этим именем, поддерживаются, их лицензия совместима с проектом
  • Внешний ввод валидируется, SQL параметризован, вывод в HTML экранирован, права проверяются на сервере
  • Новые миграции не меняют уже применённые файлы
  • Ошибки не проглатываются молча

Безопасность: вход, права, платежи, криптография

Риск
Правдоподобный код с дырой: проверка прав только на клиенте, самодельное хеширование
Что делать
Ревью человеком, который знает тему, тесты на отказ, сверка с OWASP

Секреты

Риск
Ключ в промпте, логе или тестовом файле; агент прочитал .env
Что делать
Запрет чтения, секреты вне рабочей копии, сканер секретов в CI

Лицензии и зависимости

Риск
Пакет с несовместимой лицензией или с похожим, но чужим именем
Что делать
Проверять реестр, репозиторий и лицензию каждого нового пакета

Недоверенный контент

Риск
Инструкции в README, issue или на веб-странице меняют поведение агента — prompt injection
Что делать
Не давать агенту широкие права при работе с чужим контентом, сеть — по списку разрешённых адресов

Архитектура и незнакомый домен

Риск
Локально разумное решение противоречит устройству системы или правилам бизнеса
Что делать
Решение принимает человек, агент — исполнитель и разведчик
Где ассистенту нельзя верить на слово

В архитектуре и незнакомом домене проблема не в синтаксисе, а в недостающем контексте: агент не знает договорённостей, которых нет в коде, и не спросит о них, если вы не попросили. Если вы сами не можете оценить результат, агент не снимает с вас ответственность за проверку. Документация Claude Code формулирует это прямо: то, что нельзя проверить, нельзя выпускать.

Как проверено4 · пройдено1 · не запускалосьсверено 12 октября 2026 г.
  • запущено, работает

    AGENTS.md, CLAUDE.md, TASK.md (markdown)

    markdownlint-cli2 0.23.3 (markdownlint 0.41.1), правила по умолчанию: 0 issues в 3 файлах

  • запущено, работает

    .claude/settings.json

    валидация ajv 8.20 по схеме https://json.schemastore.org/claude-code-settings.json → valid; claude doctor (Claude Code 2.1.296, npm-установка во временную папку) в каталоге с файлом — раздела Invalid settings нет; контрольный файл с defaultMode "yolo" и mcp-правилом в скобках — doctor выдал Invalid settings (фрагмент вывода в статье — реальный, путь сокращён)

  • запущено, работает

    .codex/config.toml

    разбор smol-toml 1.9.1; codex doctor (Codex CLI 0.162.1) с этим файлом как config.toml в изолированном CODEX_HOME: config loaded, parse ok, sandbox restricted fs + restricted network · approval OnRequest (фрагмент в статье — реальный); контрольный файл с недопустимыми значениями — config could not be loaded

  • запущено, работает

    claude --version / codex --version (shellsession)

    npm install @anthropic-ai/claude-code@2.1.296 @openai/codex@0.162.1 в временный проект (не глобально); вывод — реальный; флаги --permission-mode (choices acceptEdits, auto, bypassPermissions, manual, dontAsk, plan), --sandbox (read-only, workspace-write, danger-full-access), --ask-for-approval (on-request, never), --dangerously-bypass-approvals-and-sandbox сверены с --help

  • не запускалось

    команды установки (bash: нативные установщики и npm -g)

    нативные установщики curl | bash и глобальная установка не выполнялись на машине; команды скопированы из официальной документации; npm-пакеты тех же версий установлены локально во временный проект

«Запущено» — код выполнен во временном проекте или контейнере, вывод в статье взят из прогона. «Частично» — проверено с заглушками вместо внешних сервисов. «Не запускалось» — нужны устройство, аккаунт или ключ; шаги сверены с официальной документацией. Файлы проверочного проекта и логи запусков сохранены в архиве InterLAB.

Расскажите о задаче — мы изучим запрос и свяжемся с вами

Есть задача?
Обсудим и оценим — бесплатно.

Расскажите о продукте или проблеме. Предложим архитектуру, срок и стоимость первой версии после изучения задачи.

  • Оценка объёма и рисков до старта
  • NDA — по вашему или нашему шаблону
  • Старт работ в течение недели

Не присылайте через форму пароли, ключи доступа и исходный код — безопасную передачу доступа обсудим отдельно.

Нажимая кнопку, вы соглашаетесь с обработкой персональных данных.