@einja/dev-cli 0.1.40 → 0.1.44

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 (207) hide show
  1. package/README.md +89 -1
  2. package/dist/cli.js +1 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/init.d.ts.map +1 -1
  5. package/dist/commands/init.js +71 -1
  6. package/dist/commands/init.js.map +1 -1
  7. package/dist/commands/list.js.map +1 -1
  8. package/dist/commands/sync.d.ts.map +1 -1
  9. package/dist/commands/sync.js +187 -13
  10. package/dist/commands/sync.js.map +1 -1
  11. package/dist/commands/task-loop/lib/github-client.test.js.map +1 -1
  12. package/dist/commands/task-loop/lib/vibe-kanban-rest-client.js +2 -2
  13. package/dist/commands/task-loop/lib/vibe-kanban-rest-client.js.map +1 -1
  14. package/dist/lib/dependency-checker.d.ts.map +1 -1
  15. package/dist/lib/merger.d.ts +12 -0
  16. package/dist/lib/merger.d.ts.map +1 -1
  17. package/dist/lib/merger.js +28 -0
  18. package/dist/lib/merger.js.map +1 -1
  19. package/dist/lib/preset-update/cli-repo-detector.d.ts.map +1 -1
  20. package/dist/lib/preset-update/file-copier.d.ts.map +1 -1
  21. package/dist/lib/preset-update/file-copier.js +3 -3
  22. package/dist/lib/preset-update/file-copier.js.map +1 -1
  23. package/dist/lib/preset-update/preset-finder.d.ts.map +1 -1
  24. package/dist/lib/preset.d.ts.map +1 -1
  25. package/dist/lib/sync/category-validator.d.ts +1 -1
  26. package/dist/lib/sync/category-validator.d.ts.map +1 -1
  27. package/dist/lib/sync/category-validator.js +2 -1
  28. package/dist/lib/sync/category-validator.js.map +1 -1
  29. package/dist/lib/sync/category-validator.test.js +3 -1
  30. package/dist/lib/sync/category-validator.test.js.map +1 -1
  31. package/dist/lib/sync/conflict-reporter.d.ts.map +1 -1
  32. package/dist/lib/sync/diff-engine.d.ts.map +1 -1
  33. package/dist/lib/sync/file-filter.d.ts.map +1 -1
  34. package/dist/lib/sync/file-filter.js +1 -0
  35. package/dist/lib/sync/file-filter.js.map +1 -1
  36. package/dist/lib/sync/integration.test.js +255 -69
  37. package/dist/lib/sync/integration.test.js.map +1 -1
  38. package/dist/lib/sync/json-processor.d.ts +4 -4
  39. package/dist/lib/sync/json-processor.d.ts.map +1 -1
  40. package/dist/lib/sync/json-processor.js +11 -11
  41. package/dist/lib/sync/json-processor.js.map +1 -1
  42. package/dist/lib/sync/marker-processor.d.ts +60 -8
  43. package/dist/lib/sync/marker-processor.d.ts.map +1 -1
  44. package/dist/lib/sync/marker-processor.js +117 -26
  45. package/dist/lib/sync/marker-processor.js.map +1 -1
  46. package/dist/lib/sync/marker-processor.test.js +261 -40
  47. package/dist/lib/sync/marker-processor.test.js.map +1 -1
  48. package/dist/lib/sync/metadata-manager.d.ts +4 -0
  49. package/dist/lib/sync/metadata-manager.d.ts.map +1 -1
  50. package/dist/lib/sync/metadata-manager.js +15 -0
  51. package/dist/lib/sync/metadata-manager.js.map +1 -1
  52. package/dist/lib/sync/metadata-manager.test.js +69 -0
  53. package/dist/lib/sync/metadata-manager.test.js.map +1 -1
  54. package/dist/lib/sync/orphan-cleaner.d.ts +29 -0
  55. package/dist/lib/sync/orphan-cleaner.d.ts.map +1 -0
  56. package/dist/lib/sync/orphan-cleaner.js +80 -0
  57. package/dist/lib/sync/orphan-cleaner.js.map +1 -0
  58. package/dist/lib/sync/orphan-cleaner.test.d.ts +2 -0
  59. package/dist/lib/sync/orphan-cleaner.test.d.ts.map +1 -0
  60. package/dist/lib/sync/orphan-cleaner.test.js +169 -0
  61. package/dist/lib/sync/orphan-cleaner.test.js.map +1 -0
  62. package/dist/lib/sync/project-private-synchronizer.d.ts +52 -0
  63. package/dist/lib/sync/project-private-synchronizer.d.ts.map +1 -0
  64. package/dist/lib/sync/project-private-synchronizer.js +110 -0
  65. package/dist/lib/sync/project-private-synchronizer.js.map +1 -0
  66. package/dist/lib/sync/project-private-synchronizer.test.d.ts +2 -0
  67. package/dist/lib/sync/project-private-synchronizer.test.d.ts.map +1 -0
  68. package/dist/lib/sync/project-private-synchronizer.test.js +348 -0
  69. package/dist/lib/sync/project-private-synchronizer.test.js.map +1 -0
  70. package/dist/types/index.d.ts +1 -0
  71. package/dist/types/index.d.ts.map +1 -1
  72. package/dist/types/sync.d.ts +36 -6
  73. package/dist/types/sync.d.ts.map +1 -1
  74. package/dist/types/sync.js +2 -2
  75. package/dist/types/sync.js.map +1 -1
  76. package/package.json +5 -4
  77. package/presets/default/.claude/agents/einja/Explore.md +140 -0
  78. package/presets/default/.claude/agents/einja/backend-architect.md +21 -1
  79. package/presets/default/.claude/agents/einja/codex-agent.md +5 -1
  80. package/presets/default/.claude/agents/einja/design-engineer.md +5 -1
  81. package/presets/default/.claude/agents/einja/docs/docs-updater.md +7 -93
  82. package/presets/default/.claude/agents/einja/frontend-architect.md +21 -1
  83. package/presets/default/.claude/agents/einja/frontend-coder.md +5 -1
  84. package/presets/default/.claude/agents/einja/{specs/spec-design-generator.md → issue-specs/design-generator.md} +16 -8
  85. package/presets/default/.claude/agents/einja/{specs/spec-qa-generator.md → issue-specs/qa-generator.md} +10 -4
  86. package/presets/default/.claude/agents/einja/{specs/spec-requirements-generator.md → issue-specs/requirements-generator.md} +9 -6
  87. package/presets/default/.claude/agents/einja/{specs/spec-tasks-generator.md → issue-specs/tasks-generator.md} +19 -16
  88. package/presets/default/.claude/agents/einja/{specs/spec-tasks-validator.md → issue-specs/tasks-validator.md} +13 -9
  89. package/presets/default/.claude/agents/einja/issue-specs/ui-design-generator.md +114 -0
  90. package/presets/default/.claude/agents/einja/task/task-executer.md +64 -116
  91. package/presets/default/.claude/agents/einja/task/task-modification-analyzer.md +6 -2
  92. package/presets/default/.claude/agents/einja/task/task-qa.md +7 -3
  93. package/presets/default/.claude/agents/einja/task/task-reviewer.md +17 -1
  94. package/presets/default/.claude/commands/einja/einja-sync.md +124 -45
  95. package/presets/default/.claude/commands/einja/frontend-implement.md +3 -1
  96. package/presets/default/.claude/commands/einja/issue-exec.md +413 -0
  97. package/presets/default/.claude/commands/einja/start-dev.md +4 -0
  98. package/presets/default/.claude/commands/einja/sync-cursor-commands.md +10 -6
  99. package/presets/default/.claude/commands/einja/{update-docs-by-task-specs.md → update-docs-by-issue-specs.md} +61 -57
  100. package/presets/default/.claude/hooks/einja/plan-mode-skill-loader.sh +27 -0
  101. package/presets/default/.claude/settings.json +29 -5
  102. package/presets/default/.claude/skills/{einja-general-context-loader → _einja-general-context-loader}/SKILL.md +6 -2
  103. package/presets/default/.claude/skills/{einja-output-format → _einja-output-format}/SKILL.md +5 -1
  104. package/presets/default/.claude/skills/_einja-project-overview/SKILL.md +29 -0
  105. package/presets/default/.claude/skills/{einja-spec-context-loader → _einja-spec-context-loader}/SKILL.md +9 -5
  106. package/presets/default/.claude/skills/einja-coding-standards/references/testing-strategy.md +899 -0
  107. package/presets/default/.claude/skills/einja-conflict-resolver/SKILL.md +5 -1
  108. package/presets/default/.claude/skills/einja-create-pr/SKILL.md +138 -0
  109. package/presets/default/.claude/skills/einja-infra-maintenance/SKILL.md +779 -0
  110. package/presets/default/.claude/{commands/einja/spec-create.md → skills/einja-issue-spec-create/SKILL.md} +60 -23
  111. package/presets/default/.claude/skills/einja-issue-spec-generator/SKILL.md +105 -0
  112. package/presets/default/.claude/skills/einja-issue-spec-generator/references/format-rules.md +35 -0
  113. package/presets/default/.claude/skills/einja-issue-spec-validator/SKILL.md +130 -0
  114. package/presets/default/.claude/skills/einja-issue-spec-validator/references/validation-rules.md +52 -0
  115. package/presets/default/.claude/skills/einja-npm-release/SKILL.md +242 -0
  116. package/presets/default/.claude/skills/einja-skill-creator/SKILL.md +311 -263
  117. package/presets/default/.claude/skills/einja-skill-creator/agents/analyzer.md +274 -0
  118. package/presets/default/.claude/skills/einja-skill-creator/agents/comparator.md +202 -0
  119. package/presets/default/.claude/skills/einja-skill-creator/agents/grader.md +195 -0
  120. package/presets/default/.claude/skills/einja-skill-creator/assets/eval_review.html +146 -0
  121. package/presets/default/.claude/skills/einja-skill-creator/eval-viewer/generate_review.py +471 -0
  122. package/presets/default/.claude/skills/einja-skill-creator/eval-viewer/viewer.html +1325 -0
  123. package/presets/default/.claude/skills/einja-skill-creator/references/schemas.md +430 -0
  124. package/presets/default/.claude/skills/einja-skill-creator/scripts/aggregate_benchmark.py +401 -0
  125. package/presets/default/.claude/skills/einja-skill-creator/scripts/compare_runs.py +154 -0
  126. package/presets/default/.claude/skills/einja-skill-creator/scripts/generate_report.py +272 -0
  127. package/presets/default/.claude/skills/einja-skill-creator/scripts/improve_description.py +247 -0
  128. package/presets/default/.claude/skills/einja-skill-creator/scripts/init_skill.py +13 -19
  129. package/presets/default/.claude/skills/einja-skill-creator/scripts/package_skill.py +36 -7
  130. package/presets/default/.claude/skills/einja-skill-creator/scripts/run_eval.py +310 -0
  131. package/presets/default/.claude/skills/einja-skill-creator/scripts/run_loop.py +375 -0
  132. package/presets/default/.claude/skills/einja-skill-creator/scripts/utils.py +48 -0
  133. package/presets/default/.claude/skills/einja-skill-first/SKILL.md +265 -0
  134. package/presets/default/.claude/skills/einja-subagent-question-protocol/SKILL.md +98 -0
  135. package/presets/default/.claude/skills/einja-task-commit/SKILL.md +11 -7
  136. package/presets/default/.claude/{commands/einja/task-exec.md → skills/einja-task-exec/SKILL.md} +106 -89
  137. package/presets/default/.claude/skills/einja-task-qa/SKILL.md +8 -4
  138. package/presets/default/.claude/skills/einja-task-qa/references/troubleshooting.md +1 -1
  139. package/presets/default/.claude/skills/einja-task-qa/references/usage-patterns.md +2 -2
  140. package/presets/default/.claude/skills/einja-team-exec/SKILL.md +165 -0
  141. package/presets/default/.envrc +5 -0
  142. package/presets/default/.mcp.json +2 -12
  143. package/presets/default/CLAUDE.md.template +45 -8
  144. package/presets/default/docs/einja/example/specs/issues/issue999-example-task/tasks.md +1 -1
  145. package/presets/default/docs/einja/instructions/deployment-setup.md +4 -9
  146. package/presets/default/docs/einja/instructions/environment-setup.md +3 -8
  147. package/presets/default/docs/einja/instructions/issue-exec-workflow.md +276 -0
  148. package/presets/default/docs/einja/instructions/local-server-environment-and-worktree.md +71 -9
  149. package/presets/default/docs/einja/instructions/neon-cli-reference.md +3 -8
  150. package/presets/default/docs/einja/instructions/setup-flow.md +279 -0
  151. package/presets/default/docs/einja/instructions/task-execute.md +63 -68
  152. package/presets/default/docs/einja/instructions/vercel-cli-reference.md +17 -10
  153. package/presets/default/docs/einja/steering/README.md +11 -11
  154. package/presets/default/docs/einja/steering/acceptance-criteria-and-qa-guide.md +4 -9
  155. package/presets/default/docs/einja/steering/architecture.md +3 -8
  156. package/presets/default/docs/einja/steering/branch-strategy.md +63 -70
  157. package/presets/default/docs/einja/steering/commit-rules.md +3 -8
  158. package/presets/default/docs/einja/steering/db-schema-design.md +3 -8
  159. package/presets/default/docs/einja/steering/development/api-development.md +3 -8
  160. package/presets/default/docs/einja/steering/development/backend-architecture.md +3 -8
  161. package/presets/default/docs/einja/steering/development/coding-standards.md +723 -0
  162. package/presets/default/docs/einja/steering/development/component-design.md +502 -0
  163. package/presets/default/docs/einja/steering/development/database-guidelines.md +2 -2
  164. package/presets/default/docs/einja/steering/development/frontend-development.md +3 -8
  165. package/presets/default/docs/einja/steering/development/playwright-guidelines.md +59 -0
  166. package/presets/default/docs/einja/steering/development/review-guidelines.md +3 -8
  167. package/presets/default/docs/einja/steering/development/testing-strategy.md +3 -8
  168. package/presets/default/docs/einja/steering/development-workflow.md +155 -140
  169. package/presets/default/docs/einja/steering/infrastructure/deployment.md +156 -55
  170. package/presets/default/docs/einja/steering/infrastructure/environment-variables.md +4 -8
  171. package/presets/default/docs/einja/steering/product.md +3 -8
  172. package/presets/default/docs/einja/steering/task-management.md +22 -110
  173. package/presets/default/scripts/ensure-serena.sh +75 -0
  174. package/presets/default/scripts/env-rotate-secrets.ts +396 -0
  175. package/presets/default/scripts/env-show.ts +130 -0
  176. package/presets/default/scripts/env.ts +479 -0
  177. package/presets/default/scripts/init-github.ts +363 -0
  178. package/presets/default/scripts/init.sh +98 -0
  179. package/presets/default/scripts/lib/env-common.ts +108 -0
  180. package/presets/default/scripts/lib/worktree-config.ts +64 -0
  181. package/presets/default/scripts/setup-dev.ts +655 -0
  182. package/presets/default/scripts/stop-serena.sh +25 -0
  183. package/presets/default/scripts/worktree/dev.ts +872 -0
  184. package/dist/lib/sync/seed-synchronizer.d.ts +0 -27
  185. package/dist/lib/sync/seed-synchronizer.d.ts.map +0 -1
  186. package/dist/lib/sync/seed-synchronizer.js +0 -72
  187. package/dist/lib/sync/seed-synchronizer.js.map +0 -1
  188. package/dist/lib/sync/seed-synchronizer.test.d.ts +0 -2
  189. package/dist/lib/sync/seed-synchronizer.test.d.ts.map +0 -1
  190. package/dist/lib/sync/seed-synchronizer.test.js +0 -147
  191. package/dist/lib/sync/seed-synchronizer.test.js.map +0 -1
  192. package/presets/default/.claude/agents/einja/git/conflict-resolver.md +0 -148
  193. package/presets/default/.claude/hooks/einja/validate-git-commit.sh +0 -239
  194. package/presets/default/.claude/skills/einja-api-development/SKILL.md +0 -14
  195. package/presets/default/.claude/skills/einja-backend-architecture/SKILL.md +0 -18
  196. package/presets/default/.claude/skills/einja-coding-standards/SKILL.md +0 -132
  197. package/presets/default/.claude/skills/einja-coding-standards/references/import-conventions.md +0 -69
  198. package/presets/default/.claude/skills/einja-coding-standards/references/naming-conventions.md +0 -107
  199. package/presets/default/.claude/skills/einja-coding-standards/references/prohibited-patterns.md +0 -169
  200. package/presets/default/.claude/skills/einja-coding-standards/references/typescript-rules.md +0 -247
  201. package/presets/default/.claude/skills/einja-component-design/SKILL.md +0 -109
  202. package/presets/default/.claude/skills/einja-component-design/references/directory-structure.md +0 -117
  203. package/presets/default/.claude/skills/einja-component-design/references/props-patterns.md +0 -159
  204. package/presets/default/.claude/skills/einja-component-design/references/styling-guide.md +0 -122
  205. package/presets/default/.claude/skills/einja-frontend-development/SKILL.md +0 -14
  206. package/presets/default/.claude/skills/einja-project-overview/SKILL.md +0 -35
  207. package/presets/default/docs/einja/instructions/task-vibe-kanban-loop.md +0 -565
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env python3
2
+ """スキルクリエイタースクリプト共通ユーティリティ。"""
3
+
4
+ from pathlib import Path
5
+
6
+
7
+
8
+ def parse_skill_md(skill_path: Path) -> tuple[str, str, str]:
9
+ """SKILL.mdファイルをパースし、(name, description, full_content)を返す。"""
10
+ content = (skill_path / "SKILL.md").read_text()
11
+ lines = content.split("\n")
12
+
13
+ if lines[0].strip() != "---":
14
+ raise ValueError("SKILL.mdにフロントマターがありません(開始の---がありません)")
15
+
16
+ end_idx = None
17
+ for i, line in enumerate(lines[1:], start=1):
18
+ if line.strip() == "---":
19
+ end_idx = i
20
+ break
21
+
22
+ if end_idx is None:
23
+ raise ValueError("SKILL.mdにフロントマターがありません(終了の---がありません)")
24
+
25
+ name = ""
26
+ description = ""
27
+ frontmatter_lines = lines[1:end_idx]
28
+ i = 0
29
+ while i < len(frontmatter_lines):
30
+ line = frontmatter_lines[i]
31
+ if line.startswith("name:"):
32
+ name = line[len("name:"):].strip().strip('"').strip("'")
33
+ elif line.startswith("description:"):
34
+ value = line[len("description:"):].strip()
35
+ # YAMLマルチラインインジケータ(>, |, >-, |-)の処理
36
+ if value in (">", "|", ">-", "|-"):
37
+ continuation_lines: list[str] = []
38
+ i += 1
39
+ while i < len(frontmatter_lines) and (frontmatter_lines[i].startswith(" ") or frontmatter_lines[i].startswith("\t")):
40
+ continuation_lines.append(frontmatter_lines[i].strip())
41
+ i += 1
42
+ description = " ".join(continuation_lines)
43
+ continue
44
+ else:
45
+ description = value.strip('"').strip("'")
46
+ i += 1
47
+
48
+ return name, description, content
@@ -0,0 +1,265 @@
1
+ ---
2
+ name: einja-skill-first
3
+ description: >
4
+ タスク着手前にSkillを先に作るべきかを自動評価するメタSkill。Plan mode進入時やeinja-issue-spec-create実行時に自動起動し、既存Skillのギャップ分析とROI評価を行い、Skill作成の必要性を構造化して提案する。「Skill作るべき?」「Skill化」「skill-first」「Skill-first」等のキーワードでも直接呼び出し可能。
5
+ allowed-tools:
6
+ - Read
7
+ - Grep
8
+ - Glob
9
+ ---
10
+
11
+ <!-- ベース: .claude/skills/einja-skill-creator/SKILL.md -->
12
+
13
+ # einja-skill-first: Skill作成事前評価メタSkill
14
+
15
+ タスク着手前に「Skillを先に作るべきか」を評価し、必要ならSkill作成をTODOの先頭に積むメタSkill。
16
+
17
+ Plan mode 内でも動作する(Read / Grep / Glob のみ使用)。Skill作成自体は `einja-skill-creator` に委譲する。
18
+
19
+ ## einja-skill-creator との責務分離
20
+
21
+ | 責務 | einja-skill-first | einja-skill-creator |
22
+ |------|:---:|:---:|
23
+ | ギャップ分析・ROI評価 | ○ | - |
24
+ | Skill仕様ドラフト(概要) | ○ | - |
25
+ | SKILL.md 作成 | - | ○ |
26
+ | テスト・eval | - | ○ |
27
+
28
+ ---
29
+
30
+ ## 起動方式(3系統)
31
+
32
+ ### 1. Plan mode 進入時(自動)
33
+
34
+ CLAUDE.md の必須フロー Step2(修正計画作成)→ Step3(ユーザー承認)の間で自動実行する。計画を提示する前に、Skill作成の必要性を評価する。
35
+
36
+ ### 2. einja-issue-spec-create 実行時(自動)
37
+
38
+ einja-issue-spec-create の Phase 0 で自動実行する。仕様書作成の前にSkillギャップを分析し、Skill-first アプローチの要否を判定する。
39
+
40
+ ### 3. 明示起動(手動)
41
+
42
+ 以下のキーワードで直接呼び出し可能:
43
+ - 「Skill作るべき?」
44
+ - 「Skill化」
45
+ - 「skill-first」
46
+ - 「Skill-first」
47
+
48
+ ---
49
+
50
+ ## スキップ基準(即座に「不要」判定)
51
+
52
+ 以下に該当する場合は評価自体を省略し、即座に「不要」と判定する:
53
+
54
+ - **単発の小規模修正**: バグ修正、typo、設定値変更
55
+ - **既存キーワードトリガー一致**: CLAUDE.md のキーワードトリガーに既に一致するタスク
56
+ - **具体的かつ限定的な作業指示**: 「ファイルXのY行をZに変更」等
57
+ - **明らかに1回限りの作業**: 特定バグの調査、特定ファイルのリファクタ等
58
+
59
+ スキップ時は以下を出力して終了:
60
+
61
+ ```
62
+ ## Skill作成評価結果
63
+ ### 判定: ⚪不要(スキップ基準に該当)
64
+ - 理由: {該当するスキップ基準}
65
+ ```
66
+
67
+ ---
68
+
69
+ ## 評価フロー(4ステップ)
70
+
71
+ ### ステップ1: 作業パターン分析
72
+
73
+ 1. **作業カテゴリ特定**: FE / BE / インフラ / ドキュメント / リファクタ等に分類する
74
+ 2. **反復性評価**: 今後も繰り返す作業か判定する
75
+ a. `docs/einja/memory/patterns.md` を Read で参照し、類似パターンの記録がないか確認する
76
+ b. patterns.md に記録がない場合、`docs/plans/` からも反復パターンを推定する
77
+ - Glob で `docs/plans/*.md` を取得(`todo-*.md`, `*-agent-*.md` は除外)
78
+ - Grep で作業カテゴリのキーワード + `# Plan:` タイトル行を検索
79
+ - 類似カテゴリの作業が2件以上あれば反復性の根拠とする
80
+ 3. **複雑度評価**: 手順数・判断分岐数・参照ドキュメント数から複雑度を見積もる
81
+
82
+ ### ステップ2: 既存Skillギャップ分析
83
+
84
+ 1. `.claude/skills/einja-*/SKILL.md` を Glob で動的取得する
85
+ 2. 各Skillの name / description を Read で読み取る
86
+ 3. タスクに対するカバレッジを3段階で判定する:
87
+
88
+ | カバレッジ | 判定 | 次のアクション |
89
+ |-----------|------|---------------|
90
+ | **完全カバー** | Skill作成不要 | 既存Skillで実行 |
91
+ | **部分カバー** | 既存Skill拡張を検討 | 拡張箇所を特定 |
92
+ | **カバー外** | 新規Skill作成を検討 | ステップ3へ進む |
93
+
94
+ ### ステップ3: ROI評価(スコアリング)
95
+
96
+ 以下のスコアリングで定量評価する。
97
+
98
+ **コスト側(各1-3点):**
99
+
100
+ | 項目 | 1点 | 2点 | 3点 |
101
+ |------|-----|-----|-----|
102
+ | 作成時間 | 数十分 | 数時間 | 1日以上 |
103
+ | 複雑度 | 直線的 | 分岐あり | 多段判断 |
104
+ | テスト必要度 | 不要 | 簡易 | 網羅的eval必要 |
105
+
106
+ **価値側(各1-3点):**
107
+
108
+ | 項目 | 1点 | 2点 | 3点 |
109
+ |------|-----|-----|-----|
110
+ | 再利用頻度 | 月1回以下 | 週1-2回 | ほぼ毎日 |
111
+ | 品質安定化 | ばらつき小 | 中程度 | 手順ミスが致命的 |
112
+ | 時間節約 | 5分以下/回 | 30分程度/回 | 1時間以上/回 |
113
+ | チーム共有価値 | 個人向け | チーム内 | 全プロジェクト共通 |
114
+
115
+ **判定基準:**
116
+ ```
117
+ 価値合計 - コスト合計 >= 2 → 推奨(新規作成)
118
+ 価値合計 - コスト合計 >= 0 かつ部分カバー → 拡張推奨
119
+ それ以外 → 不要
120
+ ```
121
+
122
+ ### ステップ4: 構造化出力
123
+
124
+ 以下のテンプレートで出力する。
125
+
126
+ ```markdown
127
+ ## Skill作成評価結果
128
+
129
+ ### 判定: {判定アイコン}{判定テキスト}
130
+
131
+ ### スコア
132
+ | カテゴリ | 項目 | スコア |
133
+ |---------|------|--------|
134
+ | コスト | 作成時間 | X/3 |
135
+ | コスト | 複雑度 | X/3 |
136
+ | コスト | テスト必要度 | X/3 |
137
+ | **コスト合計** | | **X/9** |
138
+ | 価値 | 再利用頻度 | X/3 |
139
+ | 価値 | 品質安定化 | X/3 |
140
+ | 価値 | 時間節約 | X/3 |
141
+ | 価値 | チーム共有価値 | X/3 |
142
+ | **価値合計** | | **X/12** |
143
+ | **差分(価値-コスト)** | | **X** |
144
+ ```
145
+
146
+ **判定アイコンの定義:**
147
+ - 推奨: `🟢推奨`
148
+ - 拡張推奨: `🟡拡張推奨`
149
+ - 不要: `⚪不要`
150
+
151
+ ### ステップ5: 過去Plan検索によるユースケース収集(推奨/拡張推奨の場合のみ)
152
+
153
+ 以下の手順で過去Planから類似作業を検索し、Skill仕様のユースケースに反映する。
154
+
155
+ 1. Glob で `docs/plans/*.md` を取得する
156
+ - 除外: `todo-*.md`, `*-agent-*.md`(子エージェント出力)
157
+ 2. Grep で以下のキーワードを検索し、関連Planを特定する
158
+ - ステップ1で特定した作業カテゴリのキーワード
159
+ - 変更対象ファイルパターン(例: `.claude/skills/`, `CLAUDE.md` 等)
160
+ - `# Plan:` タイトル行で関連性を粗くフィルタ
161
+ 3. 関連性の高いPlan(最大5件)のみ Read で詳細を確認する
162
+ - `## Context` セクションから作業概要を抽出
163
+ - 変更対象ファイル・手順から共通パターンを特定
164
+ 4. 類似度を判定する
165
+ - 高: 変更対象ファイルが重複する
166
+ - 中: 同一ドメインの作業、または手法・パターンが類似
167
+ 5. 結果を Skill概要仕様のユースケースセクションに反映する
168
+
169
+ ---
170
+
171
+ ## 判定別の推奨ワークフロー
172
+
173
+ ### 推奨(新規Skill作成)
174
+
175
+ ```markdown
176
+ ### Skill概要仕様
177
+ - **名前**: einja-{proposed-name}
178
+ - **目的**: {Skillの目的}
179
+ - **主要フロー**: {主要な処理ステップの概要}
180
+ - **推定作成時間**: {見積もり}
181
+ - **ユースケース(過去Planから)**:
182
+ - {Plan名}: {作業概要}(類似度: 高/中)
183
+ - {Plan名}: {作業概要}(類似度: 高/中)
184
+
185
+ ### 推奨ワークフロー
186
+ 計画のTODO-0にSkill作成を追加し、`einja-skill-creator` Skillで作成後に本作業を開始する。
187
+ ```
188
+
189
+ ### 拡張推奨(既存Skill拡張)
190
+
191
+ ```markdown
192
+ ### 推奨ワークフロー
193
+ 既存Skill {name} の拡張を検討する。
194
+ - **拡張内容**: {具体的な拡張箇所}
195
+ - **影響範囲**: {拡張による影響}
196
+ ```
197
+
198
+ ### 不要
199
+
200
+ ```markdown
201
+ ### 推奨ワークフロー
202
+ 既存Skillで十分カバー可能。該当Skill: {name}
203
+ ```
204
+
205
+ ---
206
+
207
+ ## Plan mode 対応
208
+
209
+ ### Plan mode 内で行うこと
210
+
211
+ - 既存Skill一覧を Glob + Read で取得する
212
+ - `docs/einja/memory/patterns.md` を Read で参照する
213
+ - ROI評価ロジックを実行する(計算のみ)
214
+ - 構造化された評価結果を返却する
215
+
216
+ ### Plan mode 内で行わないこと
217
+
218
+ - ファイル作成・編集
219
+ - einja-skill-creator の呼び出し
220
+ - Bash コマンド実行
221
+
222
+ ### 親エージェントの責務(Plan mode内)
223
+
224
+ 1. skill-first の結果を受け取る
225
+ 2. AskUserQuestion で提案する(推奨 / 拡張推奨の場合)
226
+ 3. 承認された場合、計画ファイルの TODO-0 に Skill 作成を記載する
227
+
228
+ ### Plan mode 解除後のフロー
229
+
230
+ ```
231
+ TODO-0: einja-skill-creator で Skill 作成(承認された場合のみ)
232
+ TODO-1〜: 作成した Skill を活用して本作業を実行
233
+ ```
234
+
235
+ ---
236
+
237
+ ## エラー処理
238
+
239
+ | エラー種別 | 原因 | 対処 |
240
+ |-----------|------|------|
241
+ | Skill一覧取得失敗 | `.claude/skills/` が存在しない | カバレッジ判定をスキップし、ROIのみで評価 |
242
+ | patterns.md 不在 | memory ディレクトリが未初期化 | 反復性評価をスキップし、他の項目で評価 |
243
+ | 作業内容が不明確 | 入力情報が不足 | スキップ基準を適用し「不要」と判定 |
244
+
245
+ ---
246
+
247
+ ## 実行制約
248
+
249
+ - このSkillは親エージェント(オーケストレーター)から呼び出される
250
+ - Read / Grep / Glob のみ使用可能(Plan mode 互換)
251
+ - Skill作成の実行は行わない(einja-skill-creator に委譲)
252
+
253
+ ---
254
+
255
+ ## 連携
256
+
257
+ - **呼び出し元**: 親エージェント(Plan mode 進入時、einja-issue-spec-create Phase 0)
258
+ - **委譲先**: `einja-skill-creator` - Skill作成の実行
259
+ - **参照**: `docs/einja/memory/patterns.md` - 過去の作業パターン
260
+
261
+ ---
262
+
263
+ <!-- @einja:project-private:start id="einja-skill-first-project" -->
264
+ <!-- プロジェクト固有の情報を記入 -->
265
+ <!-- @einja:project-private:end -->
@@ -0,0 +1,98 @@
1
+ ---
2
+ name: einja-subagent-question-protocol
3
+ description: サブエージェントがユーザーへの質問を返却するためのプロトコル定義。AskUserQuestionが動作しないサブエージェント環境で使用。
4
+ autoload: true
5
+ # autoload: サブエージェントに自動preloadするため。親エージェントはPENDING_QUESTIONSの「受信・ハンドリング」側(CLAUDE.md参照)
6
+ ---
7
+
8
+ # サブエージェント質問プロトコル(PENDING_QUESTIONS)
9
+
10
+ ## 背景
11
+
12
+ Claude Code v2.0.56以降、**サブエージェントではAskUserQuestionツールがシステムレベルでフィルタリングされ動作しない**。
13
+ そのため、サブエージェントがユーザーへの確認が必要な場合は、以下のプロトコルに従って質問を返却する。
14
+
15
+ ## プロトコル概要
16
+
17
+ 1. サブエージェントは質問を `## PENDING_QUESTIONS` セクションとして出力に含める
18
+ 2. 親エージェントが出力を検出し、AskUserQuestionでユーザーに確認する
19
+ 3. 親エージェントがAgent toolの `resume` パラメータで同じサブエージェントを再開する
20
+ 4. 再開時にユーザーの回答がプロンプトとして渡される
21
+
22
+ ## PENDING_QUESTIONS フォーマット
23
+
24
+ 質問を返却する場合、**必ず以下の形式**で出力し、その後停止すること:
25
+
26
+ ```markdown
27
+ ## PENDING_QUESTIONS
28
+
29
+ 以下の不明点の解消が必要です。
30
+
31
+ ### Q1: [質問タイトル]
32
+ **背景**: [なぜこの質問が必要か、どのような文脈で発生したか]
33
+
34
+ | 選択肢 | 説明 | メリット | デメリット |
35
+ |--------|------|----------|------------|
36
+ | A: [ラベル] | [詳細説明] | [メリット] | [デメリット] |
37
+ | B: [ラベル] | [詳細説明] | [メリット] | [デメリット] |
38
+ | C: [ラベル] | [詳細説明] | [メリット] | [デメリット] |
39
+
40
+ **推奨**: A([推奨理由])
41
+
42
+ ### Q2: [質問タイトル]
43
+ **背景**: [なぜこの質問が必要か]
44
+
45
+ | 選択肢 | 説明 | メリット | デメリット |
46
+ |--------|------|----------|------------|
47
+ | A: [ラベル] | [詳細説明] | [メリット] | [デメリット] |
48
+ | B: [ラベル] | [詳細説明] | [メリット] | [デメリット] |
49
+
50
+ **推奨**: B([推奨理由])
51
+ ```
52
+
53
+ ## ルール
54
+
55
+ 1. **1回にまとめる**: 複数の質問がある場合は Q1, Q2, ... としてまとめて返却する。1問ずつ返却しない
56
+ 2. **選択肢と背景を必ず含める**: 各選択肢には説明・メリット・デメリットを記載し、ユーザーが十分な情報に基づいて判断できるようにする
57
+ 3. **推奨を明示する**: 各質問に対して推奨選択肢とその理由を記載する
58
+ 4. **質問返却後は停止する**: PENDING_QUESTIONSを出力したら、それ以降の作業は行わない。回答を受けてから再開する
59
+ 5. **再開後の作業継続**: `resume` で再開された場合、渡された回答に基づいて作業を継続する
60
+
61
+ ## AskUserQuestion YAML → PENDING_QUESTIONS 変換ガイド
62
+
63
+ エージェント定義にAskUserQuestion YAMLの参考例がある場合、以下のように変換する:
64
+
65
+ ### 変換前(AskUserQuestion YAML)
66
+ ```yaml
67
+ AskUserQuestion:
68
+ question: "状態管理ライブラリを選択してください"
69
+ header: "状態管理"
70
+ options:
71
+ - label: "TanStack Query(推奨)"
72
+ description: "推奨理由: サーバー状態管理に最適。..."
73
+ - label: "Zustand"
74
+ description: "シンプルなグローバル状態管理。..."
75
+ ```
76
+
77
+ ### 変換後(PENDING_QUESTIONS形式)
78
+ ```markdown
79
+ ## PENDING_QUESTIONS
80
+
81
+ 以下の不明点の解消が必要です。
82
+
83
+ ### Q1: 状態管理ライブラリの選択
84
+ **背景**: サーバー状態の管理方式を決定する必要があります。
85
+
86
+ | 選択肢 | 説明 | メリット | デメリット |
87
+ |--------|------|----------|------------|
88
+ | A: TanStack Query | サーバー状態管理に最適 | 自動キャッシュ管理、型安全 | 学習コスト中程度 |
89
+ | B: Zustand | シンプルなグローバル状態管理 | 軽量、シンプルなAPI | サーバー状態管理は手動 |
90
+
91
+ **推奨**: A(サーバー状態管理に最適で、キャッシュと再取得が自動化されるため)
92
+ ```
93
+
94
+ ## 重要な注意事項
95
+
96
+ - このプロトコルは**サブエージェントとして動作する場合にのみ**適用される
97
+ - 親エージェント(直接ユーザーと対話する場合)では通常通りAskUserQuestionを使用すること
98
+ - エージェント定義内のAskUserQuestion YAMLは「どんな質問をすべきか」の参照情報として有用なので削除しない
@@ -1,6 +1,6 @@
1
1
  ---
