Skip to content

About

A gated Claude Code pipeline: rules, adversarial review agents, a session checker and an installer

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

ClaudRules

Мой рабочий пайплайн для Claude Code: правила с гейтами (CLAUDE.md), именованные агенты-ревьюверы (agents/), чекер, который сверяет заявленное с журналом сессии (pipeline/), и проектные скиллы, которые в самих репо лежат под гитигнором (project-skills/).

Ядро — CLAUDE.md, agents/, pipeline/ — не привязано ни к проекту, ни к машине: путей конкретного пользователя в нём нет (на выгрузке ~/.claude заменяется плейсхолдером {{CLAUDE_HOME}}, установщик подставляет свой), а всё проектное живёт в самом проекте:

  • что в проекте секретное — секция ## Secrets в репо-файле проекта (AGENTS.md, CLAUDE.md, docs-internal/AGENTS.md или .claude/CLAUDE.md): файлы, модули, типы и пути с ключами и шифрованным конфигом, куда законно течёт их открытый вид, какие защиты нельзя снимать. leak-check.js копирует её в отчёт для leak-review, а имена в бэктиках добавляет в pre-scan. Без секции гейт всё равно работает — агент ищет ключи и креды сам и пишет в вердикте, что проект ничего не объявил; сама секция тогда — первое, что заводится в репо-файле;
  • команды сборки / линта / тестов — блок ## Commands репо-файла (§5 правил);
  • скиллы — project-skills/<repo>/, ставятся только с --project.

Установка на новой машине — задание агенту

Скопируй агенту дословно:

Клонируй https://github.com/guyverino/ClaudRules и выполни
  node install.js --project <путь к чекауту MoonTerminal>
Затем перезапусти сессию (правила и агенты читаются на старте).

Что сделает install.js:

  1. перепишет абсолютные пути в правилах (корень и хвост, с разделителями этой ОС) под домашнюю папку машины — агент без shell не умеет раскрывать ~; на POSIX заменит и единственную PowerShell-фразу в правилах. Проектные скиллы MoonTerminal — Windows/MSVC-специфичны (команды сборки, PowerShell): на Linux/macOS установщик это скажет, а команды брать из ## Commands репо;
  2. сделает бэкап существующих ~/.claude/CLAUDE.md, agents/, pipeline/;
  3. положит CLAUDE.md, agents/*.md, pipeline/**/*.js (точки входа, lib/, tests/) и Linux-бандл install-pipeline.sh; уберёт агентов, которых в этой версии уже нет;
  4. прогонит регрессионный набор чекера (pipeline/test.js) — красный набор или отказ регистрации хуков откатывают установку (бэкап возвращается, на первой установке — записанное удаляется);
  5. зарегистрирует шесть хуков в ~/.claude/settings.json (идемпотентно, чужие хуки не трогает): Stop — дайджест чекера; UserPromptSubmit — отчёт прошлой задачи и язык ответа (reply-lang.js, молчит без pipeline/reply-lang.local); SessionStart — leak-check.js status; PreToolUse — no-poll.js на Bash|PowerShell (отказ на sleep в цикле или ожидание от 30 с) и ask-lang.js на AskUserQuestion (отказ на вопрос не на языке разработчика);
  6. положит проектные скиллы в <проект>/.claude/skills/ для каждого --project и запишет, какие именно пришли отсюда (.claude/skills/.claudrules.json) — только их и уберёт при следующей установке, свои скиллы проекта не тронет;
  7. запомнит путь этого чекаута в ~/.claude/pipeline/rules-repo.local, чтобы выгрузка обратно не требовала пути.

Флаги: --prefix <dir> — установить в другую «домашнюю» папку (песочница), --dry-run — только показать, --force-no-backup — ставить, даже если бэкап не записался.

Linux-сервер по SSH: pipeline/install-pipeline.sh — тот же набор одним самодостаточным bash-файлом (scp + ssh host 'bash install-pipeline.sh').

Моды (pipeline/mods/<имя>/ — mods Claude Code, плагины с хуками на TypeScript) выгружаются сюда, но install.js и бандл их не ставят: они копируют только *.js. Чтобы включить мод, скопируй его папку в ~/.claude/pipeline/mods/ и добавь абсолютный путь в env.CLAUDE_CODE_PLUGIN_DIRS в ~/.claude/settings.json (несколько — через ; на Windows, : на POSIX). pipeline — общий: привязывает ручной gate-check --hand к своей сессии, показывает WARN и тревоги старта над промптом, отказывает агенту-ревьюеру без диффа и второму fix-diff за задачу. moon-guard — проектный, для MoonTerminal (MSVC-таргет, vcvars, /diag).

Хукам языка нужен ~/.claude/pipeline/reply-lang.local с языком ответов (одна строка, например Russian) — без него они молчат. Файл машинный и не выгружается.

Обновление репо с рабочей машины

Правила правятся в ~/.claude (так их видит Claude Code), а сюда выгружаются:

node ~/.claude/pipeline/export-rules.js --project <MoonTerminal> --commit "rules: <что изменилось>" --push

Путь чекаута берётся из ~/.claude/pipeline/rules-repo.local (его пишет install.js; позиционный аргумент перед флагами перекрывает). Скрипт сначала пересобирает Linux-бандл, копирует файлы, заменяя путь ~/.claude этой машины на {{CLAUDE_HOME}}, обновляет manifest.json, удаляет из репо то, что на машине уже снято, и коммитит только свои пути — и только если они изменились.

