К основному содержанию
скилл CX Codex

create-control-manifest — скилл для Claude Code: правила из ADR

Собирает короткий список обязательных и запрещённых правил кодинга по слоям архитектуры из принятых ADR. Пригодится, когда ADR уже утверждены, а команде нужна шпаргалка.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add Donchitos/Claude-Code-Game-Studios --skill create-control-manifest -a claude-code
Открыть на GitHub

Что делает create-control-manifest

Скилл читает принятые ADR проекта и превращает их в плоский свод правил: что делать и чего никогда не делать, разложенное по слоям — Foundation, Core, Feature, Presentation. ADR объясняют «почему», манифест фиксирует «что». Результат пишется в docs/architecture/control-manifest.md после подтверждения пользователя.

Работа идёт по фазам. Сначала скилл через bash .claude/scripts/adr-status.sh собирает статусы всех docs/architecture/adr-*.md и решает, есть ли что брать за основу. Затем из каждого принятого ADR вытаскивает только четыре секции — Decision, Alternatives Considered, Performance Implications, Engine Compatibility — через bash .claude/scripts/md-section.sh extract. Из Decision берутся обязательные паттерны, из Alternatives Considered — отвергнутые подходы с причиной отказа, из Performance Implications — бюджеты, из Engine Compatibility — ограничения API. Отдельно добавляются глобальные правила: нейминг и бюджеты из project.yaml, запрещённые API из docs/engine-reference/[engine]/deprecated-apis.md.

Есть жёсткие условия запуска. Если принятых ADR нет, скилл останавливается с вердиктом BLOCKED и предлагает сначала прогнать /architecture-decision. Если у ADR вообще нет секции ## Status, он не считает их принятыми и просит сделать retrofit. Запускать имеет смысл после того, как /architecture-review прошёл, а ADR получили статус Accepted; при правке ADR манифест перегенерируют.

Какие задачи решает

  • собрать свод правил кодинга из принятых ADR
  • разложить обязательные и запрещённые паттерны по слоям архитектуры
  • вытащить бюджеты производительности из ADR в один файл
  • зафиксировать устаревшие API движка как запрещённые
  • перегенерировать манифест после правки ADR

Примеры запросов агенту

  • собери control manifest из принятых ADR
  • перегенерируй манифест, ADR поменялись
  • сделай шпаргалку правил по слоям из ADR

Как установить create-control-manifest

1Через Skills CLI (Vercel)

npx skills add Donchitos/Claude-Code-Game-Studios --skill create-control-manifest -a claude-code

2Вручную: положить файлы

~/.claude/skills/create-control-manifest/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/create-control-manifest/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о create-control-manifest

Как установить create-control-manifest в Claude?

Выполните npx skills add Donchitos/Claude-Code-Game-Studios --skill create-control-manifest -a claude-code. После этого скилл лежит в ~/.claude/skills/create-control-manifest/SKILL.md.

Что делает create-control-manifest?

Читает принятые ADR и собирает из них плоский список правил по слоям: обязательные паттерны, запрещённые подходы, бюджеты производительности и ограничения API движка. Пишет результат в docs/architecture/control-manifest.md.

Когда его запускать?

После того как /architecture-review прошёл и ADR получили статус Accepted. Если принятых ADR нет, скилл останавливается и просит сначала создать решения.

Исходный текст

SKILL.md · MIT
---
name: create-control-manifest
description: "Builds a short list of must-do and never-do coding rules per system from accepted ADRs. Use when the user wants programmer rules or a cheat sheet from the ADRs, or needs it regenerated after ADR changes."
argument-hint: "[update — regenerate from current ADRs] [--review full|lean|solo]"
user-invocable: true
allowed-tools: Read, Glob, Grep, Write, Agent, AskUserQuestion, Bash(bash "*/.claude/skills/create-control-manifest/../../hooks/yaml-helper.sh" resolve_config *), Bash(bash .claude/scripts/adr-status.sh*), Bash(bash .claude/scripts/md-section.sh *)
model: sonnet
---

!`bash "${CLAUDE_SKILL_DIR}/../../hooks/yaml-helper.sh" resolve_config --keys review_mode,review_gate,automation`

Resolved above — use as-is; `--review` overrides `review_mode` for this run. No
block → defaults in `.claude/docs/config-resolution.md`.

Ask with the question tool. Without one, list the options numbered and end your turn
to wait. A skipped or dismissed question is not an answer: ask again in plain text.

# Create Control Manifest

The control manifest is a flat rules sheet for programmers: what to do and what
never to do, by architectural layer, taken from the Accepted ADRs, the project's
technical preferences and the engine reference docs. The ADRs say *why*; the
manifest says *what*.

**Writes:** `docs/architecture/control-manifest.md`, after the user's yes.
**When:** after `/architecture-review` passes and the ADRs are Accepted. Run it
again whenever an ADR is accepted or revised.

Asks follow `.claude/docs/automation-modes.md` (collaborative always asks, guided
asks on major choices, autonomous logs and goes on; `automation_always_ask`
categories always ask).

## Phase 1: Load the inputs

### ADRs

`bash .claude/scripts/adr-status.sh` reads every `docs/architecture/adr-*.md` in one
pass: the counts first (`adrs`, then `accepted`, `proposed`, `deprecated`,
`superseded`, `unfilled`, `other`, `no_status`), then one row per ADR with its
status and layer. Establish the denominator first: decide from the counts, before
reading any ADR:

| Counts | Meaning | Action |
|---|---|---|
| `adrs 0` | No ADRs. | "No ADRs found — run `/architecture-decision` before building a control manifest." Stop. |
| `accepted` ≥ 1 | Normal. | The Accepted rows are the set **A**. Name every other ADR, with its status, in the Phase 4 preview: the user approves a manifest knowing what it leaves out. |
| `accepted 0`, some with a status | No Accepted ADRs. | "[N] ADRs found, none Accepted. A manifest built from Proposed ADRs would encode decisions that may still change." Ask whether to go on with the Proposed ones or stop. **Never write an empty manifest silently.** |
| every ADR `no_status` | **Malformed ADRs, not an empty Accepted set.** | "[N] ADRs found, none has a `## Status` section, so acceptance cannot be told. Run `/architecture-decision retrofit [file]` on each." Stop. Never treat them as Accepted. |

Each stop above ends with `Verdict: BLOCKED — [the reason]`. Note the number and
title of every ADR a rule comes from.

### Project config

- `naming.*` and `performance.*` from `project.yaml`; for any key absent or empty,
  `.claude/docs/technical-preferences.md`.
- Approved libraries and forbidden patterns from
  `.claude/docs/technical-preferences.md` (not migrated to `project.yaml`).

### Engine reference

- `docs/engine-reference/[engine]/VERSION.md` for the engine and version.
- `docs/engine-reference/[engine]/deprecated-apis.md`: these become forbidden APIs.
- `docs/engine-reference/[engine]/current-best-practices.md`, when it exists.

### What exists already

`docs/architecture/control-manifest.md` present: this run regenerates it; read it
before the Phase 5 write, which replaces it. `production/epics/*/EPIC.md` present:
epics exist. Phase 6 picks its next step from both.

Report: "Loaded [A] Accepted ADRs of [N], engine: [name + version]."

## Phase 2: Extract the rules from each ADR

For each ADR in **A**, read only four sections, never the whole file:

```
bash .claude/scripts/md-section.sh extract docs/architecture/[adr-file].md "Decision"
```

and the same for `Alternatives Considered`, `Performance Implications` and `Engine
Compatibility`. Context, Consequences, Migration Plan and Validation Criteria say why
a decision was made; the manifest records what to do. A section an ADR lacks: note
it for that ADR and go on. A section missing from **every** ADR in A: report "No
Accepted ADR has a `[section]` section — the manifest's [category] rules will be
empty. Verify this is intended." Read beyond the four only when a section points
outside itself ("subject to the constraints in Context"), and then that one section.

From each ADR:

- **Required patterns** (Decision): every "must", "should", "required to",
  "always", and every pattern or approach it mandates, including any `### Implementation
  Guidelines` inside it. Never look for that sub-heading alone: many ADRs state
  their mandates directly under Decision, and a scan for the sub-heading alone
  yields an empty section.
- **Forbidden approaches** (Alternatives Considered): every rejected alternative,
  with why it was rejected as the rule ("never use X because Y"), and any named
  anti-pattern.
