@erclx/aitk 0.37.0 → 0.39.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 (46) hide show
  1. package/claude/.claude-plugin/plugin.json +1 -1
  2. package/claude/skills/claude-design-extract/REQUIREMENT.md +42 -0
  3. package/claude/skills/claude-diagram/REQUIREMENT.md +45 -0
  4. package/claude/skills/claude-groundwork/REQUIREMENT.md +44 -0
  5. package/claude/skills/claude-memory-capture/REQUIREMENT.md +40 -0
  6. package/claude/skills/claude-orchestrate/REQUIREMENT.md +44 -0
  7. package/claude/skills/claude-roadmap/REQUIREMENT.md +41 -0
  8. package/claude/skills/claude-screencast/REQUIREMENT.md +39 -0
  9. package/claude/skills/claude-slides-draft/REQUIREMENT.md +39 -0
  10. package/claude/skills/claude-tasks/REQUIREMENT.md +43 -0
  11. package/claude/skills/claude-ui-test/REQUIREMENT.md +40 -0
  12. package/claude/skills/claude-ux-audit/REQUIREMENT.md +39 -0
  13. package/claude/skills/claude-worktree/REQUIREMENT.md +41 -0
  14. package/claude/skills/cli-script/REQUIREMENT.md +40 -0
  15. package/claude/skills/create-rule/REQUIREMENT.md +42 -0
  16. package/claude/skills/create-skill/REQUIREMENT.md +6 -2
  17. package/claude/skills/create-skill/SKILL.md +5 -2
  18. package/claude/skills/create-snippet/REQUIREMENT.md +36 -0
  19. package/claude/skills/create-snippet/SKILL.md +23 -5
  20. package/claude/skills/{create-standard → create-snippet}/references/snippets.md +1 -1
  21. package/claude/skills/create-standard/REQUIREMENT.md +38 -0
  22. package/claude/skills/create-standard/SKILL.md +8 -12
  23. package/claude/skills/migration-claude-md/REQUIREMENT.md +41 -0
  24. package/claude/skills/migration-standards/REQUIREMENT.md +38 -0
  25. package/claude/skills/project-commands/REQUIREMENT.md +42 -0
  26. package/claude/skills/session-resume/REQUIREMENT.md +38 -0
  27. package/claude/skills/setup-indexes/REQUIREMENT.md +42 -0
  28. package/claude/skills/setup-plugins/REQUIREMENT.md +42 -0
  29. package/claude/skills/setup-verify/REQUIREMENT.md +39 -0
  30. package/claude/skills/systematic-debugging/REQUIREMENT.md +41 -0
  31. package/claude/skills/toolkit-cli/REQUIREMENT.md +37 -0
  32. package/claude/skills/toolkit-feedback/REQUIREMENT.md +40 -0
  33. package/claude/skills/toolkit-operator/REQUIREMENT.md +39 -0
  34. package/claude/skills/toolkit-triage/REQUIREMENT.md +40 -0
  35. package/claude/skills/youtube-transcripts/REQUIREMENT.md +38 -0
  36. package/docs/agents.md +17 -9
  37. package/docs/operating-model.md +1 -1
  38. package/docs/visual-design-workflow.md +1 -1
  39. package/package.json +1 -1
  40. package/scripts/manage-sandbox.sh +4 -0
  41. package/src/commands/context.ts +76 -11
  42. package/src/context/folders.ts +85 -13
  43. package/src/sandbox/census.ts +1 -1
  44. package/standards/bundled/snippets.md +1 -1
  45. package/standards/skill.md +4 -4
  46. package/claude/skills/claude-design-propose/SKILL.md +0 -15
