@einja/dev-cli 0.1.41 → 0.1.45

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 (103) hide show
  1. package/README.md +0 -1
  2. package/dist/cli.js +0 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/sync.d.ts.map +1 -1
  5. package/dist/commands/sync.js +1 -20
  6. package/dist/commands/sync.js.map +1 -1
  7. package/dist/commands/task-loop/lib/github-client.test.js.map +1 -1
  8. package/dist/commands/task-loop/lib/vibe-kanban-rest-client.js +2 -2
  9. package/dist/commands/task-loop/lib/vibe-kanban-rest-client.js.map +1 -1
  10. package/dist/lib/preset-update/file-copier.js +3 -3
  11. package/dist/lib/preset-update/file-copier.js.map +1 -1
  12. package/dist/lib/sync/file-filter.js +2 -2
  13. package/dist/lib/sync/file-filter.js.map +1 -1
  14. package/dist/lib/sync/file-filter.test.js +20 -0
  15. package/dist/lib/sync/file-filter.test.js.map +1 -1
  16. package/dist/lib/sync/marker-processor.js.map +1 -1
  17. package/dist/lib/sync/metadata-manager.js +1 -1
  18. package/dist/lib/sync/metadata-manager.js.map +1 -1
  19. package/dist/lib/sync/metadata-manager.test.js +3 -2
  20. package/dist/lib/sync/metadata-manager.test.js.map +1 -1
  21. package/dist/lib/sync/project-private-synchronizer.d.ts.map +1 -1
  22. package/dist/lib/sync/project-private-synchronizer.js +5 -1
  23. package/dist/lib/sync/project-private-synchronizer.js.map +1 -1
  24. package/dist/types/index.d.ts +0 -1
  25. package/dist/types/index.d.ts.map +1 -1
  26. package/package.json +1 -1
  27. package/presets/default/.claude/agents/einja/backend-architect.md +17 -1
  28. package/presets/default/.claude/agents/einja/codex-agent.md +1 -1
  29. package/presets/default/.claude/agents/einja/design-engineer.md +1 -1
  30. package/presets/default/.claude/agents/einja/docs/docs-updater.md +3 -93
  31. package/presets/default/.claude/agents/einja/frontend-architect.md +17 -1
  32. package/presets/default/.claude/agents/einja/frontend-coder.md +1 -1
  33. package/presets/default/.claude/agents/einja/{specs/spec-design-generator.md → issue-specs/design-generator.md} +12 -7
  34. package/presets/default/.claude/agents/einja/{specs/spec-qa-generator.md → issue-specs/qa-generator.md} +6 -4
  35. package/presets/default/.claude/agents/einja/{specs/spec-requirements-generator.md → issue-specs/requirements-generator.md} +5 -5
  36. package/presets/default/.claude/agents/einja/{specs/spec-tasks-generator.md → issue-specs/tasks-generator.md} +13 -14
  37. package/presets/default/.claude/agents/einja/{specs/spec-tasks-validator.md → issue-specs/tasks-validator.md} +9 -9
  38. package/presets/default/.claude/agents/einja/issue-specs/ui-design-generator.md +114 -0
  39. package/presets/default/.claude/agents/einja/task/task-executer.md +9 -3
  40. package/presets/default/.claude/agents/einja/task/task-modification-analyzer.md +2 -2
  41. package/presets/default/.claude/agents/einja/task/task-qa.md +3 -3
  42. package/presets/default/.claude/agents/einja/task/task-reviewer.md +13 -1
  43. package/presets/default/.claude/commands/einja/einja-sync.md +119 -44
  44. package/presets/default/.claude/commands/einja/issue-exec.md +29 -19
  45. package/presets/default/.claude/commands/einja/sync-cursor-commands.md +6 -6
  46. package/presets/default/.claude/commands/einja/{update-docs-by-task-specs.md → update-docs-by-issue-specs.md} +58 -58
  47. package/presets/default/.claude/hooks/einja/plan-mode-skill-loader.sh +5 -1
  48. package/presets/default/.claude/settings.json +14 -4
  49. package/presets/default/.claude/skills/{einja-general-context-loader → _einja-general-context-loader}/SKILL.md +2 -2
  50. package/presets/default/.claude/skills/{einja-output-format → _einja-output-format}/SKILL.md +1 -1
  51. package/presets/default/.claude/skills/_einja-project-overview/SKILL.md +29 -0
  52. package/presets/default/.claude/skills/{einja-spec-context-loader → _einja-spec-context-loader}/SKILL.md +5 -5
  53. package/presets/default/.claude/skills/einja-coding-standards/references/testing-strategy.md +899 -0
  54. package/presets/default/.claude/skills/einja-conflict-resolver/SKILL.md +1 -1
  55. package/presets/default/.claude/skills/einja-create-pr/SKILL.md +138 -0
  56. package/presets/default/.claude/skills/einja-infra-maintenance/SKILL.md +779 -0
  57. package/presets/default/.claude/{commands/einja/spec-create.md → skills/einja-issue-spec-create/SKILL.md} +47 -24
  58. package/presets/default/.claude/skills/einja-issue-spec-generator/SKILL.md +105 -0
  59. package/presets/default/.claude/skills/einja-issue-spec-generator/references/format-rules.md +35 -0
  60. package/presets/default/.claude/skills/einja-issue-spec-validator/SKILL.md +130 -0
  61. package/presets/default/.claude/skills/einja-issue-spec-validator/references/validation-rules.md +52 -0
  62. package/presets/default/.claude/skills/einja-npm-release/SKILL.md +242 -0
  63. package/presets/default/.claude/skills/einja-skill-creator/SKILL.md +68 -12
  64. package/presets/default/.claude/skills/einja-skill-creator/scripts/aggregate_benchmark.py +368 -121
  65. package/presets/default/.claude/skills/einja-skill-creator/scripts/compare_runs.py +154 -0
  66. package/presets/default/.claude/skills/einja-skill-creator/scripts/generate_report.py +14 -7
  67. package/presets/default/.claude/skills/einja-skill-creator/scripts/improve_description.py +2 -7
  68. package/presets/default/.claude/skills/einja-skill-creator/scripts/run_loop.py +263 -183
  69. package/presets/default/.claude/skills/einja-skill-first/SKILL.md +265 -0
  70. package/presets/default/.claude/skills/einja-subagent-question-protocol/SKILL.md +98 -0
  71. package/presets/default/.claude/skills/einja-task-commit/SKILL.md +7 -7
  72. package/presets/default/.claude/{commands/einja/task-exec.md → skills/einja-task-exec/SKILL.md} +3 -78
  73. package/presets/default/.claude/skills/einja-task-qa/SKILL.md +4 -4
  74. package/presets/default/.claude/skills/einja-task-qa/references/troubleshooting.md +1 -1
  75. package/presets/default/.claude/skills/einja-task-qa/references/usage-patterns.md +2 -2
  76. package/presets/default/.claude/skills/einja-team-exec/SKILL.md +165 -0
  77. package/presets/default/CLAUDE.md.template +21 -6
  78. package/presets/default/docs/einja/instructions/deployment-setup.md +1 -1
  79. package/presets/default/docs/einja/instructions/issue-exec-workflow.md +11 -11
  80. package/presets/default/docs/einja/instructions/local-server-environment-and-worktree.md +1 -1
  81. package/presets/default/docs/einja/instructions/setup-flow.md +279 -0
  82. package/presets/default/docs/einja/instructions/task-execute.md +42 -42
  83. package/presets/default/docs/einja/steering/acceptance-criteria-and-qa-guide.md +1 -1
  84. package/presets/default/docs/einja/steering/branch-strategy.md +1 -1
  85. package/presets/default/docs/einja/steering/development-workflow.md +93 -25
  86. package/presets/default/docs/einja/steering/infrastructure/deployment.md +107 -0
  87. package/presets/default/docs/einja/steering/task-management.md +9 -13
  88. package/presets/default/scripts/ensure-serena.sh +2 -2
  89. package/presets/default/scripts/env-rotate-secrets.ts +66 -6
  90. package/presets/default/scripts/init-github.ts +363 -0
  91. package/presets/default/scripts/init.sh +11 -5
  92. package/presets/default/scripts/setup-dev.ts +16 -1
  93. package/dist/lib/sync/backup-manager.d.ts +0 -50
  94. package/dist/lib/sync/backup-manager.d.ts.map +0 -1
  95. package/dist/lib/sync/backup-manager.js +0 -117
  96. package/dist/lib/sync/backup-manager.js.map +0 -1
  97. package/dist/lib/sync/backup-manager.test.d.ts +0 -2
  98. package/dist/lib/sync/backup-manager.test.d.ts.map +0 -1
  99. package/dist/lib/sync/backup-manager.test.js +0 -155
  100. package/dist/lib/sync/backup-manager.test.js.map +0 -1
  101. package/presets/default/.claude/agents/einja/git/conflict-resolver.md +0 -152
  102. package/presets/default/.claude/hooks/einja/validate-git-commit.sh +0 -239
  103. package/presets/default/.claude/skills/einja-project-overview/SKILL.md +0 -39
