@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.
- package/claude/.claude-plugin/plugin.json +1 -1
- package/claude/skills/claude-design-extract/REQUIREMENT.md +42 -0
- package/claude/skills/claude-diagram/REQUIREMENT.md +45 -0
- package/claude/skills/claude-groundwork/REQUIREMENT.md +44 -0
- package/claude/skills/claude-memory-capture/REQUIREMENT.md +40 -0
- package/claude/skills/claude-orchestrate/REQUIREMENT.md +44 -0
- package/claude/skills/claude-roadmap/REQUIREMENT.md +41 -0
- package/claude/skills/claude-screencast/REQUIREMENT.md +39 -0
- package/claude/skills/claude-slides-draft/REQUIREMENT.md +39 -0
- package/claude/skills/claude-tasks/REQUIREMENT.md +43 -0
- package/claude/skills/claude-ui-test/REQUIREMENT.md +40 -0
- package/claude/skills/claude-ux-audit/REQUIREMENT.md +39 -0
- package/claude/skills/claude-worktree/REQUIREMENT.md +41 -0
- package/claude/skills/cli-script/REQUIREMENT.md +40 -0
- package/claude/skills/create-rule/REQUIREMENT.md +42 -0
- package/claude/skills/create-skill/REQUIREMENT.md +6 -2
- package/claude/skills/create-skill/SKILL.md +5 -2
- package/claude/skills/create-snippet/REQUIREMENT.md +36 -0
- package/claude/skills/create-snippet/SKILL.md +23 -5
- package/claude/skills/{create-standard → create-snippet}/references/snippets.md +1 -1
- package/claude/skills/create-standard/REQUIREMENT.md +38 -0
- package/claude/skills/create-standard/SKILL.md +8 -12
- package/claude/skills/migration-claude-md/REQUIREMENT.md +41 -0
- package/claude/skills/migration-standards/REQUIREMENT.md +38 -0
- package/claude/skills/project-commands/REQUIREMENT.md +42 -0
- package/claude/skills/session-resume/REQUIREMENT.md +38 -0
- package/claude/skills/setup-indexes/REQUIREMENT.md +42 -0
- package/claude/skills/setup-plugins/REQUIREMENT.md +42 -0
- package/claude/skills/setup-verify/REQUIREMENT.md +39 -0
- package/claude/skills/systematic-debugging/REQUIREMENT.md +41 -0
- package/claude/skills/toolkit-cli/REQUIREMENT.md +37 -0
- package/claude/skills/toolkit-feedback/REQUIREMENT.md +40 -0
- package/claude/skills/toolkit-operator/REQUIREMENT.md +39 -0
- package/claude/skills/toolkit-triage/REQUIREMENT.md +40 -0
- package/claude/skills/youtube-transcripts/REQUIREMENT.md +38 -0
- package/docs/agents.md +17 -9
- package/docs/operating-model.md +1 -1
- package/docs/visual-design-workflow.md +1 -1
- package/package.json +1 -1
- package/scripts/manage-sandbox.sh +4 -0
- package/src/commands/context.ts +76 -11
- package/src/context/folders.ts +85 -13
- package/src/sandbox/census.ts +1 -1
- package/standards/bundled/snippets.md +1 -1
- package/standards/skill.md +4 -4
- 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:
|
|
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
|
-
|
|
8
|
+
Creates one snippet file. Read these files in parallel:
|
|
10
9
|
|
|
11
|
-
|
|
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
|
-
|
|
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.
|
|
@@ -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
|
|
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
|
|
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
|
|
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
|
-
-
|
|
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
|
|
26
|
-
2. Draft the content from the user's description.
|
|
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/`.
|
|
35
|
-
- `.claude/` surface: the file is project-local. `aitk standards sync`
|
|
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`
|