@ikon85/agent-workflow-kit 0.34.6 → 0.36.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 (116) hide show
  1. package/.agents/skills/ask-matt/SKILL.md +8 -0
  2. package/.agents/skills/audit-skills/SKILL.md +8 -0
  3. package/.agents/skills/board-to-waves/SKILL.md +8 -0
  4. package/.agents/skills/census-update/SKILL.md +8 -0
  5. package/.agents/skills/code-review/SKILL.md +8 -0
  6. package/.agents/skills/codebase-design/SKILL.md +8 -0
  7. package/.agents/skills/codex-adapter-sync/SKILL.md +8 -0
  8. package/.agents/skills/decision-gate/SKILL.md +8 -0
  9. package/.agents/skills/diagnose/SKILL.md +8 -0
  10. package/.agents/skills/domain-modeling/SKILL.md +8 -0
  11. package/.agents/skills/git-worktree-recover/SKILL.md +8 -0
  12. package/.agents/skills/grill-me/SKILL.md +8 -0
  13. package/.agents/skills/grill-with-docs/SKILL.md +8 -0
  14. package/.agents/skills/implement/SKILL.md +8 -0
  15. package/.agents/skills/improve-codebase-architecture/SKILL.md +8 -0
  16. package/.agents/skills/kit-release/SKILL.md +8 -0
  17. package/.agents/skills/kit-update/SKILL.md +32 -11
  18. package/.agents/skills/local-ci/SKILL.md +8 -0
  19. package/.agents/skills/memory-lifecycle/SKILL.md +8 -0
  20. package/.agents/skills/orchestrate-wave/SKILL.md +2 -2
  21. package/.agents/skills/project-release/SKILL.md +8 -0
  22. package/.agents/skills/prototype/SKILL.md +8 -0
  23. package/.agents/skills/research/SKILL.md +8 -0
  24. package/.agents/skills/resolving-merge-conflicts/SKILL.md +8 -0
  25. package/.agents/skills/retro/SKILL.md +19 -3
  26. package/.agents/skills/scale-check/SKILL.md +8 -0
  27. package/.agents/skills/security-audit/SKILL.md +8 -0
  28. package/.agents/skills/setup-workflow/SKILL.md +52 -1
  29. package/.agents/skills/setup-workflow/contribution-routing.md +52 -0
  30. package/.agents/skills/setup-workflow/orchestrate-wave-seed.md +1 -0
  31. package/.agents/skills/setup-workflow/spec-self-critique-seed.md +1 -0
  32. package/.agents/skills/spec-self-critique/SKILL.md +8 -0
  33. package/.agents/skills/tdd/SKILL.md +8 -0
  34. package/.agents/skills/to-issues/SKILL.md +8 -0
  35. package/.agents/skills/to-prd/SKILL.md +8 -0
  36. package/.agents/skills/to-waves/SKILL.md +8 -0
  37. package/.agents/skills/triage/SKILL.md +8 -0
  38. package/.agents/skills/verify-spike/SKILL.md +8 -0
  39. package/.agents/skills/wayfinder/SKILL.md +8 -0
  40. package/.agents/skills/wrapup/SKILL.md +8 -0
  41. package/.claude/hooks/kit-origin-edit-hint.py +18 -13
  42. package/.claude/skills/ask-matt/SKILL.md +8 -0
  43. package/.claude/skills/audit-skills/SKILL.md +8 -0
  44. package/.claude/skills/board-to-waves/SKILL.md +8 -0
  45. package/.claude/skills/census-update/SKILL.md +8 -0
  46. package/.claude/skills/code-review/SKILL.md +8 -0
  47. package/.claude/skills/codebase-design/SKILL.md +8 -0
  48. package/.claude/skills/codex-build/SKILL.md +8 -0
  49. package/.claude/skills/codex-review/SKILL.md +8 -0
  50. package/.claude/skills/decision-gate/SKILL.md +8 -0
  51. package/.claude/skills/diagnose/SKILL.md +8 -0
  52. package/.claude/skills/domain-modeling/SKILL.md +8 -0
  53. package/.claude/skills/git-guardrails-claude-code/SKILL.md +8 -0
  54. package/.claude/skills/git-worktree-recover/SKILL.md +8 -0
  55. package/.claude/skills/grill-me/SKILL.md +8 -0
  56. package/.claude/skills/grill-me-codex/SKILL.md +8 -0
  57. package/.claude/skills/grill-with-docs/SKILL.md +8 -0
  58. package/.claude/skills/grill-with-docs-codex/SKILL.md +8 -0
  59. package/.claude/skills/implement/SKILL.md +8 -0
  60. package/.claude/skills/improve-codebase-architecture/SKILL.md +8 -0
  61. package/.claude/skills/kit-release/SKILL.md +8 -0
  62. package/.claude/skills/kit-update/SKILL.md +32 -11
  63. package/.claude/skills/local-ci/SKILL.md +8 -0
  64. package/.claude/skills/memory-lifecycle/SKILL.md +8 -0
  65. package/.claude/skills/orchestrate-wave/SKILL.md +2 -2
  66. package/.claude/skills/project-release/SKILL.md +8 -0
  67. package/.claude/skills/prototype/SKILL.md +8 -0
  68. package/.claude/skills/research/SKILL.md +8 -0
  69. package/.claude/skills/resolving-merge-conflicts/SKILL.md +8 -0
  70. package/.claude/skills/retro/SKILL.md +19 -3
  71. package/.claude/skills/scale-check/SKILL.md +8 -0
  72. package/.claude/skills/security-audit/SKILL.md +8 -0
  73. package/.claude/skills/setup-pre-commit/SKILL.md +8 -0
  74. package/.claude/skills/setup-workflow/SKILL.md +52 -1
  75. package/.claude/skills/setup-workflow/contribution-routing.md +52 -0
  76. package/.claude/skills/setup-workflow/orchestrate-wave-seed.md +1 -0
  77. package/.claude/skills/setup-workflow/spec-self-critique-seed.md +1 -0
  78. package/.claude/skills/spec-self-critique/SKILL.md +8 -0
  79. package/.claude/skills/tdd/SKILL.md +8 -0
  80. package/.claude/skills/to-issues/SKILL.md +8 -0
  81. package/.claude/skills/to-prd/SKILL.md +8 -0
  82. package/.claude/skills/to-waves/SKILL.md +8 -0
  83. package/.claude/skills/triage/SKILL.md +8 -0
  84. package/.claude/skills/verify-spike/SKILL.md +8 -0
  85. package/.claude/skills/wayfinder/SKILL.md +8 -0
  86. package/.claude/skills/wrapup/SKILL.md +8 -0
  87. package/.claude/skills/write-a-skill/SKILL.md +8 -0
  88. package/README.md +172 -5
  89. package/agent-workflow-kit.package.json +149 -89
  90. package/docs/agents/skills/local-ci.md +1 -0
  91. package/docs/agents/skills/orchestrate-wave.md +1 -1
  92. package/docs/agents/skills/spec-self-critique.md +1 -1
  93. package/package.json +1 -1
  94. package/scripts/find-by-marker.py +2 -0
  95. package/scripts/project-skill-extension.mjs +37 -0
  96. package/scripts/readiness.mjs +2 -1
  97. package/scripts/test_marker_lib.py +8 -0
  98. package/scripts/test_retro_wrapup_contract.py +6 -4
  99. package/scripts/test_skill_publish_audit.py +9 -1
  100. package/src/cli.mjs +86 -12
  101. package/src/commands/init.mjs +24 -0
  102. package/src/commands/own.mjs +7 -3
  103. package/src/commands/update.mjs +87 -21
  104. package/src/lib/bundle.mjs +5 -0
  105. package/src/lib/contributionBridge.mjs +176 -0
  106. package/src/lib/contributionRouting.mjs +152 -0
  107. package/src/lib/manifest.mjs +17 -2
  108. package/src/lib/ownershipClassifier.mjs +65 -0
  109. package/src/lib/projectSkillExtension.mjs +60 -0
  110. package/src/lib/skillRegistry.mjs +167 -0
  111. package/src/lib/updateCandidate.mjs +105 -4
  112. package/src/lib/updateDecisions.mjs +5 -0
  113. package/src/lib/updateReconcile.mjs +102 -9
  114. package/src/lib/verifyUpdateCandidate.mjs +28 -1
  115. package/src/lib/verifyUpdateCandidateProtocol.mjs +2 -0
  116. package/src/lib/verifyUpdateCandidateTransaction.mjs +19 -3