- **Performance guardrails** (Performance Implications): budgets ("max N ms per
  frame for this system") and memory limits.
- **Engine API constraints** (Engine Compatibility): post-cutoff APIs that need
  verifying, behaviour that differs from what a model would assume, fields or
  methods that changed in the pinned version.

**Layer.** Each rule goes under the layer of the system it governs, the ADR's
`layer` column where it has one:

- **Foundation:** scene management, event architecture, save/load, engine start-up
- **Core:** core gameplay loop, main player systems, physics and collision
- **Feature:** secondary systems and mechanics, AI
- **Presentation:** rendering, audio, UI, VFX, shaders

An ADR that spans layers puts its rule in each one.

## Phase 3: Add the global rules

Rules for every layer, each with its source (the `project.yaml` key,
`technical-preferences.md`, or the engine-reference file), as a layer rule has:

- **Naming** from `naming.*`: classes, variables, signals and events, files,
  constants.
- **Performance budgets** from `performance.*`: target frame rate, frame budget,
  draw calls, memory ceiling.
- **Forbidden APIs** from `deprecated-apis.md`, **only those that apply to what this
  project builds.** Never copy the table whole: its `GodotPhysics3D → Jolt Physics
  3D` row is 3D-only, and a 2D project does not use that engine. When you cannot
  tell whether an entry applies (2D or 3D, a module the project may not include),
  scope the rule ("when using 3D physics: …") or leave it out and list it as
  unresolved. `/create-stories` reads this file, and rules that do not apply are
  rules nobody reads.
- **Required patterns** from `current-best-practices.md`, when it exists.
- **Forbidden patterns** from `technical-preferences.md`, copied as written.

## Phase 4: Show the summary, then the review

```
## Control Manifest Preview
Engine: [name + version]
ADRs covered: [ADR numbers]
ADRs left out: [ADR-NNNN ([status]), … — every ADR not in A, or "None"]
Rules extracted:
  - Foundation layer: [N] required, [M] forbidden, [P] guardrails
  - Core layer: [N] required, [M] forbidden, [P] guardrails
  - Feature layer: …
  - Presentation layer: …
  - Global: [N] naming conventions, [M] forbidden APIs, [P] approved libraries
Unresolved: [engine entries left out because whether they apply is unclear, or "None"]
```

Ask: "Does this rule summary look complete?" Options: Yes — review and write it /
Add rules — I have more to include / Remove rules — some should be dropped / Stop —
I need to review the ADRs first.

**The technical review.** Read the `review_gate` line above. `skill-gates=skip`
(solo or lean): no agent; note `TD-MANIFEST skipped — [Solo | Lean] mode`.
`skill-gates=run`: hand the review to the `technical-director` agent with gate
**TD-MANIFEST** (`.claude/docs/director-gates/td-manifest.md`; the agent reads it
itself). Brief:

- **Objective:** check the extracted rules before they are written.
- **Give it:** the preview above with the full rule list, the ADRs covered, the
  engine version, and the rules taken from technical preferences or the engine
  reference.
- **Check:** every mandatory ADR pattern is captured and stated accurately; the
  forbidden approaches are complete and correctly attributed; no rule lacks a source
  ADR or preference document; the guardrails agree with the ADRs' constraints.
- **Return:** APPROVE, CONCERNS, REJECT, or NOT ASSESSED naming a missing input.
- **Boundaries:** it writes no file.

Act on the verdict:

- **APPROVE:** go to Phase 5.
- **CONCERNS:** ask: "The technical director raised concerns. How do you want to go
  on?" Options: Revise the flagged rules / Accept and go on / Discuss further.
- **REJECT:** write nothing; fix the flagged rules and show the summary again.
- **NOT ASSESSED:** it is not an approval (`.claude/docs/director-gates.md`). Name
  what was missing, then supply it and run the review again; or, when the user
  chooses to go on without it, go to Phase 5 and state `TD-MANIFEST: NOT ASSESSED —
  [input]` in the reply and the final verdict line.

## Phase 5: Write the control manifest

Ask: "May I write the control manifest to `docs/architecture/control-manifest.md`?"
Options: Yes, write it / Show me the full draft first, then ask again / Not yet — I
want more changes. Write only on an explicit yes.

```markdown
# Control Manifest

> **Engine**: [name + version]
> **Last Updated**: [date]
> **Manifest Version**: [date]
> **ADRs Covered**: [ADR-NNNN, ADR-MMMM, ...]
> **Status**: Active — regenerate with `/create-control-manifest update` when ADRs change

`Manifest Version` is the date this manifest was generated. Stories embed it when
they are written, and `/story-readiness` compares a story's version with this one
to find stories written against old rules. It always equals `Last Updated`: the
same date, for different readers.

This manifest is a programmer's quick reference taken from the Accepted ADRs, the
technical preferences and the engine reference docs. For the reason behind a rule,
read its ADR.

---

## Foundation Layer Rules

*Applies to: scene management, event architecture, save/load, engine start-up*

### Required Patterns
- **[rule]** — source: [ADR-NNNN]

### Forbidden Approaches
- **Never [anti-pattern]** — [brief reason] — source: [ADR-NNNN]

### Performance Guardrails
- **[system]**: max [N]ms/frame — source: [ADR-NNNN]

---

## Core Layer Rules

*Applies to: core gameplay loop, main player systems, physics, collision*

### Required Patterns
...

### Forbidden Approaches
...

### Performance Guardrails
...

---

## Feature Layer Rules

*Applies to: secondary mechanics, AI systems, secondary features*

### Required Patterns
...

### Forbidden Approaches
...

---

## Presentation Layer Rules

*Applies to: rendering, audio, UI, VFX, shaders, animations*

### Required Patterns
...

### Forbidden Approaches
...

---

## Global Rules (All Layers)

### Naming Conventions
| Element | Convention | Example | Source |
|---------|-----------|---------|--------|
| Classes | [convention] | [example] | [`naming.classes` in project.yaml, or technical-preferences.md] |
| Variables | [convention] | [example] | [`naming.variables` in project.yaml, or technical-preferences.md] |
| Signals/Events | [convention] | [example] | [`naming.signals` in project.yaml, or technical-preferences.md] |
| Files | [convention] | [example] | [`naming.files` in project.yaml, or technical-preferences.md] |
| Constants | [convention] | [example] | [`naming.constants` in project.yaml, or technical-preferences.md] |

### Performance Budgets
| Target | Value | Source |
|--------|-------|--------|
| Framerate | [value] | [`performance.target_framerate` in project.yaml, or technical-preferences.md] |
| Frame budget | [value] | [`performance.frame_budget_ms` in project.yaml, or technical-preferences.md] |
| Draw calls | [value] | [`performance.draw_call_limit` in project.yaml, or technical-preferences.md] |
| Memory ceiling | [value] | [`performance.memory_ceiling_mb` in project.yaml, or technical-preferences.md] |

### Approved Libraries / Addons
- [library] — approved for [purpose] — source: technical-preferences.md

### Forbidden APIs ([engine version])
These APIs are deprecated or unverified for [engine + version]:
- `[api name]` — deprecated since [version] / unverified post-cutoff
- Source: `docs/engine-reference/[engine]/deprecated-apis.md`

### Cross-Cutting Constraints
- [constraint that applies in every layer] — source: [ADR-NNNN, preference key or engine-reference file]
```

## Phase 6: Next steps

- No epics yet: "Run `/create-epics layer: foundation`, then `/create-stories
  [epic-slug]`: stories embed this manifest's rules and version."
- A regeneration: "Updated. Tell the team about the changed rules, above all any
  new Forbidden entries."

Every rule traces to an ADR, a technical preference or an engine reference doc;
none is invented, and none is paraphrased in a way that changes its meaning. End
with `Verdict: COMPLETE — control manifest written` after the write, or `Verdict:
BLOCKED — user declined the write` when declined.

© Donchitos · MIT · Donchitos/Claude-Code-Game-Studios

Похожие скиллы

Все скиллы по теме «Настройка агента: память, контекст, субагенты» →
adr-create ruvnet Пишет Architecture Decision Record в docs/adr/ со следующим номером, кладёт его в память AgentDB и связывает с прежними решениями. Пригодится, когда решение надо записать и не потерять. CX Codex +1 741установок create-architecture-documentation davila7 Слэш-команда для Claude, которая собирает документацию по архитектуре проекта: диаграммы, ADR и описание компонентов. 6 136установок create-architectural-decision-record официальный github Создаёт запись об архитектурном решении в формате ADR. Пригодится, когда нужно сохранить причины выбора и последствия для проекта. 10 176установок architecture-compass stark-ai-de Скилл для работы с архитектурными решениями: заводит ADR-процесс в репозитории, проверяет дрейф и планирует ограниченные рефакторинги. CX Codex +1 2 700установок adr-review ruvnet Сверяет git-дифф с принятыми записями архитектурных решений (ADR). Помогает выявить нарушения архитектуры и устаревшие паттерны перед слиянием ветки. CX Codex +1 745установок godot-composition thedivergentai Задаёт агенту правила архитектуры Godot на компонентах: сущность собирается из узлов, а не наследуется от базовых классов. CX Codex +1 519установок

Из того же набора72

day-one-patch Планирует патч первого дня для игры после gold master: отбирает только безопасные баги, прогоняет через лёгкий QA и требует план отката до правок. CX Codex +1 414установок dev-story Скилл берёт пользовательскую историю, проверяет её архитектурные решения и передаёт задачу агенту-программисту вместе с тестами. CX Codex +1 414установок soak-test Готовит протокол soak-теста: что наблюдать и записывать на длинной сессии, чтобы поймать утечки памяти и усталость от механик. CX Codex +1 413установок story-done Закрывает готовую пользовательскую историю в репозитории: проверяет критерии приёмки, сверяет код с GDD и ADR, а затем обновляет статус спринта. CX Codex +1 413установок help Скилл определяет текущий этап разработки игры по артефактам и подсказывает следующий шаг. Помогает сориентироваться, когда непонятно, за какую задачу браться. CX Codex +1 411установок test-setup Скилл создаёт основу для автотестов и CI: каталоги, конфигурацию тестового раннера и workflow GitHub Actions. Нужен до начала разработки. CX Codex +1 411установок sprint-status Читает план спринта и файлы историй, показывает, сколько сделано и сколько осталось. Пригодится, когда нужно быстро понять, как идёт спринт. CX Codex +1 411установок test-evidence-review Скилл проверяет качество тестов и подтверждений по историям, а не только наличие и успешный запуск файлов. Нужен перед передачей на QA. CX Codex +1 410установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой