@givolt/i3-composer-agent 1.0.0 → 2.0.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 (210) hide show
  1. package/.agents/plugins/marketplace.json +1 -1
  2. package/.claude/commands/{build.md → i3-build.md} +10 -10
  3. package/.claude/commands/{code-simplify.md → i3-code-simplify.md} +2 -2
  4. package/.claude/commands/{constraints.md → i3-constraints.md} +4 -4
  5. package/.claude/commands/{plan.md → i3-plan.md} +1 -1
  6. package/.claude/commands/{review.md → i3-review.md} +3 -3
  7. package/.claude/commands/{ship.md → i3-ship.md} +4 -4
  8. package/.claude/commands/{spec.md → i3-spec.md} +1 -1
  9. package/.claude/commands/{test.md → i3-test.md} +2 -2
  10. package/.claude/commands/{webperf.md → i3-webperf.md} +1 -1
  11. package/.claude-plugin/marketplace.json +1 -1
  12. package/.claude-plugin/plugin.json +1 -1
  13. package/.codex-plugin/plugin.json +1 -1
  14. package/.gemini/commands/{build.toml → i3-build.toml} +10 -10
  15. package/.gemini/commands/{code-simplify.toml → i3-code-simplify.toml} +2 -2
  16. package/.gemini/commands/{constraints.toml → i3-constraints.toml} +4 -4
  17. package/.gemini/commands/{planning.toml → i3-planning.toml} +1 -1
  18. package/{commands/review.toml → .gemini/commands/i3-review.toml} +3 -3
  19. package/.gemini/commands/{ship.toml → i3-ship.toml} +4 -4
  20. package/.gemini/commands/{spec.toml → i3-spec.toml} +1 -1
  21. package/{commands/test.toml → .gemini/commands/i3-test.toml} +2 -2
  22. package/.gemini/commands/{webperf.toml → i3-webperf.toml} +1 -1
  23. package/CHANGELOG.md +29 -1
  24. package/NOTICE.md +8 -2
  25. package/README.md +98 -54
  26. package/agents/code-reviewer.md +2 -2
  27. package/agents/security-auditor.md +1 -1
  28. package/agents/test-engineer.md +1 -1
  29. package/agents/web-performance-auditor.md +3 -3
  30. package/bin/agent-targets.json +726 -0
  31. package/bin/i3-composer-agent.cjs +84 -16
  32. package/bin/install.cjs +180 -0
  33. package/bin/skills-registry.LICENSE +21 -0
  34. package/bin/wizard.cjs +66 -0
  35. package/commands/{build.toml → i3-build.toml} +10 -10
  36. package/commands/{code-simplify.toml → i3-code-simplify.toml} +2 -2
  37. package/commands/{constraints.toml → i3-constraints.toml} +4 -4
  38. package/commands/{planning.toml → i3-planning.toml} +1 -1
  39. package/{.gemini/commands/review.toml → commands/i3-review.toml} +3 -3
  40. package/commands/{ship.toml → i3-ship.toml} +4 -4
  41. package/commands/{spec.toml → i3-spec.toml} +1 -1
  42. package/{.gemini/commands/test.toml → commands/i3-test.toml} +2 -2
  43. package/commands/{webperf.toml → i3-webperf.toml} +1 -1
  44. package/docs/adoption-guide.md +35 -35
  45. package/docs/agents.md +12 -12
  46. package/docs/antigravity-setup.md +14 -14
  47. package/docs/codebuddy-setup.md +64 -16
  48. package/docs/codex-setup.md +17 -6
  49. package/docs/commandcode-setup.md +5 -5
  50. package/docs/copilot-cli-setup.md +5 -5
  51. package/docs/copilot-setup.md +22 -22
  52. package/docs/cursor-setup.md +20 -20
  53. package/docs/developer-onboarding.md +5 -5
  54. package/docs/gemini-cli-setup.md +26 -26
  55. package/docs/getting-started.md +36 -36
  56. package/docs/opencode-setup.md +27 -27
  57. package/docs/skill-anatomy.md +3 -3
  58. package/docs/windsurf-setup.md +7 -7
  59. package/evals/cases/{api-and-interface-design.json → i3-api-and-interface-design.json} +4 -4
  60. package/evals/cases/{browser-testing-with-devtools.json → i3-browser-testing-with-devtools.json} +4 -4
  61. package/evals/cases/{ci-cd-and-automation.json → i3-ci-cd-and-automation.json} +4 -4
  62. package/evals/cases/{code-review-and-quality.json → i3-code-review-and-quality.json} +4 -4
  63. package/evals/cases/{code-simplification.json → i3-code-simplification.json} +4 -4
  64. package/evals/cases/{constraint-driven-development.json → i3-constraint-driven-development.json} +4 -4
  65. package/evals/cases/{context-engineering.json → i3-context-engineering.json} +4 -4
  66. package/evals/cases/{debugging-and-error-recovery.json → i3-debugging-and-error-recovery.json} +5 -5
  67. package/evals/cases/{deprecation-and-migration.json → i3-deprecation-and-migration.json} +4 -4
  68. package/evals/cases/{documentation-and-adrs.json → i3-documentation-and-adrs.json} +4 -4
  69. package/evals/cases/{doubt-driven-development.json → i3-doubt-driven-development.json} +3 -3
  70. package/evals/cases/{frontend-ui-engineering.json → i3-frontend-ui-engineering.json} +4 -4
  71. package/evals/cases/{git-workflow-and-versioning.json → i3-git-workflow-and-versioning.json} +3 -3
  72. package/evals/cases/{idea-refine.json → i3-idea-refine.json} +3 -3
  73. package/evals/cases/{incremental-implementation.json → i3-incremental-implementation.json} +4 -4
  74. package/evals/cases/{interview-me.json → i3-interview-me.json} +3 -3
  75. package/evals/cases/{observability-and-instrumentation.json → i3-observability-and-instrumentation.json} +3 -3
  76. package/evals/cases/{performance-optimization.json → i3-performance-optimization.json} +4 -4
  77. package/evals/cases/{planning-and-task-breakdown.json → i3-planning-and-task-breakdown.json} +4 -4
  78. package/evals/cases/{security-and-hardening.json → i3-security-and-hardening.json} +4 -4
  79. package/evals/cases/{shipping-and-launch.json → i3-shipping-and-launch.json} +4 -4
  80. package/evals/cases/{source-driven-development.json → i3-source-driven-development.json} +4 -4
  81. package/evals/cases/{spec-driven-development.json → i3-spec-driven-development.json} +5 -5
  82. package/evals/cases/{test-driven-development.json → i3-test-driven-development.json} +5 -5
  83. package/evals/cases/{using-agent-skills.json → i3-using-agent-skills.json} +4 -4
  84. package/evals/fixtures/{git-workflow-and-versioning → i3-git-workflow-and-versioning}/.eval/working-tree.patch +3 -3
  85. package/evals/plugin/code-review-fires/graders/skill-fired.md +1 -1
  86. package/evals/plugin/code-review-stays-quiet/graders/not-fired.md +1 -1
  87. package/evals/plugin/code-review-stays-quiet/graders/tdd-fired.md +1 -1
  88. package/evals/plugin/code-review-stays-quiet/prompt.md +2 -2
  89. package/evals/plugin/code-review-stays-quiet-on-commit-message/graders/not-fired.md +1 -1
  90. package/evals/plugin/code-review-stays-quiet-on-commit-message/prompt.md +2 -2
  91. package/hooks/SDD-CACHE.md +3 -3
  92. package/hooks/SIMPLIFY-IGNORE.md +2 -2
  93. package/hooks/session-start-test.sh +1 -1
  94. package/hooks/session-start.sh +3 -3
  95. package/package.json +1 -1
  96. package/plugin.json +1 -1
  97. package/rebrand/INSTALLATION-SPEC.md +47 -0
  98. package/rebrand/MAINTENANCE.md +5 -3
  99. package/rebrand/NOTICE.md +8 -2
  100. package/rebrand/PREFIX-SPEC.md +16 -0
  101. package/rebrand/UNIFICATION-SPEC.md +2 -2
  102. package/rebrand/VALIDATION.md +6 -2
  103. package/rebrand/VERSIONING.md +8 -5
  104. package/rebrand/apply.cjs +33 -10
  105. package/rebrand/brand.json +1 -1
  106. package/rebrand/catalog.cjs +16 -2
  107. package/rebrand/fork-patches.json +15 -0
  108. package/rebrand/identifiers.cjs +41 -0
  109. package/rebrand/overlay/CHANGELOG.md +29 -1
  110. package/rebrand/overlay/bin/agent-targets.json +726 -0
  111. package/rebrand/overlay/bin/i3-composer-agent.cjs +84 -16
  112. package/rebrand/overlay/bin/install.cjs +180 -0
  113. package/rebrand/overlay/bin/skills-registry.LICENSE +21 -0
  114. package/rebrand/overlay/bin/wizard.cjs +66 -0
  115. package/rebrand/overlay/scripts/validate-brand.cjs +3 -3
  116. package/rebrand/overlay/tests/installer.test.cjs +241 -0
  117. package/rebrand/templates/README.md +62 -18
  118. package/rebrand/templates/codebuddy-setup.md +64 -16
  119. package/rebrand/templates/codex-setup.md +17 -6
  120. package/rebrand/tests/pipeline.test.cjs +71 -3
  121. package/references/accessibility-checklist.md +1 -1
  122. package/references/definition-of-done.md +7 -7
  123. package/references/observability-checklist.md +3 -3
  124. package/references/orchestration-patterns.md +17 -17
  125. package/references/performance-checklist.md +2 -2
  126. package/references/security-checklist.md +1 -1
  127. package/references/testing-patterns.md +1 -1
  128. package/scripts/floor-guard-reference-test.js +2 -2
  129. package/scripts/lib/skill-lint.js +2 -0
  130. package/scripts/run-evals-test.js +2 -2
  131. package/scripts/validate-artifact-paths-test.js +3 -3
  132. package/scripts/validate-artifact-paths.js +4 -2
  133. package/scripts/validate-brand.cjs +3 -3
  134. package/scripts/validate-commands.js +1 -0
  135. package/scripts/validate-reference-links-test.js +11 -11
  136. package/scripts/validate-reference-links.js +1 -1
  137. package/skills/{api-and-interface-design → i3-api-and-interface-design}/SKILL.md +2 -2
  138. package/skills/{browser-testing-with-devtools → i3-browser-testing-with-devtools}/SKILL.md +1 -1
  139. package/skills/{ci-cd-and-automation → i3-ci-cd-and-automation}/SKILL.md +2 -2
  140. package/skills/{code-review-and-quality → i3-code-review-and-quality}/SKILL.md +5 -5
  141. package/skills/{code-simplification → i3-code-simplification}/SKILL.md +1 -1
  142. package/skills/{constraint-driven-development → i3-constraint-driven-development}/SKILL.md +15 -15
  143. package/skills/{context-engineering → i3-context-engineering}/SKILL.md +1 -1
  144. package/skills/{debugging-and-error-recovery → i3-debugging-and-error-recovery}/SKILL.md +2 -2
  145. package/skills/{deprecation-and-migration → i3-deprecation-and-migration}/SKILL.md +2 -2
  146. package/skills/{documentation-and-adrs → i3-documentation-and-adrs}/SKILL.md +1 -1
  147. package/skills/{doubt-driven-development → i3-doubt-driven-development}/SKILL.md +8 -8
  148. package/skills/{frontend-ui-engineering → i3-frontend-ui-engineering}/SKILL.md +1 -1
  149. package/skills/{git-workflow-and-versioning → i3-git-workflow-and-versioning}/SKILL.md +4 -4
  150. package/skills/{idea-refine → i3-idea-refine}/SKILL.md +2 -2
  151. package/skills/{idea-refine → i3-idea-refine}/scripts/idea-refine.sh +1 -1
  152. package/skills/{incremental-implementation → i3-incremental-implementation}/SKILL.md +3 -3
  153. package/skills/{interview-me → i3-interview-me}/SKILL.md +12 -12
  154. package/skills/{observability-and-instrumentation → i3-observability-and-instrumentation}/SKILL.md +5 -5
  155. package/skills/{performance-optimization → i3-performance-optimization}/SKILL.md +1 -1
  156. package/skills/{performance-optimization → i3-performance-optimization}/references/optimization-patterns.md +1 -1
  157. package/skills/{planning-and-task-breakdown → i3-planning-and-task-breakdown}/SKILL.md +2 -2
  158. package/skills/{security-and-hardening → i3-security-and-hardening}/SKILL.md +3 -3
  159. package/skills/{security-and-hardening → i3-security-and-hardening}/references/hardening-patterns.md +1 -1
  160. package/skills/{shipping-and-launch → i3-shipping-and-launch}/SKILL.md +2 -2
  161. package/skills/{source-driven-development → i3-source-driven-development}/SKILL.md +2 -2
  162. package/skills/{spec-driven-development → i3-spec-driven-development}/SKILL.md +7 -7
  163. package/skills/{test-driven-development → i3-test-driven-development}/SKILL.md +2 -2
  164. package/skills/{using-agent-skills → i3-using-agent-skills}/SKILL.md +67 -67
  165. package/tests/installer.test.cjs +241 -0
  166. /package/evals/fixtures/{api-and-interface-design → i3-api-and-interface-design}/service-brief.md +0 -0
  167. /package/evals/fixtures/{browser-testing-with-devtools → i3-browser-testing-with-devtools}/README.md +0 -0
  168. /package/evals/fixtures/{browser-testing-with-devtools → i3-browser-testing-with-devtools}/index.html +0 -0
  169. /package/evals/fixtures/{browser-testing-with-devtools → i3-browser-testing-with-devtools}/server.js +0 -0
  170. /package/evals/fixtures/{ci-cd-and-automation → i3-ci-cd-and-automation}/package.json +0 -0
  171. /package/evals/fixtures/{ci-cd-and-automation → i3-ci-cd-and-automation}/src/slug.js +0 -0
  172. /package/evals/fixtures/{ci-cd-and-automation → i3-ci-cd-and-automation}/test/slug.test.js +0 -0
  173. /package/evals/fixtures/{code-review-and-quality → i3-code-review-and-quality}/user-search.diff +0 -0
  174. /package/evals/fixtures/{code-simplification → i3-code-simplification}/config-parser.js +0 -0
  175. /package/evals/fixtures/{code-simplification → i3-code-simplification}/config-parser.test.js +0 -0
  176. /package/evals/fixtures/{context-engineering → i3-context-engineering}/context-audit.md +0 -0
  177. /package/evals/fixtures/{debugging-and-error-recovery → i3-debugging-and-error-recovery}/pagination.js +0 -0
  178. /package/evals/fixtures/{debugging-and-error-recovery → i3-debugging-and-error-recovery}/pagination.test.js +0 -0
  179. /package/evals/fixtures/{debugging-and-error-recovery → i3-debugging-and-error-recovery}/time-pressure.md +0 -0
  180. /package/evals/fixtures/{deprecation-and-migration → i3-deprecation-and-migration}/api-inventory.md +0 -0
  181. /package/evals/fixtures/{documentation-and-adrs → i3-documentation-and-adrs}/decision-context.md +0 -0
  182. /package/evals/fixtures/{doubt-driven-development → i3-doubt-driven-development}/migration-plan.md +0 -0
  183. /package/evals/fixtures/{frontend-ui-engineering → i3-frontend-ui-engineering}/Button.tsx +0 -0
  184. /package/evals/fixtures/{frontend-ui-engineering → i3-frontend-ui-engineering}/design-system.md +0 -0
  185. /package/evals/fixtures/{git-workflow-and-versioning → i3-git-workflow-and-versioning}/app.js +0 -0
  186. /package/evals/fixtures/{git-workflow-and-versioning → i3-git-workflow-and-versioning}/app.test.js +0 -0
  187. /package/evals/fixtures/{incremental-implementation → i3-incremental-implementation}/reports.js +0 -0
  188. /package/evals/fixtures/{incremental-implementation → i3-incremental-implementation}/reports.test.js +0 -0
  189. /package/evals/fixtures/{incremental-implementation → i3-incremental-implementation}/tasks/plan.md +0 -0
  190. /package/evals/fixtures/{observability-and-instrumentation → i3-observability-and-instrumentation}/operations.md +0 -0
  191. /package/evals/fixtures/{observability-and-instrumentation → i3-observability-and-instrumentation}/payment-retry.js +0 -0
  192. /package/evals/fixtures/{performance-optimization → i3-performance-optimization}/benchmark.js +0 -0
  193. /package/evals/fixtures/{performance-optimization → i3-performance-optimization}/products.js +0 -0
  194. /package/evals/fixtures/{planning-and-task-breakdown → i3-planning-and-task-breakdown}/notifications-spec.md +0 -0
  195. /package/evals/fixtures/{security-and-hardening → i3-security-and-hardening}/webhook.js +0 -0
  196. /package/evals/fixtures/{security-and-hardening → i3-security-and-hardening}/webhook.test.js +0 -0
  197. /package/evals/fixtures/{shipping-and-launch → i3-shipping-and-launch}/authority-pressure.md +0 -0
  198. /package/evals/fixtures/{shipping-and-launch → i3-shipping-and-launch}/launch-status.md +0 -0
  199. /package/evals/fixtures/{source-driven-development → i3-source-driven-development}/framework-task.md +0 -0
  200. /package/evals/fixtures/{spec-driven-development → i3-spec-driven-development}/billing-brief.md +0 -0
  201. /package/evals/fixtures/{test-driven-development → i3-test-driven-development}/BUG.md +0 -0
  202. /package/evals/fixtures/{test-driven-development → i3-test-driven-development}/README.md +0 -0
  203. /package/evals/fixtures/{test-driven-development → i3-test-driven-development}/package.json +0 -0
  204. /package/evals/fixtures/{test-driven-development → i3-test-driven-development}/src/split.js +0 -0
  205. /package/evals/fixtures/{test-driven-development → i3-test-driven-development}/test/split.test.js +0 -0
  206. /package/evals/fixtures/{using-agent-skills → i3-using-agent-skills}/incident.md +0 -0
  207. /package/skills/{constraint-driven-development → i3-constraint-driven-development}/references/floor-guard.md +0 -0
  208. /package/skills/{idea-refine → i3-idea-refine}/examples.md +0 -0
  209. /package/skills/{idea-refine → i3-idea-refine}/frameworks.md +0 -0
  210. /package/skills/{idea-refine → i3-idea-refine}/refinement-criteria.md +0 -0
