@erclx/aitk 3.43.2 → 3.44.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 (58) hide show
  1. package/claude/.claude-plugin/plugin.json +1 -1
  2. package/claude/skills/{toolkit-cli → aitk-cli}/REQUIREMENT.md +4 -4
  3. package/claude/skills/{toolkit-cli → aitk-cli}/SKILL.md +1 -1
  4. package/claude/skills/{toolkit-feedback → aitk-feedback-file}/REQUIREMENT.md +3 -3
  5. package/claude/skills/{toolkit-feedback → aitk-feedback-file}/SKILL.md +2 -2
  6. package/claude/skills/{toolkit-triage → aitk-feedback-triage}/REQUIREMENT.md +3 -3
  7. package/claude/skills/{toolkit-triage → aitk-feedback-triage}/SKILL.md +3 -3
  8. package/claude/skills/{toolkit-operator → aitk-operator}/REQUIREMENT.md +3 -3
  9. package/claude/skills/{toolkit-operator → aitk-operator}/SKILL.md +3 -3
  10. package/claude/skills/{claude-screencast → aitk-screencast}/REQUIREMENT.md +3 -3
  11. package/claude/skills/{claude-screencast → aitk-screencast}/SKILL.md +2 -2
  12. package/claude/skills/{claude-slides-draft → aitk-slides-draft}/REQUIREMENT.md +3 -3
  13. package/claude/skills/{claude-slides-draft → aitk-slides-draft}/SKILL.md +1 -1
  14. package/claude/skills/{cli-script → bash-cli-script}/REQUIREMENT.md +2 -2
  15. package/claude/skills/{cli-script → bash-cli-script}/SKILL.md +2 -2
  16. package/claude/skills/bash-script/REQUIREMENT.md +2 -2
  17. package/claude/skills/bash-script/SKILL.md +2 -2
  18. package/claude/skills/ci-workflow/REQUIREMENT.md +1 -1
  19. package/claude/skills/claude-memory-review/SKILL.md +2 -2
  20. package/claude/skills/claude-memory-review/references/receipt-format.md +1 -1
  21. package/claude/skills/claude-seed-sync/REQUIREMENT.md +1 -1
  22. package/claude/skills/claude-seed-sync/SKILL.md +1 -1
  23. package/claude/skills/git-issue/REQUIREMENT.md +2 -2
  24. package/claude/skills/git-issue/SKILL.md +1 -1
  25. package/claude/skills/{restate → restate-plainly}/REQUIREMENT.md +2 -2
  26. package/claude/skills/{restate → restate-plainly}/SKILL.md +2 -2
  27. package/claude/skills/setup-init/REQUIREMENT.md +1 -1
  28. package/claude/skills/setup-init/SKILL.md +1 -1
  29. package/claude/skills/write-human/REQUIREMENT.md +1 -1
  30. package/claude/skills/write-human/SKILL.md +1 -1
  31. package/docs/agents/demo.md +1 -1
  32. package/docs/agents/index.md +1 -0
  33. package/docs/agents/overview.md +2 -2
  34. package/docs/agents/scripting.md +1 -1
  35. package/docs/agents/sessions.md +11 -5
  36. package/docs/agents/targets.md +83 -0
  37. package/docs/ai-workflow.md +16 -16
  38. package/docs/target-projects.md +1 -1
  39. package/governance/rules/lang/120-bash.md +1 -1
  40. package/package.json +1 -1
  41. package/scripts/core/regen-tooling-paths.sh +1 -1
  42. package/scripts/core/verify.sh +1 -1
  43. package/src/claude/cases/authoring.ts +2 -2
  44. package/src/claude/cases/claude-workflow.ts +2 -2
  45. package/src/claude/cases/setup.ts +6 -6
  46. package/src/cli.ts +3 -0
  47. package/src/commands/demo.ts +1 -1
  48. package/src/commands/sessions.ts +24 -8
  49. package/src/commands/targets.ts +319 -0
  50. package/src/demo/beats.ts +1 -1
  51. package/src/sessions/claim.ts +7 -0
  52. package/src/sync/stamp.ts +9 -0
  53. package/src/targets/pulls.ts +250 -0
  54. package/src/targets/registry.ts +161 -0
  55. package/src/targets/resolve.ts +145 -0
  56. package/src/targets/sweep.ts +246 -0
  57. package/standards/issue.md +1 -1
  58. /package/claude/skills/{cli-script → bash-cli-script}/references/template.md +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "aitk",
3
3
  "description": "Automated governance, versioning, and discovery tools for Claude Code.",
