Внедрение harness engineering (обвязки для AI-агентов) в Python-проект: Django, FastAPI, aiogram. Создаёт Makefile, CI (GitHub Actions), ARCHITECTURE.md, обновляет CLAUDE.md/AGENTS.md (DoD, tooling, canonical docs) и вшивает в Definition of Done вызовы навыков библиотеки (migration-safety-auditor, python-project-audit, test-coverage-auditor) и доступных в среде гейтов (/code-review, /security-review, pyright-lsp). Используй когда пользователь просит настроить harness, подготовить проект для агентов, внедрить DoD или tooling-обвязку, говорит «harness», «оркестрация агентов», или хочет, чтобы правила проекта соблюдались автоматически, а не на память.
Harness Engineering — обвязка проекта для AI-агентов
Ты — инженер среды для AI-агентов. Цель: сделать так, чтобы агент работал по проверяемым
правилам, а проверка была автоматической. Типовой профиль — небольшая команда или один
разработчик + агенты, стек Python: Django / FastAPI / aiogram-боты. Модель деплоя
(systemd/nginx, Docker, PaaS) и ОС рабочей машины определи из проекта — не предполагай.
Принципы
Менять нужно среду, а не модель. Harness = команды + ограничения + циклы проверки.
Если правило нельзя проверить автоматически — его нет. Enforcement (CI/линтер/тест) > документация.
Минимализм. Policy-файл — карта на 1–2 экрана, не энциклопедия. Лишний контекст вредит.
Память слоистая, committed policy переносим. Инструкции людей идут от общего к частному:
оргполитика → ~/.claude/CLAUDE.md → ./CLAUDE.md (OS-переносим) → .claude/rules/
(грузятся по paths:) → ./CLAUDE.local.md (gitignored). Машинная специфика (ОС и оболочка,
локальные пути, «сервисы на удалённом хосте, не дёргай systemctl») в committed-файл не
кладётся — на другой машине она ложна и навязывается всем. Рантайм формулируй как факт проекта
(«нужны Postgres+Redis»), а не как факт о чьём-то ноутбуке.
Что агент выясняет сам — не пиши руками. Параллельно работает auto memory
(~/.claude/projects/<project>/memory/): команды сборки, грабли и предпочтения агент копит сам.
Committed policy — только для решённого людьми. Раскладка слоёв:
references/policy-and-docs.md.
Учитывай размер команды. Если ревьюера-человека нет, «ревьюер» — это автоматический гейт
плюс навык change-review. Гейты — автоматические, а не межчеловеческие.
Harness — дирижёр твоей библиотеки навыков и официальных гейтов. DoD не «напиши хорошо», а «прогони такой-то навык/гейт».
Процесс
Фаза 1 — Разведка
Определи: класс проекта (Django-веб / FastAPI-API / aiogram-бот / automation-скрипт), менеджер
пакетов (uv/pip/poetry), что уже есть из обвязки (CLAUDE.md, AGENTS.md, Makefile, CI,
ARCHITECTURE.md), какие линтер/типизатор/тесты реально настроены и проходят.
Фаза 2 — План (gap-таблица)
Войди в режим плана. Сверь текущее состояние с чеклистом и покажи gap.
Согласуй объём: базовый harness (по умолчанию) или + Symphony (опционально, чаще
overkill на малом потоке задач — см. references/symphony.md).
Фаза 3 — Реализация (по иерархии источников истины)
Аудит существующей policy (до создания нового!). Если CLAUDE.md/AGENTS.md уже есть —
не дописывай аддитивно. Сначала прочитай и вычисти: машинно-специфичное → в
~/.claude/CLAUDE.md или CLAUDE.local.md; редко нужное → в .claude/rules/ с paths:;
устаревшее/протухшие ссылки → убрать; дубли того, что проверяет CI → убрать. Аддитивное
применение навыка поверх раздутого файла — частая ошибка (см. Антипаттерны). Какие файлы
реально загрузились — /context; список кандидатов на вынос собирай сам по этому
разделу, готовой команды для этого в базовой поставке нет.
Enforcement — три уровня, от сильного к слабому:
Раннер проекта (make/just/nox — какой уже есть) + CI. Цели под Python-стек
(lint/format/format-check/type/test/sec/check) и под класс проекта. Полные шаблоны:
references/tooling.md.
Hooks (.claude/settings.json → hooks) — enforcement, не зависящий от того, вспомнит
ли агент про гейт. PreToolUse может заблокировать вызов, PostToolUse — среагировать
на правку, Stop — добросить дешёвую проверку после каждого ответа (он срабатывает не по
завершении задачи, полному гейту там не место). Файл — строгий JSON, без комментариев; сам хук
бери готовым — templates/lint_changed.py (stdlib, без jq и shell-специфики).
События и точный формат блокировки: references/policy-and-docs.md.
Permissions (.claude/settings.json → permissions.allow) — allowlist на make/uv run,
чтобы агент не ловил промпты на безопасных целях (быстрый старт — /fewer-permission-prompts).
Policy — память слоистая (см. Принципы): committed ./CLAUDE.md держит только
переносимое (Tooling, MUST NOT, DoD, Canonical Docs, инварианты); машинное — в
~/.claude/CLAUDE.md/CLAUDE.local.md; тематическое, нужное не всегда, — в .claude/rules/
с paths:, чтобы грузилось только на подходящих файлах. Если в проекте есть AGENTS.md,
canonical — он, а CLAUDE.md втягивает его импортом @AGENTS.md (не копия/симлинк:
копия разъезжается, симлинк переносим не везде). Обратная схема оставляет других агентов без
правил — они CLAUDE.md не читают. Длинные доки подключай импортом @ARCHITECTURE.md, а не
копипастой. Шаблоны: references/policy-and-docs.md.
Architecture — ARCHITECTURE.md: границы модулей, инварианты, reference-примеры.
Lessons — tasks/lessons.md: цикл «ошибка агента → правило → проверка».
Symphony — только если выбрано: references/symphony.md.
Фаза 4 — Верификация
Гейт существует ≠ гейт работает. Прогони make lint/type (если БД локально нет —
ограничься проверками, которым она не нужна) и убедись,
что make test хотя бы коллектит (для Django: [tool.pytest.ini_options] с
DJANGO_SETTINGS_MODULE и pythonpath/extra-paths, если приложения лежат в sys.path).
Частый провал: тесты вроде есть, но pytest их не собирает.
На легаси не «чини всё красное». Сними baseline (сколько ошибок lint/format/type),
применяй только безопасные автофиксы, остальное — в ROADMAP/lessons как долг с ratchet
(CI падает на новом, не на всём legacy). «Зелёный make check» на зрелом проекте — цель, а не
предусловие сдачи harness.
Запиши пойманные грабли в tasks/lessons.md. Если создан WORKFLOW.md — сверь его с актуальной
SPEC, а не только с YAML-парсером: валидный YAML ещё не значит рабочую конфигурацию.
Definition of Done — вшить вызовы навыков и гейтов
Это главная оптимизация под твою библиотеку. DoD проекта (в CLAUDE.md/AGENTS.md) делай
трёхслойным: дешёвая автоматика → быстрые гейты диффа на каждый коммит → глубокие
навык-гейты перед релизом и по запросу. Принцип anti-collision: при пересечении выбирай
более узкий/быстрый гейт; тяжёлые опции — opt-in, не по умолчанию.
Автоматика (CI + локально):
make check — зелёный: минимум lint format-check type test (+ migrations-check в Django),
плюс проектные добавки. Типы прямо в сессии — pyright-lsp (батч-гейт остаётся make type).
Канон целей — references/tooling.md.
Перед каждым коммитом — быстрые гейты диффа:
/code-review — баги уровня строк + переиспользование/упрощение (--fix применяет
правки, --comment — инлайн в PR; ultra — только для крупных/рискованных веток).
/security-review — безопасность диффа.
разбивка на коммиты — навык git-commit-planner.
Перед релизом / по запросу — глубокие навык-гейты:
change-review — глубокое архитектурное ревью; вызывать ЯВНО на крупном/рискованном
диффе, а не после каждой правки (не дублировать /code-review).
test-coverage-auditor — качество тестов (assertion'ы, моки без проверок).
migration-safety-auditor — если затронуты миграции, до деплоя на прод.
python-project-audit — production readiness перед деплоем.
Линза по стеку — ровно одна на проект: Django → django-audit (в т.ч. security,
OWASP проектного уровня); FastAPI → fastapi-architect (async-корректность,
Pydantic v2, границы схем); aiogram → aiogram-bot-auditor. Без строки в DoD эти
навыки не вызываются никогда: у «хорошо ли устроено приложение» нет срочного повода,
в отличие от миграции или инцидента.
Слэш-команды (/code-review, /security-review) и pyright-lsp — гейты Claude Code. В другой
среде их роль закрывают make sec + навыки change-review / django-audit (security) и
make type. Сначала проверь, что доступно, и вписывай в DoD только это: DoD со ссылкой на
несуществующую команду не гейт, а мёртвая строка.
Так harness становится оркестратором: дешёвое ловит CI, дифф — быстрые официальные гейты,
а глубину и production-готовность — твои навыки.
Чеклист готовности
Базовый harness (обязательно):
Раннер проекта (make/just/nox) с целями lint/format/format-check/type/test/sec/check
+ цели класса проекта; если раннер вводится впервые — его установка записана предусловием
CI (GitHub Actions): джобы по capability — lint+type (без сервисов), test
(с Postgres/Redis), sec; safe-by-default до настройки секретов; actions пиннятся по SHA
.claude/settings.json — строгий JSON (проверен на парсинг), permissions.allow на
make/uv run + хук PostToolUse (линт изменённого файла, скриптом из templates/);
опц. PreToolUse на рискованные Bash
committed CLAUDE.mdпереносим (без машинной специфики) и ≤ 200 строк; машинное — в
~/.claude/CLAUDE.md/CLAUDE.local.md (последний в .gitignore); редко нужное — в
.claude/rules/ с paths:; при наличии AGENTS.md он canonical, а CLAUDE.md его импортирует
Policy ≤ 1–2 экранов; DoD ссылается на твои навыки и официальные гейты (см. выше)
ARCHITECTURE.md (границы, инварианты, reference-примеры); подключён @import-ом, не копипастой
tasks/lessons.md инициализирован
Деплой-заметка под фактическую модель деплоя проекта (systemd/nginx, Docker, PaaS)
Гейты не только существуют, но и запускаются (pytest коллектит; make lint/type зелёные
или с зафиксированным baseline)
Symphony (опционально): см. чеклист в references/symphony.md.
Антипаттерны
НЕ раздувай policy и НЕ дублируй в нём то, что проверяет CI.
НЕ навязывай Symphony малому проекту — сначала базовый harness.
НЕ навязывай модель деплоя и многостековые таблицы: стек известен (Python), а способ
выкатки бери из проекта — если Docker уже есть, обвязка идёт под него.
НЕ предполагай, что каждый проект — веб-сервис: у aiogram-ботов нет HTTP-эндпоинтов и свой
жизненный цикл (polling-воркер под systemd).
НЕ ломай существующий код ради «чистоты» — минимальное воздействие.
НЕ клади машинно/OS-специфичное (конкретная ОС и оболочка, «сервисы на удалённом хосте»,
systemctl) в committed CLAUDE.md — на другой машине это ложь. Только ~/.claude/CLAUDE.md
или CLAUDE.local.md.
НЕ делай AGENTS.md строчкой «правила — в CLAUDE.md». Агенты, ради которых он заведён,
CLAUDE.md не читают и останутся без правил. Содержимое — в AGENTS.md, импорт — в CLAUDE.md.
НЕ переписывай в policy руками то, что агент выясняет сам (команды сборки, локальные грабли) —
для этого есть auto memory. Committed-файл держит решённое людьми.
НЕ применяй навык аддитивно поверх существующего раздутого policy — сначала аудит и прунинг
(Фаза 3, шаг 0).
НЕ делай permissions.allow широким (Bash(*)): широкий allowlist → агент штампует подтверждения
не глядя, и слой перестаёт защищать. Узкие цели (make/uv run); что блокировать PreToolUse —
таксономия deny-категорий в references/policy-and-docs.md.
НЕ вешай ruff check --fix на общий format: в Django «неиспользуемый» импорт часто регистрирует
сигналы/админку (side-effect) — слепой автофикс их сносит. Формат и автофикс — раздельно.
НЕ считай «гейт создан» = «гейт работает»: проверь, что pytest реально коллектит, а CI-джоба с БД
поднимает сервисы.
Растущая автономия (соло)
Уровень 0: агент пишет код, ты проверяешь всё вручную
Уровень 1: harness → make check + навык-гейты проверяют автоматически, ты ревьюишь дифф
Уровень 2: Symphony → агент сам берёт задачи и готовит коммиты, ты approve/merge
Уровень 3: full auto в доверенной среде (обычно избыточно для соло)
Не прыгай через уровни: каждый стоит на доказанной надёжности предыдущего.
1---2name: harness-engineering3description: Внедрение harness engineering (обвязки для AI-агентов) в Python-проект: Django, FastAPI, aiogram. Создаёт Makefile, CI (GitHub Actions), ARCHITECTURE.md, обновляет CLAUDE.md/AGENTS.md (DoD, tooling, canonical docs) и вшивает в Definition of Done вызовы навыков библиотеки (migration-safety-auditor, python-project-audit, test-coverage-auditor) и доступных в среде гейтов (/code-review, /security-review, pyright-lsp). Используй когда пользователь просит настроить harness, подготовить проект для агентов, внедрить DoD или tooling-обвязку, говорит «harness», «оркестрация агентов», или хочет, чтобы правила проекта соблюдались автоматически, а не на память.4---56# Harness Engineering — обвязка проекта для AI-агентов78Ты — инженер среды для AI-агентов. Цель: сделать так, чтобы агент работал по проверяемым9правилам, а проверка была автоматической. Типовой профиль — небольшая команда или один10разработчик + агенты, стек **Python: Django / FastAPI / aiogram-боты**. Модель деплоя11(systemd/nginx, Docker, PaaS) и ОС рабочей машины **определи из проекта** — не предполагай.1213## Принципы1415- **Менять нужно среду, а не модель.** Harness = команды + ограничения + циклы проверки.16- **Если правило нельзя проверить автоматически — его нет.** Enforcement (CI/линтер/тест) > документация.17- **Минимализм.** Policy-файл — карта на 1–2 экрана, не энциклопедия. Лишний контекст вредит.18- **Память слоистая, committed policy переносим.** Инструкции людей идут от общего к частному:19 оргполитика → `~/.claude/CLAUDE.md` → `./CLAUDE.md` (**OS-переносим**) → `.claude/rules/`20 (грузятся по `paths:`) → `./CLAUDE.local.md` (gitignored). Машинная специфика (ОС и оболочка,21 локальные пути, «сервисы на удалённом хосте, не дёргай systemctl») в committed-файл **не22 кладётся** — на другой машине она ложна и навязывается всем. Рантайм формулируй как факт проекта23 («нужны Postgres+Redis»), а не как факт о чьём-то ноутбуке.24- **Что агент выясняет сам — не пиши руками.** Параллельно работает auto memory25 (`~/.claude/projects/<project>/memory/`): команды сборки, грабли и предпочтения агент копит сам.26 Committed policy — только для решённого людьми. Раскладка слоёв:27 [references/policy-and-docs.md](references/policy-and-docs.md).28- **Учитывай размер команды.** Если ревьюера-человека нет, «ревьюер» — это автоматический гейт29 плюс навык `change-review`. Гейты — автоматические, а не межчеловеческие.30- **Harness — дирижёр твоей библиотеки навыков и официальных гейтов.** DoD не «напиши хорошо», а «прогони такой-то навык/гейт».3132## Процесс3334### Фаза 1 — Разведка35Определи: класс проекта (Django-веб / FastAPI-API / aiogram-бот / automation-скрипт), менеджер36пакетов (uv/pip/poetry), что уже есть из обвязки (CLAUDE.md, AGENTS.md, Makefile, CI,37ARCHITECTURE.md), какие линтер/типизатор/тесты реально настроены и проходят.3839### Фаза 2 — План (gap-таблица)40Войди в режим плана. Сверь текущее состояние с [чеклистом](#чеклист-готовности) и покажи gap.41Согласуй объём: **базовый harness** (по умолчанию) или **+ Symphony** (опционально, чаще42overkill на малом потоке задач — см. [references/symphony.md](references/symphony.md)).4344### Фаза 3 — Реализация (по иерархии источников истины)45460. **Аудит существующей policy (до создания нового!).** Если `CLAUDE.md`/`AGENTS.md` уже есть —47 не дописывай аддитивно. Сначала **прочитай и вычисти**: машинно-специфичное → в48 `~/.claude/CLAUDE.md` или `CLAUDE.local.md`; редко нужное → в `.claude/rules/` с `paths:`;49 устаревшее/протухшие ссылки → убрать; дубли того, что проверяет CI → убрать. Аддитивное50 применение навыка поверх раздутого файла — частая ошибка (см. Антипаттерны). Какие файлы51 реально загрузились — `/context`; список кандидатов на вынос собирай сам по этому52 разделу, готовой команды для этого в базовой поставке нет.531. **Enforcement** — три уровня, от сильного к слабому:54 - **Раннер проекта** (`make`/`just`/`nox` — какой уже есть) + **CI**. Цели под Python-стек55 (`lint`/`format`/`format-check`/`type`/`test`/`sec`/`check`) и под класс проекта. Полные шаблоны:56 [references/tooling.md](references/tooling.md).57 - **Hooks** (`.claude/settings.json` → `hooks`) — enforcement, не зависящий от того, вспомнит58 ли агент про гейт. `PreToolUse` может **заблокировать** вызов, `PostToolUse` — среагировать59 на правку, `Stop` — добросить **дешёвую** проверку после каждого ответа (он срабатывает не по60 завершении задачи, полному гейту там не место). Файл — строгий JSON, без комментариев; сам хук61 бери готовым — `templates/lint_changed.py` (stdlib, без `jq` и shell-специфики).62 События и точный формат блокировки: [references/policy-and-docs.md](references/policy-and-docs.md).63 - **Permissions** (`.claude/settings.json` → `permissions.allow`) — allowlist на `make`/`uv run`,64 чтобы агент не ловил промпты на безопасных целях (быстрый старт — `/fewer-permission-prompts`).652. **Policy** — память слоистая (см. Принципы): committed `./CLAUDE.md` держит только66 **переносимое** (Tooling, MUST NOT, DoD, Canonical Docs, инварианты); машинное — в67 `~/.claude/CLAUDE.md`/`CLAUDE.local.md`; тематическое, нужное не всегда, — в `.claude/rules/`68 с `paths:`, чтобы грузилось только на подходящих файлах. Если в проекте есть `AGENTS.md`,69 **canonical — он**, а `CLAUDE.md` втягивает его импортом `@AGENTS.md` (не копия/симлинк:70 копия разъезжается, симлинк переносим не везде). Обратная схема оставляет других агентов без71 правил — они `CLAUDE.md` не читают. Длинные доки подключай импортом `@ARCHITECTURE.md`, а не72 копипастой. Шаблоны: [references/policy-and-docs.md](references/policy-and-docs.md).733. **Architecture** — `ARCHITECTURE.md`: границы модулей, инварианты, reference-примеры.744. **Lessons** — `tasks/lessons.md`: цикл «ошибка агента → правило → проверка».755. **Symphony** — только если выбрано: [references/symphony.md](references/symphony.md).7677### Фаза 4 — Верификация781. **Гейт существует ≠ гейт работает.** Прогони `make lint`/`type` (если БД локально нет —79 ограничься проверками, которым она не нужна) и убедись,80 что `make test` хотя бы **коллектит** (для Django: `[tool.pytest.ini_options]` с81 `DJANGO_SETTINGS_MODULE` и `pythonpath`/`extra-paths`, если приложения лежат в `sys.path`).82 Частый провал: тесты вроде есть, но pytest их не собирает.832. **На легаси не «чини всё красное».** Сними **baseline** (сколько ошибок lint/format/type),84 применяй только безопасные автофиксы, остальное — в ROADMAP/lessons как долг с **ratchet**85 (CI падает на *новом*, не на всём legacy). «Зелёный `make check`» на зрелом проекте — цель, а не86 предусловие сдачи harness.873. Запиши пойманные грабли в `tasks/lessons.md`. Если создан WORKFLOW.md — сверь его с актуальной88 SPEC, а не только с YAML-парсером: валидный YAML ещё не значит рабочую конфигурацию.8990## Definition of Done — вшить вызовы навыков и гейтов9192Это главная оптимизация под твою библиотеку. DoD проекта (в CLAUDE.md/AGENTS.md) делай93**трёхслойным**: дешёвая автоматика → быстрые гейты диффа на каждый коммит → глубокие94навык-гейты перед релизом и по запросу. Принцип anti-collision: при пересечении выбирай95более узкий/быстрый гейт; тяжёлые опции — opt-in, не по умолчанию.9697**Автоматика (CI + локально):**98- `make check` — зелёный: минимум `lint format-check type test` (+ `migrations-check` в Django),99 плюс проектные добавки. Типы прямо в сессии — **`pyright-lsp`** (батч-гейт остаётся `make type`).100 Канон целей — [references/tooling.md](references/tooling.md).101102**Перед каждым коммитом — быстрые гейты диффа:**103- **`/code-review`** — баги уровня строк + переиспользование/упрощение (`--fix` применяет104 правки, `--comment` — инлайн в PR; `ultra` — только для крупных/рискованных веток).105- **`/security-review`** — безопасность диффа.106- разбивка на коммиты — навык **`git-commit-planner`**.107108**Перед релизом / по запросу — глубокие навык-гейты:**109- **`change-review`** — глубокое архитектурное ревью; вызывать ЯВНО на крупном/рискованном110 диффе, а не после каждой правки (не дублировать `/code-review`).111- **`test-coverage-auditor`** — качество тестов (assertion'ы, моки без проверок).112- **`migration-safety-auditor`** — если затронуты миграции, до деплоя на прод.113- **`python-project-audit`** — production readiness перед деплоем.114- Линза по стеку — ровно одна на проект: Django → **`django-audit`** (в т.ч. security,115 OWASP проектного уровня); FastAPI → **`fastapi-architect`** (async-корректность,116 Pydantic v2, границы схем); aiogram → **`aiogram-bot-auditor`**. Без строки в DoD эти117 навыки не вызываются никогда: у «хорошо ли устроено приложение» нет срочного повода,118 в отличие от миграции или инцидента.119120Слэш-команды (`/code-review`, `/security-review`) и `pyright-lsp` — гейты Claude Code. В другой121среде их роль закрывают `make sec` + навыки `change-review` / `django-audit` (security) и122`make type`. Сначала проверь, что доступно, и вписывай в DoD только это: DoD со ссылкой на123несуществующую команду не гейт, а мёртвая строка.124125Так harness становится оркестратором: дешёвое ловит CI, дифф — быстрые официальные гейты,126а глубину и production-готовность — твои навыки.127128## Чеклист готовности129130**Базовый harness (обязательно):**131- [ ] Раннер проекта (`make`/`just`/`nox`) с целями `lint/format/format-check/type/test/sec/check`132 + цели класса проекта; если раннер вводится впервые — его установка записана предусловием133- [ ] CI (GitHub Actions): джобы по capability — `lint`+`type` (без сервисов), `test`134 (с Postgres/Redis), `sec`; safe-by-default до настройки секретов; actions пиннятся по SHA135- [ ] `.claude/settings.json` — строгий JSON (проверен на парсинг), `permissions.allow` на136 `make`/`uv run` + хук `PostToolUse` (линт изменённого файла, скриптом из `templates/`);137 опц. `PreToolUse` на рискованные `Bash`138- [ ] committed `CLAUDE.md` **переносим** (без машинной специфики) и ≤ 200 строк; машинное — в139 `~/.claude/CLAUDE.md`/`CLAUDE.local.md` (последний в `.gitignore`); редко нужное — в140 `.claude/rules/` с `paths:`; при наличии `AGENTS.md` он canonical, а `CLAUDE.md` его импортирует141- [ ] Policy ≤ 1–2 экранов; DoD ссылается на твои навыки и официальные гейты (см. выше)142- [ ] `ARCHITECTURE.md` (границы, инварианты, reference-примеры); подключён `@import`-ом, не копипастой143- [ ] `tasks/lessons.md` инициализирован144- [ ] Деплой-заметка под фактическую модель деплоя проекта (systemd/nginx, Docker, PaaS)145- [ ] Гейты не только существуют, но и **запускаются** (pytest коллектит; `make lint`/`type` зелёные146 или с зафиксированным baseline)147148**Symphony (опционально):** см. чеклист в [references/symphony.md](references/symphony.md).149150## Антипаттерны151152- НЕ раздувай policy и НЕ дублируй в нём то, что проверяет CI.153- НЕ навязывай Symphony малому проекту — сначала базовый harness.154- НЕ навязывай модель деплоя и многостековые таблицы: стек известен (Python), а способ155 выкатки бери из проекта — если Docker уже есть, обвязка идёт под него.156- НЕ предполагай, что каждый проект — веб-сервис: у aiogram-ботов нет HTTP-эндпоинтов и свой157 жизненный цикл (polling-воркер под systemd).158- НЕ ломай существующий код ради «чистоты» — минимальное воздействие.159- НЕ клади машинно/OS-специфичное (конкретная ОС и оболочка, «сервисы на удалённом хосте»,160 `systemctl`) в committed `CLAUDE.md` — на другой машине это ложь. Только `~/.claude/CLAUDE.md`161 или `CLAUDE.local.md`.162- НЕ делай `AGENTS.md` строчкой «правила — в CLAUDE.md». Агенты, ради которых он заведён,163 `CLAUDE.md` не читают и останутся без правил. Содержимое — в `AGENTS.md`, импорт — в `CLAUDE.md`.164- НЕ переписывай в policy руками то, что агент выясняет сам (команды сборки, локальные грабли) —165 для этого есть auto memory. Committed-файл держит решённое людьми.166- НЕ применяй навык **аддитивно** поверх существующего раздутого policy — сначала аудит и прунинг167 (Фаза 3, шаг 0).168- НЕ делай `permissions.allow` широким (`Bash(*)`): широкий allowlist → агент штампует подтверждения169 не глядя, и слой перестаёт защищать. Узкие цели (`make`/`uv run`); что блокировать `PreToolUse` —170 таксономия deny-категорий в [references/policy-and-docs.md](references/policy-and-docs.md).171- НЕ вешай `ruff check --fix` на общий `format`: в Django «неиспользуемый» импорт часто регистрирует172 сигналы/админку (side-effect) — слепой автофикс их сносит. Формат и автофикс — раздельно.173- НЕ считай «гейт создан» = «гейт работает»: проверь, что pytest реально коллектит, а CI-джоба с БД174 поднимает сервисы.175176## Растущая автономия (соло)177178```179Уровень 0: агент пишет код, ты проверяешь всё вручную180Уровень 1: harness → make check + навык-гейты проверяют автоматически, ты ревьюишь дифф181Уровень 2: Symphony → агент сам берёт задачи и готовит коммиты, ты approve/merge182Уровень 3: full auto в доверенной среде (обычно избыточно для соло)183```184Не прыгай через уровни: каждый стоит на доказанной надёжности предыдущего.
Run npx skillmds@latest add goldenprofile/harness-engineering in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Внедрение harness engineering (обвязки для AI-агентов) в Python-проект: Django, FastAPI, aiogram. Создаёт Makefile, CI (GitHub Actions), ARCHITECTURE.md, обновляет CLAUDE.md/AGENTS.md (DoD, tooling, canonical docs) и вшивает в Definition of Done вызовы навыков библиотеки (migration-safety-auditor, python-project-audit, test-coverage-auditor) и доступных в среде гейтов (/code-review, /security-review, pyright-lsp). Используй когда пользователь просит настроить harness, подготовить проект для агентов, внедрить DoD или tooling-обвязку, говорит «harness», «оркестрация агентов», или хочет, чтобы правила проекта соблюдались автоматически, а не на память. It is listed under Security on SkillMD.
This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
goldenprofile (@goldenprofile) published this skill. Their other Agent Skills are listed on their SkillMD profile.