@einja/dev-cli 0.1.41 → 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.
- package/dist/commands/task-loop/lib/github-client.test.js.map +1 -1
- package/dist/commands/task-loop/lib/vibe-kanban-rest-client.js +2 -2
- package/dist/commands/task-loop/lib/vibe-kanban-rest-client.js.map +1 -1
- package/dist/lib/preset-update/file-copier.js +3 -3
- package/dist/lib/preset-update/file-copier.js.map +1 -1
- package/dist/lib/sync/marker-processor.js.map +1 -1
- package/dist/lib/sync/metadata-manager.js +1 -1
- package/dist/lib/sync/metadata-manager.js.map +1 -1
- package/dist/lib/sync/metadata-manager.test.js +3 -2
- package/dist/lib/sync/metadata-manager.test.js.map +1 -1
- package/dist/lib/sync/project-private-synchronizer.d.ts.map +1 -1
- package/dist/lib/sync/project-private-synchronizer.js +5 -1
- package/dist/lib/sync/project-private-synchronizer.js.map +1 -1
- package/package.json +1 -1
- package/presets/default/.claude/agents/einja/backend-architect.md +17 -1
- package/presets/default/.claude/agents/einja/codex-agent.md +1 -1
- package/presets/default/.claude/agents/einja/design-engineer.md +1 -1
- package/presets/default/.claude/agents/einja/docs/docs-updater.md +3 -93
- package/presets/default/.claude/agents/einja/frontend-architect.md +17 -1
- package/presets/default/.claude/agents/einja/frontend-coder.md +1 -1
- package/presets/default/.claude/agents/einja/{specs/spec-design-generator.md → issue-specs/design-generator.md} +12 -7
- package/presets/default/.claude/agents/einja/{specs/spec-qa-generator.md → issue-specs/qa-generator.md} +6 -4
- package/presets/default/.claude/agents/einja/{specs/spec-requirements-generator.md → issue-specs/requirements-generator.md} +5 -5
- package/presets/default/.claude/agents/einja/{specs/spec-tasks-generator.md → issue-specs/tasks-generator.md} +13 -14
- package/presets/default/.claude/agents/einja/{specs/spec-tasks-validator.md → issue-specs/tasks-validator.md} +9 -9
- package/presets/default/.claude/agents/einja/issue-specs/ui-design-generator.md +114 -0
- package/presets/default/.claude/agents/einja/task/task-executer.md +9 -3
- package/presets/default/.claude/agents/einja/task/task-modification-analyzer.md +2 -2
- package/presets/default/.claude/agents/einja/task/task-qa.md +3 -3
- package/presets/default/.claude/agents/einja/task/task-reviewer.md +13 -1
- package/presets/default/.claude/commands/einja/einja-sync.md +119 -44
- package/presets/default/.claude/commands/einja/issue-exec.md +29 -19
- package/presets/default/.claude/commands/einja/sync-cursor-commands.md +6 -6
- package/presets/default/.claude/commands/einja/{update-docs-by-task-specs.md → update-docs-by-issue-specs.md} +58 -58
- package/presets/default/.claude/hooks/einja/plan-mode-skill-loader.sh +5 -1
- package/presets/default/.claude/settings.json +14 -4
- package/presets/default/.claude/skills/{einja-general-context-loader → _einja-general-context-loader}/SKILL.md +2 -2
- package/presets/default/.claude/skills/{einja-output-format → _einja-output-format}/SKILL.md +1 -1
- package/presets/default/.claude/skills/_einja-project-overview/SKILL.md +29 -0
- package/presets/default/.claude/skills/{einja-spec-context-loader → _einja-spec-context-loader}/SKILL.md +5 -5
- package/presets/default/.claude/skills/einja-coding-standards/references/testing-strategy.md +899 -0
- package/presets/default/.claude/skills/einja-conflict-resolver/SKILL.md +1 -1
- package/presets/default/.claude/skills/einja-create-pr/SKILL.md +138 -0
- package/presets/default/.claude/skills/einja-infra-maintenance/SKILL.md +779 -0
- package/presets/default/.claude/{commands/einja/spec-create.md → skills/einja-issue-spec-create/SKILL.md} +47 -24
- package/presets/default/.claude/skills/einja-issue-spec-generator/SKILL.md +105 -0
- package/presets/default/.claude/skills/einja-issue-spec-generator/references/format-rules.md +35 -0
- package/presets/default/.claude/skills/einja-issue-spec-validator/SKILL.md +130 -0
- package/presets/default/.claude/skills/einja-issue-spec-validator/references/validation-rules.md +52 -0
- package/presets/default/.claude/skills/einja-npm-release/SKILL.md +242 -0
- package/presets/default/.claude/skills/einja-skill-creator/SKILL.md +68 -12
- package/presets/default/.claude/skills/einja-skill-creator/scripts/aggregate_benchmark.py +368 -121
- package/presets/default/.claude/skills/einja-skill-creator/scripts/compare_runs.py +154 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/generate_report.py +14 -7
- package/presets/default/.claude/skills/einja-skill-creator/scripts/improve_description.py +2 -7
- package/presets/default/.claude/skills/einja-skill-creator/scripts/run_loop.py +263 -183
- package/presets/default/.claude/skills/einja-skill-first/SKILL.md +265 -0
- package/presets/default/.claude/skills/einja-subagent-question-protocol/SKILL.md +98 -0
- package/presets/default/.claude/skills/einja-task-commit/SKILL.md +7 -7
- package/presets/default/.claude/{commands/einja/task-exec.md → skills/einja-task-exec/SKILL.md} +3 -78
- package/presets/default/.claude/skills/einja-task-qa/SKILL.md +4 -4
- package/presets/default/.claude/skills/einja-task-qa/references/troubleshooting.md +1 -1
- package/presets/default/.claude/skills/einja-task-qa/references/usage-patterns.md +2 -2
- package/presets/default/.claude/skills/einja-team-exec/SKILL.md +165 -0
- package/presets/default/CLAUDE.md.template +21 -6
- package/presets/default/docs/einja/instructions/deployment-setup.md +1 -1
- package/presets/default/docs/einja/instructions/issue-exec-workflow.md +11 -11
- package/presets/default/docs/einja/instructions/local-server-environment-and-worktree.md +1 -1
- package/presets/default/docs/einja/instructions/setup-flow.md +279 -0
- package/presets/default/docs/einja/instructions/task-execute.md +42 -42
- package/presets/default/docs/einja/steering/acceptance-criteria-and-qa-guide.md +1 -1
- package/presets/default/docs/einja/steering/branch-strategy.md +1 -1
- package/presets/default/docs/einja/steering/development-workflow.md +93 -25
- package/presets/default/docs/einja/steering/infrastructure/deployment.md +107 -0
- package/presets/default/docs/einja/steering/task-management.md +9 -13
- package/presets/default/scripts/ensure-serena.sh +2 -2
- package/presets/default/scripts/env-rotate-secrets.ts +66 -6
- package/presets/default/scripts/init-github.ts +363 -0
- package/presets/default/scripts/init.sh +11 -5
- package/presets/default/scripts/setup-dev.ts +16 -1
- package/presets/default/.claude/agents/einja/git/conflict-resolver.md +0 -152
- package/presets/default/.claude/hooks/einja/validate-git-commit.sh +0 -239
- 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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
-
|
|
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
|
|