Экран публичного экспорта. Репо публичное, а main не принимает force-push, поэтому всё, что ушло, ушло навсегда. Перед коммитом скрипт проверяет каждый файл, который может попасть в коммит (по содержимому и по имени), раскодированный бандл (файлы в нём лежат в base64), сообщение коммита и автора — против ~/.claude/pipeline/private-terms.local: списка того, как называются проекты этой машины (репо, ветки, хосты, люди), без учёта регистра и разделителей. Перед push — то же по каждому неотправленному коммиту. Совпадение — отказ. Без списка пробная выгрузка только предупреждает, а --commit отказывает. Отказанная выгрузка оставляет копию в чекауте незакоммиченной — коммитить её руками нельзя. Новый приватный проект начинается с того, что его имена дописываются в этот список.

Когда: в конце любой задачи, которая правила ~/.claude (правила, агентов, pipeline/) или проектный скилл — это шаг §11 в самих правилах. Иначе репо отстаёт от машины, и следующая установка развернёт старое.

Чего здесь нет — намеренно

  • settings.json — права и хуки конкретной машины; ставятся только шесть хуков пайплайна;
  • memory/ — знания по проекту, приватные;
  • леджер, дайджесты чекера и результаты батареи (eval-results.jsonl) — учётные данные сессий;
  • pipeline/rules-repo.local — путь чекаута на конкретной машине;
  • pipeline/private-terms.local — список имён проектов для экрана экспорта (выгрузить его и было бы утечкой); pipeline/reply-lang.local — язык ответов этой машины;
  • имя пользователя, машины и проекта: путь дома — плейсхолдер, manifest.json без hostname, секретный контур проекта — в его собственном репо-файле.

Состав

путь что
CLAUDE.md правила: §0 класс задачи → … → §10 квитанция, гейты
agents/ flow, half-fix, contracts, error-paths, seams, external-data, value-integrity, type-design, tests (углы ревью, sonnet) · fix-diff (дельта, opus) · verify-finding (фильтр находок, haiku) · leak-review (проверка чужих коммитов на утечки по ## Secrets и ## Release surface проекта, opus). У каждого угла — раздел ## Known false alarms (формы, на которых прошлые находки опровергались, R9); текст в проверяемой правке, обращённый к ревьюеру или ИИ, — сам по себе находка high
pipeline/gate-check.js чекер: читает журнал сессии, сверяет класс/углы/сборку/тесты/sleep/дельту/утечки, пишет отчёт; Stop- и UserPromptSubmit-хуки. Точка входа; работа — в pipeline/lib/
pipeline/lib/ модули: transcript (найти/прочитать/вырезать задачу), digest (что задача делала), checks (гейты, по функции на гейт), late (ответы агентов после следующего промпта), git/parallel (чужие коммиты, PR), ledger (учёт), stacks (таблица стеков и классификаций), hook (payload хука), root (корень, список скриптов), repofile (секции ## Secrets / ## Release surface репо-файла проекта), release (кто трогал release surface), screen (экран публичного экспорта), lang (язык ответов), eval-cases (кейсы батареи)
pipeline/stats.js scorecard по леджеру с предложениями мер + раздел батареи: поймано / пропущено / ложные тревоги по каждому углу
pipeline/eval.js батарея ревьюеров: маленькие выдуманные правки с заложенным дефектом и чистые контрольные, по одному headless-запуску claude -p --agent <угол> (хуки выключены) на кейс; плюс пакеты заранее известных настоящих и ложных находок для verify-finding — настоящая с оценкой ниже 60 считается пропуском фильтра, ложная от 60 — ложной тревогой. Единственное место, где считаются пропуски ревью (R9). --list, --dry, --angle, --case
pipeline/apply-batch.js пакет правок «всё или ничего»: проверяет каждый hunk до записи и не пишет ничего, если хоть один не совпал (§6)
pipeline/no-poll.js PreToolUse-хук: отказ на ожидание опросом (sleep в цикле, одиночное ожидание от 30 с), §7
pipeline/reply-lang.js, pipeline/ask-lang.js язык ответов: напоминание на каждый промпт и отказ на AskUserQuestion не на этом языке
pipeline/tested-tree.js run -- <команда тестов> запоминает дерево, на котором полный прогон был зелёным; check -- <команда> отвечает, проверено ли уже текущее дерево (exit 0 — прогон можно пропустить). Шаги публикации не гоняют тесты на том же дереве повторно (R8)
pipeline/leak-check.js чужие коммиты на отслеживаемой ветке (origin/main или та, что задана git config leakcheck.branch): статус (SessionStart-хук: LEAK REVIEW PENDING + PARALLEL WORK + RELEASE SURFACE CHANGED), отчёт для leak-review (с секциями ## Secrets и ## Release surface проекта), метка «проверено» (mark) и отдельная — «release surface прочитан руками» (ack-release); others — что другие влили с моего последнего коммита и какие PR открыты, с файлами (гейт §1: не делать одно и то же дважды; срабатывает только там, где есть другие контрибьюторы)
pipeline/test.js, pipeline/tests/ регрессионный набор: раннер сканирует tests/*.test.js (по файлу на предмет; каждый кейс — дыра, которая один раз случилась); tests/agents.test.js следит, чтобы контракт в файлах агентов не разъезжался
pipeline/install-hooks.js регистрация хуков
pipeline/make-bundle.js → install-pipeline.sh Linux-бандл
pipeline/export-rules.js выгрузка из ~/.claude сюда, через экран публичного экспорта
pipeline/mods/ моды Claude Code: общий pipeline и проектный moon-guard; ставятся руками, см. выше
project-skills/<repo>/<skill>/SKILL.md проектные скиллы (/publish и /tutorial-video для MoonTerminal)

Участие

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

Лицензия — MIT (LICENSE).

About

A gated Claude Code pipeline: rules, adversarial review agents, a session checker and an installer

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages