@erclx/aitk 0.38.0 → 0.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/README.md +1 -1
  2. package/claude/.claude-plugin/plugin.json +1 -1
  3. package/claude/skills/claude-design-extract/SKILL.md +1 -1
  4. package/claude/skills/claude-feature/REQUIREMENT.md +2 -1
  5. package/claude/skills/claude-feature/SKILL.md +9 -1
  6. package/claude/skills/create-rule/REQUIREMENT.md +1 -1
  7. package/claude/skills/create-skill/REQUIREMENT.md +6 -2
  8. package/claude/skills/create-skill/SKILL.md +5 -2
  9. package/claude/skills/create-snippet/REQUIREMENT.md +36 -0
  10. package/claude/skills/create-snippet/SKILL.md +23 -5
  11. package/claude/skills/{create-standard → create-snippet}/references/snippets.md +1 -1
  12. package/claude/skills/create-standard/REQUIREMENT.md +38 -0
  13. package/claude/skills/create-standard/SKILL.md +8 -12
  14. package/claude/skills/migration-claude-md/REQUIREMENT.md +41 -0
  15. package/claude/skills/migration-standards/REQUIREMENT.md +38 -0
  16. package/claude/skills/project-commands/REQUIREMENT.md +42 -0
  17. package/claude/skills/session-resume/REQUIREMENT.md +38 -0
  18. package/claude/skills/setup-indexes/REQUIREMENT.md +42 -0
  19. package/claude/skills/setup-indexes/SKILL.md +1 -1
  20. package/claude/skills/setup-plugins/REQUIREMENT.md +42 -0
  21. package/claude/skills/setup-verify/REQUIREMENT.md +39 -0
  22. package/claude/skills/systematic-debugging/REQUIREMENT.md +41 -0
  23. package/claude/skills/toolkit-cli/REQUIREMENT.md +37 -0
  24. package/claude/skills/toolkit-feedback/REQUIREMENT.md +40 -0
  25. package/claude/skills/toolkit-operator/REQUIREMENT.md +39 -0
  26. package/claude/skills/toolkit-triage/REQUIREMENT.md +40 -0
  27. package/claude/skills/youtube-transcripts/REQUIREMENT.md +38 -0
  28. package/docs/agents/capture.md +31 -0
  29. package/docs/agents/commands.md +57 -0
  30. package/docs/agents/comments.md +32 -0
  31. package/docs/agents/context-audit-checks.md +40 -0
  32. package/docs/agents/context-audit.md +44 -0
  33. package/docs/agents/docs.md +17 -0
  34. package/docs/agents/index.md +23 -0
  35. package/docs/agents/indexes.md +29 -0
  36. package/docs/agents/install-and-sync.md +109 -0
  37. package/docs/agents/output-shape.md +45 -0
  38. package/docs/agents/overview.md +26 -0
  39. package/docs/agents/sandbox.md +65 -0
  40. package/docs/agents/scripting.md +115 -0
  41. package/docs/agents/tasks.md +33 -0
  42. package/docs/index.md +4 -1
  43. package/docs/target-projects.md +2 -2
  44. package/package.json +1 -1
  45. package/scripts/docs/list.sh +36 -17
  46. package/scripts/manage-sandbox.sh +4 -0
  47. package/src/commands/sandbox.ts +1 -1
  48. package/src/sandbox/census.ts +1 -1
  49. package/src/ui.ts +1 -1
  50. package/standards/bundled/snippets.md +1 -1
  51. package/standards/skill.md +4 -4
  52. package/claude/skills/claude-design-propose/SKILL.md +0 -15
  53. package/docs/agents.md +0 -535
package/README.md CHANGED
@@ -65,7 +65,7 @@ Scaffolding your first project? Start with target projects, then the AI workflow
65
65
  - [Operating model](docs/operating-model.md): orchestrator and worker roles for building across parallel sessions
66
66
  - [Visual design workflow](docs/visual-design-workflow.md): tiered guide for design and wireframe authoring
67
67
  - [Target projects](docs/target-projects.md): scaffold, add a domain later, sync upstream drift
68
- - [Agents](docs/agents.md): CLI flags, exit codes, and JSON output shapes
68
+ - [Agents](docs/agents/index.md): CLI flags, exit codes, and JSON output shapes
69
69
  - [Docs index](docs/index.md): every reference doc in this repo
70
70
 
71
71
  ## Development
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "aitk",
3
3
  "description": "Automated governance, versioning, and discovery tools for Claude Code.",
4
- "version": "0.38.0",
4
+ "version": "0.40.0",
5
5
  "author": {
6
6
  "name": "Eric Le",
7
7
  "url": "https://github.com/erclx"
@@ -36,7 +36,7 @@ Read these from the project root on both paths, skipping any that do not exist:
36
36
 
37
37
  Read a standard from `${CLAUDE_SKILL_DIR}/../../standards/` instead when the project does not have it.
38
38
 
39
- On the source path, also read the UI surfaces matched in Step 1 plus `docs/agents.md` and `docs/index.md` for output shape or framing rules already documented.
39
+ On the source path, also read the UI surfaces matched in Step 1 plus `docs/agents/output-shape.md` and `docs/index.md` for output shape or framing rules already documented.
40
40
 
41
41
  On the greenfield path, also read `.claude/ARCHITECTURE.md` for platform, tech stack, and surface type. Do not scan `src/`, stylesheets, or UI modules. Step 1 already established they hold nothing.
42
42
 
@@ -7,13 +7,14 @@ description: What feature planning is for, the gaps it closes, and why it stops
7
7
 
8
8
  ## Gap
9
9
 
10
- Without this skill, implementation starts before anyone knows what it touches. A session reads no project context and rediscovers a settled constraint halfway through, the file list emerges as the work goes rather than before it, and the ambiguities that needed a decision get resolved silently in whichever direction the first edit happened to go.
10
+ Without this skill, implementation starts before anyone knows what it touches. A session reads no project context and rediscovers a settled constraint halfway through, the file list emerges as the work goes rather than before it, and the ambiguities that needed a decision get resolved silently in whichever direction the first edit happened to go. A constraint naming a surface to leave alone forbids two different acts at once, so the executing session picks one and the branch either grows an excluded concern or ships a reference to a file the change deleted.
11
11
 
12
12
  ## Must
13
13
 
14
14
  - Read the project's own Claude setup before scanning source, so the plan inherits decisions already made instead of reopening them
15
15
  - Name every file the work touches with the reason it is touched
16
16
  - Surface each unresolved ambiguity as a numbered question carrying a suggested answer and an empty answer slot, so the plan is decision-ready in one pass
17
+ - State which act a constraint forbids when it names a surface to leave alone, since conforming that surface and retargeting a pointer into it are different acts and only one is out of scope
17
18
  - Scale the output to the work. A two-file change with nothing to decide should not produce a plan file.
18
19
  - Stop at the plan and wait to be told to continue
19
20
 
@@ -38,13 +38,21 @@ Measure against the tree rather than recall. Grep for each construct the plan wi
38
38
  Construct the plan with these sections:
39
39
 
40
40
  - **Summary:** three to five one-line bullets covering the goal, the main deliverables, and the key trade-off or decision. Aimed at humans scanning the plan, not agents executing it. Full mode only.
41
- - **Constraints:** durable rules the work must respect (patterns to reuse, surfaces not to touch, platform limits). Optional. Include when an orchestrator or prior context supplies them, omit the section otherwise.
41
+ - **Constraints:** durable rules the work must respect (patterns to reuse, surfaces not to touch, platform limits). Optional. Include when an orchestrator or prior context supplies them, omit the section otherwise. A constraint naming a surface to leave alone carries the distinction under Constraints below.
42
42
  - **Files to touch:** each file with a one-line reason
43
43
  - **Risks:** conflicts, coupling, or tricky spots. When the plan establishes a resource with more than one consumer, list the consumers and mark each read or write, because a policy stated over that resource has to hold for the writers and not just the consumer that prompted it. If none, use `None identified.`
44
44
  - **Questions:** numbered list of things to resolve before starting. Each carries a `- Suggested:` line and an `- Answer:` slot (see Suggestions below). If none, use `None identified.`
45
45
 
46
46
  Prefer `None identified.` over low-signal fillers. A small feature should produce a short plan, not a padded one. Small mode skips the summary since the plan is already short enough to scan in full.
47
47
 
48
+ ### Constraints
49
+
50
+ A constraint naming a surface to leave alone forbids two different acts. Name which one, since a constraint carrying only the surface leaves the executing session to guess.
51
+
52
+ - Forbid conforming the surface to whatever shape the change introduces. This is the act a scope constraint means, and it keeps the branch from growing a second concern.
53
+ - Never forbid retargeting a pointer the change breaks. A rename, a split, or a deletion that leaves a citation behind ships a dangling reference, so fixing it is required work rather than scope creep.
54
+ - Decide both acts for every surface the constraint names. Carving the distinction out for one file and leaving its siblings under the bare wording is how a plan ships one correct call beside one broken reference.
55
+
48
56
  ### Suggestions
49
57
 
50
58
  Attach a `- Suggested:` line to every question, then an empty `- Answer:` slot below it. A blank answer means accept the suggestion at execution time. This makes the plan decision-ready in one pass, with no separate decision-help round.
@@ -39,4 +39,4 @@ The band gets picked by feel, so a UI copy rule lands in the always-on range and
39
39
  - Editing a rule that already exists
40
40
  - Toolkit source rules, which are authored in the toolkit rather than in a target
41
41
  - Installing the rules the toolkit ships, which the governance setup path owns
42
- - A standard or a snippet, which `create-standard` owns
42
+ - A standard, which `create-standard` owns, and a snippet, which `create-snippet` owns
@@ -9,16 +9,20 @@ description: What skill creation is for, the gaps it closes, and why it confirms
9
9
 
10
10
  Without this skill, a new skill lands in the wrong shape and the wrong place. A session writes `SKILL.md` from its own idea of the format, writes malformed frontmatter that Claude Code routes on, and never opens the authoring standard that already answers every question it guessed at.
11
11
 
12
+ A skill born without its requirement is the second failure, and it surfaces much later. Coverage of the corpus is what the operator reads to decide whether a skill should exist, so every skill created without the sibling decays that reading, and the sweep that closes the gap has to reconstruct what the skill was for from the body it already shipped.
13
+
12
14
  ## Must
13
15
 
14
16
  - Read the authoring standard and the prose standard before drafting, so the draft starts conformant rather than getting corrected into shape
15
- - Confirm the name and the full body with the user before writing. The name is the routing key and a folder that disagrees with its frontmatter fails silently.
17
+ - Draft the sibling `REQUIREMENT.md` beside the body, from what the skill is for rather than from the drafted body
18
+ - Confirm the name and both files with the user before writing. The name is the routing key and a folder that disagrees with its frontmatter fails silently.
16
19
  - Write to the conventional skills path, so discovery finds it without configuration
17
20
 
18
21
  ## Must not
19
22
 
20
23
  - Auto-trigger. Creation is a deliberate act and a skill invented from an ambiguous request is worse than none.
21
- - Write before the user has seen the body
24
+ - Write either file before the user has seen it
25
+ - Derive the requirement from the drafted body, which records the draft's overfitting as the requirement
22
26
 
23
27
  ## Guards
24
28
 
@@ -20,5 +20,8 @@ Read a standard from `${CLAUDE_SKILL_DIR}/../../standards/` instead when the pro
20
20
  ## Steps
21
21
 
22
22
  1. Draft the full `SKILL.md` from the user's description
23
- 2. Confirm the skill name and full content with the user before writing
24
- 3. Write to `.claude/skills/<name>/SKILL.md`
23
+ 2. Draft the sibling `REQUIREMENT.md` from what the skill is for, in the shape the standard states. Write the gaps from the user's description rather than from the drafted body, since a requirement derived from the body records whatever the draft overfitted to.
24
+ 3. Confirm the skill name and both files with the user before writing
25
+ 4. Write to `.claude/skills/<name>/SKILL.md` and `.claude/skills/<name>/REQUIREMENT.md`
26
+
27
+ Every skill carries a requirement. A skill created without one is a gap someone closes in a later sweep, and the sweep has to reconstruct what the skill was for from the body it already shipped.
@@ -0,0 +1,36 @@
1
+ ---
2
+ name: create-snippet
3
+ description: Why a snippet needs its shape read from the reference and its write surface resolved before anything is drafted
4
+ ---
5
+
6
+ # Create snippet requirement
7
+
8
+ ## Gap
9
+
10
+ Without this skill, a snippet is drafted the way any other markdown file is drafted, so it arrives carrying frontmatter, headings, and a fill-in placeholder. None of the invocation channels strip those. Typing `>slug` in a chat inserts the scaffolding verbatim, and the file that was meant to be one instruction reads as a document.
11
+
12
+ The write surface is the second failure. The toolkit authors at `snippets/` and a target project holds only the installed copy under `.claude/snippets/`, so a session picks whichever folder it noticed first. A toolkit snippet written into the consumed copy fails the drift assertion that regenerates that folder. A snippet written there in a target project is correct and looks identical, which is why the surface has to be resolved from what the project has rather than guessed.
13
+
14
+ ## Must
15
+
16
+ - Read the bundled snippet reference before drafting, since the shape rules are what the invocation channels depend on
17
+ - Resolve the write surface from which snippet folder the project has, rather than from whichever one the session noticed first
18
+ - Confirm the slug and the full body with the user before writing
19
+ - Emit the written path in full, so the terminal can resolve it
20
+ - State what the resolved surface implies after writing, since a root file needs the consumed copy regenerated and a project-local one needs copying to the toolkit to ship
21
+
22
+ ## Must not
23
+
24
+ - Restate the snippet authoring conventions in the body, which the bundled reference owns and which would drift from it
25
+ - Write a standard, which answers to a different authoring contract
26
+
27
+ ## Guards
28
+
29
+ - Neither snippet folder exists: stop, since there is nowhere for the snippet to live
30
+
31
+ ## Out of scope
32
+
33
+ - Editing a snippet that already exists
34
+ - A standard, which `create-standard` owns
35
+ - Installing and syncing the snippets the toolkit ships, which the `aitk snippets` commands own
36
+ - What a snippet is and how it is invoked, which the bundled snippet reference states
@@ -1,13 +1,31 @@
1
1
  ---
2
2
  name: create-snippet
3
- description: Retired. `create-standard` absorbed this skill and writes snippets as well as standards. Invoke `aitk:create-standard` instead.
4
- disable-model-invocation: true
3
+ description: Creates a new snippet file in `snippets/` or `.claude/snippets/`. Use when asked to create a snippet, add a snippet, write a reusable prompt, or make a new snippet. Do NOT use to edit an existing snippet.
5
4
  ---
6
5
 
7
6
  # Create snippet
8
7
 
9
- Retired. `create-standard` absorbed the snippet surface, resolves `snippets/` or `.claude/snippets/` the same way it resolves the standards folders, and its description carries every trigger this skill used to route on.
8
+ Creates one snippet file. Read these files in parallel:
10
9
 
11
- Invoke `aitk:create-standard` instead and ask for a snippet. The name understates what the skill covers, which is why its description names both surfaces.
10
+ - `.claude/standards/prose.md` from the project root: prose conventions for all generated text
11
+ - `${CLAUDE_SKILL_DIR}/references/snippets.md`: authoring conventions, invocation channels, use patterns
12
12
 
13
- This body exists so a project that installed the plugin before the merge keeps resolving the old name for one sync cycle. It ships in `0.18.0` and is removed in `0.19.0`.
13
+ Read `${CLAUDE_SKILL_DIR}/../../standards/prose.md` instead when the project does not have it.
14
+
15
+ ## Guards
16
+
17
+ - If neither `snippets/` nor `.claude/snippets/` exists, stop: `❌ No snippets/ or .claude/snippets/ directory found.`
18
+
19
+ ## Steps
20
+
21
+ 1. Resolve the write surface: `snippets/` at the root if present, which is the toolkit's own authoring source. Otherwise `.claude/snippets/`, a target project's installed copy.
22
+ 2. Draft the content from the user's description. The snippet reference governs structure, invocation, and authoring conventions.
23
+ 3. Confirm the slug and full content with the user before writing
24
+ 4. Write the file to `<surface>/<category>/<slug>.md`, or to `<surface>/<slug>.md` when the snippet takes no category
25
+
26
+ ## After writing
27
+
28
+ Emit the full path on its own line.
29
+
30
+ - Root surface: this is the toolkit's authoring source. Remind the user to run `bun run check` to regenerate the consumed copy under `.claude/`.
31
+ - `.claude/` surface: the file is project-local. `aitk snippets sync` leaves it alone, since sync only updates filenames it recognizes from the toolkit. Remind the user to copy it to the toolkit repo, under `snippets/<category>/<name>.md`, if it should ship to every project.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: Snippet reference
3
3
  description: Snippet reference and authoring conventions
4
- consumers: create-standard
4
+ consumers: create-snippet
5
5
  ---
6
6
 
7
7
  # Snippet reference
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: create-standard
3
+ description: Why a standard needs its shape read from the meta-standard and its write surface resolved before anything is drafted
4
+ ---
5
+
6
+ # Create standard requirement
7
+
8
+ ## Gap
9
+
10
+ Without this skill, a standard is written from memory of what other standards look like. It arrives without the scope section that says what the file does not govern, so the next author cannot tell whether a rule belongs to it or to a sibling, and two standards end up claiming the same subject with no way to settle which one wins.
11
+
12
+ The write surface is the second failure. The toolkit authors at `standards/` and a target project holds only the installed copy under `.claude/standards/`, so a session picks whichever folder it noticed first. A toolkit standard written into the consumed copy fails the drift assertion that regenerates that folder. A standard written there in a target project is correct and looks identical, which is why the surface has to be resolved from what the project has rather than guessed.
13
+
14
+ A standard written at the root and left there is the third. The index entry and the context table are both generated or maintained downstream of the write, so a file that ships without them is catalogued nowhere and reached only by whoever already knew the path.
15
+
16
+ ## Must
17
+
18
+ - Read the meta-standard before drafting, since the shape is what makes the file arguable against a sibling
19
+ - Resolve the write surface from which standards folder the project has, rather than from whichever one the session noticed first
20
+ - Confirm the slug and the full body with the user before writing
21
+ - Emit the written path in full, so the terminal can resolve it
22
+ - State what the resolved surface implies after writing, since a root file needs the consumed copy and the index regenerated and a project-local one needs copying to the toolkit to ship
23
+
24
+ ## Must not
25
+
26
+ - Work the standard's shape or frontmatter from memory
27
+ - Write a snippet, which carries no frontmatter and answers to a different authoring contract
28
+
29
+ ## Guards
30
+
31
+ - Neither standards folder exists: stop, since there is nowhere for the standard to live
32
+
33
+ ## Out of scope
34
+
35
+ - Editing a standard that already exists
36
+ - A snippet, which `create-snippet` owns
37
+ - A path-scoped coding rule, which `create-rule` owns
38
+ - Installing and syncing the standards the toolkit ships, which the `aitk standards` commands own
@@ -1,29 +1,25 @@
1
1
  ---
2
2
  name: create-standard
3
- description: Creates a new standard file in `standards/` or `.claude/standards/`, or a new snippet file in `snippets/` or `.claude/snippets/`. Use when asked to create a standard, add a standard, write a new authoring convention, create a snippet, add a snippet, or make a new snippet. Do NOT use to edit an existing standard or snippet.
3
+ description: Creates a new standard file in `standards/` or `.claude/standards/`. Use when asked to create a standard, add a standard, or write a new authoring convention. Do NOT use to edit an existing standard.
4
4
  ---
5
5
 
6
6
  # Create standard
7
7
 
8
- Creates one authoring file on either surface. Read the user's request for which artifact they asked for, standard or snippet, and carry that choice through every step below. Ask only when the request names neither.
9
-
10
- Read these files in parallel:
8
+ Creates one standard file. Read these files in parallel:
11
9
 
12
10
  - `.claude/standards/prose.md` from the project root: prose conventions for all generated text
13
- - `.claude/standards/standard.md` from the project root, for a standard: the meta-standard for shape, frontmatter, and structure
14
- - `${CLAUDE_SKILL_DIR}/references/snippets.md`, for a snippet: authoring conventions, invocation channels, use patterns
11
+ - `.claude/standards/standard.md` from the project root: the meta-standard for shape, frontmatter, and structure
15
12
 
16
13
  Read a standard from `${CLAUDE_SKILL_DIR}/../../standards/` instead when the project does not have it.
17
14
 
18
15
  ## Guards
19
16
 
20
- - For a standard, if neither `standards/` nor `.claude/standards/` exists, stop: `❌ No standards/ or .claude/standards/ directory found.`
21
- - For a snippet, if neither `snippets/` nor `.claude/snippets/` exists, stop: `❌ No snippets/ or .claude/snippets/ directory found.`
17
+ - If neither `standards/` nor `.claude/standards/` exists, stop: `❌ No standards/ or .claude/standards/ directory found.`
22
18
 
23
19
  ## Steps
24
20
 
25
- 1. Resolve the write surface for the chosen artifact: the root folder (`standards/` or `snippets/`) if present, the toolkit's own authoring source. Otherwise the `.claude/` folder, a target project's installed copy.
26
- 2. Draft the content from the user's description. A standard follows `standard.md` for frontmatter, headings, and structure.
21
+ 1. Resolve the write surface: `standards/` at the root if present, which is the toolkit's own authoring source. Otherwise `.claude/standards/`, a target project's installed copy.
22
+ 2. Draft the content from the user's description. The meta-standard governs frontmatter, headings, and structure.
27
23
  3. Confirm the slug and full content with the user before writing
28
24
  4. Write the file to `<surface>/<slug>.md`
29
25
 
@@ -31,5 +27,5 @@ Read a standard from `${CLAUDE_SKILL_DIR}/../../standards/` instead when the pro
31
27
 
32
28
  Emit the full path on its own line.
33
29
 
34
- - Root surface: this is the toolkit's authoring source. Remind the user to run `bun run check` to regenerate the consumed copy under `.claude/`. For a standard, that pass also regenerates the `standards/index.md` entry, and the user adds a row to the standards table in `.claude/context/standards.md`.
35
- - `.claude/` surface: the file is project-local. `aitk standards sync` and `aitk snippets sync` leave it alone, since sync only updates filenames it recognizes from the toolkit. Remind the user to copy it to the toolkit repo, under `standards/<slug>.md` or `snippets/<category>/<name>.md`, if it should ship to every project.
30
+ - Root surface: this is the toolkit's authoring source. Remind the user to run `bun run check` to regenerate the consumed copy under `.claude/`. That pass also regenerates the `standards/index.md` entry, and the user adds a row to the standards table in `.claude/context/standards.md`.
31
+ - `.claude/` surface: the file is project-local. `aitk standards sync` leaves it alone, since sync only updates filenames it recognizes from the toolkit. Remind the user to copy it to the toolkit repo, under `standards/<slug>.md`, if it should ship to every project.
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: migration-claude-md
3
+ description: Why a bloated CLAUDE.md is rebalanced by proposal rather than by edit, and what the seed baseline settles
4
+ ---
5
+
6
+ # Migration claude md requirement
7
+
8
+ ## Gap
9
+
10
+ Without this skill, a session asked to slim `CLAUDE.md` deletes sections it judges stale and writes the rest into files it creates in the same pass, so a classification the user disagrees with is no longer one command to undo. The file is always-load context, so a wrong move costs every later session rather than one.
11
+
12
+ Three more failures share a cause. The session has no baseline for what belongs in `CLAUDE.md`, so it reads toolkit-seeded always-load behavior as bloat and proposes moving it, and the next seed sync puts it back. A section carrying a rule and a narrative together gets sorted whole into one bucket, which loses half of it either way. And a target that already exists gets written over, since a proposal blind to the folder cannot tell a create from a collision.
13
+
14
+ The skill also writes into `.claude/context/`, a folder `migration-context` moves files into. A proposal drafted before those moves land cannot see the entries they create, so a move that should have resolved to an append reads as a create.
15
+
16
+ ## Must
17
+
18
+ - Classify every `##` section against the three tiers in a fixed order, so the same section lands the same way twice
19
+ - Treat a section matching the seed baseline as always-load by definition and propose no move for it
20
+ - Read the existing rules and context folders before resolving a target, so an existing entry resolves to an append and a taken rule slot resolves to a conflict
21
+ - Derive a rule's glob from the scope the section names rather than from the folder it describes
22
+ - Propose and stop, leaving every file write and the `CLAUDE.md` edit to the user
23
+ - Report the already-lean case as a pass rather than manufacturing moves to justify the run
24
+
25
+ ## Must not
26
+
27
+ - Sort a section holding both a rule and a narrative into either bucket. Flag it for a manual split.
28
+ - Create a rule file, create a context entry, or edit `CLAUDE.md`
29
+ - Propose a move onto an existing rule path. Report it as a conflict and skip it.
30
+
31
+ ## Guards
32
+
33
+ - No `CLAUDE.md` at the project root stops before any classification runs
34
+ - Fewer than three `##` sections reports the file already lean, since a rebalance needs something to rebalance
35
+
36
+ ## Out of scope
37
+
38
+ - Relocating `docs/` files, which `migration-context` proposes into this same `.claude/context/` folder. Run that skill first when both apply, so Step 3 reads a folder its moves have already populated.
39
+ - Relocating root `standards/` and `snippets/`: `migration-standards`
40
+ - Scaffolding the rule files it proposes, which `create-rule` does with the numbering and frontmatter
41
+ - Regenerating `.claude/context/index.md`, which `aitk indexes regen` does once the user has applied the moves
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: migration-standards
3
+ description: Why the root-to-.claude relocation ships as git mv commands the user runs, and which inbound references are worth fixing
4
+ ---
5
+
6
+ # Migration standards requirement
7
+
8
+ ## Gap
9
+
10
+ Without this skill, a project whose rules cite `.claude/standards/` while the files sit at the root gets fixed by hand, and the hand fix loses what version control was holding. A plain `mv` breaks the rename chain, so every relocated standard reads as a delete beside an unrelated add and its history stops at the move.
11
+
12
+ Three failures follow from acting without looking first. A move onto an existing `.claude/standards/` copy overwrites the files already installed there, which is the case the relocation was supposed to be unnecessary for. A `git mv` on a dirty tree lands the relocation in the same commit as unrelated work, so neither can be reviewed or reverted alone. And a session that rewrites every inbound reference spends its effort on toolkit-owned rules and skills, which the next sync overwrites, while the author-owned lines that actually break go unmentioned.
13
+
14
+ ## Must
15
+
16
+ - Detect an existing copy under `.claude/` and skip that folder's move rather than merging into it
17
+ - Read the working tree state and require it clean before the moves, since the relocation has to be revertible on its own
18
+ - Propose `git mv` so history follows each file
19
+ - Report author-owned inbound references as TODO lines the user fixes, and leave the reference itself untouched
20
+ - Name the re-sync commands that reinstall toolkit-owned content at the new path, since the move alone leaves the install stale
21
+ - Report the already-relocated case as a pass
22
+
23
+ ## Must not
24
+
25
+ - Run the moves, or edit `CLAUDE.md`, a rule file, or a doc
26
+ - Surface references inside toolkit-owned rules and skills, which the next sync rewrites anyway
27
+
28
+ ## Guards
29
+
30
+ - Neither root `standards/` nor root `snippets/` present stops, since there is nothing to relocate
31
+ - A directory that is not a git work tree stops, since `git mv` needs version control and a plain move is the failure the skill exists to prevent
32
+
33
+ ## Out of scope
34
+
35
+ - Classifying `CLAUDE.md` sections into the three-tier model: `migration-claude-md`
36
+ - Relocating `docs/` files by audience: `migration-context`
37
+ - Running the re-sync, which the user does after applying the moves
38
+ - What each sync command overwrites once it runs: `toolkit-cli`
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: project-commands
3
+ description: Why running a documented command stops at the report, and what a single-file read buys over framework inference
4
+ ---
5
+
6
+ # Project commands requirement
7
+
8
+ ## Gap
9
+
10
+ Without this skill, a session asked to start the app infers a command from a framework it recognizes or a script name it likes the look of, and a project whose dev loop differs from the convention gets the convention anyway. The user cannot see it was a guess, because a guess and a read produce the same first line.
11
+
12
+ The larger failure is the one past the launch. A session that starts a server keeps going into log reading, browser checks, and defects it noticed on the way, so a request that was one command becomes an open-ended investigation nobody asked for and the answer arrives buried. A request covering a frontend and a backend gets one of the two, which reports success on half an app.
13
+
14
+ Two more failures are mechanical. A command that stays up run in the foreground blocks until the tool timeout, which reports as a service that never came up while nothing is left running. And a command whose effect outlives the process, such as a deploy or a migration, is not undone by stopping it, so running it to see what happens is not available.
15
+
16
+ ## Must
17
+
18
+ - Read the documented dev loop and treat it as the only source, since a second file is a discovery chain and this skill has none
19
+ - Match the request against the stated purpose rather than the command name, since a project documenting two similar commands means the distinction
20
+ - Resolve every documented command the request covers, not the first one that matches
21
+ - Background a command that stays up, and read its output back before checking anything against it
22
+ - Report the port, URL, or exit status per command, then end the turn
23
+
24
+ ## Must not
25
+
26
+ - Infer a command from a filename, a framework, or a second file
27
+ - Stop, restart, or reconfigure a process the skill did not start, or tear down one it did
28
+ - Continue past the report into a second check, a screenshot, or a defect report. Say in one line that one looks warranted and let the user decide.
29
+ - Abandon the remaining commands when one fails
30
+
31
+ ## Guards
32
+
33
+ - No documented dev loop stops by naming the missing file, since a reconstruction the user cannot see through is worse than a stop
34
+ - A request matching nothing documented lists what is documented instead of inferring
35
+ - A command whose effect outlives the process prints for the user to run rather than running, judged on the effect rather than the name
36
+
37
+ ## Out of scope
38
+
39
+ - Confirming a change works in the running app, which is a verification request and needs the steps this skill refuses
40
+ - Deploying, publishing, releasing, migrating, and resetting
41
+ - Running the scaffold verification chain against `package.json` scripts: `setup-verify`
42
+ - Writing the entry it reads, which belongs to the project's own development docs
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: session-resume
3
+ description: Why resuming reads an index before task files, resolves scratch at the main root, and never mutates what it reports
4
+ ---
5
+
6
+ # Session resume requirement
7
+
8
+ ## Gap
9
+
10
+ Without this skill, a session picking up old work reconstructs state from the git log, which records what shipped and not what is queued, so finished work reads as pending and the actual next item goes unmentioned. The alternative failure is worse for a different reason. A session that reads every task file and every plan to be thorough spends the context the work needs before the work starts, and the summary arrives in a session with no room left to act on it.
11
+
12
+ From a linked worktree the shared scratch folders resolve against the worktree rather than the main root, where they are empty. That reports no tracked work on a repository carrying a full backlog, and the report is indistinguishable from the true empty case.
13
+
14
+ A resume is a read, and a session that treats it as a cleanup pass offers to archive finished entries or refresh a memory it decided was stale. Both change tracked state on the strength of a summary the user has not confirmed yet.
15
+
16
+ ## Must
17
+
18
+ - Resolve the plans, memory, and tasks folders at the main worktree root
19
+ - Read the task index before any individual task file, and open only the task files the summary needs
20
+ - Preserve the index's order in the report, since the order is the priority
21
+ - Surface only the memory entries that inform the top item
22
+ - Close with one recommendation naming the first item and whether a plan backs it
23
+
24
+ ## Must not
25
+
26
+ - Read the whole tasks folder to build a summary
27
+ - Offer to remove, archive, or reorder an entry. Resume reports and does not mutate.
28
+ - Update memory, which changes when a recorded fact becomes wrong rather than on a resume
29
+
30
+ ## Guards
31
+
32
+ - All three surfaces absent or empty reports no tracked work and stops, rather than inventing a next step from the repository
33
+
34
+ ## Out of scope
35
+
36
+ - Archiving a shipped task out of the folder: `claude-tasks`
37
+ - Archiving a plan and marking an outcome, which `claude-docs` does when the work ships
38
+ - Implementing the item it recommends, which is the next request rather than part of this one
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: setup-indexes
3
+ description: Why index bootstrap is all-or-nothing per folder, what the confirmation loop protects, and why the convention block is pasted rather than written
4
+ ---
5
+
6
+ # Setup indexes requirement
7
+
8
+ ## Gap
9
+
10
+ Without this skill, a session bootstrapping the index system writes `index.md` into a folder and leaves the sibling frontmatter for later, so the first regen hard-errors on the first file missing a `title`. Partial coverage is not a partial success. The folder is broken until every sibling carries both fields, and the error surfaces at regen rather than at the write that caused it.
11
+
12
+ The scan is where the other failures start. A walk that does not prune reaches `node_modules`, gitignored output, and the snippets folder, which is invoked by reference rather than browsed and needs neither an index nor per-file frontmatter. A folder that already carries an `index.md` gets a second one written over the first.
13
+
14
+ Drafted frontmatter is a proposal, and a session that writes it before the user sees it turns a review into a cleanup. The convention block has the mirror failure. A session that paraphrases it into `CLAUDE.md` produces a copy that reads correctly and no longer matches its source, so the two drift with nothing reporting it. And a project with no `CLAUDE.md` gets one scaffolded to hold the block, which installs a file the project declined.
15
+
16
+ ## Must
17
+
18
+ - Bootstrap all-or-nothing per chosen folder, since a folder carrying partial frontmatter hard-errors on regen
19
+ - Prune the scan to folders a reader browses, and skip any folder already carrying an `index.md`
20
+ - Surface every drafted `title` and `description` for the user to accept, edit, or reject before anything is written
21
+ - Validate with a dry run and stop on the first reported error, before writing for real
22
+ - Paste the convention block verbatim from its single source
23
+ - Emit the closeout exactly once, whatever the seed step concluded
24
+
25
+ ## Must not
26
+
27
+ - Write a draft the user has not confirmed
28
+ - Index the snippets folder, which is read by reference rather than browsed
29
+ - Create `CLAUDE.md` to hold the convention block. Name the skip and the command that installs the file.
30
+ - Overwrite content below the frontmatter block, or touch a file the user rejected
31
+
32
+ ## Guards
33
+
34
+ - A folder with fewer than the sibling threshold stays out of the candidate list unless the user names it explicitly, so the scan proposes and the user overrides
35
+ - A `CLAUDE.md` already carrying the convention section skips the seed silently rather than appending a second copy
36
+
37
+ ## Out of scope
38
+
39
+ - Regenerating an index in a project that already runs the system, which `aitk indexes regen` does on its own
40
+ - Wiring the lint-staged entry or the hook, which the closeout offers and the user opts into
41
+ - Installing governance rules or scaffolding a project: `setup-gov` and `setup-init`
42
+ - Writing the frontmatter conventions themselves, which the prose standard owns
@@ -145,4 +145,4 @@ Replace bracketed values with the values from this run. Drop the "Folders bootst
145
145
  ## Reference
146
146
 
147
147
  - `.claude/context/indexes.md`: system rationale, frontmatter contract, when to adopt
148
- - `docs/agents.md`: `aitk indexes regen` flags, exit codes, JSON shape
148
+ - `docs/agents/indexes.md`: `aitk indexes regen` flags, exit codes, JSON shape
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: setup-plugins
3
+ description: Why plugin installs read a curated catalog, install user-scoped, and never touch toolkit workflow skills
4
+ ---
5
+
6
+ # Setup plugins requirement
7
+
8
+ ## Gap
9
+
10
+ Without this skill, a session asked to install plugins invents marketplace sources and install strings from names it half remembers, and a plugin name that does not exist fails in a way that reads like a network problem. The catalog is the difference between an install and a guess.
11
+
12
+ Scope is the failure that shows up later. A domain plugin installed into one project is missing from the next one, so the machine looks provisioned until the user opens another repository. The mirror mistake is treating toolkit workflow skills as plugins to install, when they load live through a plugin directory and a copied version goes stale the moment it lands.
13
+
14
+ Two failures come from running the batch carelessly. A reinstall over a plugin already present costs time and can replace a working version. And a batch that aborts on the first failure leaves a partial install with no record of which rows ran, so the next attempt starts from an unknown state.
15
+
16
+ ## Must
17
+
18
+ - Read the curated catalog through the skill's own directory, so the path resolves from any project
19
+ - Detect what is already installed and skip those rows
20
+ - Install user-scoped, since a domain plugin belongs to the machine rather than to one project
21
+ - Run each install independently so one failure does not abort the batch
22
+ - Preview the chosen rows, the scope, and the exact commands before executing
23
+ - Report the failures with their CLI errors, the reload requirement, and the settings-level remedy for an over-triggering plugin
24
+
25
+ ## Must not
26
+
27
+ - Install a plugin, marketplace, or command string that is not in the catalog
28
+ - Install toolkit workflow skills, which load live rather than being copied
29
+ - Reinstall a plugin already present
30
+ - Pause for a confirmation beyond the tool permission dialog
31
+
32
+ ## Guards
33
+
34
+ - The `claude` CLI absent from PATH stops before any install, since every step shells out to it
35
+ - A catalog row that installs outside the plugin CLI runs its own installer verbatim rather than being forced through the marketplace path
36
+
37
+ ## Out of scope
38
+
39
+ - Curating the catalog, which is an edit to the bundled reference rather than a run of this skill
40
+ - Uninstalling, since an over-triggering plugin is tuned through settings rather than removed
41
+ - Installing anything into a project, which every setup skill but this one does
42
+ - First-time project scaffolding: `setup-init`
@@ -0,0 +1,39 @@
1
+ ---
2
+ name: setup-verify
3
+ description: Why a fresh scaffold is checked with declared leaf scripts in a fixed order, and what the excluded stages would cost
4
+ ---
5
+
6
+ # Setup verify requirement
7
+
8
+ ## Gap
9
+
10
+ Without this skill, a freshly scaffolded project is handed over on the strength of the configs looking right, and the first typo surfaces when the user runs something. A scaffold is generated from a reference, so the errors it carries are wiring mistakes and missing dependencies, both of which any script run would have caught.
11
+
12
+ The naive check fails two ways. A session that assumes script names runs `test` against a stack that exposes `test:run`, or invents a fallback command when a script is absent, and either result reports on something the project never declared. A session that runs a composite script gets one failure covering several stages, so the output names the wrapper rather than the break.
13
+
14
+ The stages left out are the ones that lie. A dev server or a preview reads as failed when it starts slowly, a browser test needs an install and a running server before it can even fail correctly, and a CI workflow cannot be judged locally at all. Including any of them turns a scaffold check into a flaky one, and a flaky check gets ignored.
15
+
16
+ ## Must
17
+
18
+ - Read the scripts the project declares and run only those
19
+ - Run leaf scripts in a fixed order, so a failure points at the exact stage that broke
20
+ - Stop at the first failure and surface its output rather than continuing to collect more
21
+ - Report per script and close with one summary line naming the failing stage when there is one
22
+
23
+ ## Must not
24
+
25
+ - Invent a fallback command for an absent script. Skip it.
26
+ - Run a composite script, which hides which stage broke
27
+ - Run a dev server, a preview, or a browser test
28
+
29
+ ## Guards
30
+
31
+ - No `package.json` at the project root stops, since there are no declared scripts to read
32
+ - A missing dependency folder installs first rather than letting every script fail on the same cause
33
+
34
+ ## Out of scope
35
+
36
+ - Dev and preview smoke tests, which `project-commands` starts on request
37
+ - Browser end-to-end tests, which need a browser install and a running server
38
+ - CI workflow validation, which runs on the pull request rather than locally
39
+ - Generating the configs it checks, which the tooling stack reference owns