@@ -0,0 +1,242 @@
1
+ ---
2
+ name: einja-npm-release
3
+ description: "NPMパッケージ(@einja/dev-cli、create-einja-app)の変更検出・ビルド・テスト・リリースを統合的に実行するSkill。公開、リリース、publish、releaseが必要な場合に使用。"
4
+ user-invocable: true
5
+ allowed-tools:
6
+ - Bash
7
+ - Read
8
+ - Glob
9
+ - Grep
10
+ - AskUserQuestion
11
+ - TodoWrite
12
+ - TodoRead
13
+ - Task
14
+ - MCPSearch
15
+ ---
16
+
17
+ # einja-npm-release Skill: NPM パッケージ統合リリースエンジン
18
+
19
+ ## 役割
20
+
21
+ モノレポ内のNPMパッケージ(`@einja/dev-cli`、`create-einja-app`)の変更を自動検出し、ビルド・テスト・NPM公開を統合的に実行します。
22
+
23
+ ## パッケージ定義テーブル
24
+
25
+ | キー | `@einja/dev-cli` | `create-einja-app` |
26
+ |------|-------------|-------------------|
27
+ | path | `packages/cli` | `packages/create-einja-app` |
28
+ | pnpm filter | `@einja/dev-cli` | `create-einja-app` |
29
+ | workflow | `release-cli.yml` | `release-create-einja-app.yml` |
30
+ | tag prefix | `cli-v` | `create-einja-app-v` |
31
+ | commit scope | `cli` | `create-einja-app` |
32
+ | build/test | build, test, typecheck | build, test, typecheck, lint |
33
+
34
+ ## 参照ドキュメント
35
+
36
+ - `packages/cli/RELEASING.md` - @einja/dev-cli リリース手順、トラブルシューティング、NPM_TOKEN設定方法
37
+ - `packages/create-einja-app/RELEASING.md` - create-einja-app リリース手順
38
+
39
+ ## 実行手順
40
+
41
+ ### Step 1: 前提条件の確認
42
+
43
+ ```bash
44
+ git branch --show-current # mainブランチであること
45
+ git status --porcelain # 未コミット変更の確認
46
+ ```
47
+
48
+ #### 未コミット変更がある場合
49
+
50
+ **AskUserQuestion**で対処方法を確認:
51
+
52
+ - **コミットしてからリリース**: 全ての変更をコミット・プッシュ後にリリース
53
+ - **スタッシュしてリリース**: 変更を一時退避してリリース後に復元
54
+ - **そのままリリース**: 未コミット変更は放置し、**package.jsonのバージョン更新のみ**コミットしてリリース
55
+
56
+ ### Step 2: 変更パッケージの自動検出
57
+
58
+ 各パッケージについて、最新タグからの差分を検出:
59
+
60
+ ```bash
61
+ # @einja/dev-cli: 最新タグ取得
62
+ git tag --list 'cli-v*' --sort=-version:refname | head -1
63
+
64
+ # create-einja-app: 最新タグ取得
65
+ git tag --list 'create-einja-app-v*' --sort=-version:refname | head -1
66
+
67
+ # 各パッケージの差分をチェック
68
+ git diff --name-only {latest_tag}..HEAD -- packages/cli/
69
+ git diff --name-only {latest_tag}..HEAD -- packages/create-einja-app/
70
+ ```
71
+
72
+ 結果をテーブル表示:
73
+
74
+ ```markdown
75
+ | パッケージ | 現バージョン | 最新タグ | 変更ファイル数 |
76
+ |-----------|------------|---------|-------------|
77
+ | @einja/dev-cli | x.y.z | cli-vx.y.z | N |
78
+ | create-einja-app | x.y.z | create-einja-app-vx.y.z | M |
79
+ ```
80
+
81
+ ### Step 3: リリース対象の確認
82
+
83
+ **AskUserQuestion** で確認:
84
+
85
+ #### 両方に変更がある場合
86
+
87
+ ```yaml
88
+ question: "どのパッケージをリリースしますか?"
89
+ header: "リリース対象"
90
+ options:
91
+ - label: "両方リリース(推奨)"
92
+ description: "@einja/dev-cli (変更N件) と create-einja-app (変更M件) の両方をリリース"
93
+ - label: "@einja/dev-cli のみ"
94
+ description: "@einja/dev-cli のみリリース"
95
+ - label: "create-einja-app のみ"
96
+ description: "create-einja-app のみリリース"
97
+ ```
98
+
99
+ #### 片方のみ変更がある場合
100
+
101
+ ```yaml
102
+ question: "{パッケージ名} に変更があります。リリースしますか?"
103
+ header: "リリース確認"
104
+ options:
105
+ - label: "はい"
106
+ description: "{パッケージ名} をリリースする"
107
+ - label: "いいえ"
108
+ description: "リリースをキャンセル"
109
+ ```
110
+
111
+ **注**: 変更がない場合でも「Other」選択肢でリリースできる。
112
+
113
+ ### Step 4: バージョン種別の決定
114
+
115
+ 対象パッケージごとに**AskUserQuestion**:
116
+
117
+ ```yaml
118
+ question: "{パッケージ名} のバージョン種別を選択してください(現在: v{current})"
119
+ header: "バージョン"
120
+ options:
121
+ - label: "patch(推奨)"
122
+ description: "バグ修正・軽微な改善"
123
+ - label: "minor"
124
+ description: "後方互換性のある機能追加"
125
+ - label: "major"
126
+ description: "破壊的変更"
127
+ ```
128
+
129
+ 複数パッケージの場合、順番に確認。
130
+
131
+ ### Step 5: ビルド・テスト
132
+
133
+ 対象パッケージごとに実行(並列実行可能):
134
+
135
+ ```bash
136
+ # @einja/dev-cli
137
+ pnpm --filter @einja/dev-cli build && pnpm --filter @einja/dev-cli test && pnpm --filter @einja/dev-cli typecheck
138
+
139
+ # create-einja-app
140
+ pnpm -F create-einja-app build && pnpm -F create-einja-app test && pnpm -F create-einja-app typecheck && pnpm -F create-einja-app lint
141
+ ```
142
+
143
+ ### Step 6: バージョン更新・コミット・プッシュ
144
+
145
+ **順次実行**(gitコミットは直列化が必要)。全パッケージ統一で `--no-git-tag-version` + 手動タグ方式:
146
+
147
+ ```bash
148
+ # 1. バージョン更新(タグなし)
149
+ npm version {type} --no-git-tag-version --prefix {path}
150
+
151
+ # 2. package.jsonのみコミット
152
+ git add {path}/package.json
153
+ git commit -m "chore({scope}): v{version}にバージョンアップ"
154
+
155
+ # 3. タグ作成
156
+ git tag {tag_prefix}{version}
157
+ ```
158
+
159
+ 全パッケージ分のコミット・タグ作成が完了してから一括プッシュ:
160
+
161
+ ```bash
162
+ git push origin main
163
+ git push origin {tag1}
164
+ git push origin {tag2} # 2パッケージの場合
165
+ ```
166
+
167
+ task-committer には委託しない(全変更をコミットしてしまうため)。
168
+
169
+ ### Step 7: GitHub Actions 監視・自律修正
170
+
171
+ 対象パッケージごとにワークフローを監視(並列監視可能):
172
+
173
+ #### 7.1 監視ループ
174
+
175
+ ```bash
176
+ # 最新のワークフロー実行を取得
177
+ gh run list --workflow={workflow} --limit=1 --json databaseId,status,conclusion
178
+ ```
179
+
180
+ - `status: in_progress` → 30秒待機して再確認
181
+ - `status: completed, conclusion: success` → 成功、Step 8へ
182
+ - `status: completed, conclusion: failure` → 失敗、7.2へ
183
+
184
+ #### 7.2 失敗時の原因特定
185
+
186
+ ```bash
187
+ gh run view {run_id} --log-failed
188
+ ```
189
+
190
+ #### 7.3 原因別の自律修正
191
+
192
+ | 原因 | 対処 |
193
+ |------|------|
194
+ | ビルドエラー | コードを修正 |
195
+ | テストエラー | テストを修正 |
196
+ | NPM_TOKEN エラー | ユーザーに設定確認を依頼して終了 |
197
+ | バージョン重複 | 次のpatchバージョンで再実行 |
198
+
199
+ #### 7.4 修正後の再リリース
200
+
201
+ **重要**: 同じタグ名は使えないため、バージョンを上げて再リリース
202
+
203
+ ```bash
204
+ # 1. 修正をコミット
205
+ git add {修正ファイル}
206
+ git commit -m "fix({scope}): CIエラーを修正"
207
+
208
+ # 2. 新しいバージョンに更新
209
+ npm version patch --no-git-tag-version --prefix {path}
210
+
211
+ # 3. バージョン更新をコミット
212
+ git add {path}/package.json
213
+ git commit -m "chore({scope}): v{new_version}にバージョンアップ"
214
+
215
+ # 4. 新しいタグを作成・プッシュ
216
+ git tag {tag_prefix}{new_version}
217
+ git push origin main
218
+ git push origin {tag_prefix}{new_version}
219
+ ```
220
+
221
+ #### 7.5 リトライ制限
222
+
223
+ 最大3回まで自動リトライ。3回失敗したらユーザーに報告して終了。
224
+
225
+ ### Step 8: 完了報告
226
+
227
+ ```markdown
228
+ ## 📦 NPM パッケージリリース完了
229
+
230
+ | パッケージ | バージョン | タグ | Actions |
231
+ |-----------|----------|-----|---------|
232
+ | @einja/dev-cli | {old} → {new} | cli-v{version} | ✅ |
233
+ | create-einja-app | {old} → {new} | create-einja-app-v{version} | ✅ |
234
+
235
+ ### 確認コマンド
236
+ npm view @einja/dev-cli
237
+ npm view create-einja-app
238
+ ```
239
+
240
+ ---
241
+
242
+ **最終更新**: 2026-03-04
@@ -60,13 +60,26 @@ Skillが完成した後(順序は柔軟)、Skillのdescription最適化も
60
60
 
61
61
  ユーザーインタビューに基づいて以下を記入:
62
62
 
63
- - **name**: Skill識別子
63
+ - **name**: Skill識別子。ディレクトリ名と一致させること
64
+ - インナーSkill(他Skillから内部的に参照される、プロトコル定義、出力テンプレート等)
65
+ は `_` プレフィックスをつける(例: `_einja-output-format`)
66
+ - プロジェクト固有のSkillには名前空間プレフィックスをつけない
67
+ - プロジェクトの名前空間プレフィックスはCLAUDE.mdに定義される
64
68
  - **description**: いつトリガーするか、何をするか。主要なトリガーメカニズム。Skillが何をするかと使用する具体的なコンテキストの両方を含める。「いつ使用するか」情報はすべてここに。本文はトリガー後に読み込まれるため、本文の「使用すべき場合」セクションはClaudeに役立たない。注意:現在Claudeはスキルを「アンダートリガー」する傾向がある。対策としてdescriptionを少し「積極的」にする
65
69
  - **compatibility**: 必要なツール、依存関係(オプション、まれに必要)
66
70
  - **Skillの残りの部分 :)**
67
71
 
68
72
  ### Skill記述ガイド
69
73
 
74
+ #### ディレクトリ命名規則
75
+
76
+ ディレクトリ名はSkillの配布範囲を決定する:
77
+ - `{namespace}-{name}/` — 配布対象のユーザー向けSkill(例: `einja-task-commit/`)
78
+ - `_{namespace}-{name}/` — 配布対象のインナーSkill(例: `_einja-output-format/`)
79
+ - `{name}/` — プロジェクト固有Skill、配布されない(例: `cli-package-specs/`)
80
+
81
+ `name` フィールドはディレクトリ名と一致させること。
82
+
70
83
  #### Skillの構造
71
84
 
72
85
  ```
@@ -207,7 +220,7 @@ Skillドラフト作成後、2-3のリアルなテストプロンプトを作成
207
220
 
208
221
  ### ステップ3: 実行完了時にタイミングデータをキャプチャ
209
222
 
210
- 各サブエージェントタスク完了時、通知に`total_tokens`と`duration_ms`が含まれる。このデータを即座に`timing.json`に保存:
223
+ 各サブエージェントタスク完了時、通知に`total_tokens`と`duration_ms`が含まれる。**このデータを即座に`timing.json`に保存**すること — タスク通知は1回限りで、後からバッチ処理できない:
211
224
 
212
225
  ```json
213
226
  {
@@ -221,7 +234,7 @@ Skillドラフト作成後、2-3のリアルなテストプロンプトを作成
221
234
 
222
235
  全実行完了後:
223
236
 
224
- 1. **各実行を採点** — 採点サブエージェントを起動し`agents/grader.md`を読ませて各アサーションを出力に対して評価。`grading.json`に保存。grading.jsonの期待値配列は`text`、`passed`、`evidence`フィールドを使用すること。プログラムでチェック可能なアサーションは、目視ではなくスクリプトを書いて実行。
237
+ 1. **各実行を採点** — 採点サブエージェントを起動し`agents/grader.md`を読ませて各アサーションを出力に対して評価。`grading.json`に保存。grading.jsonの期待値配列は `text`、`passed`、`evidence` フィールドを使用すること(`name`/`met`/`details` やその他のバリアントは不可 — ビューアがこの正確なフィールド名に依存している)。プログラムでチェック可能なアサーションは、目視ではなくスクリプトを書いて実行。
225
238
 
226
239
  2. **ベンチマークに集計** — skill-creatorディレクトリから集計スクリプトを実行:
227
240
  ```bash
@@ -250,7 +263,20 @@ Skillドラフト作成後、2-3のリアルなテストプロンプトを作成
250
263
 
251
264
  ### ステップ5: フィードバックの読み込み
252
265
 
253
- ユーザーが完了を告げたら、`feedback.json`を読む。空のフィードバックはユーザーがOKと判断したことを意味する。具体的な指摘があるテストケースに改善を集中する。
266
+ ユーザーが完了を告げたら、`feedback.json`を読む:
267
+
268
+ ```json
269
+ {
270
+ "reviews": [
271
+ {"run_id": "eval-0-with_skill", "feedback": "チャートに軸ラベルがない", "timestamp": "..."},
272
+ {"run_id": "eval-1-with_skill", "feedback": "", "timestamp": "..."},
273
+ {"run_id": "eval-2-with_skill", "feedback": "完璧、気に入った", "timestamp": "..."}
274
+ ],
275
+ "status": "complete"
276
+ }
277
+ ```
278
+
279
+ 空のフィードバックはユーザーがOKと判断したことを意味する。具体的な指摘があるテストケースに改善を集中する。
254
280
 
255
281
  ビューアサーバーが不要になったらkillする。
256
282
 
@@ -303,7 +329,11 @@ SKILL.mdフロントマターのdescriptionフィールドは、ClaudeがSkill
303
329
 
304
330
  クエリは現実的で、Claude CodeやClaude.aiユーザーが実際にタイプするもの。抽象的ではなく、具体的で詳細なリクエスト。ファイルパス、個人的なコンテキスト、カラム名、会社名、URL等。少しの背景。一部は小文字や略語やタイプミスやカジュアルな話し方。長さを混ぜ、明確なケースよりエッジケースに焦点。
305
331
 
306
- **トリガーすべき**クエリ(8-10個)はカバレッジを考える。**トリガーすべきでない**クエリ(8-10個)はニアミスキーワードを共有するが実際には異なるものが必要なクエリ。
332
+ **Bad**: `"Format this data"`, `"Extract text from PDF"`, `"Create a chart"` 抽象的すぎて何もテストしない
333
+
334
+ **Good**: `"ok so my boss just sent me this xlsx file (its in my downloads, called something like 'Q4 sales final FINAL v2.xlsx') and she wants me to add a column that shows the profit margin as a percentage. The revenue is in column C and costs are in column D i think"` — 具体的、カジュアル、背景あり
335
+
336
+ **トリガーすべき**クエリ(8-10個)はカバレッジを考える。異なるフレーズ、フォーマル/カジュアル混在、スキル名を明示しないが明らかに必要なケース、珍しいユースケース。**トリガーすべきでない**クエリ(8-10個)はニアミス — キーワードを共有するが実際には異なるものが必要なクエリ。「フィボナッチ関数を書いて」のような明らかに無関係なクエリは避ける — テストにならない。
307
337
 
308
338
  ### ステップ2: ユーザーとレビュー
309
339
 
@@ -327,10 +357,11 @@ python -m scripts.run_loop \
327
357
  --skill-path <path-to-skill> \
328
358
  --model <model-id-powering-this-session> \
329
359
  --max-iterations 5 \
360
+ --holdout 0.4 \
330
361
  --verbose
331
362
  ```
332
363
 
333
- セッションのモデルIDを使用。60% train / 40% test分割。各クエリ3回実行で信頼性のあるトリガー率を取得。extended thinkingのClaudeで改善を提案。train/testの両方で再評価し、最大5回反復。完了時にHTMLレポートを開き、`best_description`をJSONで返す。
364
+ セッションのモデルIDを使用(`--model`)。`--holdout 0.4`(デフォルト)で60% train / 40% test分割。各クエリ3回実行で信頼性のあるトリガー率を取得。extended thinkingのClaudeで改善を提案(改善専用モデルは`--improve-model`で変更可)。train/testの両方で再評価し、最大5回反復。テストスコアは改善モデルに見せない(blinded_history)ため過学習を防止。完了時にHTMLレポートをブラウザで自動起動し、`best_description`をJSONで返す。`--results-dir <dir>`で全出力をタイムスタンプ付きサブディレクトリに保存可能。
334
365
 
335
366
  ### スキルトリガーの仕組み
336
367
 
@@ -352,11 +383,13 @@ python -m scripts.package_skill <path/to/skill-folder>
352
383
 
353
384
  ## Claude.ai固有の手順
354
385
 
355
- Claude.aiではサブエージェントがないため:
356
- - **テスト実行**: 各テストケースを順次に自分で実行。ベースラインはスキップ
357
- - **結果レビュー**: ブラウザが使えない場合、会話内で直接結果を提示
358
- - **ベンチマーク**: スキップ
359
- - **Description最適化**: `claude` CLIが必要なためスキップ
386
+ Claude.aiではサブエージェントがないため、一部の手順を変更する。コアワークフロー(ドラフト→テスト→レビュー→改善→繰り返し)は同じ。
387
+
388
+ - **テスト実行**: サブエージェントなし=並列実行不可。各テストケースを順次に自分で実行。これはサブエージェント版より厳密性が低い(スキル作成者がスキル実行者でもあるため完全なコンテキストを持つ)が、有用なサニティチェックであり、人間のレビューステップが補完する。ベースライン実行はスキップ
389
+ - **結果レビュー**: ブラウザが使えない場合、会話内で直接結果を提示。出力がファイルの場合はパスを伝える
390
+ - **ベンチマーク**: スキップ(ベースライン比較がサブエージェントなしでは意味をなさない)
391
+ - **Description最適化**: `claude` CLI(`claude -p`)が必要なためスキップ
392
+ - **ブラインド比較**: サブエージェントが必要。スキップ
360
393
 
361
394
  ---
362
395
 
@@ -364,7 +397,7 @@ Claude.aiではサブエージェントがないため:
364
397
 
365
398
  - サブエージェントあり、メインワークフロー(テスト並行実行等)は動作する
366
399
  - ブラウザがないため、ビューア生成時は`--static <output_path>`を使用
367
- - フィードバックは`feedback.json`としてダウンロード
400
+ - フィードバックは`feedback.json`としてダウンロード(ファイルアクセスのリクエストが必要な場合がある)
368
401
  - テスト実行後は**必ず**`generate_review.py`で評価ビューアを生成してから自己評価すること
369
402
 
370
403
  ---
@@ -396,6 +429,29 @@ scripts/init_skill.py <skill-name> --path <output-directory>
396
429
  scripts/package_skill.py <path/to/skill-folder> [output-directory]
397
430
  ```
398
431
 
432
+ ---
433
+
434
+ コアループの再掲(見落とし防止):
435
+
436
+ - Skillの目的を理解する
437
+ - Skillをドラフトまたは編集する
438
+ - テストプロンプトでSkill付きClaudeを実行する
439
+ - ユーザーと共に出力を評価する:
440
+ - benchmark.jsonを作成し`eval-viewer/generate_review.py`でユーザーレビューを支援
441
+ - 定量的評価を実施
442
+ - 満足するまで繰り返す
443
+ - 最終Skillをパッケージ化してユーザーに返す
444
+
445
+ **TodoList**: ステップを見失わないよう、TodoListが利用可能であればステップを追加すること。特にCowork環境では「evalsのJSONを作成し `eval-viewer/generate_review.py` を実行して人間がテストケースをレビューできるようにする」を必ずTodoListに含める。
446
+
447
+ ### 横断比較ツール(compare_runs.py)
448
+
449
+ 複数スキルの`run_loop.py`出力を横断比較する場合は`compare_runs.py`を使用:
450
+
451
+ ```bash
452
+ python -m scripts.compare_runs result1.json result2.json --verbose --json
453
+ ```
454
+
399
455
  <!-- @einja:excluded:start -->
400
456
  ## プロジェクト固有セクションの記入
401
457