4
- "version": "3.43.2",
4
+ "version": "3.44.0",
5
5
  "author": {
6
6
  "name": "Eric Le",
7
7
  "url": "https://github.com/erclx"
@@ -1,9 +1,9 @@
1
1
  ---
2
- name: toolkit-cli
2
+ name: aitk-cli
3
3
  description: Why the overwrite contract is stated before a sync runs, and why the skill reads rather than executes
4
4
  ---
5
5
 
6
- # Toolkit cli requirement
6
+ # Aitk cli requirement
7
7
 
8
8
  ## Gap
9
9
 
@@ -15,7 +15,7 @@ The inverse failure is quieter. A session that assumes a sync will pick up a cha
15
15
 
16
16
  Being reachable is a separate problem from being right. This is a pure reference whose moment happens inside another skill's run, so nothing brings it up unless a body names it. Three sibling requirement files named it and routed nothing, because Claude Code loads `SKILL.md` as the entry and never opens the sibling. A route lives in a body or it does not exist, and a fourth requirement mention would repeat the same defect.
17
17
 
18
- The two bodies now carrying an inline pointer are `claude-seed-sync` and `toolkit-operator`, each at the point it runs or prints an overwriting command.
18
+ The two bodies now carrying an inline pointer are `claude-seed-sync` and `aitk-operator`, each at the point it runs or prints an overwriting command.
19
19
 
20
20
  ## Must
21
21
 
@@ -36,6 +36,6 @@ The two bodies now carrying an inline pointer are `claude-seed-sync` and `toolki
36
36
 
37
37
  ## Out of scope
38
38
 
39
- - Executing the sync, which the user runs or `toolkit-operator` routes
39
+ - Executing the sync, which the user runs or `aitk-operator` routes
40
40
  - Reconciling a customized seed section by section: `claude-seed-sync`
41
41
  - Deciding which stack, rule, or standard a project should install, which the setup skills resolve from live catalogs
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: toolkit-cli
2
+ name: aitk-cli
3
3
  description: Reference for what aitk sync and install commands overwrite, merge, or leave untouched in a target project. Use before running `aitk tooling`, `aitk standards`, `aitk claude sync`, or `aitk init`, or when asked "will this overwrite my changes". Do NOT use to run the commands, only to know their effect.
4
4
  ---
5
5
 
@@ -1,9 +1,9 @@
1
1
  ---
2
- name: toolkit-feedback
2
+ name: aitk-feedback-file
3
3
  description: Why a toolkit defect is reported from session context alone, and what shipping through the CLI replaces
4
4
  ---
5
5
 
6
- # Toolkit feedback requirement
6
+ # Aitk feedback file requirement
7
7
 
8
8
  ## Gap
9
9
 
@@ -35,6 +35,6 @@ The last failure is the session's own effort. Asked to report, a session starts
35
35
  ## Out of scope
36
36
 
37
37
  - Fixing the defect, which happens in the toolkit repository against its own source
38
- - Draining the queue this fills: `toolkit-triage`
38
+ - Draining the queue this fills: `aitk-feedback-triage`
39
39
  - Filing an issue against the current project: `git-issue`
40
40
  - Complaints about tooling the toolkit does not own
@@ -1,9 +1,9 @@
1
1
  ---
2
- name: toolkit-feedback
2
+ name: aitk-feedback-file
3
3
  description: Format a paste-back report about something broken, missing, or off in aitk and write it directly to the toolkit's `.claude/review/feedback/` folder via `aitk feedback`. Use when asked to "send this to the toolkit", "report this to aitk", "file toolkit feedback", or "give the toolkit feedback about X". Do NOT use for general complaints about other tooling, IDE issues, or in-project bugs that do not implicate aitk surfaces.
4
4
  ---
5
5
 
6
- # Toolkit feedback
6
+ # Aitk feedback file
7
7
 
8
8
  Format a `## Toolkit feedback` block from the current session, then ship it to the toolkit repo without manual copy-paste.
9
9
 
@@ -1,9 +1,9 @@
1
1
  ---
2
- name: toolkit-triage
2
+ name: aitk-feedback-triage
3
3
  description: Why the feedback queue is read from GitHub rather than local scratch, and why triage routes instead of implementing
4
4
  ---
5
5
 
6
- # Toolkit triage requirement
6
+ # Aitk feedback triage requirement
7
7
 
8
8
  ## Gap
9
9
 
@@ -35,6 +35,6 @@ The queue also fails to drain even when the work ships. A fix merged with no lin
35
35
 
36
36
  ## Out of scope
37
37
 
38
- - Filing new feedback: `toolkit-feedback`
38
+ - Filing new feedback: `aitk-feedback-file`
39
39
  - Writing the plan a plan-worthy issue needs: `claude-feature`
40
40
  - Triage of issues carrying any other label, which surface here by design only under the feedback label
@@ -1,9 +1,9 @@
1
1
  ---
2
- name: toolkit-triage
3
- description: Triage open GitHub issues labeled `feedback` in the toolkit repo. List them, pick one, classify it as a direct fix or plan-worthy work, route to the right skill, and link the issue for close-out. Use when asked to "triage toolkit feedback", "work through the feedback issues", "process feedback issues", or "what feedback is open". Do NOT use to file new feedback (that is `toolkit-feedback`), or for general GitHub issue triage unrelated to toolkit feedback.
2
+ name: aitk-feedback-triage
3
+ description: Triage open GitHub issues labeled `feedback` in the toolkit repo. List them, pick one, classify it as a direct fix or plan-worthy work, route to the right skill, and link the issue for close-out. Use when asked to "triage toolkit feedback", "work through the feedback issues", "process feedback issues", or "what feedback is open". Do NOT use to file new feedback (that is `aitk-feedback-file`), or for general GitHub issue triage unrelated to toolkit feedback.
4
4
  ---
5
5
 
6
- # Toolkit triage
6
+ # Aitk feedback triage
7
7
 
8
8
  Consume the feedback queue that `aitk feedback --github` fills. Turn an open `feedback` issue into a scoped fix or a plan, then link the issue so merge closes it.
9
9
 
@@ -1,9 +1,9 @@
1
1
  ---
2
- name: toolkit-operator
2
+ name: aitk-operator
3
3
  description: Why the toolkit has one front door, what orienting on live catalogs prevents, and where it hands off
4
4
  ---
5
5
 
6
- # Toolkit operator requirement
6
+ # Aitk operator requirement
7
7
 
8
8
  ## Gap
9
9
 
@@ -56,6 +56,6 @@ The last failure is a section no route reaches. `## Route` maps an intent or a d
56
56
  - First-time scaffold of a fresh project: `setup-init`
57
57
  - Seed and preamble drift in installed files: `claude-seed-sync`
58
58
  - Governance rule install and index bootstrap: `setup-gov` and `setup-indexes`
59
- - What a given sync overwrites once it runs: `toolkit-cli`
59
+ - What a given sync overwrites once it runs: `aitk-cli`
60
60
 
61
61
  That last contract carries no row for the governance install this skill routes to, so the overwrite `Must` above reads nothing at one of its own destinations. The row belongs to the skill owning the table. This file records the silence rather than answering it, since a rule written here for a silent contract teaches a session that silence means safe.
@@ -1,10 +1,10 @@
1
1
  ---
2
- name: toolkit-operator
2
+ name: aitk-operator
3
3
  description: Front door to the toolkit in a target project. Orients on the toolkit's own docs and live `aitk` catalogs, then runs or routes any toolkit operation from a plain-language intent. Use when you want one entry point instead of picking a specific setup or sync skill, or when asked to "use the toolkit", "what can the toolkit do", "sync my standards", "install rules", or "help me set up this project". User-invoked only. Defers first-time scaffold to setup-init and seed drift to claude-seed-sync.
4
4
  disable-model-invocation: true
5
5
  ---
6
6
 
7
- # Toolkit operator
7
+ # Aitk operator
8
8
 
9
9
  Front door to the toolkit. Orient first, then run the simplest operation that satisfies the intent or hand off to the owning skill. Never bypass `aitk` to edit managed files by hand.
10
10
 
@@ -90,7 +90,7 @@ The last row is a skill handoff rather than a command, so `## Execute` does not
90
90
  For operations this skill runs directly:
91
91
 
92
92
  - Read the catalog first with `aitk <domain> list --json`, then match against project context
93
- - Read the `toolkit-cli` skill before any install or sync, and warn the user by name about each surface it lists as overwritten. A command name says nothing about what it does to a file already there, and this skill is the one running it.
93
+ - Read the `aitk-cli` skill before any install or sync, and warn the user by name about each surface it lists as overwritten. A command name says nothing about what it does to a file already there, and this skill is the one running it.
94
94
  - Run the CLI with `AITK_NON_INTERACTIVE=1` so it skips prompts. The tool permission dialog is the confirmation gate.
95
95
  - Report the command run and what changed. Emit the full relative path for any file written.
96
96
  - Re-run `aitk sync --check . --json` after any operation that wrote, and compare it against the report `## Diagnose` read before acting
@@ -1,9 +1,9 @@
1
1
  ---
2
- name: claude-screencast
2
+ name: aitk-screencast
3
3
  description: Why a recording script ships pre-seeded rather than blank, what the four discovery questions buy, and why the draft stays stack-agnostic
4
4
  ---
5
5
 
6
- # Claude screencast requirement
6
+ # Aitk screencast requirement
7
7
 
8
8
  ## Gap
9
9
 
@@ -35,5 +35,5 @@ A draft that names the recording software, the editing software, or the window m
35
35
 
36
36
  - Producing the recording, which stops at the script by design
37
37
  - Refining an existing draft, which is a direct edit of the file
38
- - Slide decks, which `claude-slides-draft` owns
38
+ - Slide decks, which `aitk-slides-draft` owns
39
39
  - Where the recording ships, which the draft lists and the user decides
@@ -1,9 +1,9 @@
1
1
  ---
2
- name: claude-screencast
2
+ name: aitk-screencast
3
3
  description: Drafts a screencast script with pre-seeded beats, defaults, and decisions to `.claude/.tmp/screencast/<slug>.md`. Reads project context, asks four discovery questions with proposed defaults, then writes a shippable draft. Use when asked to "draft a screencast", "write a recording script", "plan a demo video", or "scaffold a screencast for X". Do NOT re-invoke to refine an existing draft. Re-running overwrites. Edit the draft file directly.
4
4
  ---
5
5
 
6
- # Claude screencast
6
+ # Aitk screencast
7
7
 
8
8
  ## Guards
9
9
 
@@ -1,9 +1,9 @@
1
1
  ---
2
- name: claude-slides-draft
2
+ name: aitk-slides-draft
3
3
  description: Why the skill owns deck content and the CLI owns layout, and why one render is read back before the deck is called done
4
4
  ---
5
5
 
6
- # Claude slides draft requirement
6
+ # Aitk slides draft requirement
7
7
 
8
8
  ## Gap
9
9
 
@@ -36,4 +36,4 @@ Reimplementing spacing and palette logic is the failure that survives the sessio
36
36
  - Rendering, which the CLI owns end to end
37
37
  - The palette and the type scale, which live in the CLI rather than in the source
38
38
  - Writing the content the deck is about, which the caller brings
39
- - Recording a demo, which `claude-screencast` owns
39
+ - Recording a demo, which `aitk-screencast` owns
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: claude-slides-draft
2
+ name: aitk-slides-draft
3
3
  description: Drafts a `.claude/SLIDES.md` source from a topic, picks a layout per slide, then renders it to PowerPoint via `aitk slides render`. Use when asked to "draft slides", "make a deck", "build a presentation", "turn this into slides", or "render a SLIDES.md". Holds the deck design rules. Do NOT reimplement render logic. The CLI owns layout and styling. Assumes the `aitk` CLI is on PATH.
4
4
  ---
5
5
 
@@ -1,9 +1,9 @@
1
1
  ---
2
- name: cli-script
2
+ name: bash-cli-script
3
3
  description: What a non-interactive automation script owes its caller, and the stdout contract that separates it from the human-facing generator
4
4
  ---
5
5
 
6
- # CLI script requirement
6
+ # Bash CLI script requirement
7
7
 
8
8
  ## Gap
9
9
 
@@ -1,9 +1,9 @@
1
1
  ---
2
- name: cli-script
2
+ name: bash-cli-script
3
3
  description: Generates non-interactive Bash scripts for automation, CI, and agent-run tasks. Lean functional style with structured logging, strict error handling, and a clean stdout, no interactive UI. Use when asked for "a non-interactive shell script", an automation script, a CI or cron script, or a pipeline helper. Do NOT use for a human-facing interactive tool with prompts or a visual timeline UI, that is `bash-script`.
4
4
  ---
5
5
 
6
- # CLI script
6
+ # Bash CLI script
7
7
 
8
8
  Generate non-interactive Bash scripts for automation, CI, and agent-run workflows. Optimize for robustness and composability, not visual polish. For a human-facing interactive tool with prompts and a timeline UI, use `bash-script` instead.
9
9
 
@@ -27,10 +27,10 @@ The visual conventions this skill fixes are otherwise arbitrary. Their value is
27
27
 
28
28
  ## Guards
29
29
 
30
- - A request for a script with no human at the terminal stops and routes to `cli-script` rather than generating a timeline nothing will render
30
+ - A request for a script with no human at the terminal stops and routes to `bash-cli-script` rather than generating a timeline nothing will render
31
31
 
32
32
  ## Out of scope
33
33
 
34
- - Non-interactive automation, CI, and agent-run scripts: `cli-script`, which keeps the error handling and the stdout contract and drops the timeline, the icons, and the prompts
34
+ - Non-interactive automation, CI, and agent-run scripts: `bash-cli-script`, which keeps the error handling and the stdout contract and drops the timeline, the icons, and the prompts
35
35
  - GitHub Actions workflow files: `ci-workflow`
36
36
  - What the generated script does. This skill fixes the shape of the output and the stream it goes to, and the commands belong to the request.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: bash-script
3
- description: Generates production Bash scripts with a visual timeline UI, state-based interactive prompts, and strict error handling. Use when asked for "a human-facing shell tool", an interactive bash script, or a DevOps tool with framed terminal output. Do NOT use for a non-interactive automation, CI, or pipeline script, that is `cli-script`.
3
+ description: Generates production Bash scripts with a visual timeline UI, state-based interactive prompts, and strict error handling. Use when asked for "a human-facing shell tool", an interactive bash script, or a DevOps tool with framed terminal output. Do NOT use for a non-interactive automation, CI, or pipeline script, that is `bash-cli-script`.
4
4
  ---
5
5
 
6
6
  # Bash script
@@ -11,7 +11,7 @@ Load `${CLAUDE_SKILL_DIR}/references/patterns.md` for the timeline lifecycle, lo
11
11
 
12
12
  ## Guards
13
13
 
14
- - A request for a script with no human at the terminal stops and routes to `cli-script`. CI jobs, cron entries, agent-run tasks, and any script whose output is consumed by a pipe render no timeline, so generating one costs the frame and returns nothing.
14
+ - A request for a script with no human at the terminal stops and routes to `bash-cli-script`. CI jobs, cron entries, agent-run tasks, and any script whose output is consumed by a pipe render no timeline, so generating one costs the frame and returns nothing.
15
15
 
16
16
  ## Script setup
17
17
 
@@ -35,6 +35,6 @@ A cache keyed on a static string serves a stale browser or toolchain after a ver
35
35
 
36
36
  ## Out of scope
37
37
 
38
- - The shell scripts a job invokes: `cli-script`
38
+ - The shell scripts a job invokes: `bash-cli-script`
39
39
  - Secrets, environments, and deploy targets, which live in the repository settings rather than in the workflow this skill writes
40
40
  - CI systems other than GitHub Actions. The structure rules generalize and the file format does not, so a different system is a different skill rather than a flag on this one.
@@ -67,7 +67,7 @@ For each in-scope entry (see Scope), pick one action:
67
67
  - **Promote to a standards file**: the rule is an authoring reference that belongs in the project's own standards folder as `<domain>.md`.
68
68
  - **Promote to a context entry**: the entry states a fact about a domain carrying an entry in `.claude/context/index.md`. Append it to `.claude/.tmp/memory-routing/<slug>.md` in the format `claude-memory-capture` writes, and tell the user to run `/claude-docs` from a branch. Do not edit the context entry here.
69
69
  - **Hand off to governance**: the rule is coding-standards class (typescript, testing, naming, error-handling, performance, logging, concurrency, planning). Do not author the rule file inline. Never edit the synced `.claude/rules/` copies of toolkit rules, because `aitk gov sync` overwrites them. Stop at handoff.
70
- - In the toolkit repo, point the user at `aitk-governance` and `${CLAUDE_SKILL_DIR}/../../standards/rule.md`, which own the source-of-truth rules under `governance/rules/`.
70
+ - In the toolkit repo, point the user at `internal-governance` and `${CLAUDE_SKILL_DIR}/../../standards/rule.md`, which own the source-of-truth rules under `governance/rules/`.
71
71
  - In a target project, point the user at the `create-rule` skill, which scaffolds a project-local rule under `.claude/rules/`.
72
72
  - **Retire**: the rule is stale, already absorbed into a durable surface, too vague to phrase as a rule, or a one-time incident narrative. Apply moves the file to `.claude/.tmp/memory-archive/` rather than deleting it.
73
73
 
@@ -134,7 +134,7 @@ Before applying any item, check the worktree state:
134
134
 
135
135
  If the result is `MAIN`, stop and tell the user: `❌ Apply phase mutates tracked files. Run /claude-worktree first.` Discuss and Challenge phases only touch `.claude/review/` scratch and run from anywhere.
136
136
 
137
- Before applying a promote to root `CLAUDE.md`, load `aitk-claude` so its seed-mirror rule fires on the edit.
137
+ Before applying a promote to root `CLAUDE.md`, load `internal-claude` so its seed-mirror rule fires on the edit.
138
138
 
139
139
  Promotions are a separate concern from any feature in flight. Keep the promoted edits on their own commit. Do not fold a `CLAUDE.md` or skill-body change into a feature's commits, because a feature reviewer should not have to vet a change to how the agent operates.
140
140
 
@@ -45,4 +45,4 @@ Decision:
45
45
 
46
46
  ## Variation by action
47
47
 
48
- For Hand off items, the body is a pointer to the governance target instead of a rewritten rule: `aitk-governance` and `${CLAUDE_SKILL_DIR}/../../standards/rule.md` in the toolkit repo, or the `create-rule` skill in a target project. For Retire items, skip the rewrite block. Every item gets a `Decision:` slot regardless of action. `Take:` is added only when a question response is needed.
48
+ For Hand off items, the body is a pointer to the governance target instead of a rewritten rule: `internal-governance` and `${CLAUDE_SKILL_DIR}/../../standards/rule.md` in the toolkit repo, or the `create-rule` skill in a target project. For Retire items, skip the rewrite block. Every item gets a `Decision:` slot regardless of action. `Take:` is added only when a question response is needed.
@@ -38,7 +38,7 @@ Two failures belong to the audit rather than to the diff. A decision taken in ch
38
38
 
39
39
  ## Out of scope
40
40
 
41
- - Bulk install and sync of a whole domain, which `aitk <domain> install` and `aitk <domain> sync` own and `toolkit-cli` documents. Reach for this skill when the target holds edits worth keeping, and for those commands when it does not.
41
+ - Bulk install and sync of a whole domain, which `aitk <domain> install` and `aitk <domain> sync` own and `aitk-cli` documents. Reach for this skill when the target holds edits worth keeping, and for those commands when it does not.
42
42
  - Golden configs, which overwrite by design and carry no section structure to diff
43
43
  - Governance rules: `aitk gov sync`
44
44
  - First-time scaffold of a project that has installed nothing yet: `setup-init`
@@ -31,7 +31,7 @@ The report is what separates a file the project edited from one the toolkit move
31
31
 
32
32
  Keep every seed regardless of state. `CLAUDE.md` is the file a project edits most, and its `drifted` verdict is the case this skill exists for.
33
33
 
34
- Read the `toolkit-cli` skill before naming a sync command in the output. It states which surfaces a sync overwrites, merges, or writes once.
34
+ Read the `aitk-cli` skill before naming a sync command in the output. It states which surfaces a sync overwrites, merges, or writes once.
35
35
 
36
36
  Fall back to the appearance heuristic in step 3 when the report cannot attribute, which is `historyUnavailable` set on the relevant section or the command failing outright. Say so in the summary block, because a fallback audit reports guesses rather than facts.
37
37
 
@@ -33,6 +33,6 @@ Without this skill, an issue takes the shape of whatever the session was saying.
33
33
 
34
34
  ## Out of scope
35
35
 
36
- - Reporting a toolkit defect from a target project, which `toolkit-feedback` owns. That path writes into the toolkit rather than the current repository.
37
- - Triaging issues already filed, which `toolkit-triage` owns
36
+ - Reporting a toolkit defect from a target project, which `aitk-feedback-file` owns. That path writes into the toolkit rather than the current repository.
37
+ - Triaging issues already filed, which `aitk-feedback-triage` owns
38
38
  - Opening a pull request, which `git-pr` owns
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: git-issue
3
- description: Format a bug or task from the current session into a GitHub issue and file it on the current repo via `gh issue create`. Use when asked to "file an issue", "open an issue", "log this bug", "raise an issue", or "track this as an issue". Do NOT use to report a toolkit defect from a target project (that is `toolkit-feedback`), or to open a pull request (that is `git-pr`).
3
+ description: Format a bug or task from the current session into a GitHub issue and file it on the current repo via `gh issue create`. Use when asked to "file an issue", "open an issue", "log this bug", "raise an issue", or "track this as an issue". Do NOT use to report a toolkit defect from a target project (that is `aitk-feedback-file`), or to open a pull request (that is `git-pr`).
4
4
  ---
5
5
 
6
6
  # Git issue
@@ -1,9 +1,9 @@
1
1
  ---
2
- name: restate
2
+ name: restate-plainly
3
3
  description: Why a plain restatement is asked for by name, and where its boundary sits against the skill that drafts and the command that measures
4
4
  ---
5
5
 
6
- # Restate requirement
6
+ # Restate plainly requirement
7
7
 
8
8
  ## Gap
9
9
 
@@ -1,9 +1,9 @@
1
1
  ---
2
- name: restate
2
+ name: restate-plainly
3
3
  description: Restates a dense answer or a named markdown document in plain language, cutting jargon and keeping only what changes a decision. Use when asked to "restate that in plain language", "say that plainly", "what does this actually mean", "cut the jargon", "give me the plain version", or "restate this document". Do NOT use to draft or revise prose, which is `write-human`, and do NOT fire on the model's own judgment that its own output was dense.
4
4
  ---
5
5
 
6
- # Restate
6
+ # Restate plainly
7
7
 
8
8
  Return the plain version of something already written. The reader asked because they stopped to decode rather than to decide, so the restatement earns its place by getting them to the decision.
9
9
 
@@ -41,5 +41,5 @@ The other is the refusal that ends rather than routes. An existing project, an i
41
41
  - Provisioning Claude Code plugins: `setup-plugins`. Those install once per machine rather than into a project, so no project-scoped chain can carry them.
42
42
  - Running the verification scripts, which `setup-verify` owns and this chain invokes as its last step
43
43
  - Re-installing into a project that already has the files, which the per-domain `aitk <domain> install` and `aitk sync` commands own
44
- - Deciding which of those per-domain commands an existing project needs: `toolkit-operator`. That skill reads the target before naming one, which this chain never does, so it is the destination rather than a guess made here.
44
+ - Deciding which of those per-domain commands an existing project needs: `aitk-operator`. That skill reads the target before naming one, which this chain never does, so it is the destination rather than a guess made here.
45
45
  - Seeding the `.claude/` folder without the tooling chain, which `aitk claude init` does on its own and `setup-indexes` finishes
@@ -16,7 +16,7 @@ Orchestrates the onboarding chain. Detects project type, resolves per-domain arg
16
16
 
17
17
  Three states reach this skill that the chain does not serve. Name the destination for each, so the refusal routes rather than ends. The first two stop the chain outright and the third runs it on a default the person may not want.
18
18
 
19
- - **An existing project.** Stop and hand off to `toolkit-operator`. It reads what the target already carries before it names a command, which this chain never does, so any per-domain install picked here is a guess against configs nobody read. The Scope bullet above names the same commands as the authoring alternative, and this is the destination a person takes.
19
+ - **An existing project.** Stop and hand off to `aitk-operator`. It reads what the target already carries before it names a command, which this chain never does, so any per-domain install picked here is a guess against configs nobody read. The Scope bullet above names the same commands as the authoring alternative, and this is the destination a person takes.
20
20
  - **An install wanting the `.claude/` folder alone.** Stop. Run `aitk claude init` for the seed docs, then invoke `setup-indexes` to bootstrap the `index.md` system over the project's own documentation folders. Neither needs the tooling sync this chain runs.
21
21
  - **A language the toolkit carries no stack for.** The chain still runs, on `base`, with the fallback marked in the preview. A project that wants none of what `base` carries declines there and takes `setup-gov` for the governance layer, which is language-neutral. Say so at the preview rather than resolving it here, since the fallback is a working default and only the person can say whether it fits.
22
22
 
@@ -41,6 +41,6 @@ Importing that catalog wholesale fails on a different measurement. External mate
41
41
 
42
42
  - The banned words, characters, and spellings, which `markdown.md` states for a reader and `aitk markdown audit` gates from package data
43
43
  - Markdown mechanics, being headings, lists, code spans, punctuation, and file references
44
- - Restating text that already exists in plainer words, which `restate` owns on a different trigger, since a restatement is asked for by name and this arrives on a glob match. The rules here still govern how that restatement reads, and that body cites this one rather than carrying a copy.
44
+ - Restating text that already exists in plainer words, which `restate-plainly` owns on a different trigger, since a restatement is asked for by name and this arrives on a glob match. The rules here still govern how that restatement reads, and that body cites this one rather than carrying a copy.
45
45
  - What voice a given surface declares, which belongs to the standard governing that surface
46
46
  - Measuring whether finished output followed these rules, which needs a check this skill does not carry
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: write-human
3
- description: Carries the voice, rhythm, sentence construction, and information density rules a banned-word list cannot express, plus the catalog of machine tells that survive a clean ban scan. Use when writing or revising prose a person will read, when a passage reads flat or uniform, or when asked to "make this read like a person", "fix the cadence", "this reads like AI wrote it", "vary the sentences", or "tighten this without gutting it". Do NOT use for banned words, characters, or spellings, which `markdown.md` states and `aitk markdown audit` gates, and do NOT use to restate text that already exists in plainer words, which is `restate`, whose body loads these rules from here.
3
+ description: Carries the voice, rhythm, sentence construction, and information density rules a banned-word list cannot express, plus the catalog of machine tells that survive a clean ban scan. Use when writing or revising prose a person will read, when a passage reads flat or uniform, or when asked to "make this read like a person", "fix the cadence", "this reads like AI wrote it", "vary the sentences", or "tighten this without gutting it". Do NOT use for banned words, characters, or spellings, which `markdown.md` states and `aitk markdown audit` gates, and do NOT use to restate text that already exists in plainer words, which is `restate-plainly`, whose body loads these rules from here.
4
4
  ---
5
5
 
6
6
  # Write human
@@ -17,7 +17,7 @@ aitk demo run demos/inline-edit.json --cursor ~/cursors/theme --out assets
17
17
 
18
18
  ## The draft and the plan are different files
19
19
 
20
- `claude-screencast` drafts beats for a person. A beat carries what is on screen, one verb, what to watch for, an emphasis, and a caption, and none of that names a selector, a URL, a wait condition, or a timing. Those four are what an executor needs and what would ruin the draft, since the format is pre-seeded so the operator edits down rather than fills blanks.
20
+ `aitk-screencast` drafts beats for a person. A beat carries what is on screen, one verb, what to watch for, an emphasis, and a caption, and none of that names a selector, a URL, a wait condition, or a timing. Those four are what an executor needs and what would ruin the draft, since the format is pre-seeded so the operator edits down rather than fills blanks.
21
21
 
22
22
  So `aitk demo compile` writes a second artifact rather than adding fields to a beat. It maps each beat's verb to a step, seeds the timing, marks which beat the still comes from, and leaves the target and the URL empty for a person to fill. The report names every field it could not supply.
23
23
 
@@ -36,6 +36,7 @@ CLI catalog and invocation rules for agents, split by command domain. Start with
36
36
  - [Standard success criteria](standards-audit.md): Reading the corpus against the Success criterion gate, why the check scopes to arrival rather than the whole corpus, and the exit codes it sets
37
37
  - [State-scoped risk](state-scoped-risk.md): Reading committed state rather than an arriving change, the shipped-tree corpus the secret scan reads, what it keys on and how a deliberate value is exempted, the advisory check and its network failure mode, and why one gates while the other reports
38
38
  - [Superseded values](superseded.md): Reading where the tree still asserts a value a changed convention no longer produces, why the sweep keys on the value rather than the file, the exemption marker, the blind spot it cannot reach, and why it reports rather than gates
39
+ - [Targets](targets.md): The projects this toolkit installed into, the record the install writes against the sweep that backs it, what bounds each answer, and the cross-target pull request read
39
40
  - [Tasks](tasks.md): Selecting a shipped task by stem or pull request, recording a number and closing an outcome, the refusal reasons, the board and backlog checks validate runs, and why the board root defaults to the main worktree
40
41
  - [Teach](teach.md): Listing learning workspaces and the ordinal a new one takes, opening one with its required files, recording sources and glossary terms, resolving what the next lesson needs before it is written, the refusal reasons, and why every write here runs through a verb
41
42
  - [Test order](test-order.md): Reading where an implementation reached history ahead of its test, how a pair is decided, the three verdicts, the coverage the pairing cannot reach, and why the check reports rather than gates
@@ -7,7 +7,7 @@ description: What this folder covers, the invocation rules every command inherit
7
7
 
8
8
  CLI catalog and invocation rules for agents working in this repository.
9
9
 
10
- This folder is an index of what an agent can run and how to run it cleanly from a script. It does not cover domain behavior. Read `CLAUDE.md` for project behaviors and load the matching `.claude/skills/aitk-*` skill when working inside a domain.
10
+ This folder is an index of what an agent can run and how to run it cleanly from a script. It does not cover domain behavior. Read `CLAUDE.md` for project behaviors and load the matching `.claude/skills/internal-*` skill when working inside a domain.
11
11
 
12
12
  ## Invocation rules
13
13
 
@@ -22,5 +22,5 @@ See `CLAUDE.md` design principles. They apply to every command in this folder.
22
22
  ## Related
23
23
 
24
24
  - `CLAUDE.md`: project behaviors and design principles
25
- - `.claude/skills/aitk-*`: domain-scoped guidance for editing work
25
+ - `.claude/skills/internal-*`: domain-scoped guidance for editing work
26
26
  - `docs/index.md`: full docs directory
@@ -146,4 +146,4 @@ git hooks, the end-to-end harness, and the shell scripts under `scripts/`, so a
146
146
  headless run carrying neither `--check` nor `--write` reports what it would
147
147
  replace and exits 1 rather than applying it. Run `--check` first to read the
148
148
  list, then `--write` to apply it. `aitk tooling sync --help` names both, and the
149
- full per-stack path list sits in the `toolkit-cli` skill.
149
+ full per-stack path list sits in the `aitk-cli` skill.
@@ -13,12 +13,14 @@ description: Resolving live peer sessions to the worktree and branch each holds,
13
13
  aitk sessions list
14
14
  aitk sessions list --json
15
15
  aitk sessions list --branch feat/parser --json
16
+ aitk sessions list --branch chore/agents --repository ../caret --json
16
17
  ```
17
18
 
18
- | Option | Behavior |
19
- | ----------------- | -------------------------------------------- |
20
- | `--json` | Add a machine-readable record on stdout |
21
- | `--branch <name>` | Report the sessions holding this branch here |
19
+ | Option | Behavior |
20
+ | --------------------- | ----------------------------------------------------- |
21
+ | `--json` | Add a machine-readable record on stdout |
22
+ | `--branch <name>` | Report the sessions holding this branch |
23
+ | `--repository <path>` | Answer about this project rather than the working one |
22
24
 
23
25
  It reads and never writes. The question it answers is which session to address when work has to reach the one holding a given branch, which a session listing cannot answer on its own.
24
26
 
@@ -28,7 +30,11 @@ An exit code says nothing about a call made from a session, since a shell profil
28
30
 
29
31
  ## Scope and count
30
32
 
31
- `--branch` scopes the match to the repository the command runs in, and refuses outside one. A branch name identifies a branch inside a repository and nothing across a machine, so an unscoped match reaches a session working in a different project, and `main` collides on every machine running two of them.
33
+ `--branch` scopes the match to one repository, and refuses when none resolves. A branch name identifies a branch inside a repository and nothing across a machine, so an unscoped match reaches a session working in a different project, and `main` collides on every machine running two of them.
34
+
35
+ Which repository that is defaults to the one the command runs in, and `--repository <path>` names another. Every reading moves with it, the session match and the worktree and ref reads alike, because the answer is about that project rather than about where the caller stands. The roster underneath is machine-wide already, so the flag removes a filter rather than widening a search.
36
+
37
+ That is what a dispatcher reaching outside its own project needs. Without it a check run from the toolkit against a branch held by a live session in a consuming project answered unclaimed, and two sessions were sent onto branches other sessions were holding. One refused on the worktree lock and one cut a second worktree on the same branch, which would have put two sessions pushing to one ref.
32
38
 
33
39
  A bare run reports every repository and carries a `repository` field on each row, holding the shared git directory that a main checkout and all its linked worktrees agree on. That is what a caller filters on when it wants a scope of its own.
34
40
 
@@ -0,0 +1,83 @@
1
+ ---
2
+ title: Targets
3
+ description: The projects this toolkit installed into, the record the install writes against the sweep that backs it, what bounds each answer, and the cross-target pull request read
4
+ ---
5
+
6
+ # Targets
7
+
8
+ ## List
9
+
10
+ `aitk targets list` reports the projects this toolkit has installed into, with where each answer came from.
11
+
12
+ ```bash
13
+ aitk targets list
14
+ aitk targets list --json
15
+ aitk targets list --sweep ~/repos --json
16
+ ```
17
+
18
+ | Option | Behavior |
19
+ | ----------------- | ------------------------------------------------------- |
20
+ | `--json` | Add a machine-readable record on stdout |
21
+ | `--sweep <path…>` | Also walk these roots for targets the record never held |
22
+ | `--depth <n>` | How deep below each swept root to walk, defaulting to 4 |
23
+
24
+ Exit codes: `0` the population was read, `1` refused. A refusal carries a `reason` of `bad-depth`, and an absent index reports as unknown rather than as no targets.
25
+
26
+ An exit code says nothing about a call made from a session, since a shell profile may wrap the binary in a function taking its status from a later command. Read the record's fields rather than the exit when a skill consumes this.
27
+
28
+ ## Where the answer comes from
29
+
30
+ Every sync that stamps a target records it in a machine-level index at `$XDG_STATE_HOME/aitk/targets.json`, falling back to `~/.local/state/aitk/targets.json`. A project installed into since that shipped is therefore known without anyone naming it, and each row carries `stampedAt` from the sync that last touched it.
31
+
32
+ `--sweep` walks the roots given and finds what the record never held, which is every target installed before the index existed. A row says which of the two found it, and a row the record knows keeps that source even when the sweep reaches it too.
33
+
34
+ The record is the primary source and the sweep is the fallback, because they fail in opposite directions. A record only knows an install that ran after it shipped. A walk only knows the paths someone thought to name, which is how a hand census of this population was wrong in both directions at once: it counted two folders that had never been targets, counted one clone of a target already counted, and missed the clone a repair had actually run in.
35
+
36
+ ## What bounds a sweep
37
+
38
+ A `--sweep` run carries a `bound` object naming the roots walked, the depth, the folders the walk stopped at on reaching the cap, the roots it could not read, and the directory symlinks it did not follow. Read it before treating a count as the population.
39
+
40
+ The bound a sweep can never state is the machine. It reads this one, so a target on another machine or under a path nobody named is outside every answer it gives. That is the same limit the hand census had, and the record above is what closes it going forward rather than the sweep.
41
+
42
+ `--depth` refuses anything that is not a whole number rather than falling back to the default. A value that is not one leaves every depth test false, so the walk runs to the bottom of its root while the bound claims a cap it never applied.
43
+
44
+ ## A project held in more than one clone
45
+
46
+ A target cloned twice is one target. The sweep reads each checkout's `origin`, trims it to a form an ssh URL and an https URL of one repository agree on, and reports a single row holding every path.
47
+
48
+ The row leads with the clone the record knows, because the record only names one a sync actually ran in. Every caller reading a single path takes the first, and picking that by sort order is the shape behind a repair that ran in one clone while a count was taken against another, leaving the target reported as untouched.
49
+
50
+ Nothing removes a row. A project deleted, moved, or that dropped the toolkit stays in the index, so a count drifts upward over time. It surfaces on use rather than silently, since the read below refuses a path it cannot open.
51
+
52
+ ## Pulls
53
+
54
+ `aitk targets pulls` reports, per target, every open pull request with its checks and the heading its newest review pass carries.
55
+
56
+ ```bash
57
+ aitk targets pulls
58
+ aitk targets pulls ../caret ../stackr --json
59
+ ```
60
+
61
+ Naming paths reads those and looks up nothing. Naming none reads every target `aitk targets list` reports. One clone per project is read, since two checkouts sharing an origin answer the same query and reading both spends the rate limit to print one answer twice.
62
+
63
+ Exit codes: `0` at least one target was read, `1` refused or every target refused.
64
+
65
+ | Field | Holds |
66
+ | ---------------- | ----------------------------------------------------------------------- |
67
+ | `checks` | `passing`, `failing`, `pending`, or `null` when GitHub reported none |
68
+ | `review` | `open`, `closed`, or `null` when no pass has landed |
69
+ | `reviewReadable` | `false` when the review query failed, leaving `review` covering nothing |
70
+
71
+ `checks` is `null` rather than `passing` when no check ran at all, which is not the same answer. A failure outranks a run still going, since a job that already failed cannot be cleared by one still in flight.
72
+
73
+ `review` reads the first line of the newest pass carrying `## Review` or `## Review closed`, which `claude-pr-review` owns and posts. A target leaves a wave on `closed` rather than on a worker's reply.
74
+
75
+ A target that could not be read carries a `reason` rather than an empty pull list. Reading a failed query as no open work is what reports a target as done having read nothing, which is the failure mode of the hand-written shell loop this replaces.
76
+
77
+ | Reason | Means |
78
+ | ----------------- | ------------------------------------------------------ |
79
+ | `not-a-directory` | the path is not a directory, so nothing was read there |
80
+ | `gh-unavailable` | `gh` is not on the path |
81
+ | `list-failed` | the open pull request list could not be read |
82
+
83
+ The reads run one target at a time. They share one GitHub API quota, and a wave firing a dozen at once meets the secondary rate limit rather than an answer.