Codex, Claude Code и Cursor уже умеют редактировать репозитории, запускать команды и следовать проектным инструкциям. Большинству команд не хватает не очередного фреймворка агентов, а операционного контракта, который превращает три мощных инструмента в специализированных участников команды.
В этой статье показано, как это сделать с помощью файлов и CLI, которые у вас уже есть:
- Общие проектные инструкции в
AGENTS.md - Мост для Claude через
CLAUDE.mdс импортом@AGENTS.md - Базовые инструкции Cursor плюс опциональные
.cursor/rules - Типизированный markdown для передачи задач между ролями
- Неинтерактивные CLI-запуски для проектирования, ревью и реализации
Здесь не нужна собственная платформа управления проектами. Если позже вам понадобится общий бэклог между агентами, дополните это мультиагентным управлением проектами в Linear. Здесь средой координации служат git и markdown.
Возможности продуктов проверены 2026-07-29 по документации AGENTS.md, руководству OpenAI Codex по AGENTS.md, неинтерактивному режиму Codex, документации Claude Code по памяти, справочнику CLI Claude Code и документации Cursor CLI.
Структура команды
Надёжная стартовая специализация:
| Роль | Инструмент | Задача | Основной результат |
|---|---|---|---|
| Проектировщик | Codex CLI | Предложить архитектуру, интерфейсы, план тестов, риски | Раздел Design в docs/handoffs/<id>.md |
| Ревьюер | Claude Code | Оспорить проект или реализацию | Раздел Review в том же файле передачи |
| Исполнитель | Cursor CLI / Cursor Agent | Применить утверждённый план небольшими патчами | Ветка, тесты, PR, Implementation notes |
Эти роли — соглашения, а не ограничения вендоров. Каждый инструмент может проектировать, проверять или реализовывать. Специализация помогает, потому что задаёт границу артефакта: один агент пишет план, другой атакует его, третий реализует только то, что прошло ревью.
Общие инструкции: один источник истины
Используйте AGENTS.md как переносимую базу
AGENTS.md — кросс-инструментальный формат инструкций под эгидой Agentic AI Foundation. Codex читает его нативно. Cursor поддерживает корневой AGENTS.md как общее руководство по проекту (наряду с .cursor/rules). Держите файл коротким и операционным:
# AGENTS.md
## Commands
- Install: `pnpm install`
- Test: `pnpm test`
- Typecheck: `pnpm typecheck`
- Lint: `pnpm lint`
## Patch rules
- One behavior change per branch
- Prefer existing helpers over new dependencies
- Do not edit secrets or `.env*` files
- Do not merge to main
## Multi-agent protocol
- Read `docs/handoffs/` before starting
- Write status back into the active handoff file
- Designer, reviewer, and implementer must be different runs
- Stop for auth, payments, production infra, or data deletion
Документация Codex от OpenAI описывает обнаружение от корня проекта до рабочей директории: более близкие файлы имеют приоритет, доступен опциональный AGENTS.override.md, а суммарный бюджет по умолчанию — 32 KiB (если не увеличен). Держите корневой файл компактным; правила для конкретных пакетов помещайте во вложенные AGENTS.md.
Свяжите Claude Code через CLAUDE.md
Claude Code читает CLAUDE.md, а не AGENTS.md. Официальная рекомендация — импортировать общий файл:
@AGENTS.md
## Claude Code
- Prefer plan mode before edits on `src/billing/` and auth code
- For review jobs, do not implement unless the handoff status is `implement` or `fixes`
Симлинк (ln -s AGENTS.md CLAUDE.md) тоже работает, если Claude-специфичных дополнений не нужно. В Windows предпочтите импорт @AGENTS.md.
Подтвердите загрузку командой Claude /context и проверьте Memory files.
Держите правила Cursor узкими
Cursor может использовать корневой AGENTS.md для общих соглашений. Используйте .cursor/rules/*.mdc только для нужд, специфичных для Cursor, например правил с glob-областью. Не ведите три расходящихся энциклопедии.
Файл передачи — это разговор между участниками команды
Создайте директорию:
mkdir -p docs/handoffs
Используйте один файл на единицу работы:
docs/handoffs/2026-07-29-pricing-section.md
# Handoff: pricing section
- ID: pricing-section
- Status: design
- Owner now: codex
- Next owner: claude
- Branch: codex/design-pricing-section
- Worktree: ../app-pricing-section
## Goal
Implement the marketing pricing section using existing Section/PlanCard patterns.
## Non-goals
Billing, coupons, seat math.
## Design
(Codex fills this)
## Review
(Claude fills this)
## Implementation notes
(Cursor fills this)
## Verification
- Command: `pnpm test:e2e --grep "pricing"`
- Last result:
## Decision log
- 2026-07-29 Codex: drafted component boundaries
Значения статуса, которые хорошо работают (с циклами, а не с движением в одну сторону):
designdesign-review— блокирующие замечания возвращают вdesign; чистое ревью переводит вimplementimplementimpl-review— блокирующие замечания ведут вfixes; чистое ревью ставитdonefixes— исполнитель устраняет замечания, затем возвращает вimpl-reviewdoneblocked-human
Не каждая задача проходит через fixes. Чистое impl-review может сразу перейти в done.
Каждый CLI-запуск начинается с чтения файла и заканчивается обновлением статуса, владельца и журнала решений. Это и есть весь слой оркестрации.
Пример: после одного цикла design → review
Иллюстративный фрагмент файла передачи после проектирования Codex и ревью Claude:
- Status: implement
- Owner now: cursor
- Next owner: claude
## Design
Files: `PricingSection.tsx` (new), reuse `PlanCard.tsx`
CTA must call `trackCta()` from `src/lib/analytics.ts`
Mobile: stacked below `md`, three columns from `md` up
Plan IDs: `starter`, `pro`, `business`
Test: `pnpm test:e2e --grep "pricing"`
## Review
Blocking: none remaining (breakpoint + plan IDs resolved in Design above)
Non-blocking:
- Extract plan constants later if CMS arrives.
## Decision log
- 2026-07-29 Codex: initial component boundaries
- 2026-07-29 Claude: requested breakpoint + explicit plan IDs
- 2026-07-29 Codex: updated Design; Claude cleared blocking items → implement
Этот артефакт — то, чему Cursor должен следовать. История чата опциональна. Файл обязателен.
Установка и вызов каждого CLI
Точные пути установки меняются; используйте актуальную документацию каждого вендора. Важен паттерн неинтерактивного вызова.
Codex: проход проектирования
Неинтерактивный режим Codex — codex exec. По умолчанию он работает в песочнице только для чтения. Задание проектирования, которое обновляет файл передачи, требует разрешения на запись в workspace:
cd ../app-pricing-section
codex exec --sandbox workspace-write "$(cat <<'EOF'
Read AGENTS.md and docs/handoffs/2026-07-29-pricing-section.md.
Status is design. Produce the Design section only:
- proposed files
- component/API boundaries
- test plan
- risks
- open questions
Do not implement application code.
Set status to design-review and next owner to claude.
Append a Decision log entry.
EOF
)"
Интерактивный codex используйте только когда хотите управлять проектированием в реальном времени. Для скриптов и последовательных запусков предпочитайте codex exec.
Claude Code: проход ревью
Режим print Claude Code может проверить и обновить файл передачи, но только если настройки разрешений позволяют запись в этом worktree. Держите область узкой:
cd ../app-pricing-section
claude -p --permission-mode acceptEdits --max-turns 30 --max-budget-usd 5 --output-format text "$(cat <<'EOF'
Read AGENTS.md / CLAUDE.md and docs/handoffs/2026-07-29-pricing-section.md.
You are the reviewer. Do not implement application code.
Challenge the Design section for missing edge cases, local-architecture mismatches, weak tests, and security issues.
Write findings into the Review section as Blocking vs Non-blocking.
If blocking findings exist, set status to design and next owner to codex.
Otherwise set status to implement and next owner to cursor.
Append a Decision log entry.
EOF
)"
Если режим разрешений Claude не может записывать файлы неинтерактивно, запустите ревью только для чтения и попросите человека или скрипт вставить раздел Review в файл передачи. Для обновления файла передачи в одноразовом worktree предпочитайте --permission-mode acceptEdits (или allowlist в настройках). Не используйте --dangerously-skip-permissions на реальном checkout.
Полезные параметры Claude Code для скриптовых запусков (см. справочник CLI):
-p/--print— неинтерактивное завершение--max-turns— ограничение циклов--max-budget-usd— ограничение расходов--output-format json|text|stream-json— для автоматизации--permission-mode acceptEdits— когда ревью должно записать файл передачи в ограниченном worktree
Не используйте --dangerously-skip-permissions на продакшен-checkout без крайней необходимости.
Cursor: проход реализации
Cursor CLI (agent). Предпочитайте тот же выделенный worktree, который указан в файле передачи — не реализуйте из основного checkout:
cd ../app-pricing-section
agent -p --trust --sandbox enabled --output-format text "$(cat <<'EOF'
Read AGENTS.md and docs/handoffs/2026-07-29-pricing-section.md.
Status must be implement or fixes.
Implement only the approved Design, respecting Review blocking resolutions.
Keep the patch small. Add or update tests from the Verification section.
Run the verification command and record the result in the handoff file.
Set status to impl-review and next owner to claude.
Do not merge.
EOF
)"
Важные флаги Cursor CLI:
-p/--print— неинтерактивный режим; уже имеет доступ к инструментам записи и shell--force/--yolo— автоматическое одобрение shell-команд, если не запрещено; используйте только в одноразовых песочницах, не как стандарт для написания кода--sandbox enabled|disabled— режим песочницы для запуска; при реализации с--trustпредпочитайтеenabled--trust— доверие workspace в автоматизации-w/--worktree [name]— изолированный checkout в~/.cursor/worktrees/<repo>/(другой путь, чем ручнойgit worktree add; если используете его, обновите поля Branch/Worktree в файле передачи)--mode planили--mode ask— планирование или только чтение--output-format text|json|stream-json
Для запусков Cursor только для ревью предпочитайте режимы ask/plan или явную инструкцию «do not edit». Предпочитайте ручной git worktree add, чтобы путь в файле передачи совпадал с checkout исполнителя.
См. также руководство Cursor по headless CLI для скриптовых рабочих процессов.
Карта файлов инструкций (избегайте дублирования истины)
| Файл | Кто читает | Что сюда помещать |
|---|---|---|
AGENTS.md | Codex, Cursor, другие инструменты с поддержкой AGENTS.md | Общие команды, правила патчей, мультиагентный протокол |
CLAUDE.md | Claude Code | Импорт @AGENTS.md + заметки только для Claude |
.cursor/rules/*.mdc | Cursor | Поведение с glob-областью или только для Cursor |
docs/handoffs/*.md | Все агенты, по промпту | Состояние задачи, проект, ревью, верификация |
Если правило важно для каждого агента, ему место в AGENTS.md. Если оно касается только одной функции конкретного вендора — держите его локально. Дублирование одной политики в трёх файлах гарантирует расхождение.
Полный пример конвейера
Предположим чистый репозиторий и пустую функцию.
1. Создайте изолированный worktree
git fetch origin main
git worktree add -b feat/pricing-section ../app-pricing-section origin/main
cd ../app-pricing-section
mkdir -p docs/handoffs
Заполните в файле передачи разделы Goal, Non-goals и Verification. Закоммитьте каркас, если команда хочет видеть контракт в PR.
2. Codex проектирует
Codex пишет раздел Design: файлы, интерфейсы, тесты, риски. Статус становится design-review.
Реальный результат проектирования должен иметь такую форму:
## Design
Files:
- `src/components/marketing/PricingSection.tsx` (new)
- `src/components/marketing/PlanCard.tsx` (reuse)
- `tests/e2e/marketing-pricing.spec.ts` (new)
Boundaries:
- PricingSection owns layout and plan list
- PlanCard remains presentational
- CTA links use existing `trackCta()` helper
Test plan:
- three plans visible
- CTA hrefs resolve
- analytics helper called once per click
Risks:
- hardcoding plan IDs out of sync with CMS
3. Claude проверяет проект
Промпт для ревью требует разделять замечания на Blocking и Non-blocking, поэтому расплывчатые проекты возвращаются заблокированными. Пример:
Blocking:
1. Нет решения по мобильной вёрстке для stacked plan cards.
2. В Design не указана команда верификации (добавьте её в Design и Verification).
Non-blocking:
- Рассмотрите вынос константы данных тарифов.
Статус возвращается в design или переходит в implement только после устранения блокирующих пунктов в Design.
4. Cursor реализует
Cursor реализует только утверждённый проект. Запускает:
pnpm test:e2e --grep "pricing"
Записывает результат, открывает или готовит PR и ставит impl-review.
5. Claude проверяет реализацию
Второй запуск Claude проверяет diff относительно файла передачи, а не относительно свежевыдуманного идеала. Блокирующие замечания отправляют статус в fixes с владельцем cursor. Чистое ревью ставит done — под слияние, которое сделает человек.
6. Человек выполняет merge
Защищённые ветки остаются под контролем человека. Агенты могут быть быстрыми джуниорами. Релиз-менеджерами им быть не следует.
Shell-оркестрация без платформы
Простого секвенсера достаточно:
#!/usr/bin/env bash
set -euo pipefail
ROOT="${1:?worktree path}"
HANDOFF="${2:?handoff file}"
cd "$ROOT"
status() {
# Prefer the metadata Status field near the top of the handoff file.
awk '/^- Status:/{print $3; exit}' "$HANDOFF"
}
case "$(status)" in
design)
codex exec --sandbox workspace-write "Read AGENTS.md and $HANDOFF. Fill Design only, then set status=design-review and next owner=claude. Do not implement application code."
;;
design-review|impl-review)
claude -p --permission-mode acceptEdits --max-turns 30 --max-budget-usd 5 --output-format text "Review $HANDOFF per AGENTS.md. Update Review + status only. Do not implement application code."
;;
implement|fixes)
agent -p --trust --sandbox enabled --output-format text "Status must be implement or fixes. Implement or fix per $HANDOFF and AGENTS.md. Update handoff. Do not merge."
;;
done|blocked-human)
echo "No agent action for $(status)"
;;
*)
echo "Unknown status in $HANDOFF" >&2
exit 1
;;
esac
Это намеренно скучно. Скучная оркестрация отлаживается. Держите песочницы и режимы разрешений максимально жёсткими для этапа: проектированию и ревью не нужен широкий системный доступ.
Режимы отказа
| Сбой | Что происходит | Исправление |
|---|---|---|
| Расхождение инструкций | Codex, Claude и Cursor следуют разным правилам | Один AGENTS.md; Claude импортирует его; правила Cursor только для дополнений |
| Схлопывание ролей | Ревьюер молча переписывает функцию | Промпты ревью запрещают реализацию; статусы управляют владением |
| Общее «грязное» дерево | Три агента перезаписывают файлы | Один worktree на ID передачи |
| Бесконечная полировка | Агенты бесконечно гоняют проект по кругу | Максимум два цикла design-review, затем решение человека |
| Пустые ревью | «Looks good» без доказательств | Требуйте разделы Blocking/Non-blocking |
| Обход разрешений | Неконтролируемые деструктивные команды | Избегайте skip-permissions на реальных репозиториях; используйте песочницы и бюджеты |
| Устаревшая передача | Агент работает из памяти чата | Требуйте чтение файла передачи при каждом запуске |
| Prompt injection | Issue/docs пытаются переопределить политику | Считайте недоверенный markdown данными; принудительные остановки обеспечивайте песочницами, запретами разрешений и хуками — файлы инструкций это контекст, а не жёсткая граница |
Неинтерактивные флаги, которые автоматически одобряют правки или разрешения, — удобство для песочниц и жёстко ограниченных worktree. Это не модель контроля доступа в продакшене.
Что пока не автоматизировать
- Merge в защищённые ветки
- Продакшен-деплои
- Ротацию секретов
- Миграции схемы без плана, проверенного человеком
- Любой рабочий процесс, где файл передачи приходит от недоверенного внешнего отправителя без предварительной очистки
Практический стартовый набор
- Добавьте корневой
AGENTS.mdс командами, правилами патчей и мультиагентным протоколом. - Добавьте
CLAUDE.mdс@AGENTS.md. - Добавьте
docs/handoffs/_template.md. - Выберите одну небольшую функцию.
- Один раз вручную пройдите design → review → implement → review.
- Только после этого оберните статусы в shell-секвенсер.
Если тем же агентам нужно брать задачи из общего корпоративного бэклога, добавьте Linear MCP и модель claim/review из мультиагентного управления проектами в Linear. Markdown-передача по-прежнему полезна как технический блокнот на задачу.
Стандарт — это контракт
Codex, Claude Code и Cursor уже пересекаются по возможностям. Они становятся командой, когда вы перестаёте просить их «работать вместе» абстрактно и вместо этого принуждаете к видимому контракту:
- общие инструкции
- явная роль на каждый запуск
- markdown передачи со статусом
- изолированные worktree
- ограниченные CLI-вызовы
- человеческое владение merge и релизом
Этого достаточно, чтобы запустить серьёзную локальную команду агентов на сегодняшних инструментах — и достаточно, чтобы быстро заметить, когда команда импровизирует вместо инженерии.