@@ -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
@@ -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
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: systematic-debugging
3
+ description: Why a fix is blocked until investigation completes, and what the three-attempt stop is measuring
4
+ ---
5
+
6
+ # Systematic debugging requirement
7
+
8
+ ## Gap
9
+
10
+ Without this skill, a session handed a failure proposes a fix from the first plausible reading of the error, and the fix is judged by whether the symptom moved. A symptom that moves is the normal result of changing something near it, so the session reports success and the cause is still there.
11
+
12
+ The compounding failures come next. Several changes go in at once, so a pass says nothing about which one mattered. A fix that fails gets another fix stacked on top of it rather than a new hypothesis, and the code accumulates changes nobody can trace to a reason. A bad value gets corrected where it was observed rather than where it was produced, which moves the failure downstream instead of removing it.
13
+
14
+ Two failures are about stopping rather than about fixing. A session that never counts its attempts keeps fixing through the pattern where each fix reveals a problem elsewhere, which is architectural and cannot be reached from inside the loop. And a session that concludes an issue is environmental usually has an incomplete investigation rather than an environmental issue, because that conclusion is available at any point and is never contradicted by evidence.
15
+
16
+ ## Must
17
+
18
+ - Complete the investigation before any fix is proposed, reading the failure in full and reproducing it
19
+ - Trace a bad value back to where it was produced and fix there
20
+ - Compare the broken code against working code in the same codebase before hypothesizing
21
+ - State one hypothesis and change one variable to test it
22
+ - Write the failing test before the fix, so the fix is judged against a reproduction rather than against the symptom
23
+ - Stop after three failed attempts and hand the architectural question to the user
24
+
25
+ ## Must not
26
+
27
+ - Stack a second fix on a failed one rather than forming a new hypothesis
28
+ - Bundle a refactor or an unrelated improvement into the fix
29
+ - Accept an environmental or timing conclusion before the investigation is exhausted
30
+ - Claim an understanding it does not have
31
+
32
+ ## Guards
33
+
34
+ - An incomplete investigation blocks the fix proposal, which is the skill's one refusal and the reason it exists
35
+ - Three failed attempts stop the loop, since the pattern is evidence about the design rather than about the bug
36
+
37
+ ## Out of scope
38
+
39
+ - A typo fix and a cause already agreed on, where the phases cost more than they return
40
+ - Reviewing a change for defects it has not yet exhibited: `claude-review`
41
+ - Deciding whether the architecture should change, which the three-attempt stop hands to the user rather than answering
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: toolkit-cli
3
+ description: Why the overwrite contract is stated before a sync runs, and why the skill reads rather than executes
4
+ ---
5
+
6
+ # Toolkit cli requirement
7
+
8
+ ## Gap
9
+
10
+ Without this skill, a session runs an `aitk` sync and finds out afterward what it did. The command names give nothing away. `install` and `sync` differ per domain, some surfaces overwrite unconditionally, some merge, some are written once and never touched again, and none of that is visible from the command line the user typed.
11
+
12
+ The damage lands on the files a project owns. A golden config carrying local edits is replaced without a warning anyone saw, and a standards install overwrites every standard in a project that only needed the two it had drifted on. The user learns which category a file was in by losing the edit.
13
+
14
+ The inverse failure is quieter. A session that assumes a sync will pick up a change edits a seed and waits for an update that never comes, because the seed is copy-once and no sync command writes it again. Both failures are one missing fact available before the command runs.
15
+
16
+ ## Must
17
+
18
+ - State per surface and per command whether an existing file is overwritten, merged, written once, or left alone
19
+ - Warn about a destructive run before it happens, naming the surface that will be lost
20
+ - Name the section-preserving path for a standard or seed the project has customized
21
+ - Defer to the toolkit's own context docs when they and this summary disagree, since the summary is a copy and they are the source
22
+
23
+ ## Must not
24
+
25
+ - Run any `aitk` command. The skill is read before acting.
26
+ - Restate the full semantics. It is a target-session summary and the detail lives with its owner.
27
+
28
+ ## Guards
29
+
30
+ - A surface or command the contract does not cover routes to the context docs rather than to an inference from a similar row
31
+
32
+ ## Out of scope
33
+
34
+ - Executing the sync, which the user runs or `toolkit-operator` routes
35
+ - Reconciling a customized seed section by section: `claude-seed-sync`
36
+ - Relocating a project's folders into the layout a newer version expects: `migration-standards`
37
+ - Deciding which stack, rule, or standard a project should install, which the setup skills resolve from live catalogs
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: toolkit-feedback
3
+ description: Why a toolkit defect is reported from session context alone, and what shipping through the CLI replaces
4
+ ---
5
+
6
+ # Toolkit feedback requirement
7
+
8
+ ## Gap
9
+
10
+ Without this skill, a toolkit defect noticed inside a target project dies with the session. The user is told to mention it in the toolkit repository later, which means retyping a report they no longer have the context to write, so the defect is either reported badly or not at all.
11
+
12
+ The report itself fails two ways. A block printed in chat needs a copy-paste into another repository, and a step that manual is skipped under any time pressure. A report that names no surface cannot be routed, because the toolkit acts on a plugin skill, a snippet, a CLI command, and a seed through different paths, and the difference is not recoverable from the symptom.
13
+
14
+ The last failure is the session's own effort. Asked to report, a session starts diagnosing instead, searching the toolkit and reading its surfaces to find the cause. That spends the context the report was meant to capture cheaply, and it produces a diagnosis from a project that cannot see the toolkit's current source.
15
+
16
+ ## Must
17
+
18
+ - Build the report from what the session already holds
19
+ - Name the surface and its type, since the toolkit routes on that rather than on the symptom
20
+ - Write the stated fallback for a field the session cannot fill, so an empty field reads as absent rather than as unreported
21
+ - Ship through the CLI so the report lands without a copy-paste, and print the returned path on its own line
22
+ - Offer the durable route for a report worth keeping across sessions and machines
23
+ - Fall back to printing the block when the CLI is absent, so the report still exists
24
+
25
+ ## Must not
26
+
27
+ - Probe the project, list files, grep, or read toolkit surfaces to enrich the report
28
+ - Guess the surface type when the session is ambiguous. Ask one line.
29
+ - Diagnose or fix, which needs the toolkit's source rather than the target's
30
+
31
+ ## Guards
32
+
33
+ - Nothing in session context pointing at a toolkit issue stops, since a report assembled from nothing wastes the triage it reaches
34
+
35
+ ## Out of scope
36
+
37
+ - Fixing the defect, which happens in the toolkit repository against its own source
38
+ - Draining the queue this fills: `toolkit-triage`
39
+ - Filing an issue against the current project: `git-issue`
40
+ - Complaints about tooling the toolkit does not own
@@ -0,0 +1,39 @@
1
+ ---
2
+ name: toolkit-operator
3
+ description: Why the toolkit has one front door, what orienting on live catalogs prevents, and where it hands off
4
+ ---
5
+
6
+ # Toolkit operator requirement
7
+
8
+ ## Gap
9
+
10
+ Without this skill, using the toolkit means knowing which skill to pick, and the user who most needs it is the one who cannot. A plain-language intent has no obvious owner among a dozen setup and sync skills, so the session guesses a command instead of resolving one, and a wrong guess installs into a project rather than reporting a mismatch.
11
+
12
+ Two failures come from acting on memory. A session that names a stack, rule, or snippet from what it remembers rather than from the live catalog runs against an entry that has been renamed or removed. And a session that edits a managed file by hand produces a change the next sync overwrites, which reads as the toolkit undoing work rather than as the edit having been made in the wrong place.
13
+
14
+ The last failure is duplication. A front door that answers everything itself reimplements first-time detection and seed diffing inline, badly, beside the skills that already do both. The value of a router is that it stops at the handoff.
15
+
16
+ ## Must
17
+
18
+ - Orient on the toolkit's own docs and the live catalogs before acting
19
+ - Map the stated intent to one lifecycle phase, then either run the simplest command that satisfies it or hand off
20
+ - Resolve every stack, rule, snippet, and standard name from a catalog at runtime
21
+ - Run the CLI non-interactively and report the command run, what changed, and the full path of anything written
22
+
23
+ ## Must not
24
+
25
+ - Edit a managed file by hand instead of running the CLI that owns it
26
+ - Reimplement a flow another skill owns
27
+ - Hardcode a catalog name
28
+ - Auto-trigger. It is a door the user opens, and a router that fires on its own routes requests nobody made.
29
+
30
+ ## Guards
31
+
32
+ - An intent matching a deep flow hands off rather than running a shallow version of it, since a partial scaffold is harder to recover from than none
33
+
34
+ ## Out of scope
35
+
36
+ - First-time scaffold of a fresh project: `setup-init`
37
+ - Seed and preamble drift in installed files: `claude-seed-sync`
38
+ - Governance rule install and index bootstrap: `setup-gov` and `setup-indexes`
39
+ - What a given sync overwrites once it runs: `toolkit-cli`