@@ -4,6 +4,14 @@ description: "Ask which skill or flow fits your situation. A router over the ski
4
4
  disable-model-invocation: true
5
5
  ---
6
6
 
7
+ <!-- project-extension:protocol-v1:start -->
8
+ ## Project extension
9
+
10
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill ask-matt --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
11
+
12
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
13
+ <!-- project-extension:protocol-v1:end -->
14
+
7
15
  # Ask Matt
8
16
 
9
17
  > **Homage + Router.** Adopted from Matt Pocock's `ask-matt` (MIT, github.com/mattpocock/skills @ `7a83a3a`) — the name stays as a nod to upstream, the content is adapted to *this* repo's skill set (the plan→execute→land→learn line plus our gates, cross-model review, and land/learn skills). Provenance: `docs/agents/provenance.md`. Folder↔upstream-name note: `/diagnose` = upstream `diagnosing-bugs`, `/write-a-skill` = upstream `writing-great-skills` (renamed upstream, local names kept).
@@ -4,6 +4,14 @@ disable-model-invocation: true
4
4
  description: "Audit the project's own skills for drift from code/doc reality and fix it — the anti-drift learn step. Run at retro, periodically, or when a drift-hint warns a skill's declared source moved since its last touch. Fans out one read-only research subagent per skill, re-verifies each reported drift before editing (the auditor produces false positives), and fixes by content type. Triggers: audit the skills, skill drift, stale skill, skill points at a dead path or renamed symbol."
5
5
  ---
6
6
 
7
+ <!-- project-extension:protocol-v1:start -->
8
+ ## Project extension
9
+
10
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill audit-skills --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
11
+
12
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
13
+ <!-- project-extension:protocol-v1:end -->
14
+
7
15
  # audit-skills — Skill freshness audit (anti-drift)
8
16
 
9
17
  A reusable recipe for checking the project's own skills against code/doc reality
