Harness engineering
LLM Skills
npx -y skills add goldenprofile/llm-skills --skill harness-engineeringAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Внедрение 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). Деплой-ориентир — systemd/nginx/redis/postgres, не Docker. Используй когда пользователь просит настроить harness, подготовить проект для агентов, внедрить DoD/tooling-обвязку, или говорит «harness», «symphony», «оркестрация агентов».
SKILL.md
15.0 KB, as published. Nobody here has run it
Harness Engineering — обвязка проекта для AI-агентов (соло)
Ты — инженер среды для AI-агентов. Цель: сделать так, чтобы агент работал по проверяемым правилам, а проверка была автоматической. Профиль владельца — один разработчик + агенты (Claude Code и OpenCode), стек Python: Django / FastAPI / aiogram-боты, среда Windows, деплой systemd + nginx + redis + postgres (Docker — меньшинство проектов).
Принципы
- Менять нужно среду, а не модель. Harness = команды + ограничения + циклы проверки.
- Если правило нельзя проверить автоматически — его нет. Enforcement (CI/линтер/тест) > документация.
- Минимализм. Policy-файл — карта на 1–2 экрана, не энциклопедия. Лишний контекст вредит.
- Память трёхслойна, committed policy переносим. Память Claude Code: личное на все проекты
(
~/.claude/CLAUDE.md) ↔ проектное в репо (./CLAUDE.md, должно быть OS-переносимым) ↔ проектное+машинное вне репо (./CLAUDE.local.md, gitignored). Машинная специфика («я на Windows, сервисы на удалённом Linux, не дёргай systemctl») в committed-файл не кладётся — на другой ОС она ложна и навязывается всем. Рантайм формулируй как факт проекта («нужны Postgres+Redis»), не как «ты на Windows». - Соло ≠ команда. «Ревьюер» — это ты + навык
techlead-ai, а не другой человек. Гейты — автоматические, а не межчеловеческие. - 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; устаревшее/протухшие ссылки → убрать; дубли того, что проверяет CI → убрать. Аддитивное применение навыка поверх раздутого файла — частая ошибка (см. Антипаттерны). - Enforcement — три уровня, от сильного к слабому:
- Makefile (работает и на Windows, и на Unix) + CI. Цели под Python-стек
(
lint/fmt/type/test/sec/all) и под класс проекта. Полные шаблоны: references/tooling.md. - Hooks (
.claude/settings.json→hooks) — enforcement, не зависящий от того, вспомнит ли агент про Makefile.PreToolUseможет заблокировать вызов (exit 2 / JSONdeny),PostToolUse— среагировать на правку (прогнать линт на изменённом файле и вернуть результат). Это и есть «среда не даёт забыть». Паттерны: references/policy-and-docs.md. - Permissions (
.claude/settings.json→permissions.allow) — allowlist наmake/uv run, чтобы агент не ловил промпты на безопасных целях (быстрый старт —/fewer-permission-prompts).
- Makefile (работает и на Windows, и на Unix) + CI. Цели под Python-стек
(
- Policy — память трёхслойна (см. Принципы): committed
./CLAUDE.mdдержит только переносимое (Tooling, MUST NOT, DoD, Canonical Docs, инварианты); машинное — в~/.claude/CLAUDE.md/CLAUDE.local.md.AGENTS.md— тонкий указатель наCLAUDE.md(не копия/симлинк: копия разъезжается, симлинк на Windows ненадёжен). Длинные доки подключай импортом@ARCHITECTURE.md, а не копипастой. Шаблоны: references/policy-and-docs.md. - Architecture —
ARCHITECTURE.md: границы модулей, инварианты, reference-примеры. - Lessons —
tasks/lessons.md: цикл «ошибка агента → правило → проверка». - Symphony — только если выбрано: references/symphony.md.
Фаза 4 — Верификация
- Гейт существует ≠ гейт работает. Прогони
make lint/type(на Windows — без БД) и убедись, что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 all» на зрелом проекте — цель, а не предусловие сдачи harness. - Запиши пойманные грабли в
tasks/lessons.md. Если создан WORKFLOW.md — проверь, что YAML парсится.
Definition of Done — вшить вызовы навыков и гейтов
Это главная оптимизация под твою библиотеку. DoD проекта (в CLAUDE.md/AGENTS.md) делай трёхслойным: дешёвая автоматика → быстрые гейты диффа на каждый коммит → глубокие навык-гейты перед релизом и по запросу. Принцип anti-collision: при пересечении выбирай более узкий/быстрый гейт; тяжёлые опции — opt-in, не по умолчанию.
Автоматика (CI + локально):
make all—lint/type/test/secзелёные. Типы прямо в сессии —pyright-lsp(батч-гейт остаётсяmake type).
Перед каждым коммитом — быстрые гейты диффа:
/code-review— баги уровня строк + переиспользование/упрощение (--fixприменяет правки,--comment— инлайн в PR;ultra— только для крупных/рискованных веток)./security-review— безопасность диффа.- разбивка на коммиты — навык
git-commit-planner.
Перед релизом / по запросу — глубокие навык-гейты:
techlead-ai— глубокое архитектурное ревью; вызывать ЯВНО на крупном/рискованном диффе, а не после каждой правки (не дублировать/code-review).test-coverage-auditor— качество тестов (assertion'ы, моки без проверок).migration-safety-auditor— если затронуты миграции, до деплоя на прод.python-project-audit— production readiness перед деплоем; для Django —django-audit(в т.ч. security-линза, OWASP проектного уровня).
Слэш-команды (/code-review, /security-review) — гейты Claude Code; в OpenCode их роль
закрывают make sec + навыки techlead-ai / django-audit (security).
Так harness становится оркестратором: дешёвое ловит CI, дифф — быстрые официальные гейты, а глубину и production-готовность — твои навыки.
Чеклист готовности
Базовый harness (обязательно):
-
Makefileс целямиlint/fmt/type/test/sec/all+ цели класса проекта - CI (GitHub Actions): джобы по capability —
lint+type(без сервисов),test(с Postgres/Redis),sec; safe-by-default до настройки секретов; actions пиннятся по SHA -
.claude/settings.json—permissions.allowнаmake/uv run+ хукPostToolUse(линт изменённого файла); опц.PreToolUseна рискованныеBash - committed
CLAUDE.mdпереносим (без машинной специфики); машинное — в~/.claude/CLAUDE.md/CLAUDE.local.md(последний в.gitignore);AGENTS.md— тонкий указатель - Policy ≤ 1–2 экранов; DoD ссылается на твои навыки и официальные гейты (см. выше)
-
ARCHITECTURE.md(границы, инварианты, reference-примеры); подключён@import-ом, не копипастой -
tasks/lessons.mdинициализирован - Деплой-заметка под systemd/nginx (не навязывать Docker)
- Гейты не только существуют, но и запускаются (pytest коллектит;
make lint/typeзелёные или с зафиксированным baseline)
Symphony (опционально): см. чеклист в references/symphony.md.
Антипаттерны
- НЕ раздувай policy и НЕ дублируй в нём то, что проверяет CI.
- НЕ навязывай Symphony соло-проекту — сначала базовый harness.
- НЕ навязывай Docker и многостековые таблицы — стек известен (Python), среда Windows.
- НЕ предполагай, что каждый проект — веб-сервис: у aiogram-ботов нет HTTP-эндпоинтов и свой жизненный цикл (polling-воркер под systemd).
- НЕ ломай существующий код ради «чистоты» — минимальное воздействие.
- НЕ клади машинно/OS-специфичное («ты на Windows», «сервисы на удалённом Ubuntu»,
systemctl) в committedCLAUDE.md— на другой ОС это ложь. Только~/.claude/CLAUDE.mdилиCLAUDE.local.md. - НЕ применяй навык аддитивно поверх существующего раздутого policy — сначала аудит и прунинг (Фаза 3, шаг 0).
- НЕ делай
permissions.allowшироким (Bash(*)): широкий allowlist → агент штампует подтверждения не глядя, и слой перестаёт защищать. Узкие цели (make/uv run); что блокироватьPreToolUse— таксономия deny-категорий в references/policy-and-docs.md. - НЕ вешай
ruff check --fixна общийfmt: в Django «неиспользуемый» импорт часто регистрирует сигналы/админку (side-effect) — слепой автофикс их сносит. Формат и автофикс — раздельно. - НЕ считай «гейт создан» = «гейт работает»: проверь, что pytest реально коллектит, а CI-джоба с БД поднимает сервисы.
Растущая автономия (соло)
Уровень 0: агент пишет код, ты проверяешь всё вручную
Уровень 1: harness → make all + навык-гейты проверяют автоматически, ты ревьюишь дифф
Уровень 2: Symphony → агент сам берёт задачи и готовит коммиты, ты approve/merge
Уровень 3: full auto в доверенной среде (обычно избыточно для соло)
Не прыгай через уровни: каждый стоит на доказанной надёжности предыдущего.