@@ -1,5 +1,5 @@
1
1
  {
2
- "skill_name": "using-agent-skills",
2
+ "skill_name": "i3-using-agent-skills",
3
3
  "trigger": {
4
4
  "positive": [
5
5
  {
@@ -18,11 +18,11 @@
18
18
  "negative": [
19
19
  {
20
20
  "prompt": "Debug the null pointer crash in checkout",
21
- "owner": "debugging-and-error-recovery"
21
+ "owner": "i3-debugging-and-error-recovery"
22
22
  },
23
23
  {
24
24
  "prompt": "Make the modal accessible for keyboard users",
25
- "owner": "frontend-ui-engineering"
25
+ "owner": "i3-frontend-ui-engineering"
26
26
  }
27
27
  ]
28
28
  },
@@ -32,7 +32,7 @@
32
32
  "prompt": "A user asks: 'the login page is broken after yesterday's deploy'. Decide which skill applies and why.",
33
33
  "expected_output": "Correct routing through the decision tree with the chosen skill and rationale",
34
34
  "files": [
35
- "using-agent-skills"
35
+ "i3-using-agent-skills"
36
36
  ],
37
37
  "expectations": [
38
38
  "The chosen skill matches the decision tree in the meta-skill",
@@ -1,6 +1,6 @@
1
- diff --git a/git-workflow-and-versioning/app.js b/git-workflow-and-versioning/app.js
2
- --- a/git-workflow-and-versioning/app.js
3
- +++ b/git-workflow-and-versioning/app.js
1
+ diff --git a/i3-git-workflow-and-versioning/app.js b/i3-git-workflow-and-versioning/app.js
2
+ --- a/i3-git-workflow-and-versioning/app.js
3
+ +++ b/i3-git-workflow-and-versioning/app.js
4
4
  @@ -1,7 +1,15 @@
5
5
  'use strict';
6
6
 
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  type: tool_used
3
3
  tool: Skill
4
- input_match: '"skill"\s*:\s*"(?:[\w-]+:)?(code-review-and-quality|review)"'
4
+ input_match: '"skill"\s*:\s*"(?:[\w-]+:)?(i3-code-review-and-quality|review)"'
5
5
  ---
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  type: tool_used
3
3
  tool: Skill
4
- input_match: '"skill"\s*:\s*"(?:[\w-]+:)?(code-review-and-quality|review)"'
4
+ input_match: '"skill"\s*:\s*"(?:[\w-]+:)?(i3-code-review-and-quality|review)"'
5
5
  min: 0
6
6
  max: 0
7
7
  arm: both
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  type: tool_used
3
3
  tool: Skill
4
- input_match: '"skill"\s*:\s*"(?:[\w-]+:)?(test-driven-development|test)"'
4
+ input_match: '"skill"\s*:\s*"(?:[\w-]+:)?(i3-test-driven-development|test)"'
5
5
  arm: with-only
6
6
  ---
@@ -1,6 +1,6 @@
1
1
  ---
2
- description: A test-first request that belongs to test-driven-development. The review skill must not fire.
3
- expected_outcome: The reply proposes a failing test first; code-review-and-quality is never invoked.
2
+ description: A test-first request that belongs to i3-test-driven-development. The review skill must not fire.
3
+ expected_outcome: The reply proposes a failing test first; i3-code-review-and-quality is never invoked.
4
4
  max_turns: 12
5
5
  allowed_tools: [Read, Glob, Grep, Skill]
6
6
  ---
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  type: tool_used
3
3
  tool: Skill
4
- input_match: '"skill"\s*:\s*"(?:[\w-]+:)?(code-review-and-quality|review)"'
4
+ input_match: '"skill"\s*:\s*"(?:[\w-]+:)?(i3-code-review-and-quality|review)"'
5
5
  min: 0
6
6
  max: 0
7
7
  arm: both
@@ -1,6 +1,6 @@
1
1
  ---
2
- description: A pasted diff with a request that belongs to git-workflow-and-versioning. Guards the "even when the diff is pasted inline" clause of the review skill's description, since a pasted diff alone must not make the review skill fire.
3
- expected_outcome: A commit message; code-review-and-quality is never invoked.
2
+ description: A pasted diff with a request that belongs to i3-git-workflow-and-versioning. Guards the "even when the diff is pasted inline" clause of the review skill's description, since a pasted diff alone must not make the review skill fire.
3
+ expected_outcome: A commit message; i3-code-review-and-quality is never invoked.
4
4
  max_turns: 12
5
5
  allowed_tools: [Read, Glob, Grep, Skill]
6
6
  ---
@@ -1,10 +1,10 @@
1
1
  # sdd-cache hook
2
2
 
3
- Cross-session citation cache for [`source-driven-development`](../skills/source-driven-development/SKILL.md). Skips redundant `WebFetch` calls without weakening the skill's "verify against current docs" guarantee.
3
+ Cross-session citation cache for [`i3-source-driven-development`](../skills/i3-source-driven-development/SKILL.md). Skips redundant `WebFetch` calls without weakening the skill's "verify against current docs" guarantee.
4
4
 
5
5
  ## Why
6
6
 
7
- `source-driven-development` fetches official docs for every framework-specific decision. Working on the same project across sessions means fetching the same pages over and over. Caching the content as local memory would contradict the skill — docs change, and a stale cache hides that.
7
+ `i3-source-driven-development` fetches official docs for every framework-specific decision. Working on the same project across sessions means fetching the same pages over and over. Caching the content as local memory would contradict the skill — docs change, and a stale cache hides that.
8
8
 
9
9
  This hook caches fetched content on disk, but **revalidates with the origin server on every reuse** via HTTP `If-None-Match` / `If-Modified-Since`. Content is only served from cache when the server responds `304 Not Modified`, which is a fresh verification — not a memory read.
10
10
 
@@ -48,7 +48,7 @@ This hook caches fetched content on disk, but **revalidates with the origin serv
48
48
 
49
49
  2. Make sure `.claude/sdd-cache/` is in your `.gitignore` (already included in this repo).
50
50
 
51
- 3. Use `/source-driven-development` (or the skill) as usual. No changes to the skill or the agent's workflow — the cache is transparent.
51
+ 3. Use `/i3-source-driven-development` (or the skill) as usual. No changes to the skill or the agent's workflow — the cache is transparent.
52
52
 
53
53
  ## Mental model
54
54
 
@@ -1,6 +1,6 @@
1
1
  # simplify-ignore hook
2
2
 
3
- Block-level protection for `/code-simplify`. Mark code that should never be simplified — the model won't see it.
3
+ Block-level protection for `/i3-code-simplify`. Mark code that should never be simplified — the model won't see it.
4
4
 
5
5
  ## Setup
6
6
 
@@ -42,7 +42,7 @@ result[3] = buf[3] ^ key[3];
42
42
  }
43
43
  ```
44
44
 
45
- 3. Run `/code-simplify` — protected blocks become `/* BLOCK_de115a1d: perf-critical */` placeholders. The model reasons about surrounding code without seeing the protected implementation.
45
+ 3. Run `/i3-code-simplify` — protected blocks become `/* BLOCK_de115a1d: perf-critical */` placeholders. The model reasons about surrounding code without seeing the protected implementation.
46
46
 
47
47
  > **Note:** The hook stores temporary backups in `.claude/.simplify-ignore-cache/`. Make sure this path is in your `.gitignore`.
48
48
 
@@ -37,7 +37,7 @@ if (hasJq) {
37
37
  throw new Error('additionalContext is missing startup preface');
38
38
  }
39
39
  if (!ctx.includes('# Using i3 Composer Agent')) {
40
- throw new Error('additionalContext is missing using-agent-skills content');
40
+ throw new Error('additionalContext is missing i3-using-agent-skills content');
41
41
  }
42
42
  } else if (!ctx.includes('jq is required')) {
43
43
  throw new Error('additionalContext is missing jq fallback guidance');
@@ -1,6 +1,6 @@
1
1
  #!/bin/bash
2
2
  # i3-composer-agent session start hook
3
- # Injects the using-agent-skills meta-skill into a new session.
3
+ # Injects the i3-using-agent-skills meta-skill into a new session.
4
4
  #
5
5
  # Not wired by the plugin: hosts that already route skills from their
6
6
  # descriptions (Claude Code, Codex CLI) would run a second router on top of
@@ -13,7 +13,7 @@
13
13
 
14
14
  SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
15
15
  SKILLS_DIR="$(dirname "$SCRIPT_DIR")/skills"
16
- META_SKILL="$SKILLS_DIR/using-agent-skills/SKILL.md"
16
+ META_SKILL="$SKILLS_DIR/i3-using-agent-skills/SKILL.md"
17
17
 
18
18
  if ! command -v jq >/dev/null 2>&1; then
19
19
  echo '{"hookSpecificOutput": {"hookEventName": "SessionStart", "additionalContext": "i3-composer-agent: jq is required for the session-start hook but was not found on PATH. Install jq (e.g. `brew install jq` or `apt-get install jq`) to enable meta-skill injection. Skills remain available individually."}}'
@@ -29,5 +29,5 @@ if [ -f "$META_SKILL" ]; then
29
29
  $CONTENT" \
30
30
  '{hookSpecificOutput: {hookEventName: "SessionStart", additionalContext: $context}}'
31
31
  else
32
- echo '{"hookSpecificOutput": {"hookEventName": "SessionStart", "additionalContext": "i3-composer-agent: using-agent-skills meta-skill not found. Skills may still be available individually."}}'
32
+ echo '{"hookSpecificOutput": {"hookEventName": "SessionStart", "additionalContext": "i3-composer-agent: i3-using-agent-skills meta-skill not found. Skills may still be available individually."}}'
33
33
  fi
package/package.json CHANGED
@@ -82,7 +82,7 @@
82
82
  "upstreamCommit": "1401c8b8030e023baeebb31781a6653fe8e93026",
83
83
  "upstreamRepository": "https://github.com/addyosmani/agent-skills"
84
84
  },
85
- "version": "1.0.0",
85
+ "version": "2.0.0",
86
86
  "repository": {
87
87
  "type": "git",
88
88
  "url": "https://github.com/49780522/i3-composer-agent.git"
package/plugin.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "i3-composer-agent",
3
- "version": "1.0.0",
3
+ "version": "2.0.0",
4
4
  "description": "Production-grade engineering skills for AI coding agents covering the development lifecycle from spec to ship.",
5
5
  "homepage": "https://github.com/49780522/i3-composer-agent",
6
6
  "repository": "https://github.com/49780522/i3-composer-agent"
@@ -0,0 +1,47 @@
1
+ # Installation wizard correction
2
+
3
+ The published 1.0.0 CLI prepares plugin files but does not implement the
4
+ installation wizard previously described to the user. Restore the promised
5
+ installation flow, including the user's confirmed multiple-tool selection and
6
+ CodeBuddy desktop IDE target.
7
+
8
+ ## Acceptance contract
9
+
10
+ - Running the package in an interactive terminal opens a tool multi-select,
11
+ project/global scope selection, destination summary, and confirmation.
12
+ - Host flags preselect tools rather than silently preparing a plugin. The tool
13
+ catalog preserves the installation paths from the pinned Vercel Skills CLI
14
+ registry; CodeBuddy, Codex, Claude Code, Cursor and other tools remain choices.
15
+ - Native installation copies all skills and their shared references. CodeBuddy
16
+ and Claude Code also receive the nine existing command workflows and personas.
17
+ Portable command references use the installed i3- Skill IDs. Prefix migration
18
+ follows PREFIX-SPEC.md, with backups and rollback for owned legacy paths.
19
+ - Shared destinations are installed once when several tools use the same path.
20
+ - Existing assets require confirmed replacement and are retained in backups.
21
+ Unrelated settings and project files are untouched. Failed installation rolls
22
+ back completed writes; cancellation and dry runs write nothing.
23
+ - `--prepare`, `--extract`, and existing explicit `--dir` calls retain complete
24
+ plugin preparation. Plain `--version` remains machine-readable.
25
+ - Noninteractive installation requires explicit tools, scope and `--yes`;
26
+ replacement additionally requires `--force`.
27
+ - Packaging tests exercise the shipped CLI; a real terminal session verifies
28
+ the wizard. File discovery and actual model execution are separate evidence.
29
+
30
+ ## Implementation and verification
31
+
32
+ Keep upstream content unchanged on `agent/source`; all fork changes live under
33
+ `rebrand/`. Distribution modules and tests are replayed from `rebrand/overlay/`.
34
+ Use Node.js built-ins and the existing `node:test` conventions. No new runtime
35
+ dependency is required. Keep the upstream baseline at 0.6.12 and the release
36
+ version at 1.0.0 during development. Recommend and obtain the user's approval
37
+ for a new release version before changing it or publishing.
38
+
39
+ On 2026-10-07 the user accepted the recommended 1.0.1 correction release and
40
+ authorized publication. The upstream baseline remains 0.6.12.
41
+
42
+ Slices: first prove native multi-tool installation fails on the published CLI;
43
+ then implement directory planning and copying; then add the interactive flow;
44
+ finally verify conflicts, rollback, package extraction and terminal execution.
45
+
46
+ Commands: `node --test tests/installer.test.cjs`, `npm test`, `npm run validate`,
47
+ `npm run rebrand:check`, and `npm pack` in a generated branded candidate.
@@ -91,15 +91,17 @@ npm pack --pack-destination ../releases/next
91
91
  - `overlay/`:本项目的 npm CLI、发行测试、品牌校验和发行 CI;上游相关文件改变时需合并审查。
92
92
  - `templates/`:品牌 README 和安装指南;上游对应说明改变时同步模板。
93
93
  - 目录数量、Skill 表、命令表和插件描述由已记录的目录生成,不固定为 25/9。
94
- - Skill frontmatter 保留原文;校验比较换行规范化后的哈希,兼容 LF/CRLF 检出。
94
+ - 源码保留上游 Skill 名称;品牌版 Skill 和命令使用 i3- 前缀,按 PREFIX-SPEC.md 重放。
95
+ - Skill frontmatter 只映射 name;还原 name 后比较换行规范化的上游哈希,兼容 LF/CRLF。
95
96
  - LICENSE、NOTICE、真实上游链接、历史评估说明和标准名称保留。
96
97
  - 如果上游新增根 package.json,重放会失败,先适配分发配置和依赖再继续。
97
98
 
98
99
  ## 发布及验收
99
100
 
100
- 维护流程与安装能力分开验收。当前 npm CLI 准备文件并打印宿主注册命令;
101
+ 维护流程与安装能力分开验收。默认 npm CLI 使用多工具安装向导;`--prepare`
102
+ 保留完整插件准备和宿主注册提示。两种模式分别验收,不把准备文件等同于安装。
101
103
  实际宿主安装范围、启用、命令执行以及交互向导仍需各自验证。
102
- Codex 的生命周期斜杠命令适配是独立工作,已有 Skill ID 不因维护流程改名。
104
+ Codex 的生命周期斜杠命令适配是独立工作;原生 Skill 通过 $i3-<名称> 调用。
103
105
 
104
106
  发布审核通过后,发布已经测过的 tarball,先使用试用标签,完成 registry 安装验证后再更新 latest:
105
107
 
package/rebrand/NOTICE.md CHANGED
@@ -5,5 +5,11 @@ i3 Composer Agent is a branded distribution of
5
5
  The initial distribution is based on upstream commit `1401c8b` (version 0.6.12).
6
6
 
7
7
  The original MIT license and copyright notice are preserved in LICENSE.
8
- Givolt maintains the branding, npm distribution, and bundle preparation CLI.
9
- The original skill IDs, command workflows, and persona definitions are retained.
8
+ Givolt maintains the branding, npm distribution, and installation CLI.
9
+ Skill IDs and command filenames use an i3- prefix in this distribution.
10
+ The original command workflows and persona definitions are retained.
11
+
12
+ The tool installation directory presets in `bin/agent-targets.json` are adapted
13
+ from Vercel's [Skills CLI registry](https://github.com/vercel-labs/skills/blob/48dc9e8eb8aa19040e91cb90ba0b642c9cbad57e/src/agents.ts)
14
+ at commit `48dc9e8eb8aa19040e91cb90ba0b642c9cbad57e`. Copyright (c) 2026
15
+ Vercel, Inc. Its MIT license is retained in `bin/skills-registry.LICENSE`.
@@ -0,0 +1,16 @@
1
+ # i3 command and Skill identifiers
2
+
3
+ The user approved applying the existing i3 naming convention on 2026-10-07.
4
+ This supersedes the earlier preservation of unprefixed distribution identifiers.
5
+
6
+ - `agent/source` keeps upstream files and identifiers unchanged. Changes live in `rebrand/`.
7
+ - Branded Skill directories and YAML `name` fields use `i3-<upstream-id>`.
8
+ - All three command directories use `i3-<upstream-stem>` filenames, retaining the existing `plan`/`planning` host mapping.
9
+ - Native commands include `/i3-spec` and `/i3-build`; plugin commands include `/i3-composer-agent:i3-spec`.
10
+ - Rewrite local references, hooks, routing fixtures and documentation together. Preserve external upstream links, attribution, and Skill frontmatter other than `name`.
11
+ - Retain helper script filenames and executable permissions when their containing Skill directory is renamed.
12
+ - Replay and validation accept only a complete reviewed source catalog or its mapped branded catalog. Replaying branded output is idempotent.
13
+ - Installation migrates only legacy Skill/command paths listed in this package's prior installation manifest. Back up retired paths and support rollback. Unowned commands and skills remain in place.
14
+ - Verify source tests, branded validation/tests, routing/hooks, packed CLI installation, migration, rollback and the actual project installation. IDE discovery and model execution require separate host verification.
15
+
16
+ Release 2.0.0 applies this breaking identifier change. The user authorized publication on 2026-10-07. Publish and verify the reviewed new-version tarball; previously published tarballs remain immutable. The upstream baseline stays at 0.6.12.
@@ -8,7 +8,7 @@
8
8
  - `agent/source` 保留上游原始名称和源码,在 `rebrand/` 保存本项目的分发工具与转换规则。
9
9
  - 候选从 `agent/source` 创建,在候选中重放;`main` 保存经过验证的品牌快照。
10
10
  - GSD 仓库只读,不使用它的源码、分支或安装产物。
11
- - Skill ID、流程命令内容、Persona、参考文件和 MIT 来源署名保持既有契约。
11
+ - 源码保留上游 Skill ID;品牌版按 PREFIX-SPEC.md 使用 i3- 前缀。流程内容、Persona、参考文件和 MIT 来源署名保持。
12
12
  - 本次完善源码同步和品牌重放;交互安装向导、Codex 命令适配及新的 npm 发布独立处理。
13
13
 
14
14
  ## 实现与命令
@@ -24,7 +24,7 @@
24
24
  1. 从干净上游源码及本项目规则能生成完整品牌包,重复重放不产生差异。
25
25
  2. 在 `agent/source` 上执行写入式重放必须失败且不修改源码。
26
26
  3. 记录上游新增 Skill/Command 后能生成相应清单和说明;删失或改写已记录 Skill ID 时校验失败。
27
- 4. 上游的 25 个 Skill frontmatter、24 个非元 Skill、4 个 Persona、7 个共享参考保持原始内容;9 个流程只变品牌命名空间。
27
+ 4. 品牌版的 Skill name、目录和命令文件名统一使用 i3-;frontmatter 的其他字段、Persona、共享参考和流程契约保持。
28
28
  5. 本地候选通过完整测试,并从打包结果运行 CLI 与校验。
29
29
  6. 独立品牌仓库中的源/发行分支及远程关系正确;首次发布标签保持原来的 0.6.12 提交。
30
30
 
@@ -11,8 +11,8 @@
11
11
 
12
12
  ## 品牌候选
13
13
 
14
- - Skill、命令、Persona、references 和全部已记录普通运行文件与上游目录一致。
15
- - Skill frontmatter 的名称和字段内容保持;换行差异不作为字段变更。
14
+ - Skill 和命令路径按 PREFIX-SPEC.md 映射为 i3- 名称;其余已记录运行文件保持目录一致。
15
+ - Skill frontmatter 只改 name;逆向映射 name 后比较上游哈希,换行差异不作为字段变更。
16
16
  - 新增上游 Skill/Command 能进入目录、品牌说明和打包;缺失内容会失败。
17
17
  - 文字补丁失去匹配时必须失败,不能静默遗漏。
18
18
  - 重放后 --check 成功,完整 Node、路由与 hook 检查通过。
@@ -26,3 +26,7 @@
26
26
  源或包校验不等于 registry 发布,也不等于实际宿主启用和模型执行。
27
27
  英文确定性 TF-IDF 路由分数不能代替中文或真实模型行为验收。
28
28
  安装向导、宿主范围、升级和移除沿用安装遗漏审计的独立验收项。
29
+
30
+ 交互安装修复必须覆盖多工具选择、项目/全局目录、共享 references、命令与
31
+ Persona 文件、冲突保护、备份、失败回滚和取消不写入。对打包后的 CLI 运行
32
+ 真实终端向导,不能用 bundle 准备测试代替;安装文件也不等于 IDE 或模型验收。
@@ -2,9 +2,9 @@
2
2
 
3
3
  本规则已经用户确认,仅适用于 i3 Composer Agent 仓库。
4
4
 
5
- | 信息 | 权威来源 | 本次确认值 |
5
+ | 信息 | 权威来源 | 当前发行值 |
6
6
  | --- | --- | --- |
7
- | i3 发行版本 | brand.json 的 releaseVersion | 1.0.0 |
7
+ | i3 发行版本 | brand.json 的 releaseVersion | 2.0.0 |
8
8
  | 上游版本 | upstream.json 的 upstreamVersion | 0.6.12 |
9
9
  | 上游提交 | upstream.json 的 upstreamCommit | 1401c8b8030e023baeebb31781a6653fe8e93026 |
10
10
 
@@ -20,13 +20,16 @@ package.json 的 i3ComposerAgent 来源字段。package.template.json 不保存
20
20
  README、CLI 帮助和准备完成提示显示:
21
21
 
22
22
  ```text
23
- i3 Composer Agent v1.0.0
23
+ i3 Composer Agent v2.0.0
24
24
  Based on agent-skills v0.6.12
25
25
  ```
26
26
 
27
- 在上述例子中,--version 输出 1.0.0,保留脚本使用的单一版本格式。--dry-run 的 JSON
27
+ 在上述例子中,--version 输出 2.0.0,保留脚本使用的单一版本格式。--dry-run 的 JSON
28
28
  分别提供 version、upstreamVersion、upstreamCommit。
29
29
 
30
30
  已经发布的 @givolt/i3-composer-agent@0.6.12 及其 Git 标签作为历史记录保留。
31
31
  之前的 0.6.13 是未发布候选,新的独立版本候选替代它。
32
- 1.0.0 的源码与打包验证不代表 npm 发布;发布仍按 MAINTENANCE.md 单独执行。
32
+ 1.0.0 已发布。1.0.1 用于修复安装向导遗漏,版本与发布已由用户确认。
33
+ 2.0.0 为命令和 Skill 的 i3- 前缀变更;使用者需要调整调用名,因此递增 major。
34
+ 用户于 2026-10-07 要求修改并授权发布;上游版本和提交保持不变。
35
+ 源码与打包验证不代表 npm 发布;发布仍按 MAINTENANCE.md 单独执行。
package/rebrand/apply.cjs CHANGED
@@ -5,6 +5,7 @@ const fs = require('node:fs');
5
5
  const path = require('node:path');
6
6
  const { spawnSync } = require('node:child_process');
7
7
  const { validateCatalog, frontmatter } = require('./catalog.cjs');
8
+ const { skillId, runtimePath, rewriteReferences } = require('./identifiers.cjs');
8
9
  const brand = require('./brand.json');
9
10
  const upstream = require('./upstream.json');
10
11
  const root = path.resolve(__dirname, '..');
@@ -20,7 +21,24 @@ if (mode === '--apply') {
20
21
  process.exit(1);
21
22
  }
22
23
  }
23
- const inventory = validateCatalog(root, upstream);
24
+ const branded = fs.existsSync(path.join(root, 'skills', skillId(upstream.skills[0])));
25
+ validateCatalog(root, upstream, { branded });
26
+ const inventory = upstream;
27
+ const renames = new Map();
28
+ if (!branded) {
29
+ for (const id of inventory.skills) renames.set(`skills/${id}`, `skills/${skillId(id)}`);
30
+ for (const file of inventory.runtimeFiles.filter(file => /^(?:\.claude\/commands|\.gemini\/commands|commands)\/[^/]+\.(?:md|toml)$/.test(file))) renames.set(file, runtimePath(file));
31
+ for (const target of renames.values()) if (fs.existsSync(path.join(root, target))) throw new Error(`Brand destination already exists: ${target}`);
32
+ }
33
+ for (const id of inventory.skills) {
34
+ for (const file of [`evals/cases/${id}.json`, `evals/fixtures/${id}`]) {
35
+ if (fs.existsSync(path.join(root, file))) {
36
+ const target = runtimePath(file);
37
+ if (fs.existsSync(path.join(root, target))) throw new Error(`Brand destination already exists: ${target}`);
38
+ renames.set(file, target);
39
+ }
40
+ }
41
+ }
24
42
  const packageFile = path.join(root, 'package.json');
25
43
  if (fs.existsSync(packageFile) && JSON.parse(fs.readFileSync(packageFile, 'utf8')).name !== brand.npmName) {
26
44
  console.error('Upstream package.json now exists; explicitly adapt the distribution overlay before replaying.');
@@ -30,6 +48,7 @@ const changes = new Map();
30
48
  function update(relative, content) {
31
49
  const file = path.join(root, relative);
32
50
  if (!fs.existsSync(file) || fs.readFileSync(file, 'utf8') !== content) changes.set(relative, content);
51
+ else changes.delete(relative);
33
52
  }
34
53
  function transform(content, relative) {
35
54
  const head = /^skills\/[^/]+\/SKILL\.md$/.test(relative) ? frontmatter(content) : '';
@@ -43,7 +62,7 @@ function transform(content, relative) {
43
62
  .replaceAll('addy-agent-skills', brand.name)
44
63
  .replaceAll('agent-skills@addy-agent-skills', `${brand.name}@${brand.name}`)
45
64
  .replaceAll('agent-skills@agent-skills', `${brand.name}@${brand.name}`)
46
- .replaceAll('agent-skills:', `${brand.name}:`)
65
+ .replace(/(?<![\w-])agent-skills:/g, `${brand.name}:`)
47
66
  .replaceAll('/path/to/agent-skills', `/path/to/${brand.name}`)
48
67
  .replaceAll('./agent-skills', `./${brand.name}`)
49
68
  .replace(/(?<![\w/.-])agent-skills(?![\w-])/g, brand.name)
@@ -74,7 +93,9 @@ function transform(content, relative) {
74
93
  .replace(/\[[^\]]+\]\(https:\/\/github\.com\/addyosmani\/agent-skills\/issues\/(\d+)\)/g,
75
94
  (_, issue) => `[upstream agent-skills #${issue}](https://github.com/addyosmani/agent-skills/issues/${issue})`);
76
95
  }
77
- return head + result;
96
+ const name = head.match(/^name:\s*([^\s]+)\s*$/m)?.[1];
97
+ const brandedHead = name && inventory.skills.includes(name) ? head.replace(/^name:.*$/m, `name: ${skillId(name)}`) : head;
98
+ return brandedHead + rewriteReferences(result, false, inventory, !relative.startsWith('scripts/'));
78
99
  }
79
100
  const skipDirectories = new Set(['.git', 'node_modules', 'rebrand', 'dist', 'tests', 'bin']);
80
101
  const skipFiles = new Set(['LICENSE', 'NOTICE.md', 'CHANGELOG.md', 'package.json', 'README.md', 'evals/README.md', 'evals/skill-impact.md', 'docs/comparison.md', 'scripts/validate-brand.cjs', 'scripts/lib/skill-lint.js', 'scripts/lib/skill-lint-test.js']);
@@ -83,7 +104,7 @@ function walk(directory, prefix = '') {
83
104
  const relative = prefix ? `${prefix}/${entry.name}` : entry.name;
84
105
  if (entry.isDirectory()) {
85
106
  if (!skipDirectories.has(entry.name) && !relative.startsWith('evals/results')) walk(path.join(directory, entry.name), relative);
86
- } else if (entry.isFile() && !skipFiles.has(relative) && /\.(?:md|js|cjs|sh|toml|yml)$/.test(entry.name)) {
107
+ } else if (entry.isFile() && !skipFiles.has(relative) && /\.(?:md|js|cjs|sh|toml|yml|json|patch|diff)$/.test(entry.name)) {
87
108
  const original = fs.readFileSync(path.join(root, relative), 'utf8');
88
109
  update(relative, transform(original, relative));
89
110
  }
@@ -116,7 +137,7 @@ for (const relative of ['plugin.json', '.claude-plugin/plugin.json', '.codex-plu
116
137
  manifest.interface.developerName = brand.maintainer;
117
138
  manifest.interface.shortDescription = 'Engineering workflow skills';
118
139
  manifest.interface.longDescription = `${brand.displayName} packages ${inventory.skills.length} engineering skills from Addy Osmani's Agent Skills, covering requirements, planning, implementation, testing, review, and shipping.`;
119
- manifest.interface.defaultPrompt = manifest.interface.defaultPrompt.map(prompt => prompt.replaceAll('Agent Skills', brand.displayName));
140
+ manifest.interface.defaultPrompt = manifest.interface.defaultPrompt.map(prompt => rewriteReferences(prompt.replaceAll('Agent Skills', brand.displayName)));
120
141
  }
121
142
  update(relative, JSON.stringify(manifest, null, 2) + '\n');
122
143
  }
@@ -164,7 +185,8 @@ pkg.i3ComposerAgent.upstreamRepository = brand.upstream;
164
185
  update('package.json', JSON.stringify(pkg, null, 2) + '\n');
165
186
  update('NOTICE.md', fs.readFileSync(path.join(__dirname, 'NOTICE.md'), 'utf8'));
166
187
  function description(relative) {
167
- const head = fs.readFileSync(path.join(root, relative), 'utf8').match(/^---\r?\n([\s\S]*?)\r?\n---/)?.[1] || '';
188
+ const file = path.join(root, branded ? runtimePath(relative) : relative);
189
+ const head = fs.readFileSync(file, 'utf8').match(/^---\r?\n([\s\S]*?)\r?\n---/)?.[1] || '';
168
190
  return (head.match(/^description:\s*(.*)$/m)?.[1] || '').replace(/^["']|["']$/g, '').replaceAll('|', '\\|');
169
191
  }
170
192
  const values = {
@@ -173,8 +195,8 @@ const values = {
173
195
  SKILL_COUNT: inventory.skills.length,
174
196
  COMMAND_COUNT: inventory.commands.length,
175
197
  PERSONA_COUNT: inventory.personas.length,
176
- SKILL_TABLE: inventory.skills.map(id => `| [${id}](skills/${id}/SKILL.md) | ${description(`skills/${id}/SKILL.md`)} |`).join('\n'),
177
- COMMAND_TABLE: inventory.commands.map(id => `| /${brand.name}:${id} | ${description(`.claude/commands/${id}.md`)} |`).join('\n'),
198
+ SKILL_TABLE: inventory.skills.map(id => `| [${skillId(id)}](skills/${skillId(id)}/SKILL.md) | ${description(`skills/${id}/SKILL.md`)} |`).join('\n'),
199
+ COMMAND_TABLE: inventory.commands.map(id => `| /${brand.name}:${skillId(id)} | ${description(`.claude/commands/${id}.md`)} |`).join('\n'),
178
200
  };
179
201
  for (const [relative, template] of [
180
202
  ['README.md', 'README.md'], ['docs/codex-setup.md', 'codex-setup.md'], ['docs/codebuddy-setup.md', 'codebuddy-setup.md'],
@@ -190,5 +212,6 @@ if (mode === '--apply') for (const [relative, content] of changes) {
190
212
  fs.writeFileSync(path.join(root, relative), content);
191
213
  }
192
214
  if (mode === '--apply') fs.chmodSync(path.join(root, 'bin/i3-composer-agent.cjs'), 0o755);
193
- console.log(JSON.stringify({ mode, changedFiles: [...changes.keys()] }, null, 2));
194
- if (mode === '--check' && changes.size) process.exitCode = 1;
215
+ if (mode === '--apply') for (const [source, target] of renames) fs.renameSync(path.join(root, source), path.join(root, target));
216
+ console.log(JSON.stringify({ mode, changedFiles: [...changes.keys()], renamedPaths: Object.fromEntries(renames) }, null, 2));
217
+ if (mode === '--check' && (changes.size || renames.size)) process.exitCode = 1;
@@ -9,5 +9,5 @@
9
9
  "repository": "https://github.com/49780522/i3-composer-agent",
10
10
  "sourceBranch": "agent/source",
11
11
  "releaseBranch": "main",
12
- "releaseVersion": "1.0.0"
12
+ "releaseVersion": "2.0.0"
13
13
  }
@@ -4,6 +4,7 @@ const fs = require('node:fs');
4
4
  const path = require('node:path');
5
5
  const crypto = require('node:crypto');
6
6
  const assert = require('node:assert/strict');
7
+ const { skillId, runtimePath } = require('./identifiers.cjs');
7
8
  const runtimeRoots = ['skills', 'references', 'agents', 'commands', '.claude/commands', '.gemini/commands', 'hooks', '.claude-plugin', '.codex-plugin', '.agents/plugins'];
8
9
  const runtimeFiles = ['plugin.json', 'LICENSE'];
9
10
 
@@ -46,10 +47,23 @@ function catalog(root) {
46
47
  for (const name of runtimeFiles) if (fs.existsSync(path.join(root, name))) files.push(name);
47
48
  return describe(files, file => fs.readFileSync(path.join(root, file), 'utf8'));
48
49
  }
49
- function validateCatalog(root, expected) {
50
+ function validateCatalog(root, expected, { branded = false } = {}) {
50
51
  const actual = catalog(root);
52
+ const mapped = branded ? {
53
+ ...expected,
54
+ skills: expected.skills.map(skillId),
55
+ commands: expected.commands.map(skillId),
56
+ runtimeFiles: expected.runtimeFiles.map(file => runtimePath(file, false, expected)).sort(),
57
+ skillFrontmatter: Object.fromEntries(expected.skills.map(id => {
58
+ const name = skillId(id);
59
+ const head = frontmatter(fs.readFileSync(path.join(root, 'skills', name, 'SKILL.md'), 'utf8'));
60
+ const normalized = head.replace(new RegExp(`^name:.*$`, 'm'), `name: ${id}`).replace(/\r\n/g, '\n');
61
+ actual.skillFrontmatter[name] = crypto.createHash('sha256').update(normalized).digest('hex');
62
+ return [name, expected.skillFrontmatter[id]];
63
+ })),
64
+ } : expected;
51
65
  for (const field of ['skills', 'commands', 'personas', 'references', 'runtimeFiles', 'skillFrontmatter']) {
52
- assert.deepEqual(actual[field], expected[field], `upstream preservation failed: ${field}`);
66
+ assert.deepEqual(actual[field], mapped[field], `upstream preservation failed: ${field}`);
53
67
  }
54
68
  return actual;
55
69
  }
@@ -1,4 +1,19 @@
1
1
  [
2
+ {
3
+ "file": "scripts/lib/skill-lint.js",
4
+ "from": "const SECTION_EXEMPT_SKILLS = {",
5
+ "to": "const SECTION_EXEMPT_SKILLS = {\n 'i3-using-agent-skills': 'Branded alias of the reviewed upstream meta-skill.',\n 'i3-idea-refine': 'Branded alias of the reviewed upstream legacy structure.',"
6
+ },
7
+ {
8
+ "file": "scripts/validate-artifact-paths.js",
9
+ "from": "function findViolations(relPath) {",
10
+ "to": "GUARDED_FILES.push(...GUARDED_FILES.filter(relative => /(?:^|\\/)commands\\//.test(relative)).map(relative => relative.replace(/(commands\\/)([^/]+)(\\.md|\\.toml)$/, '$1i3-$2$3')));\n\nfunction findViolations(relPath) {"
11
+ },
12
+ {
13
+ "file": "scripts/validate-commands.js",
14
+ "from": " plan: 'planning',",
15
+ "to": " plan: 'planning',\n 'i3-plan': 'i3-planning',"
16
+ },
2
17
  {
3
18
  "file": "scripts/validate-versions.js",
4
19
  "from": "const manifestPaths = [\n \"plugin.json\",",
@@ -0,0 +1,41 @@
1
+ 'use strict';
2
+
3
+ const upstream = require('./upstream.json');
4
+ const prefix = 'i3-';
5
+ const skillId = id => prefix + id;
6
+ const escape = value => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
7
+
8
+ function runtimePath(relative, reverse = false, inventory = upstream) {
9
+ const skills = new Map(inventory.skills.map(id => reverse ? [skillId(id), id] : [id, skillId(id)]));
10
+ relative = relative.replace(/^(skills|evals\/fixtures)\/([^/]+)(?=\/|$)/, (match, folder, id) => skills.has(id) ? `${folder}/${skills.get(id)}` : match);
11
+ relative = relative.replace(/^evals\/cases\/([^/]+)\.json$/, (match, id) => skills.has(id) ? `evals/cases/${skills.get(id)}.json` : match);
12
+ const commands = inventory.runtimeFiles.filter(file => /^(?:\.claude\/commands|\.gemini\/commands|commands)\/[^/]+\.(?:md|toml)$/.test(file));
13
+ for (const file of commands) {
14
+ const branded = file.replace(/([^/]+)\.(md|toml)$/, `${prefix}$1.$2`);
15
+ if (relative === (reverse ? branded : file)) return reverse ? file : branded;
16
+ }
17
+ return relative;
18
+ }
19
+
20
+ function rewriteReferences(content, reverse = false, inventory = upstream, commandReferences = true) {
21
+ const skills = new Map(inventory.skills.map(id => reverse ? [skillId(id), id] : [id, skillId(id)]));
22
+ const names = [...new Set([...inventory.commands, ...inventory.runtimeFiles.filter(file => /commands\/[^/]+\.toml$/.test(file)).map(file => file.split('/').at(-1).slice(0, -5))])];
23
+ const commands = new Map(names.map(id => reverse ? [prefix + id, id] : [id, prefix + id]));
24
+ const skillPattern = new RegExp(`(?<![\\w-])(${[...skills.keys()].map(escape).join('|')})(?![\\w-]|\\.(?:sh|py|js|cjs)\\b)`, 'g');
25
+ const commandPattern = [...commands.keys()].map(escape).join('|');
26
+ const slash = new RegExp(`(?<![\\w/.-])/(${commandPattern})(?![\\w-])`, 'g');
27
+ const filenames = new RegExp(`(commands/)(${commandPattern})\\.(md|toml)\\b`, 'g');
28
+ const namespace = new RegExp(`((?:agent-skills|i3-composer-agent|\\$\\{name\\}):)(${commandPattern})(?![\\w-])`, 'g');
29
+ // External links refer to the upstream repository's original paths.
30
+ return content.split(/(https?:\/\/[^\s)'"<>`]+)/g).map(part => {
31
+ if (/^https?:\/\//.test(part)) return part;
32
+ part = part.replace(skillPattern, match => skills.get(match));
33
+ if (!commandReferences) return part;
34
+ return part
35
+ .replace(slash, (_, id) => '/' + commands.get(id))
36
+ .replace(filenames, (_, folder, id, extension) => `${folder}${commands.get(id)}.${extension}`)
37
+ .replace(namespace, (_, scope, id) => scope + commands.get(id));
38
+ }).join('');
39
+ }
40
+
41
+ module.exports = { prefix, skillId, runtimePath, rewriteReferences };
@@ -1,6 +1,34 @@
1
1
  # i3 Composer Agent changes
2
2
 
3
- ## 1.0.0 — Unreleased
3
+ ## 2.0.0 — 2026-10-07
4
+
5
+ Upstream baseline: agent-skills 0.6.12 at commit 1401c8b8030e023baeebb31781a6653fe8e93026.
6
+
7
+ ### Changed
8
+
9
+ - Commands and Skill IDs use the `i3-` prefix, such as `/i3-spec` and `$i3-spec-driven-development`.
10
+ - Native upgrades back up and retire this package's manifest-owned unprefixed paths. Unowned entries remain in place; failed migrations roll back.
11
+ - Local command references, hooks, routing fixtures and setup documentation follow the renamed identifiers.
12
+
13
+ ### Migration
14
+
15
+ - Replace `/spec`, `/plan`, `/build` and other lifecycle calls with `/i3-spec`, `/i3-plan`, `/i3-build` and their prefixed equivalents. Plugin calls use `/i3-composer-agent:i3-<command>`.
16
+ - Replace Skill calls such as `$spec-driven-development` with `$i3-spec-driven-development`.
17
+ - Upgrade with `npx @givolt/i3-composer-agent@2.0.0 --codebuddy`, confirm replacement, then reload the host. The installer backs up manifest-owned legacy entries before retiring them.
18
+ - Keep using the pinned 1.0.1 package if a consuming workflow needs the old identifiers. Existing published versions remain available.
19
+
20
+ ## 1.0.1 — 2026-10-07
21
+
22
+ Upstream baseline: agent-skills 0.6.12 at commit 1401c8b8030e023baeebb31781a6653fe8e93026.
23
+
24
+ ### Fixed
25
+
26
+ - Restore the promised terminal installation wizard with multiple tool selection, project/global scope, a destination summary and confirmation.
27
+ - Install complete native skill files and shared references; include short lifecycle commands and personas for CodeBuddy and Claude Code.
28
+ - Protect existing assets with confirmed replacement, backups and rollback on installation failure.
29
+ - Retain complete plugin preparation with --prepare and existing explicit --dir calls.
30
+
31
+ ## 1.0.0 — 2026-10-07
4
32
 
5
33
  Upstream baseline: agent-skills 0.6.12 at commit 1401c8b8030e023baeebb31781a6653fe8e93026.
6
34