@@ -4,6 +4,14 @@ disable-model-invocation: false
4
4
  "description": "Use when sweeping/grooming the GitHub backlog board to cluster open issues into thematic waves (Wellen) — \"lass uns das Board durchgehen\", \"was ist offen und passt zusammen\", \"clustern wir den Backlog\", \"welche Wellen stecken da drin\" — or to spot candidate waves before planning. Reads all open issues, groups them by the Gate+Booster+Splitter heuristic, estimates size/risk + grill-needed per candidate, and after the user confirms creates cluster/Wave-less candidate STUB issues with a To-Do checklist. STOPS at stubs: no PRD, no slicing, no sub-issue links, no promotion (downstream: to-prd matures the stub, to-issues slices + promotes). NOT for maturing/slicing ONE already-chosen candidate (to-prd/to-issues), NOT for per-issue triage labelling (triage), NOT for code comprehension — this is board-WIDE thematic affinity grouping, not per-issue and not code-reading."
5
5
  ---
6
6
 
7
+ <!-- project-extension:protocol-v1:start -->
8
+ ## Project extension
9
+
10
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill board-to-waves --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
11
+
12
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
13
+ <!-- project-extension:protocol-v1:end -->
14
+
7
15
  # board-to-waves
8
16
 
9
17
  **Survey the board → cluster open issues by theme → anchor stub issues.** Systematizes how Welle F came about: first look at what's open and what fits together, then form thematic waves. Result lands durably as an anchor issue on the board (GitHub = SSOT), not as a chat list.
@@ -3,6 +3,14 @@ name: census-update
3
3
  description: "Build, refresh, or check an optional project-local census. Use when a user invokes census-update, asks to establish a counted surface census, or needs to reconcile census drift; scan facts in the current repository, guide only ambiguous decisions, and activate a verified candidate transactionally."
4
4
  ---
5
5
 
6
+ <!-- project-extension:protocol-v1:start -->
7
+ ## Project extension
8
+
9
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill census-update --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
10
+
11
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
12
+ <!-- project-extension:protocol-v1:end -->
13
+
6
14
  # Census Update
7
15
 
8
16
  Build and maintain the current repository's consumer-owned census through the
@@ -3,6 +3,14 @@ name: code-review
3
3
  description: Review a diff, branch, or PR against two separate axes — Standards (this repo's own conventions plus a Fowler-smell baseline) and Spec (does the diff faithfully implement the originating issue/PRD) — reported side by side, never merged or re-ranked. Runs a three-dot merge-base preflight before either axis starts. Use when asked to review a diff/branch/PR, or when a review needs to answer both "does this follow our standards" and "does this match the spec" without one masking the other. NOT for a pre-code plan review (that reviews a plan before any code exists), NOT for root-causing a known bug (`diagnose`), and NOT a pure reuse/simplification/efficiency pass (narrower, no bug-hunting).
4
4
  ---
5
5
 
6
+ <!-- project-extension:protocol-v1:start -->
7
+ ## Project extension
8
+
9
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill code-review --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
10
+
11
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
12
+ <!-- project-extension:protocol-v1:end -->
13
+
6
14
  # Code Review
7
15
 
8
16
  A code-review compares one diff against **two independent axes** — Standards and Spec — and reports them **separately**. A diff can pass one axis and fail the other: code that satisfies every convention but builds the wrong thing is a Standards-pass/Spec-fail; code that nails the issue but breaks conventions is a Spec-pass/Standards-fail. Merge or re-rank the two and one axis silently masks the other — that is the exact failure mode this method exists to prevent.
@@ -3,6 +3,14 @@ name: codebase-design
3
3
  description: "Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary."
4
4
  ---
5
5
 
6
+ <!-- project-extension:protocol-v1:start -->
7
+ ## Project extension
8
+
9
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill codebase-design --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
10
+
11
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
12
+ <!-- project-extension:protocol-v1:end -->
13
+
6
14
  # Codebase Design
7
15
 
8
16
  Design **deep modules**: a lot of behaviour behind a small interface, placed at a clean seam, testable through that interface. Use this language and these principles wherever code is being designed or restructured. The aim is leverage for callers, locality for maintainers, and testability for everyone.
@@ -3,6 +3,14 @@ name: codex-adapter-sync
3
3
  description: "Use to audit and update the Codex adapter after changes to CLAUDE.md, package CLAUDE.md files, .claude/skills, .claude/agents, or Codex setup. Checks AGENTS.md, .agents/skills, .codex/config.toml, .codex/agents, and .gitignore for drift."
4
4
  ---
5
5
 
6
+ <!-- project-extension:protocol-v1:start -->
7
+ ## Project extension
8
+
9
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill codex-adapter-sync --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
10
+
11
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
12
+ <!-- project-extension:protocol-v1:end -->
13
+
6
14
  # Codex Adapter Sync
7
15
 
8
16
  Use this skill when the user asks for a Codex adapter sync, Codex drift check,
@@ -3,6 +3,14 @@ name: decision-gate
3
3
  "description": "Resolve a bounded trade-off choice or a targeted research gap with read-only investigation, a documented weigh-up, and a reasoned decision. Use when a plan or slice hinges on a concrete \"which option\" choice or a \"need to research this first\" gap that is above a binary yes/no fact (verify-spike) but below a high-stakes, hard-to-reverse, ADR-worthy decision (grill-with-docs-codex). Output is a trade-off table plus a justified pick sunk into an ADR/issue/comment. NOT for binary fact-checks (verify-spike), open-ended design feel (prototype), or bug root-cause (diagnose)."
4
4
  ---
5
5
 
6
+ <!-- project-extension:protocol-v1:start -->
7
+ ## Project extension
8
+
9
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill decision-gate --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
10
+
11
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
12
+ <!-- project-extension:protocol-v1:end -->
13
+
6
14
  # Decision Gate
7
15
 
8
16
  A decision-gate resolves **a bounded "which option" choice — or a targeted research gap — with evidence, not a hunch.** You have two or more candidate approaches (or one approach you cannot yet commit to), the call is small enough that a full design-grill is overkill, but it is more than a single yes/no fact. The gate makes the choice **documented and defensible** instead of decided in your head.
@@ -3,6 +3,14 @@ name: diagnose
3
3
  description: "Disciplined diagnosis loop for hard bugs and performance regressions. Reproduce → minimise → hypothesise → instrument → fix → regression-test. Use when user says \"diagnose this\" / \"debug this\", reports a bug, says something is broken/throwing/failing, or describes a performance regression."
4
4
  ---
5
5
 
6
+ <!-- project-extension:protocol-v1:start -->
7
+ ## Project extension
8
+
9
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill diagnose --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
10
+
11
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
12
+ <!-- project-extension:protocol-v1:end -->
13
+
6
14
  # Diagnose
7
15
 
8
16
  > **Skill identity (don't get confused):** the folder `diagnose` + invocation `/diagnose` map to Matt Pocock's upstream skill **`diagnosing-bugs`**. Upstream renamed `diagnose` → `diagnosing-bugs`; we deliberately keep the folder name `diagnose` (invocation stability `/diagnose`). Content = upstream `diagnosing-bugs` @ `7a83a3a`, locally adapted (description kept with full trigger coverage). Provenance/rename ledger: `docs/agents/provenance.md` (§Re-Sync-Log), at the project root.
@@ -3,6 +3,14 @@ name: domain-modeling
3
3
  description: "Build and sharpen a project's domain model. Use when the user wants to pin down domain terminology or a ubiquitous language, record an architectural decision, or when another skill needs to maintain the domain model."
4
4
  ---
5
5
 
6
+ <!-- project-extension:protocol-v1:start -->
7
+ ## Project extension
8
+
9
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill domain-modeling --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
10
+
11
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
12
+ <!-- project-extension:protocol-v1:end -->
13
+
6
14
  # Domain Modeling
7
15
 
8
16
  > **In this repo (if present):** `CONTEXT.md` + `docs/adr/` already exist (lazily created via `/grill-with-docs`). The **ADR conventions are SSOT in `docs/adr/README.md`** (project root; status lifecycle, template, numbering) — use that convention when creating an ADR, don't shadow it with the generic [ADR-FORMAT.md](./ADR-FORMAT.md). `/grill-with-docs`(-codex) maintains CONTEXT.md + ADRs in operation; this skill is the vocabulary underneath. Provenance: `docs/agents/provenance.md`.
@@ -3,6 +3,14 @@ name: git-worktree-recover
3
3
  description: "Recovery skill for git branch mix-ups — a commit landed on the wrong branch, the branch switched unexpectedly, or work appears lost. Uses git reflog to find the misplaced commit, moves it to the right branch (git branch -f), optionally resets the wrong branch, and sets up a clean worktree. Triggers: commit on the wrong branch, branch switched on its own, this commit doesn't belong here, my work is gone, I committed to main by accident."
4
4
  ---
5
5
 
6
+ <!-- project-extension:protocol-v1:start -->
7
+ ## Project extension
8
+
9
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill git-worktree-recover --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
10
+
11
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
12
+ <!-- project-extension:protocol-v1:end -->
13
+
6
14
  # git-worktree-recover
7
15
 
8
16
  Recovery skill for branch mix-ups. When two processes share one checkout's global
@@ -4,6 +4,14 @@ disable-model-invocation: true
4
4
  description: "Interview the user relentlessly about a plan or design until reaching shared understanding, resolving each branch of the decision tree. Use when user wants to stress-test a plan, get grilled on their design, or mentions \"grill me\"."
5
5
  ---
6
6
 
7
+ <!-- project-extension:protocol-v1:start -->
8
+ ## Project extension
9
+
10
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill grill-me --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
11
+
12
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
13
+ <!-- project-extension:protocol-v1:end -->
14
+
7
15
  Interview me relentlessly about every aspect of this plan until we reach a shared understanding. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.
8
16
 
9
17
  Ask the questions one at a time.
@@ -4,6 +4,14 @@ disable-model-invocation: true
4
4
  description: "Grilling session that challenges your plan against the existing domain model, sharpens terminology, and updates documentation (CONTEXT.md, ADRs) inline as decisions crystallise. Use when user wants to stress-test a plan against their project's language and documented decisions."
5
5
  ---
6
6
 
7
+ <!-- project-extension:protocol-v1:start -->
8
+ ## Project extension
9
+
10
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill grill-with-docs --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
11
+
12
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
13
+ <!-- project-extension:protocol-v1:end -->
14
+
7
15
  <what-to-do>
8
16
 
9
17
  Interview me relentlessly about every aspect of this plan until we reach a shared understanding. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.
@@ -4,6 +4,14 @@ description: "Implement a piece of work based on a PRD or set of issues."
4
4
  disable-model-invocation: true
5
5
  ---
6
6
 
7
+ <!-- project-extension:protocol-v1:start -->
8
+ ## Project extension
9
+
10
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill implement --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
11
+
12
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
13
+ <!-- project-extension:protocol-v1:end -->
14
+
7
15
  Implement the work described by the user in the PRD or issues.
8
16
 
9
17
  ## Pickup — claim the issue first
@@ -4,6 +4,14 @@ disable-model-invocation: true
4
4
  description: "Find deepening opportunities in a codebase, informed by the domain language in CONTEXT.md and the decisions in docs/adr/. Use when the user wants to improve architecture, find refactoring opportunities, consolidate tightly-coupled modules, or make a codebase more testable and AI-navigable."
5
5
  ---
6
6
 
7
+ <!-- project-extension:protocol-v1:start -->
8
+ ## Project extension
9
+
10
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill improve-codebase-architecture --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
11
+
12
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
13
+ <!-- project-extension:protocol-v1:end -->
14
+
7
15
  # Improve Codebase Architecture
8
16
 
9
17
  Surface architectural friction and propose **deepening opportunities** — refactors that turn shallow modules into deep ones. The aim is testability and AI-navigability.
@@ -3,6 +3,14 @@ name: kit-release
3
3
  description: "Prepare, integrate and publish a verified agent-workflow-kit release: one confirmed Semver authorizes the annotated version tag, then monitor npm/GitHub parity to released."
4
4
  ---
5
5
 
6
+ <!-- project-extension:protocol-v1:start -->
7
+ ## Project extension
8
+
9
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill kit-release --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
10
+
11
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
12
+ <!-- project-extension:protocol-v1:end -->
13
+
6
14
  # Kit Release
7
15
 
8
16
  Prepare a release deterministically. This skill owns the shipped-delta decision,
@@ -3,6 +3,14 @@ name: kit-update
3
3
  description: "Preview and transactionally apply a parity-verified agent-workflow-kit release without overwriting local modifications or auto-resolving conflicts."
4
4
  ---
5
5
 
6
+ <!-- project-extension:protocol-v1:start -->
7
+ ## Project extension
8
+
9
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill kit-update --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
10
+
11
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
12
+ <!-- project-extension:protocol-v1:end -->
13
+
6
14
  # Kit Update
7
15
 
8
16
  Update an installed consumer only from the public scoped package
@@ -84,21 +92,34 @@ release contain the same artifact.
84
92
  core, and still unresolved capability states. Missing readiness for genuinely
85
93
  new behavior does not block a compatible kit update; only that behavior stays
86
94
  unavailable. A compatible update must stop if it would make previously
87
- available skill core unavailable. `--yes` answers only package reconciliation
88
- questions and never supplies a readiness decision. Automated update pull
95
+ available skill core unavailable. `--yes` answers only actions whose
96
+ interpretation is already known and never supplies a readiness or ownership
97
+ decision. An untracked destination at a new Kit path remains
98
+ `ambiguous-collision` under `--yes`; interactive and automated runs must
99
+ explicitly choose Project extension, Contribution Bridge, Explicit fork, or
100
+ clean Core. Diagnostics name only path, ledger/package/extension evidence,
101
+ and safe routes—never file content. Automated update pull
89
102
  requests carry the same availability summary and remain manual-merge only.
90
103
 
91
104
  For each conflicted kit-shipped file, always ask the user whether the local
92
105
  edit is a generic improvement or project-specific; never decide or act
93
- automatically. For a generic improvement, offer to file an issue in the
94
- public kit repository and keep the local edit in place as a bridge until a
95
- kit release containing the improvement lands. Before running
96
- `gh issue create --repo <owner>/agent-workflow-kit`, show a sanitized preview
97
- of the exact title and body with consumer identifiers and secrets stripped,
98
- then require the user's explicit approval. The consumer user does not need
99
- to be a kit maintainer. For a project-specific edit, recommend
100
- `npx @ikon85/agent-workflow-kit@latest own <path>` so future updates treat
101
- that path as consumer-owned.
106
+ automatically. For a generic improvement retained as a bridge, run
107
+ `contribute status <path> --surface=pre-update` and follow only its
108
+ repository-capability routes. Missing, disabled, invalid, or unverifiable
109
+ configuration is a generic Consumer and receives preserve/Explicit-fork
110
+ guidance, never maintainer language or an inferred upstream target. A valid
111
+ capability may add local preparation and may describe an upstream pull
112
+ request, but the latter still needs a sanitized exact preview and separate
113
+ explicit approval before any remote command. For a project-specific edit, recommend
114
+ `npx @ikon85/agent-workflow-kit@latest own <path> --as=explicit-fork` so
115
+ future updates treat that path as an independent fork. A generic experiment
116
+ retained only until it returns upstream uses
117
+ `npx @ikon85/agent-workflow-kit@latest contribute start <path>`. Prepare its
118
+ bounded local artifact, when the route report permits it, with `contribute prepare <path>
119
+ --output=.agent-workflow-kit/contributions/<name>.json`. Both commands are
120
+ local-only; opening an issue/PR or pushing remains a separate explicit
121
+ approval. A matching released Core version retires the bridge during
122
+ reimport.
102
123
 
103
124
  4. If a candidate is interrupted, discard its reported stage directory or
104
125
  resume the transaction through the update API's `resumeFrom` option. Do not
@@ -3,6 +3,14 @@ name: local-ci
3
3
  "description": "Run the repo's local CI gate before opening a PR — the stand-in for GitHub required status checks when your plan or repo visibility can't enforce them (a Free-plan private repo has no branch protection). Use before every PR, when a guard/test red is suspected on a branch, or when wiring/repairing the pre-push guard backstop. Triggers — \"local ci\", \"run local ci\", \"pre-PR check\", \"why is main red\", \"did a guard land red\"."
4
4
  ---
5
5
 
6
+ <!-- project-extension:protocol-v1:start -->
7
+ ## Project extension
8
+
9
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill local-ci --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
10
+
11
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
12
+ <!-- project-extension:protocol-v1:end -->
13
+
6
14
  # Local CI
7
15
 
8
16
  A guard only protects if it runs on a **gate**. When your host can't enforce a
@@ -3,6 +3,14 @@ name: memory-lifecycle
3
3
  description: "Preview and apply a consumer-owned memory lifecycle without crossing configured roots or overwriting active, archived, or recovery evidence. Use when a user wants to restore archived memories, inspect memory placement, or run an approved memory recovery."
4
4
  ---
5
5
 
6
+ <!-- project-extension:protocol-v1:start -->
7
+ ## Project extension
8
+
9
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill memory-lifecycle --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
10
+
11
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
12
+ <!-- project-extension:protocol-v1:end -->
13
+
6
14
  # Memory Lifecycle
7
15
 
8
16
  Coordinate the current repository's memory placement and recovery through the
@@ -50,8 +50,8 @@ node scripts/readiness.mjs check --skill orchestrate-wave --json
50
50
  > `§Verify Recipe`, `§Headless Login`, `§Landing`) and falls back to generic
51
51
  > instructions when the layer is absent. See **Phase 0**.
52
52
  >
53
- > When `projectRecipe` is active, read the filled project layer before applying
54
- > any phase-specific command below.
53
+ > Before consuming `projectRecipe`, run `node scripts/project-skill-extension.mjs inspect --skill orchestrate-wave --json`: `active` reads its `path`; `inactive` uses Core; `blocked` stops with its diagnostic.
54
+ > Project extensions may specialize Project details, but cannot weaken Core gates; a contradiction blocks and requires an Explicit fork.
55
55
  <!-- readiness:end -->
56
56
 
57
57
  ## Standing rules (all phases)
@@ -3,6 +3,14 @@ name: project-release
3
3
  description: "Preview and prepare one coherent version change across a consumer's profiled packages without duplicating release logic or creating commits, tags, pushes, publishes, or merges."
4
4
  ---
5
5
 
6
+ <!-- project-extension:protocol-v1:start -->
7
+ ## Project extension
8
+
9
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill project-release --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
10
+
11
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
12
+ <!-- project-extension:protocol-v1:end -->
13
+
6
14
  # Project Release
7
15
 
8
16
  Prepare a consumer-owned multi-package release through the kit's shared
@@ -3,6 +3,14 @@ name: prototype
3
3
  description: "Build a throwaway prototype to flesh out a design before committing to it. Routes between two branches — a runnable terminal app for state/business-logic questions, or several radically different UI variations toggleable from one route. Use when the user wants to prototype, sanity-check a data model or state machine, mock up a UI, explore design options, or says \"prototype this\", \"let me play with it\", \"try a few designs\"."
4
4
  ---
5
5
 
6
+ <!-- project-extension:protocol-v1:start -->
7
+ ## Project extension
8
+
9
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill prototype --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
10
+
11
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
12
+ <!-- project-extension:protocol-v1:end -->
13
+
6
14
  # Prototype
7
15
 
8
16
  A prototype is **throwaway code that answers a question**. The question decides the shape.
@@ -3,6 +3,14 @@ name: research
3
3
  description: "Investigate a question against high-trust primary sources and capture the findings as a Markdown file in the repo. Use when the user wants a topic researched, docs or API facts gathered, or reading legwork delegated to a background agent."
4
4
  ---
5
5
 
6
+ <!-- project-extension:protocol-v1:start -->
7
+ ## Project extension
8
+
9
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill research --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
10
+
11
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
12
+ <!-- project-extension:protocol-v1:end -->
13
+
6
14
  Before dispatch, resolve a provider-neutral Routing intent through
7
15
  `src/lib/routeDispatcher.mjs` and require a Dispatch receipt from the shared
8
16
  spawn guard. A detected transport is not authorization; AFK dispatch stops
@@ -3,6 +3,14 @@ name: resolving-merge-conflicts
3
3
  description: "Use when you need to resolve an in-progress git merge/rebase conflict."
4
4
  ---
5
5
 
6
+ <!-- project-extension:protocol-v1:start -->
7
+ ## Project extension
8
+
9
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill resolving-merge-conflicts --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
10
+
11
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
12
+ <!-- project-extension:protocol-v1:end -->
13
+
6
14
  1. **See the current state** of the merge/rebase. Check git history, and the conflicting files.
7
15
 
8
16
  2. **Find the primary sources** for each conflict. Understand deeply why each change was made, and what the original intent was. Read the commit messages, check the PRs, check original issues/tickets.
@@ -4,6 +4,14 @@ disable-model-invocation: false
4
4
  "description": "Use when the user explicitly asks for a retro after a session with PR-activity. Analyzes session friction and proposes concrete config mutations (Memory/Skill/CLAUDE.md/Hook) with per-patch approval. No file is written — findings live in the mutated config."
5
5
  ---
6
6
 
7
+ <!-- project-extension:protocol-v1:start -->
8
+ ## Project extension
9
+
10
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill retro --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
11
+
12
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
13
+ <!-- project-extension:protocol-v1:end -->
14
+
7
15
  # Retro — In-Session Deep-Dive
8
16
 
9
17
  Trigger: user types `/retro` (optionally with a PR/Issue number, e.g. `/retro 274`).
@@ -156,9 +164,17 @@ Before formulating a patch in step 4, place **every** friction point on the thre
156
164
 
157
165
  **A GitHub issue is NOT a weight tier.** A real follow-up = work to track → `python3 scripts/board-sync.py create` (step-4 table), **orthogonal** to the ladder; its "weight" follows the follow-up scope. The ladder classifies **config patches**, not "turn it into a ticket".
158
166
 
159
- **Kit-repo routing target (always ask; never automatic).** When a finding lands on a kit-shipped file (a consumer-manifest entry with kit origin), ask whether the improvement is generic or project-specific. For a generic improvement, offer to file a lightweight issue against the public kit repo: a title plus a short body that states the finding, affected file, and why it is generic. For a project-specific improvement, recommend `own` (keep it consumer-owned). The consumer user does not need to be the kit maintainer.
160
-
161
- Before any `gh issue create --repo <owner>/agent-workflow-kit` runs, show the user a **sanitized preview** of the exact title and body with consumer identifiers and secrets stripped. Create the issue only after the user explicitly approves that exact text; if the title or body changes, show the revised preview and ask again. This approval is additional to the per-patch approval in step 5.
167
+ **Kit-repo routing target (capability-driven; never automatic).** When a finding
168
+ lands on a kit-shipped file (a consumer-manifest entry with kit origin), ask
169
+ whether the improvement is generic or project-specific. If it enters a
170
+ Contribution Bridge, run `agent-workflow-kit contribute status <path>
171
+ --surface=retro` and use only the reported repository-capability routes.
172
+ Missing, disabled, invalid, or unverifiable configuration is a generic Consumer:
173
+ offer preserve or Explicit fork, never infer maintainer status or an upstream
174
+ target from identity. A valid capability may offer local preparation. Before
175
+ any reported remote route runs, show the **sanitized exact preview** and require
176
+ separate explicit approval; changing the preview requires approval again. For a
177
+ project-specific improvement, recommend `own` (keep it consumer-owned).
162
178
 
163
179
  **Target missing in the project — separate two cases cleanly:**
164
180
  - **(a) Tier skill missing entirely** (e.g. a foreign project without `spec-self-critique`): no durable spec-time gate exists. **Memory is NOT a substitute** — passive recall doesn't catch a recurring spec defect before building. Report honestly: *"this project has no durable target for this tier"* + propose a `/setup-workflow` follow-up. **No fake guard via memory.**
@@ -4,6 +4,14 @@ disable-model-invocation: true
4
4
  description: "Route an undertaking to the right altitude before any planning starts — a short plain-language dialog (3–6 questions) deciding between a Program, a Feature, a single Direct-Slice, or a Bug, then hand back a paste-ready start prompt for the chosen route. Use at the very start of a new build when the size is unclear (a new app, a big cross-cutting feature, or a where-do-I-start question). Owns the altitude criteria catalog; when in doubt it routes to Feature. NOT for slicing a chosen plan (to-issues) and NOT for clustering an existing backlog (board-to-waves)."
5
5
  ---
6
6
 
7
+ <!-- project-extension:protocol-v1:start -->
8
+ ## Project extension
9
+
10
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill scale-check --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
11
+
12
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
13
+ <!-- project-extension:protocol-v1:end -->
14
+
7
15
  # scale-check — Route an undertaking to its altitude
8
16
 
9
17
  Answers one question in plain language: **"how big is this, and where do I start?"**
@@ -3,6 +3,14 @@ name: security-audit
3
3
  description: "Run the whole application's security audit as an independent two-model pass — two AI models audit the same code separately — then harden the remediation plan before any fix lands. Use when the user wants a security audit / security review of the entire app ('audit the app for vulnerabilities', 'is the app secure', 'security check before release'), before a release, or after the attack surface changes (new endpoint, new input source, auth change, dependency bump). NOT for reviewing a single diff/PR (that is a code review) and NOT for infrastructure hardening (firewall/ports/TLS/SSH/backups — audited separately from the application layer)."
4
4
  ---
5
5
 
6
+ <!-- project-extension:protocol-v1:start -->
7
+ ## Project extension
8
+
9
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill security-audit --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
10
+
11
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
12
+ <!-- project-extension:protocol-v1:end -->
13
+
6
14
  # security-audit — application-layer security audit (two-model run)
7
15
 
8
16
  Application-layer security audit of the whole repo. This skill is the **run
@@ -4,6 +4,14 @@ description: "Scaffolds the project layer the portable workflow skills assume
4
4
  disable-model-invocation: true
5
5
  ---
6
6
 
7
+ <!-- project-extension:protocol-v1:start -->
8
+ ## Project extension
9
+
10
+ Before applying this Core skill, run `node scripts/project-skill-extension.mjs inspect --skill setup-workflow --json` from the Project root. When it returns `active`, read the returned `path` and apply it as additive Project instructions. When it returns `inactive`, continue with Core only. When it returns `blocked`, stop and report its diagnostic.
11
+
12
+ Project extensions may specialize Project details, but cannot weaken Core user gates, safety, ownership, or validation. A contradiction blocks and requires an Explicit fork.
13
+ <!-- project-extension:protocol-v1:end -->
14
+
7
15
  # Setup Workflow
8
16
 
9
17
  Scaffold the **project layer** the portable workflow skills (`to-prd`, `to-issues`, `triage`, `spec-self-critique`, `retro`, `wrapup`, …) read at runtime. The generic skills ship the *how*; this skill writes the project-specific *what* into the consumer repo, where `retro`/`wrapup` then grow it over time.
@@ -48,6 +56,28 @@ Every project-layer file this skill (or `npx init`) creates begins with **one se
48
56
  - **CLAUDE.md / AGENTS.md carry no sentinel** (they are not ours) → reconcile **per section** via the block headers `## Workflow` / `## Agent skills` / `## Prod`: add a missing block, never overwrite an existing one or surrounding user content.
49
57
  - **Never overwrite filled content.** A re-run only fills what is missing/stub. End with a report: `<file>: created · filled · skipped (already filled / legacy / not-applicable)`.
50
58
 
59
+ ## Universal Project skill extensions
60
+
61
+ Every shipped skill can consume an additive Project extension at
62
+ `docs/agents/skills/<skill>.md`. A newly created extension starts with this
63
+ identity and schema marker (after the optional setup-workflow sentinel):
64
+
65
+ ```md
66
+ <!-- agent-workflow-kit: project-extension/v1; skill=<skill> -->
67
+ ```
68
+
69
+ The marker's `<skill>` must match the filename and a canonical or locally
70
+ registered skill identity. Existing non-empty files without a marker remain
71
+ supported as legacy v0 and are never rewritten merely to add the marker.
72
+ Setup and update preserve every extension byte-for-byte unless a future,
73
+ declared schema migration explicitly includes it.
74
+
75
+ Use an extension for Project language, commands, policy, and capability data
76
+ that the Core skill already knows how to apply. It is additive and cannot
77
+ weaken Core user gates, safety, ownership, or validation. Changes to parsing,
78
+ migration, evaluation, or other executable Core semantics require an
79
+ Explicit fork with a separate identity and update line.
80
+
51
81
  ## Process
52
82
 
53
83
  ### 1. Explore
@@ -263,7 +293,8 @@ decisions without repository evidence and user confirmation.
263
293
  > manifest. It is advisory only: it never blocks, reads the manifest once, uses
264
294
  > no network, and silently fails open when the manifest cannot be read. Shell
265
295
  > redirection, formatters, and IDE edits are knowingly outside its coverage; the
266
- > skills remain the rule's primary carrier.
296
+ > skills remain the rule's primary carrier. Its Contribution Bridge follow-up
297
+ > calls the same read-only route resolver with `--surface=guard`.
267
298
 
268
299
  Activate the shipped hook by reconciling this exact entry into
269
300
  `.claude/settings.json`:
@@ -327,6 +358,26 @@ unaffected surfaces, autonomy, and advanced values. Re-read the profile before
327
358
  activation and use its fingerprint plus the exclusive profile lock; a
328
359
  concurrent user-local change blocks activation and remains byte-preserved.
329
360
 
361
+ ### 2i. Section A10 — Optional contribution return routing
362
+
363
+ > Contribution return routing lets a repository advertise a verifiable Kit
364
+ > upstream without guessing who the user is. It controls offered routes, never
365
+ > remote authorization.
366
+
367
+ Read [contribution-routing.md](./contribution-routing.md) in full. If
368
+ `contributionRouting` is absent, ask whether this repository should advertise
369
+ an upstream contribution route. **Yes** records only the user-confirmed
370
+ owner/repository and local Git remote after verifying that the remote URL
371
+ matches. **Later / No** leaves the section absent or records `enabled: false`
372
+ only when the user requests a durable opt-out. Adopt an existing valid section
373
+ without normalization and preserve every other profile section and unknown key.
374
+
375
+ Missing, disabled, contradictory, or unverifiable configuration must keep the
376
+ generic preserve/Explicit-fork routes. Never infer capability from username,
377
+ machine, checkout path, repository name, credentials, or current GitHub login.
378
+ Even a valid capability authorizes local preparation only; a pull request,
379
+ push, publish, or merge remains a separate explicit approval.
380
+
330
381
  ### 3. Section B — Triage labels
331
382
 
332
383
  > When `triage` processes an incoming issue it applies labels (or your tracker's equivalent). It needs strings you've actually configured, or it creates duplicates.