2
- name: task-commit
3
- description: "コミット・プッシュを実行するSkill。docs/einja/steering/commit-rules.mdのルールに従い、分割コミットを実施。直接呼び出し可能(確認あり)、task-exec経由では自動実行"
2
+ name: einja-task-commit
3
+ description: "コミット・プッシュを実行するSkill。docs/einja/steering/commit-rules.mdのルールに従い、分割コミットを実施。直接呼び出し可能(確認あり)、einja-task-exec Skill経由では自動実行"
4
4
  allowed-tools:
5
5
  - Bash
6
6
  - Read
@@ -49,7 +49,7 @@ git stash pop
49
49
 
50
50
  #### コンフリクト発生時
51
51
 
52
- 1. **conflict-resolver エージェント** を Task ツールで呼び出して解消
52
+ 1. **einja-conflict-resolver Skill** の手順に従って解消
53
53
  2. 解消できない場合は以下を出力して終了:
54
54
 
55
55
  ```markdown
@@ -139,9 +139,9 @@ AskUserQuestion:
139
139
 
140
140
  ### ステップ4: 品質チェック
141
141
 
142
- #### task-exec経由での呼び出しの場合
142
+ #### einja-task-exec Skill経由での呼び出しの場合
143
143
 
144
- task-exec経由でQA合格後に呼び出されるため、品質チェック(lint/typecheck/test/build)は**スキップ**します。
144
+ einja-task-exec Skill経由でQA合格後に呼び出されるため、品質チェック(lint/typecheck/test/build)は**スキップ**します。
145
145
 
146
146
  QAフェーズで既に実行済みのため、重複実行は不要です。
147
147
 
@@ -171,7 +171,7 @@ QAフェーズで既に実行済みのため、重複実行は不要です。
171
171
 
172
172
  #### コミットコマンド
173
173
 
174
- **task-exec経由での呼び出しの場合**(QA済み):
174
+ **einja-task-exec Skill経由での呼び出しの場合**(QA済み):
175
175
 
176
176
  ```bash
177
177
  git add src/auth/login.ts src/auth/logout.ts && git commit -m "$(cat <<'EOF'
@@ -253,7 +253,7 @@ EOF
253
253
 
254
254
  | エラー種別 | 対処 |
255
255
  |-----------|------|
256
- | git pull コンフリクト | conflict-resolver エージェントを Task ツールで呼び出して解消を試行 |
256
+ | git pull コンフリクト | einja-conflict-resolver Skill の手順に従って解消を試行 |
257
257
  | コンフリクト解消失敗 | 報告して終了、手動解決を依頼 |
258
258
  | git commit 失敗 | エラー内容を報告 |
259
259
  | git push 失敗 | エラー内容を報告、原因を説明 |
@@ -267,3 +267,7 @@ EOF
267
267
  ---
268
268
 
269
269
  **最終更新**: 2026-01-10
270
+
271
+ <!-- @einja:project-private:start id="einja-task-commit-project" -->
272
+ <!-- プロジェクト固有の情報を記入 -->
273
+ <!-- @einja:project-private:end -->