Skip to content
egor6-66Public

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

7 Commits

Folders and files

Repository files navigation

🏛 harness — роль-модель работы над репозиторием

Плагин Claude Code: роли, опознание сессии, границы правки и git-порядок. Один экземпляр на все репозитории; всё, что у них различается, каждый объявляет сам — файлом .claude/harness.yaml рядом со своим кодом.

🧭 Главное

Одна роль на сессию, и она впаяна на старте. main — architect: держит контракты, координацию и доставку, кода зон не пишет. <зона> — owner этой зоны: отвечает за неё целиком и правит только её папки. layer — один артефакт по узкому промпту, git не трогает вовсе.

Границы держит машина, а не обещание:

  • правка файла — штатными правилами доступа: у роли свой файл настроек, в нём чужие зоны закрыты;
  • git-запись — гейтом: он разбирает команду (bash -c, кавычки, подстановка, heredoc видны ему все) и сверяет глагол с правами роли, а состав коммита — с её путями;
  • граница репозитория — хуком: правка файла и git-запись за пределами репозитория сессии запрещены любой роли, architect не исключение. Соседний репозиторий в скоупе, в том числе прилинкованный через node_modules, правит только его собственная сессия.

Не закрыто: запись в соседний репозиторий не-git командой Bash (sed -i ../сосед/…). Это держит только песочница Claude Code, а ей нужны user namespaces, которых в контейнере может не быть — разбор в FAQ.

🧱 Что внутри

Часть Что делает
agents/ пять ролей
skills/shared-policy/ общая политика — рамка, которую включает каждая роль
hooks/scope-identity.mjs баннер на старте: кто ты, какие папки твои, чего нельзя
hooks/main-session-marker.mjs маркер architect-сессии — им даётся право на доставку
hooks/git-gate.mjs гейт git-записи: чужой репозиторий, глагол по роли, состав коммита по зоне, цифры перед сменой ветки
hooks/repo-boundary.mjs правка файла вне репозитория сессии — отказ любой роли
hooks/ownership.mjs кто владеет файлом по раскладке зон (нужен проверке состава коммита)
hooks/harness-config.mjs чтение harness.yaml: зоны, пины моделей, git-права
hooks/harness-doctor.mjs проверка установки: включён ли плагин, разложены ли роли, есть ли pre-commit
hooks/statusline.mjs строка состояния с ролью — включается в личных настройках, см. ниже
scripts/generate-roles.mjs собирает файлы ролей из harness.yaml
skills/ пять действий захода: /harness:shift, task, report, verdict, checkpoint — все пишут в ROADMAP.yaml скоупа

🔌 Как подключить

claude plugin marketplace add egor6-66/harness
claude plugin install harness@omnifield --scope project

Чтобы плагин включался у каждого, кто клонировал репозиторий, это записывается в его .claude/settings.json (файл коммитится):

{
  "extraKnownMarketplaces": {
    "omnifield": { "source": { "source": "github", "repo": "egor6-66/harness" } }
  },
  "enabledPlugins": { "harness@omnifield": true }
}

⚠️ Запись включает плагин, но не скачивает его: каждый ставит его у себя один раз командой выше.

🖥️ Строка состояния — личная настройка. Плагин её задать не может (Claude Code берёт statusLine только из настроек, не из плагина), поэтому роль на экране включается в своём ~/.claude/settings.json, указав путь до hooks/statusline.mjs установленного плагина. Без неё всё работает — просто роль не видна постоянно.

🚦 Как запускать сессии

Роль приезжает файлом настроек — в нём и она сама, и границы её правки:

claude --settings .claude/roles/main.json    # architect
claude --settings .claude/roles/ui.json      # owner зоны ui
claude --settings .claude/roles/layer.json   # layer

Файлы ролей собираются из конфига и коммитятся:

node ~/.claude/plugins/<путь до плагина>/scripts/generate-roles.mjs .

🧩 Что объявляет репозиторий

.claude/harness.yaml — данные, и только они:

apiVersion: harness/v1
kind: harness
product: <имя>
architects: 1
models:
  architect: claude-opus-5
  owner: claude-opus-5
  layer: claude-haiku-4-5
zones:
  <зона>:
    paths: [<папка>]
    description: "что это за зона"
git:
  architect: full
  owner: commit-only
  layer: none

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

🔍 Проверка установки

node <плагин>/hooks/harness-doctor.mjs            # общий отчёт
HARNESS_SCOPE=<роль> node <плагин>/hooks/harness-doctor.mjs   # + кто ты при этой роли

Говорит по факту: прочитан ли конфиг, существуют ли папки зон, не пересекаются ли они, включён ли плагин, разложены ли файлы ролей, есть ли в репозитории машинный pre-commit.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages