Подробное руководство для разработчиков и пользователей сайта
Представьте ситуацию: вы нанимаете гениального программиста-сеньора. Он знает десятки языков, пишет идеальный код с первого раза и никогда не устает. Вы ставите ему задачу: «Сделай мне интернет-магазин».
Что он сделает? Скорее всего, начнет задавать сотни вопросов. На каком языке писать? Какие платежные системы подключать? Нужна ли админка? Где лежат доступы к базе данных? А может быть, он просто выдаст вам дефолтный шаблон магазина из 2010 года, потому что именно так его учили в университете нейросетей.
Именно это происходит сегодня, когда разработчики дают сложные задачи популярным нейросетям (Claude, GPT, Gemini). Модель умная, но она ничего не знает о вашем конкретном проекте. Она видит только текст вашего запроса. Чтобы превратить универсальную модель в узкоспециализированного эксперта по вашему репозиторию, ей нужны инструкции.
До недавнего времени эти инструкции были хаотичными: кто-то писал огромный промпты прямо в чат, кто-то создавал файлы .cursorrules или copilot-instructions. Но индустрия пришла к двум понятным стандартам, которые решают разные задачи: CONTEXT.md и AGENTS.md. Если вы разрабатываете плагины, модули или шаблоны CMS (как это делается на сайте denkon.ru), понимание разницы между ними сэкономит вам десятки часов отладки.
Что такое CONTEXT.md: Паспорт проекта и оперативная память
Файл CONTEXT.md — это статическая база знаний о вашем проекте. Его главная задача — дать модели фундаментальное понимание того, что перед ней находится. Это ответ на вопросы новичка: «Куда я попал?», «На чем это написано?» и «Какие здесь правила игры?».
Если провести аналогию со стройкой дома, то CONTEXT.md — это генеральный план участка, чертежи фундамента, спецификация материалов и список всех рабочих бригад с их контактами. Это сухие факты, которые редко меняются.
Что обычно пишут в CONTEXT.md:
- Архитектура приложения. Не просто «это сайт на PHP», а описание слоёв: где контроллеры, где сервисы, как устроен слой доступа к данным (DAL), какие используются паттерны проектирования (например, Repository или CQRS).
- Технологический стек. Версии языков (
PHP 8.3, а не просто PHP), версии фреймворков, базы данных, кеширования (Redis) и очередей. - Ключевые зависимости. Список нестандартных библиотек, самописных компонентов и критичных пакетов. Например, если вы используете специфическую обертку над API Сбера для оплаты, об этом нужно написать.
- Соглашения по коду (Code Style). Используете ли вы PSR-12? Применяете ли Strict Types? Есть ли запрет на использование глобальных переменных?
- Пути к важным файлам. Где лежит конфигурация БД? Где хранятся миграции? В какой папке находятся шаблоны вашей CMS?
- Ограничения производительности. Лимиты памяти скриптов, таймауты запросов, требования к скорости ответа главной страницы.
- Краткая история рефакторинга. Куда перенесли старый модуль авторизации и почему новый написан иначе.
Пример фрагмента CONTEXT.md для разработки плагина под условную CMS:
# CONTEXT.md — Проект "DenKon Shop" ## Общая информация Мы разрабатываем плагин доставки СДЭК для CMS [Название]. Текущая версия ядра CMS: 2.4.1. ## Технический стек - Язык: PHP 8.2+ - Фреймворк: Собственный MVC ядра CMS. - Шаблонизатор: Twig 3.x. - База данных: MySQL 8.0 (движок InnoDB). ## Архитектурные правила - Весь код плагина должен находиться строго в директории `/plugins/cdek_delivery/`. - Модели данных наследуются от базового класса `\Core\Model`. Использование чистого PDO запрещено. - Все внешние запросы к API СДЭК должны проходить через сервис-обертку `app/services/CdekApiWrapper.php` с автоматическим повтором при ошибке 5xx. - Логирование ведется через PSR-3 логгер в файл `var/log/plugins/cdek.log`. ## Доступы Тестовый API-ключ СДЭК хранится в .env: `CDEK_API_TOKEN_TEST`. Пароль от тестовой БД: root/qwerty.
Когда агент читает этот файл, он перестает предлагать решения на Python или использовать синтаксис старых версий языка. Он понимает границы дозволенного.
Что такое AGENTS.md: Инструкция по применению и кодекс поведения
Если CONTEXT.md говорит модели, где она находится, то AGENTS.md говорит ей, как именно нужно действовать. Это динамический свод правил, сценариев и предпочтений. Это должностная инструкция для сотрудника.
В строительной аналогии AGENTS.md — это технологические карты: «кирпич класть только на цемент марки М500», «штробить стены только алмазной коронкой после 11 утра», «каждое утро прораб проверяет вертикаль уровнем». Это правила процесса.
Что обычно пишут в AGENTS.md:
- Алгоритм работы над задачей. Сначала пишем юнит-тест -> затем реализуем функцию -> запускаем линтер -> коммитим изменения. Или наоборот: сначала черновик архитектуры, потом реализация.
- Стиль написания кода. «Всегда добавляй doc-блоки к публичным методам», «Называй переменные только на английском», «Не используй короткие имена вроде $i или $n вне циклов».
- Правила тестирования. «Перед тем как отдать код, ты обязан запустить команду
phpunit --filter=DeliveryTest», «Никогда не мокай базу данных, используй транзакции тестов». - Запрещенные действия. «Никогда не изменяй миграционные файлы, которые уже применены на production», «Не трогай ядро CMS, только хуки и события».
- Формат вывода результата. «Сначала присылаешь diff изменений, затем краткое резюме текстом», «Если нашел уязвимость, опиши ее до того, как покажешь исправление».
- Работа с секретами. Алгоритм действий, если в коде обнаружен hardcoded пароль (остановиться, удалить, сообщить пользователю).
Пример фрагмента AGENTS.md для той же задачи:
# AGENTS.md — Правила разработки ## Порядок действий при создании новой функции 1. Проанализируй существующие контроллеры в /controllers/. Следуй их структуре. 2. Прежде чем писать код бэкенда, создай макет формы в Twig. Согласуй поля со списком обязательных параметров API СДЭК (см. документацию в /docs/sdek_api_v2.pdf). 3. Реализуй логику. Всегда оборачивай вызов внешнего API в блок try-catch. 4. Напиши Unit-тест для сервиса `CdekApiWrapper`. Проверь сценарий, когда API возвращает ошибку "Неверный город". 5. Запусти линтер: `vendor/bin/phpcs --standard=PSR12 ./plugins/cdek_delivery/`. ## Стиль ответов - Если я прошу "исправь баг", не переписывай весь файл целиком. Дай точечный дифф. - Если решение требует выбора из нескольких вариантов, предложи Вариант А (быстрый, но с костылем) и Вариант Б (правильный, долгий). По умолчанию делай Вариант Б. - Никогда не выводи реальные значения из .env файла в консоль или комментарии.
Этот файл заставляет модель следовать вашим внутренним процессам, а не общепринятым нормам из интернета.
В чем принципиальная разница: Контекст против Поведения
Главная ошибка новичков — сваливать всё в один файл или путать их назначение.
| Характеристика | CONTEXT.md | AGENTS.md |
|---|---|---|
| Вопрос, на который отвечает | Что это за проект? | Как мне выполнять работу? |
| Природа данных | Фактология (статичные данные) | Методология (процессы и правила) |
| Частота изменений | Редко (при смене стека или архитектуры) | Часто (по мере выработки привычек команды) |
| Для кого важнее | Для понимания предметной области | Для соблюдения стандартов качества |
| Аналогия | Карта местности | ПДД и инструкция водителя |
Контекст нужен, чтобы модель дала релевантный ответ. Агентские правила нужны, чтобы модель дала качественный и ожидаемый ответ. Без контекста искусственный интеллект предложит подключить PayPal к вашему магазину на российской CMS, используя библиотеки для Node.js. Без агентов он напишет рабочий, но кривой, недокументированный и непроверенный код, который развалится при первом же пулл-реквесте.
Типичные ошибки пользователей и разработчиков
За последний год сформировался целый антипаттерн работы с этими файлами. Вот самые частые ловушки:
Ошибка 1: Смешивание жанров («Мусорный бак») Разработчик создает CONTEXT.md и начинает писать туда: «Когда работаешь с заказами, всегда проверяй наличие товара на складе». Это правило поведения, оно должно лежать в AGENTS.md. В контексте должна остаться лишь констатация факта: «Проверка остатков реализована в сервисе InventoryService::checkStock()». Когда файлы смешаны, модель начинает игнорировать важные технические детали, теряясь в потоке инструкций.
Ошибка 2: Дефицит конкретики (Проект-призрак) Писать в контексте «Используем современные подходы» или «Код должен быть чистым» — бесполезно. Для модели слова «современный» и «чистый» означают миллионы строк кода из обучающей выборки. Нужно конкретно: «Используй типажи (Traits) для переиспользования методов сущностей вместо абстрактных родителей» или «Максимальная длина строки — 120 символов».
Ошибка 3: Ложные пути и устаревшие данные Указание в CONTEXT.md путей к файлам, которые поменялись три месяца назад во время рефакторинга — лучший способ свести ИИ с ума. Нейросеть будет упорно искать класс UserManager.php по старому адресу, генерировать импорт, получать ошибку от интерпретатора и пытаться исправить её еще более странными способами, попадая в бесконечный цикл. Правило простое: обновил структуру — обнови контекст.
Ошибка 4: Игнорирование масштаба (Монолит в правилах) Попытка описать правила для монолита на 500 тысяч строк и для маленького одностраничного плагина одними и теми же требованиями. Для тяжелого энтерпрайза важны строгие контракты и DDD, для плагина CMS важна легкость и отсутствие прямых запросов к таблицам ядра. Избыточные правила делают агента медленным и слишком консервативным.
Ошибка 5: Конфиденциальность в открытом доступе Хардкод реальных паролей, токенов продакшена или персональных данных клиентов прямо в теле файлов. Эти файлы часто попадают в репозиторий. Используйте плейсхолдеры (YOUR_TOKEN_HERE) или ссылки на защищенное хранилище секретов.
Понятные примеры: От теории к практике
Давайте разберем реальную задачу, близкую аудитории разработчика модулей: нам нужно добавить в наш компонент поле «ИНН клиента» и передавать его в API транспортной компании.
Как сработает модель БЕЗ этих файлов: Она посмотрит на название вашей CMS, погуглит (виртуально) документацию, найдет самую популярную CRM в мире (например, Salesforce или Magento) и попытается применить их архитектуру. Она создаст отдельный микросервис на Go, хотя у вас процедурный PHP, забудет экранировать данные перед записью в БД и назовет таблицу user_inn_data_raw_final_v2. Код придется переписывать с нуля.
Как сработает модель С правильными CONTEXT.md и AGENTS.md:
- Чтение CONTEXT.md: Модель видит, что мы работаем внутри компонента
/components/my_courier/. Она знает, что таблицы создаются через файлinstall.sql, а ORM не используется, запросы пишутся через$db->query(). Она находит, что API-токен курьера берется изconfig.php. - Чтение AGENTS.md: Модель видит инструкцию: «При изменении схемы БД всегда предоставляй UP и DOWN миграции», «Любые новые поля ввода должны проходить валидацию через стандартный валидатор ядра CMS», «После добавления поля обнови языковые файлы lang/ru.php».
- Результат: Модель выдает готовый SQL-запрос для
ALTER TABLE, добавляет строку в массив локализации, правит шаблон.tpl, вставляет проверкуif (!preg_match('/^\d{10,12}$/', $inn))и меняет запрос к API курьера, добавив туда параметр&customer_inn=.... Вам остается только нажать кнопку «Применить». Время на ревью сокращается с часа до пяти минут.
Почему это особенно важно для экосистемы WordPress, Bitrix и других CMS
Разработка плагинов и модулей для популярных систем имеет свою специфику. У них есть жесткие рамки безопасности и структуры.
- WordPress: В
CONTEXT.mdстоит указать версию PHP, факт использования хуков (actions/filters) вместо ООП-внедрения зависимостей и путь доwp-content/plugins/. ВAGENTS.mdобязательно прописать: «Все выводы в браузер пропускать через esc_html() или wp_kses_post()», «Прямые SQL-запросы запрещены, используем $wpdb->prepare()». - 1С-Битрикс: В контексте указываем D7 или старую архитектуру, местоположение
/local/templates/и ключи кеша. В правилах агента: «Инфоблоки создавать только через миграционную систему, руками не лезть в БД», «Обязательно проверять права доступа пользователя через CMain::CanDoOperation()».
Без этих файлов ИИ будет постоянно пытаться тащить в Битрикс чистый Composer без учета ядра, а в WordPress — изобретать собственные функции очистки данных, забывая про встроенные sanitize_text_field().
Как внедрить это в свой проект: пошаговая стратегия
- Начните с малого. Не пытайтесь сразу описать монолит на 10 лет разработки. Начните с одного репозитория или даже одной сложной папки (например,
/engine/payments/). - Соберите Context методом интервью. Откройте терминал, выполните
ls -la, посмотрите версии вcomposer.jsonилиpackage.json. Выпишите главные архитектурные решения. Достаточно 50–100 строк текста. - Выпишите свои боли. Вспомните последние 5 комментариев тимлида к вашему коду или коду джуна. «Почему опять нет тестов?», «Зачем ты написал эту функцию на 150 строк?». Переведите эти претензии на язык инструкций для робота и положите в
AGENTS.md. - Разместите файлы правильно. Обычно их кладут в корень репозитория. Некоторые IDE и агенты (например, Cursor или Zed) ищут их автоматически. Если используете кастомного агента, убедитесь, что в системном промпте передана команда:
Read files CONTEXT.md and AGENTS.md before generating any code. - Версионируйте вместе с кодом. Эти файлы — часть вашего продукта. Изменилась архитектура — создайте новую ветку, поправьте
.mdфайлы и отправьте в PR. Это отличный способ документировать изменения для всей команды, включая людей. - Проведите аудит. Скормите ваши файлы пустой модели и попросите: «Я даю тебе CONTEXT.md и AGENTS.md нашего проекта. Перескажи своими словами архитектуру и основные правила работы». Если модель поняла всё верно — файлы составлены удачно.
Будущее стандартизации
Появление CONTEXT.md и AGENTS.md — это естественный этап взросления индустрии разработки с помощью ИИ. Подобно тому, как раньше появились README.md (для людей) и .gitignore (для инструментов), теперь появился стандарт общения с автономными агентами.
Крупные платформы постепенно подтягиваются: GitHub Copilot официально поддерживает мнемонику настроек, JetBrains интегрирует чтение этих файлов в локальные LLM-модели. Рано или поздно поддержка станет нативной везде. Те, кто научится писать качественные инструкции сейчас, получат колоссальное преимущество в скорости разработки завтра. Ваши агенты будут тратить 90% времени на написание полезной бизнес-логики и только 10% — на борьбу с синтаксисом и структурой проекта.