@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.
- package/README.md +89 -1
- package/dist/cli.js +1 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +71 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +187 -13
- package/dist/commands/sync.js.map +1 -1
- 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/dependency-checker.d.ts.map +1 -1
- package/dist/lib/merger.d.ts +12 -0
- package/dist/lib/merger.d.ts.map +1 -1
- package/dist/lib/merger.js +28 -0
- package/dist/lib/merger.js.map +1 -1
- package/dist/lib/preset-update/cli-repo-detector.d.ts.map +1 -1
- package/dist/lib/preset-update/file-copier.d.ts.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/preset-update/preset-finder.d.ts.map +1 -1
- package/dist/lib/preset.d.ts.map +1 -1
- package/dist/lib/sync/category-validator.d.ts +1 -1
- package/dist/lib/sync/category-validator.d.ts.map +1 -1
- package/dist/lib/sync/category-validator.js +2 -1
- package/dist/lib/sync/category-validator.js.map +1 -1
- package/dist/lib/sync/category-validator.test.js +3 -1
- package/dist/lib/sync/category-validator.test.js.map +1 -1
- package/dist/lib/sync/conflict-reporter.d.ts.map +1 -1
- package/dist/lib/sync/diff-engine.d.ts.map +1 -1
- package/dist/lib/sync/file-filter.d.ts.map +1 -1
- package/dist/lib/sync/file-filter.js +1 -0
- package/dist/lib/sync/file-filter.js.map +1 -1
- package/dist/lib/sync/integration.test.js +255 -69
- package/dist/lib/sync/integration.test.js.map +1 -1
- package/dist/lib/sync/json-processor.d.ts +4 -4
- package/dist/lib/sync/json-processor.d.ts.map +1 -1
- package/dist/lib/sync/json-processor.js +11 -11
- package/dist/lib/sync/json-processor.js.map +1 -1
- package/dist/lib/sync/marker-processor.d.ts +60 -8
- package/dist/lib/sync/marker-processor.d.ts.map +1 -1
- package/dist/lib/sync/marker-processor.js +117 -26
- package/dist/lib/sync/marker-processor.js.map +1 -1
- package/dist/lib/sync/marker-processor.test.js +261 -40
- package/dist/lib/sync/marker-processor.test.js.map +1 -1
- package/dist/lib/sync/metadata-manager.d.ts +4 -0
- package/dist/lib/sync/metadata-manager.d.ts.map +1 -1
- package/dist/lib/sync/metadata-manager.js +15 -0
- package/dist/lib/sync/metadata-manager.js.map +1 -1
- package/dist/lib/sync/metadata-manager.test.js +69 -0
- package/dist/lib/sync/metadata-manager.test.js.map +1 -1
- package/dist/lib/sync/orphan-cleaner.d.ts +29 -0
- package/dist/lib/sync/orphan-cleaner.d.ts.map +1 -0
- package/dist/lib/sync/orphan-cleaner.js +80 -0
- package/dist/lib/sync/orphan-cleaner.js.map +1 -0
- package/dist/lib/sync/orphan-cleaner.test.d.ts +2 -0
- package/dist/lib/sync/orphan-cleaner.test.d.ts.map +1 -0
- package/dist/lib/sync/orphan-cleaner.test.js +169 -0
- package/dist/lib/sync/orphan-cleaner.test.js.map +1 -0
- package/dist/lib/sync/project-private-synchronizer.d.ts +52 -0
- package/dist/lib/sync/project-private-synchronizer.d.ts.map +1 -0
- package/dist/lib/sync/project-private-synchronizer.js +110 -0
- package/dist/lib/sync/project-private-synchronizer.js.map +1 -0
- package/dist/lib/sync/project-private-synchronizer.test.d.ts +2 -0
- package/dist/lib/sync/project-private-synchronizer.test.d.ts.map +1 -0
- package/dist/lib/sync/project-private-synchronizer.test.js +348 -0
- package/dist/lib/sync/project-private-synchronizer.test.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/sync.d.ts +36 -6
- package/dist/types/sync.d.ts.map +1 -1
- package/dist/types/sync.js +2 -2
- package/dist/types/sync.js.map +1 -1
- package/package.json +5 -4
- package/presets/default/.claude/agents/einja/Explore.md +140 -0
- package/presets/default/.claude/agents/einja/backend-architect.md +21 -1
- package/presets/default/.claude/agents/einja/codex-agent.md +5 -1
- package/presets/default/.claude/agents/einja/design-engineer.md +5 -1
- package/presets/default/.claude/agents/einja/docs/docs-updater.md +7 -93
- package/presets/default/.claude/agents/einja/frontend-architect.md +21 -1
- package/presets/default/.claude/agents/einja/frontend-coder.md +5 -1
- package/presets/default/.claude/agents/einja/{specs/spec-design-generator.md → issue-specs/design-generator.md} +16 -8
- package/presets/default/.claude/agents/einja/{specs/spec-qa-generator.md → issue-specs/qa-generator.md} +10 -4
- package/presets/default/.claude/agents/einja/{specs/spec-requirements-generator.md → issue-specs/requirements-generator.md} +9 -6
- package/presets/default/.claude/agents/einja/{specs/spec-tasks-generator.md → issue-specs/tasks-generator.md} +19 -16
- package/presets/default/.claude/agents/einja/{specs/spec-tasks-validator.md → issue-specs/tasks-validator.md} +13 -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 +64 -116
- package/presets/default/.claude/agents/einja/task/task-modification-analyzer.md +6 -2
- package/presets/default/.claude/agents/einja/task/task-qa.md +7 -3
- package/presets/default/.claude/agents/einja/task/task-reviewer.md +17 -1
- package/presets/default/.claude/commands/einja/einja-sync.md +124 -45
- package/presets/default/.claude/commands/einja/frontend-implement.md +3 -1
- package/presets/default/.claude/commands/einja/issue-exec.md +413 -0
- package/presets/default/.claude/commands/einja/start-dev.md +4 -0
- package/presets/default/.claude/commands/einja/sync-cursor-commands.md +10 -6
- package/presets/default/.claude/commands/einja/{update-docs-by-task-specs.md → update-docs-by-issue-specs.md} +61 -57
- package/presets/default/.claude/hooks/einja/plan-mode-skill-loader.sh +27 -0
- package/presets/default/.claude/settings.json +29 -5
- package/presets/default/.claude/skills/{einja-general-context-loader → _einja-general-context-loader}/SKILL.md +6 -2
- package/presets/default/.claude/skills/{einja-output-format → _einja-output-format}/SKILL.md +5 -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 +9 -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 +5 -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} +60 -23
- 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 +311 -263
- package/presets/default/.claude/skills/einja-skill-creator/agents/analyzer.md +274 -0
- package/presets/default/.claude/skills/einja-skill-creator/agents/comparator.md +202 -0
- package/presets/default/.claude/skills/einja-skill-creator/agents/grader.md +195 -0
- package/presets/default/.claude/skills/einja-skill-creator/assets/eval_review.html +146 -0
- package/presets/default/.claude/skills/einja-skill-creator/eval-viewer/generate_review.py +471 -0
- package/presets/default/.claude/skills/einja-skill-creator/eval-viewer/viewer.html +1325 -0
- package/presets/default/.claude/skills/einja-skill-creator/references/schemas.md +430 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/aggregate_benchmark.py +401 -0
- 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 +272 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/improve_description.py +247 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/init_skill.py +13 -19
- package/presets/default/.claude/skills/einja-skill-creator/scripts/package_skill.py +36 -7
- package/presets/default/.claude/skills/einja-skill-creator/scripts/run_eval.py +310 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/run_loop.py +375 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/utils.py +48 -0
- 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 +11 -7
- package/presets/default/.claude/{commands/einja/task-exec.md → skills/einja-task-exec/SKILL.md} +106 -89
- package/presets/default/.claude/skills/einja-task-qa/SKILL.md +8 -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/.envrc +5 -0
- package/presets/default/.mcp.json +2 -12
- package/presets/default/CLAUDE.md.template +45 -8
- package/presets/default/docs/einja/example/specs/issues/issue999-example-task/tasks.md +1 -1
- package/presets/default/docs/einja/instructions/deployment-setup.md +4 -9
- package/presets/default/docs/einja/instructions/environment-setup.md +3 -8
- package/presets/default/docs/einja/instructions/issue-exec-workflow.md +276 -0
- package/presets/default/docs/einja/instructions/local-server-environment-and-worktree.md +71 -9
- package/presets/default/docs/einja/instructions/neon-cli-reference.md +3 -8
- package/presets/default/docs/einja/instructions/setup-flow.md +279 -0
- package/presets/default/docs/einja/instructions/task-execute.md +63 -68
- package/presets/default/docs/einja/instructions/vercel-cli-reference.md +17 -10
- package/presets/default/docs/einja/steering/README.md +11 -11
- package/presets/default/docs/einja/steering/acceptance-criteria-and-qa-guide.md +4 -9
- package/presets/default/docs/einja/steering/architecture.md +3 -8
- package/presets/default/docs/einja/steering/branch-strategy.md +63 -70
- package/presets/default/docs/einja/steering/commit-rules.md +3 -8
- package/presets/default/docs/einja/steering/db-schema-design.md +3 -8
- package/presets/default/docs/einja/steering/development/api-development.md +3 -8
- package/presets/default/docs/einja/steering/development/backend-architecture.md +3 -8
- package/presets/default/docs/einja/steering/development/coding-standards.md +723 -0
- package/presets/default/docs/einja/steering/development/component-design.md +502 -0
- package/presets/default/docs/einja/steering/development/database-guidelines.md +2 -2
- package/presets/default/docs/einja/steering/development/frontend-development.md +3 -8
- package/presets/default/docs/einja/steering/development/playwright-guidelines.md +59 -0
- package/presets/default/docs/einja/steering/development/review-guidelines.md +3 -8
- package/presets/default/docs/einja/steering/development/testing-strategy.md +3 -8
- package/presets/default/docs/einja/steering/development-workflow.md +155 -140
- package/presets/default/docs/einja/steering/infrastructure/deployment.md +156 -55
- package/presets/default/docs/einja/steering/infrastructure/environment-variables.md +4 -8
- package/presets/default/docs/einja/steering/product.md +3 -8
- package/presets/default/docs/einja/steering/task-management.md +22 -110
- package/presets/default/scripts/ensure-serena.sh +75 -0
- package/presets/default/scripts/env-rotate-secrets.ts +396 -0
- package/presets/default/scripts/env-show.ts +130 -0
- package/presets/default/scripts/env.ts +479 -0
- package/presets/default/scripts/init-github.ts +363 -0
- package/presets/default/scripts/init.sh +98 -0
- package/presets/default/scripts/lib/env-common.ts +108 -0
- package/presets/default/scripts/lib/worktree-config.ts +64 -0
- package/presets/default/scripts/setup-dev.ts +655 -0
- package/presets/default/scripts/stop-serena.sh +25 -0
- package/presets/default/scripts/worktree/dev.ts +872 -0
- package/dist/lib/sync/seed-synchronizer.d.ts +0 -27
- package/dist/lib/sync/seed-synchronizer.d.ts.map +0 -1
- package/dist/lib/sync/seed-synchronizer.js +0 -72
- package/dist/lib/sync/seed-synchronizer.js.map +0 -1
- package/dist/lib/sync/seed-synchronizer.test.d.ts +0 -2
- package/dist/lib/sync/seed-synchronizer.test.d.ts.map +0 -1
- package/dist/lib/sync/seed-synchronizer.test.js +0 -147
- package/dist/lib/sync/seed-synchronizer.test.js.map +0 -1
- package/presets/default/.claude/agents/einja/git/conflict-resolver.md +0 -148
- package/presets/default/.claude/hooks/einja/validate-git-commit.sh +0 -239
- package/presets/default/.claude/skills/einja-api-development/SKILL.md +0 -14
- package/presets/default/.claude/skills/einja-backend-architecture/SKILL.md +0 -18
- package/presets/default/.claude/skills/einja-coding-standards/SKILL.md +0 -132
- package/presets/default/.claude/skills/einja-coding-standards/references/import-conventions.md +0 -69
- package/presets/default/.claude/skills/einja-coding-standards/references/naming-conventions.md +0 -107
- package/presets/default/.claude/skills/einja-coding-standards/references/prohibited-patterns.md +0 -169
- package/presets/default/.claude/skills/einja-coding-standards/references/typescript-rules.md +0 -247
- package/presets/default/.claude/skills/einja-component-design/SKILL.md +0 -109
- package/presets/default/.claude/skills/einja-component-design/references/directory-structure.md +0 -117
- package/presets/default/.claude/skills/einja-component-design/references/props-patterns.md +0 -159
- package/presets/default/.claude/skills/einja-component-design/references/styling-guide.md +0 -122
- package/presets/default/.claude/skills/einja-frontend-development/SKILL.md +0 -14
- package/presets/default/.claude/skills/einja-project-overview/SKILL.md +0 -35
- package/presets/default/docs/einja/instructions/task-vibe-kanban-loop.md +0 -565
|
@@ -1,421 +1,469 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: einja-skill-creator
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
新しいSkillの作成、既存Skillの改善・更新、Skillパフォーマンスの評価に使用。Skillをゼロから作成したい場合、既存Skillを更新・最適化したい場合、評価テストでSkillをテストしたい場合、ベンチマークでパフォーマンスを分析したい場合、Skillのdescriptionのトリガー精度を最適化したい場合に使用。Create new skills, modify and improve existing skills, measure skill performance, run evals, benchmark, optimize description triggering.
|
|
4
5
|
---
|
|
5
6
|
|
|
6
7
|
# Skill作成ガイド
|
|
7
8
|
|
|
8
|
-
|
|
9
|
+
Skillを作成し、反復的に改善するためのSkill。
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
大まかなプロセスは以下の通り:
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
- Skillに何をさせたいか、どのように動作すべきかを決める
|
|
14
|
+
- Skillのドラフトを書く
|
|
15
|
+
- いくつかのテストプロンプトを作成し、Skill付きのClaudeで実行する
|
|
16
|
+
- ユーザーと共に結果を定性的・定量的に評価する
|
|
17
|
+
- バックグラウンドで実行中に、定量的な評価項目がなければドラフトする。すでにある場合はそのまま使用するか、必要に応じて修正する。ユーザーに説明する
|
|
18
|
+
- `eval-viewer/generate_review.py`スクリプトで結果をユーザーに表示し、定量的メトリクスも確認してもらう
|
|
19
|
+
- ユーザーの評価フィードバック(および定量的ベンチマークから明らかになった問題)に基づいてSkillを書き直す
|
|
20
|
+
- 満足するまで繰り返す
|
|
21
|
+
- テストセットを拡大し、より大規模に再試行する
|
|
13
22
|
|
|
14
|
-
Skill
|
|
23
|
+
このSkillを使う際の役割は、ユーザーがこのプロセスのどこにいるかを把握し、次のステージに進む手助けをすること。例えば「Xのスキルを作りたい」と言われたら、意図を明確化し、ドラフトを書き、テストケースを作成し、評価方法を決め、全プロンプトを実行し、繰り返す。
|
|
15
24
|
|
|
16
|
-
|
|
25
|
+
一方、すでにドラフトがある場合は、直接eval/反復パートに入れる。
|
|
17
26
|
|
|
18
|
-
|
|
19
|
-
2. **ツール統合** - 特定のファイル形式やAPIを扱うための指示
|
|
20
|
-
3. **ドメイン専門知識** - 会社固有の知識、スキーマ、ビジネスロジック
|
|
21
|
-
4. **バンドルリソース** - 複雑で反復的なタスクのためのスクリプト、参照資料、アセット
|
|
27
|
+
もちろん柔軟に。ユーザーが「大量の評価は不要、一緒に感覚で作ろう」と言えばそうする。
|
|
22
28
|
|
|
23
|
-
|
|
29
|
+
Skillが完成した後(順序は柔軟)、Skillのdescription最適化も実行できる。これには専用のスクリプトがある。
|
|
24
30
|
|
|
25
|
-
|
|
31
|
+
## ユーザーとのコミュニケーション
|
|
26
32
|
|
|
27
|
-
|
|
33
|
+
スキルクリエイターは、コーディング用語への馴染み度が大きく異なるユーザーに使われる可能性がある。コンテキストの手がかりに注意して、コミュニケーションの言い回しを調整すること。デフォルトの目安:
|
|
28
34
|
|
|
29
|
-
|
|
35
|
+
- 「評価」「ベンチマーク」はボーダーラインだがOK
|
|
36
|
+
- 「JSON」「アサーション」はユーザーがそれらを知っている確実な手がかりを見てから、説明なしで使用する
|
|
30
37
|
|
|
31
|
-
|
|
38
|
+
疑わしい場合は用語を簡潔に説明してOK。不明な場合は短い定義を添えて明確にする。
|
|
32
39
|
|
|
33
|
-
|
|
40
|
+
---
|
|
34
41
|
|
|
35
|
-
|
|
42
|
+
## Skillの作成
|
|
36
43
|
|
|
37
|
-
|
|
44
|
+
### 意図の把握
|
|
38
45
|
|
|
39
|
-
|
|
46
|
+
ユーザーの意図を理解することから始める。現在の会話にすでにワークフローが含まれている場合(例:「これをスキルにして」)、会話履歴から回答を抽出する — 使用されたツール、ステップの順序、ユーザーの修正、観察されたI/O形式。ユーザーにギャップを埋めてもらい、次に進む前に確認する。
|
|
40
47
|
|
|
41
|
-
|
|
48
|
+
1. このSkillでClaudeに何をできるようにしたいか?
|
|
49
|
+
2. このSkillはいつトリガーすべきか?(どのようなユーザーフレーズ/コンテキスト)
|
|
50
|
+
3. 期待される出力フォーマットは?
|
|
51
|
+
4. Skillの動作を検証するためのテストケースを設定すべきか?客観的に検証可能な出力(ファイル変換、データ抽出、コード生成、固定ワークフロー)を持つSkillはテストケースの恩恵を受ける。主観的な出力(文体、アート)は通常不要。Skillの種類に基づいて適切なデフォルトを提案するが、最終判断はユーザーに委ねる。
|
|
42
52
|
|
|
43
|
-
|
|
53
|
+
### インタビューとリサーチ
|
|
44
54
|
|
|
45
|
-
|
|
55
|
+
エッジケース、I/Oフォーマット、サンプルファイル、成功基準、依存関係について積極的に質問する。テストプロンプトの作成はこの部分が固まってから。
|
|
46
56
|
|
|
47
|
-
|
|
57
|
+
利用可能なMCPを確認 — リサーチに有用なら(ドキュメント検索、類似スキル発見、ベストプラクティス参照)、サブエージェントで並行リサーチ。
|
|
48
58
|
|
|
49
|
-
|
|
50
|
-
skill-name/
|
|
51
|
-
├── SKILL.md (必須)
|
|
52
|
-
│ ├── YAMLフロントマターメタデータ (必須)
|
|
53
|
-
│ │ ├── name: (必須)
|
|
54
|
-
│ │ ├── description: (必須)
|
|
55
|
-
│ │ └── compatibility: (オプション、めったに不要)
|
|
56
|
-
│ └── Markdown指示 (必須)
|
|
57
|
-
└── バンドルリソース (オプション)
|
|
58
|
-
├── scripts/ - 実行可能コード(Python/Bash等)
|
|
59
|
-
├── references/ - 必要に応じてコンテキストに読み込むドキュメント
|
|
60
|
-
└── assets/ - 出力で使用されるファイル(テンプレート、アイコン、フォント等)
|
|
61
|
-
```
|
|
59
|
+
### SKILL.mdの作成
|
|
62
60
|
|
|
63
|
-
|
|
61
|
+
ユーザーインタビューに基づいて以下を記入:
|
|
64
62
|
|
|
65
|
-
|
|
63
|
+
- **name**: Skill識別子。ディレクトリ名と一致させること
|
|
64
|
+
- インナーSkill(他Skillから内部的に参照される、プロトコル定義、出力テンプレート等)
|
|
65
|
+
は `_` プレフィックスをつける(例: `_einja-output-format`)
|
|
66
|
+
- プロジェクト固有のSkillには名前空間プレフィックスをつけない
|
|
67
|
+
- プロジェクトの名前空間プレフィックスはCLAUDE.mdに定義される
|
|
68
|
+
- **description**: いつトリガーするか、何をするか。主要なトリガーメカニズム。Skillが何をするかと使用する具体的なコンテキストの両方を含める。「いつ使用するか」情報はすべてここに。本文はトリガー後に読み込まれるため、本文の「使用すべき場合」セクションはClaudeに役立たない。注意:現在Claudeはスキルを「アンダートリガー」する傾向がある。対策としてdescriptionを少し「積極的」にする
|
|
69
|
+
- **compatibility**: 必要なツール、依存関係(オプション、まれに必要)
|
|
70
|
+
- **Skillの残りの部分 :)**
|
|
66
71
|
|
|
67
|
-
|
|
68
|
-
- **本文**(Markdown): スキル使用のための指示とガイダンス。スキルがトリガーされた後(もしあれば)のみ読み込まれます。
|
|
72
|
+
### Skill記述ガイド
|
|
69
73
|
|
|
70
|
-
####
|
|
74
|
+
#### ディレクトリ命名規則
|
|
71
75
|
|
|
72
|
-
|
|
76
|
+
ディレクトリ名はSkillの配布範囲を決定する:
|
|
77
|
+
- `{namespace}-{name}/` — 配布対象のユーザー向けSkill(例: `einja-task-commit/`)
|
|
78
|
+
- `_{namespace}-{name}/` — 配布対象のインナーSkill(例: `_einja-output-format/`)
|
|
79
|
+
- `{name}/` — プロジェクト固有Skill、配布されない(例: `cli-package-specs/`)
|
|
73
80
|
|
|
74
|
-
|
|
81
|
+
`name` フィールドはディレクトリ名と一致させること。
|
|
75
82
|
|
|
76
|
-
|
|
77
|
-
- **例**: PDF回転タスクのための `scripts/rotate_pdf.py`
|
|
78
|
-
- **利点**: トークン効率的、決定論的、コンテキストに読み込まずに実行可能
|
|
79
|
-
- **注意**: スクリプトはパッチや環境固有の調整のためにClaudeによって読まれる場合があります
|
|
83
|
+
#### Skillの構造
|
|
80
84
|
|
|
81
|
-
|
|
85
|
+
```
|
|
86
|
+
skill-name/
|
|
87
|
+
├── SKILL.md(必須)
|
|
88
|
+
│ ├── YAMLフロントマター(name、description必須)
|
|
89
|
+
│ └── Markdown指示
|
|
90
|
+
└── バンドルリソース(オプション)
|
|
91
|
+
├── scripts/ - 決定論的/反復タスク用の実行可能コード
|
|
92
|
+
├── references/ - 必要に応じてコンテキストに読み込むドキュメント
|
|
93
|
+
└── assets/ - 出力で使用されるファイル(テンプレート、アイコン、フォント等)
|
|
94
|
+
```
|
|
82
95
|
|
|
83
|
-
|
|
96
|
+
#### 段階的開示
|
|
84
97
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
-
|
|
88
|
-
-
|
|
89
|
-
- **ベストプラクティス**: ファイルが大きい場合(>10k語)、SKILL.mdにgrep検索パターンを含める
|
|
90
|
-
- **重複を避ける**: 情報はSKILL.mdまたはreferencesファイルのどちらか一方に存在すべきで、両方には存在すべきではありません。詳細情報にはreferencesファイルを優先してください。SKILL.mdには必須の手続き的指示とワークフローガイダンスのみを保持し、詳細な参照資料、スキーマ、例はreferencesファイルに移動してください。
|
|
98
|
+
Skillは3レベルの読み込みシステムを使用:
|
|
99
|
+
1. **メタデータ**(name + description)- 常にコンテキスト内(~100語)
|
|
100
|
+
2. **SKILL.md本文** - Skillトリガー時(500行以内が理想)
|
|
101
|
+
3. **バンドルリソース** - 必要に応じて(無制限、スクリプトは読み込まずに実行可能)
|
|
91
102
|
|
|
92
|
-
|
|
103
|
+
語数は目安であり、必要に応じて長くしてよい。
|
|
93
104
|
|
|
94
|
-
|
|
105
|
+
**主要パターン:**
|
|
106
|
+
- SKILL.mdは500行以内に抑える。この制限に近づいたら追加の階層を設け、モデルが次にどこを参照すべきか明確に示す
|
|
107
|
+
- referenceファイルをSKILL.mdから明確に参照し、いつ読むべきか記載
|
|
108
|
+
- 大きなreferenceファイル(300行超)には目次を含める
|
|
95
109
|
|
|
96
|
-
|
|
97
|
-
- **例**: ブランドアセットのための `assets/logo.png`、PowerPointテンプレートのための `assets/slides.pptx`、HTML/Reactボイラープレートのための `assets/frontend-template/`、タイポグラフィのための `assets/font.ttf`
|
|
98
|
-
- **使用例**: テンプレート、画像、アイコン、ボイラープレートコード、フォント、コピーまたは修正されるサンプルドキュメント
|
|
99
|
-
- **利点**: 出力リソースとドキュメントを分離し、Claudeがコンテキストに読み込まずにファイルを使用可能
|
|
110
|
+
**ドメイン別整理**: Skillが複数ドメイン/フレームワークをサポートする場合、バリエーションごとに整理:
|
|
100
111
|
|
|
101
|
-
|
|
112
|
+
```
|
|
113
|
+
cloud-deploy/
|
|
114
|
+
├── SKILL.md(ワークフロー + 選択)
|
|
115
|
+
└── references/
|
|
116
|
+
├── aws.md
|
|
117
|
+
├── gcp.md
|
|
118
|
+
└── azure.md
|
|
119
|
+
```
|
|
102
120
|
|
|
103
|
-
|
|
121
|
+
Claudeは関連するreferenceファイルのみ読む。
|
|
104
122
|
|
|
105
|
-
|
|
106
|
-
- INSTALLATION_GUIDE.md
|
|
107
|
-
- QUICK_REFERENCE.md
|
|
108
|
-
- CHANGELOG.md
|
|
109
|
-
- その他
|
|
123
|
+
#### 驚きのない原則
|
|
110
124
|
|
|
111
|
-
Skill
|
|
125
|
+
Skillにマルウェア、エクスプロイトコード、システムセキュリティを侵害する可能性のあるコンテンツを含めてはならない。誤解を招くSkillや、不正アクセス、データ窃取、その他の悪意のある活動を助長するSkillの作成に協力しないこと。「XYZとしてロールプレイ」のようなものはOK。
|
|
112
126
|
|
|
113
|
-
|
|
127
|
+
#### 参考ドキュメントの記録
|
|
114
128
|
|
|
115
|
-
Skill
|
|
129
|
+
Skill作成時に参考にした公式ドキュメント、ベースとなるSkill、設計判断の根拠となった情報源をSKILL.md内にHTMLコメントで記載する。
|
|
116
130
|
|
|
117
|
-
|
|
118
|
-
2. **SKILL.md本文** - スキルトリガー時(<5k語)
|
|
119
|
-
3. **バンドルリソース** - Claudeが必要に応じて(無制限。スクリプトはコンテキストウィンドウに読み込まずに実行可能)
|
|
131
|
+
**記載箇所**: フロントマター(`---`)直後
|
|
120
132
|
|
|
121
|
-
|
|
133
|
+
**フォーマット**:
|
|
134
|
+
```
|
|
135
|
+
<!-- 参考: https://example.com/docs/feature -->
|
|
136
|
+
<!-- ベース: .claude/skills/existing-skill/SKILL.md -->
|
|
137
|
+
```
|
|
122
138
|
|
|
123
|
-
|
|
139
|
+
これにより、Skillの設計根拠を後から追跡でき、公式仕様の変更時に影響範囲を特定しやすくなる。
|
|
124
140
|
|
|
125
|
-
|
|
141
|
+
#### 記述パターン
|
|
126
142
|
|
|
127
|
-
|
|
143
|
+
指示には命令形を使用する。
|
|
128
144
|
|
|
145
|
+
**出力フォーマットの定義** - 例:
|
|
129
146
|
```markdown
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
## 高度な機能
|
|
138
|
-
|
|
139
|
-
- **フォーム入力**: 完全ガイドは [FORMS.md](FORMS.md) を参照
|
|
140
|
-
- **APIリファレンス**: すべてのメソッドは [REFERENCE.md](REFERENCE.md) を参照
|
|
141
|
-
- **例**: 一般的なパターンは [EXAMPLES.md](EXAMPLES.md) を参照
|
|
147
|
+
## レポート構造
|
|
148
|
+
常にこのテンプレートを使用:
|
|
149
|
+
# [タイトル]
|
|
150
|
+
## エグゼクティブサマリー
|
|
151
|
+
## 主要な発見
|
|
152
|
+
## 推奨事項
|
|
142
153
|
```
|
|
143
154
|
|
|
144
|
-
|
|
155
|
+
**例のパターン** - 例を含めると有用:
|
|
156
|
+
```markdown
|
|
157
|
+
## コミットメッセージフォーマット
|
|
158
|
+
**例1:**
|
|
159
|
+
入力: Added user authentication with JWT tokens
|
|
160
|
+
出力: feat(auth): implement JWT-based authentication
|
|
161
|
+
```
|
|
145
162
|
|
|
146
|
-
|
|
163
|
+
### 記述スタイル
|
|
147
164
|
|
|
148
|
-
|
|
165
|
+
重苦しい必須語句(MUST)の代わりに、物事がなぜ重要かをモデルに説明する。心の理論を使い、Skillを一般的で、特定の例に狭くなりすぎないようにする。ドラフトを書き、新鮮な目で見直して改善する。
|
|
149
166
|
|
|
150
|
-
|
|
151
|
-
bigquery-skill/
|
|
152
|
-
├── SKILL.md (概要とナビゲーション)
|
|
153
|
-
└── references/
|
|
154
|
-
├── finance.md (収益、請求メトリクス)
|
|
155
|
-
├── sales.md (商談、パイプライン)
|
|
156
|
-
├── product.md (API使用、機能)
|
|
157
|
-
└── marketing.md (キャンペーン、アトリビューション)
|
|
158
|
-
```
|
|
167
|
+
### テストケース
|
|
159
168
|
|
|
160
|
-
|
|
169
|
+
Skillドラフト作成後、2-3のリアルなテストプロンプトを作成 — 実際のユーザーが言いそうなもの。ユーザーに共有:「テストケースをいくつか考えました。これで良いですか?追加したいものはありますか?」そして実行する。
|
|
161
170
|
|
|
162
|
-
|
|
171
|
+
テストケースを`evals/evals.json`に保存。アサーションはまだ書かない — プロンプトのみ。アサーションは実行中に次のステップで作成する。
|
|
163
172
|
|
|
173
|
+
```json
|
|
174
|
+
{
|
|
175
|
+
"skill_name": "example-skill",
|
|
176
|
+
"evals": [
|
|
177
|
+
{
|
|
178
|
+
"id": 1,
|
|
179
|
+
"prompt": "ユーザーのタスクプロンプト",
|
|
180
|
+
"expected_output": "期待される結果の説明",
|
|
181
|
+
"files": []
|
|
182
|
+
}
|
|
183
|
+
]
|
|
184
|
+
}
|
|
164
185
|
```
|
|
165
|
-
cloud-deploy/
|
|
166
|
-
├── SKILL.md (ワークフロー + プロバイダー選択)
|
|
167
|
-
└── references/
|
|
168
|
-
├── aws.md (AWSデプロイパターン)
|
|
169
|
-
├── gcp.md (GCPデプロイパターン)
|
|
170
|
-
└── azure.md (Azureデプロイパターン)
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
ユーザーがAWSを選択すると、Claudeはaws.mdのみを読みます。
|
|
174
186
|
|
|
175
|
-
|
|
187
|
+
全スキーマは`references/schemas.md`を参照(アサーションフィールドを含む)。
|
|
176
188
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
```markdown
|
|
180
|
-
# DOCX Processing
|
|
189
|
+
## テストケースの実行と評価
|
|
181
190
|
|
|
182
|
-
|
|
191
|
+
このセクションは一連の連続したシーケンス — 途中で止めないこと。`/skill-test`やその他のテスティングスキルは使用しないこと。
|
|
183
192
|
|
|
184
|
-
|
|
193
|
+
結果は`<skill-name>-workspace/`にスキルディレクトリの兄弟として配置。ワークスペース内はイテレーションごとに整理(`iteration-1/`、`iteration-2/`等)、その中に各テストケースのディレクトリ(`eval-0/`、`eval-1/`等)。事前にすべて作成する必要はない — 進行に応じて作成。
|
|
185
194
|
|
|
186
|
-
|
|
195
|
+
### ステップ1: 全実行(with-skill AND ベースライン)を同じターンで起動
|
|
187
196
|
|
|
188
|
-
|
|
197
|
+
各テストケースに対して、同じターンで2つのサブエージェントを起動 — 1つはSkill付き、1つはSkillなし。重要:with-skill実行を先にすべて起動してからベースラインに戻るのではなく、すべてを一度に起動してほぼ同時に完了するようにする。
|
|
189
198
|
|
|
190
|
-
|
|
191
|
-
**OOXMLの詳細**: [OOXML.md](OOXML.md) を参照
|
|
199
|
+
**With-skill実行:**
|
|
192
200
|
```
|
|
201
|
+
このタスクを実行:
|
|
202
|
+
- Skillパス: <path-to-skill>
|
|
203
|
+
- タスク: <evalプロンプト>
|
|
204
|
+
- 入力ファイル: <evalファイル、またはなし>
|
|
205
|
+
- 出力保存先: <workspace>/iteration-<N>/eval-<ID>/with_skill/outputs/
|
|
206
|
+
- 保存する出力: <ユーザーが気にするもの>
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**ベースライン実行**(同じプロンプト、コンテキストに応じたベースライン):
|
|
210
|
+
- **新規Skill作成**: Skillなし。同じプロンプト、Skillパスなし、`without_skill/outputs/`に保存
|
|
211
|
+
- **既存Skill改善**: 旧バージョン。編集前にスナップショット(`cp -r <skill-path> <workspace>/skill-snapshot/`)、ベースラインサブエージェントをスナップショットに向ける。`old_skill/outputs/`に保存
|
|
193
212
|
|
|
194
|
-
|
|
213
|
+
各テストケースに`eval_metadata.json`を作成(アサーションは空でよい)。各evalにテスト内容を説明する名前を付ける。
|
|
195
214
|
|
|
196
|
-
|
|
215
|
+
### ステップ2: 実行中にアサーションをドラフト
|
|
197
216
|
|
|
198
|
-
|
|
199
|
-
- **長いreferencesファイルの構造化** - 100行を超えるファイルの場合、プレビュー時にClaudeが全体のスコープを見ることができるよう、冒頭に目次を含める。
|
|
217
|
+
実行完了を待つだけでなく、この時間を有効活用。各テストケースの定量的アサーションをドラフトし、ユーザーに説明する。
|
|
200
218
|
|
|
201
|
-
|
|
219
|
+
良いアサーションは客観的に検証可能で、説明的な名前を持つ — ベンチマークビューアで一目で何をチェックしているか分かるべき。主観的なSkill(文体、デザイン品質)は定性的評価が適切 — 人間の判断が必要なものにアサーションを強制しない。
|
|
202
220
|
|
|
203
|
-
|
|
221
|
+
### ステップ3: 実行完了時にタイミングデータをキャプチャ
|
|
204
222
|
|
|
205
|
-
|
|
206
|
-
2. 再利用可能なスキルコンテンツを計画する(scripts、reference、assets)
|
|
207
|
-
3. スキルを初期化する(init_skill.py実行)
|
|
208
|
-
4. スキルを編集する(リソースを実装し、SKILL.mdを記述)
|
|
209
|
-
5. スキルをパッケージ化する(package_skill.py実行)
|
|
210
|
-
6. 実際の使用に基づいて反復改善する
|
|
223
|
+
各サブエージェントタスク完了時、通知に`total_tokens`と`duration_ms`が含まれる。**このデータを即座に`timing.json`に保存**すること — タスク通知は1回限りで、後からバッチ処理できない:
|
|
211
224
|
|
|
212
|
-
|
|
225
|
+
```json
|
|
226
|
+
{
|
|
227
|
+
"total_tokens": 84852,
|
|
228
|
+
"duration_ms": 23332,
|
|
229
|
+
"total_duration_seconds": 23.3
|
|
230
|
+
}
|
|
231
|
+
```
|
|
213
232
|
|
|
214
|
-
### ステップ
|
|
233
|
+
### ステップ4: 採点、集計、ビューア起動
|
|
215
234
|
|
|
216
|
-
|
|
235
|
+
全実行完了後:
|
|
217
236
|
|
|
218
|
-
|
|
237
|
+
1. **各実行を採点** — 採点サブエージェントを起動し`agents/grader.md`を読ませて各アサーションを出力に対して評価。`grading.json`に保存。grading.jsonの期待値配列は `text`、`passed`、`evidence` フィールドを使用すること(`name`/`met`/`details` やその他のバリアントは不可 — ビューアがこの正確なフィールド名に依存している)。プログラムでチェック可能なアサーションは、目視ではなくスクリプトを書いて実行。
|
|
219
238
|
|
|
220
|
-
|
|
239
|
+
2. **ベンチマークに集計** — skill-creatorディレクトリから集計スクリプトを実行:
|
|
240
|
+
```bash
|
|
241
|
+
python -m scripts.aggregate_benchmark <workspace>/iteration-N --skill-name <name>
|
|
242
|
+
```
|
|
243
|
+
各with_skillバージョンをベースライン対応の前に配置。
|
|
221
244
|
|
|
222
|
-
|
|
223
|
-
- 「このスキルがどのように使用されるかの例を教えてください」
|
|
224
|
-
- 「『この画像から赤目を除去』や『この画像を回転』のようなユーザーのリクエストを想像できます。このスキルが使用される他の方法はありますか?」
|
|
225
|
-
- 「このスキルをトリガーするためにユーザーは何と言うでしょうか?」
|
|
245
|
+
3. **アナリストパスを実行** — ベンチマークデータを読み、集計統計が隠すパターンを表面化。`agents/analyzer.md`の「ベンチマーク結果の分析」セクションを参照。
|
|
226
246
|
|
|
227
|
-
|
|
247
|
+
4. **ビューアを起動** — 定性的出力と定量的データの両方で:
|
|
248
|
+
```bash
|
|
249
|
+
nohup python <skill-creator-path>/eval-viewer/generate_review.py \
|
|
250
|
+
<workspace>/iteration-N \
|
|
251
|
+
--skill-name "my-skill" \
|
|
252
|
+
--benchmark <workspace>/iteration-N/benchmark.json \
|
|
253
|
+
> /dev/null 2>&1 &
|
|
254
|
+
VIEWER_PID=$!
|
|
255
|
+
```
|
|
256
|
+
イテレーション2以降は`--previous-workspace <workspace>/iteration-<N-1>`も渡す。
|
|
228
257
|
|
|
229
|
-
|
|
258
|
+
**Cowork / ヘッドレス環境:** `webbrowser.open()`が利用不可の場合、`--static <output_path>`でスタンドアロンHTMLファイルを書き出す。
|
|
230
259
|
|
|
231
|
-
|
|
260
|
+
注意: ビューア生成にはgenerate_review.pyを使用すること。カスタムHTMLを書く必要はない。
|
|
232
261
|
|
|
233
|
-
|
|
262
|
+
5. **ユーザーに伝える** — 「ブラウザで結果を開きました。'Outputs'タブで各テストケースをクリックしてフィードバックを残せます。'Benchmark'タブで定量的比較が見られます。完了したらお知らせください。」
|
|
234
263
|
|
|
235
|
-
|
|
236
|
-
2. これらのワークフローを繰り返し実行する際に役立つscripts、reference、assetsを特定
|
|
264
|
+
### ステップ5: フィードバックの読み込み
|
|
237
265
|
|
|
238
|
-
|
|
266
|
+
ユーザーが完了を告げたら、`feedback.json`を読む:
|
|
239
267
|
|
|
240
|
-
|
|
241
|
-
|
|
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
|
+
```
|
|
242
278
|
|
|
243
|
-
|
|
279
|
+
空のフィードバックはユーザーがOKと判断したことを意味する。具体的な指摘があるテストケースに改善を集中する。
|
|
244
280
|
|
|
245
|
-
|
|
246
|
-
2. ボイラープレートHTML/Reactプロジェクトファイルを含む `assets/hello-world/` テンプレートがスキルに保存すると役立つ
|
|
281
|
+
ビューアサーバーが不要になったらkillする。
|
|
247
282
|
|
|
248
|
-
|
|
283
|
+
---
|
|
249
284
|
|
|
250
|
-
|
|
251
|
-
2. テーブルスキーマをドキュメント化する `references/schema.md` ファイルがスキルに保存すると役立つ
|
|
285
|
+
## Skillの改善
|
|
252
286
|
|
|
253
|
-
|
|
287
|
+
ループの核心。テストケースを実行し、ユーザーが結果をレビューし、フィードバックに基づいてSkillを改善する。
|
|
254
288
|
|
|
255
|
-
###
|
|
289
|
+
### 改善の考え方
|
|
256
290
|
|
|
257
|
-
|
|
291
|
+
1. **フィードバックから汎化する。** ここでの大きな絵は、何百万回も使われるSkillを作ろうとしていること。少数の例で反復するのは速く進むためだが、それらの例にのみ機能するSkillは無用。こまごまとした過学習的な変更や、圧倒的に制約の多いMUSTの代わりに、異なるメタファーや作業パターンを試みる。
|
|
258
292
|
|
|
259
|
-
|
|
293
|
+
2. **プロンプトをスリムに保つ。** 効果のないものを削除。トランスクリプトを読み(最終出力だけでなく)、Skillがモデルに非生産的なことをさせていたら、該当部分を削除して結果を見る。
|
|
260
294
|
|
|
261
|
-
|
|
295
|
+
3. **理由を説明する。** モデルに何かをさせる理由の「なぜ」を説明する。今日のLLMは賢い。良いハーネスがあれば機械的な指示を超えて本当に成果を出せる。ALWAYS/NEVERを全大文字で書いている場合、それは黄色信号。
|
|
262
296
|
|
|
263
|
-
|
|
297
|
+
4. **テストケース間の重複作業を探す。** テスト実行のトランスクリプトを読み、サブエージェントが独立して同様のヘルパースクリプトを書いたか確認。3つのテストケースすべてでサブエージェントが`create_docx.py`を書いていたら、Skillにそのスクリプトをバンドルすべき強いシグナル。
|
|
264
298
|
|
|
265
|
-
|
|
266
|
-
scripts/init_skill.py <skill-name> --path <output-directory>
|
|
267
|
-
```
|
|
299
|
+
### 反復ループ
|
|
268
300
|
|
|
269
|
-
|
|
301
|
+
1. 改善をSkillに適用
|
|
302
|
+
2. 全テストケースを新しい`iteration-<N+1>/`ディレクトリに再実行(ベースライン含む)
|
|
303
|
+
3. `--previous-workspace`で前のイテレーションを指定してレビューアを起動
|
|
304
|
+
4. ユーザーのレビュー完了を待つ
|
|
305
|
+
5. 新しいフィードバックを読み、改善を繰り返す
|
|
270
306
|
|
|
271
|
-
|
|
272
|
-
-
|
|
273
|
-
-
|
|
274
|
-
-
|
|
307
|
+
以下で終了:
|
|
308
|
+
- ユーザーが満足
|
|
309
|
+
- フィードバックがすべて空(すべて良好)
|
|
310
|
+
- 意味のある進歩がない
|
|
275
311
|
|
|
276
|
-
|
|
312
|
+
---
|
|
277
313
|
|
|
278
|
-
|
|
314
|
+
## 高度: ブラインド比較
|
|
279
315
|
|
|
280
|
-
|
|
316
|
+
2つのバージョンのより厳密な比較が必要な場合(例:「新バージョンは本当に良くなったか?」)、ブラインド比較システムがある。`agents/comparator.md`と`agents/analyzer.md`を参照。基本的な考え方:2つの出力をどちらが由来かを伝えずに独立エージェントに渡し、品質を判定させる。
|
|
281
317
|
|
|
282
|
-
|
|
318
|
+
オプション、サブエージェントが必要、ほとんどのユーザーには不要。人間のレビューループで通常は十分。
|
|
283
319
|
|
|
284
|
-
|
|
320
|
+
---
|
|
285
321
|
|
|
286
|
-
|
|
287
|
-
- **特定の出力形式または品質基準**: テンプレートと例のパターンについては references/output-patterns.md を参照
|
|
322
|
+
## Description最適化
|
|
288
323
|
|
|
289
|
-
|
|
324
|
+
SKILL.mdフロントマターのdescriptionフィールドは、ClaudeがSkillを呼び出すかどうかを決定する主要メカニズム。Skill作成・改善後、トリガー精度を最適化するdescription改善を提案する。
|
|
290
325
|
|
|
291
|
-
|
|
326
|
+
### ステップ1: トリガー評価クエリの生成
|
|
292
327
|
|
|
293
|
-
|
|
328
|
+
20個の評価クエリを作成 — トリガーすべきものとすべきでないものの混合。JSONとして保存。
|
|
294
329
|
|
|
295
|
-
|
|
330
|
+
クエリは現実的で、Claude CodeやClaude.aiユーザーが実際にタイプするもの。抽象的ではなく、具体的で詳細なリクエスト。ファイルパス、個人的なコンテキスト、カラム名、会社名、URL等。少しの背景。一部は小文字や略語やタイプミスやカジュアルな話し方。長さを混ぜ、明確なケースよりエッジケースに焦点。
|
|
296
331
|
|
|
297
|
-
|
|
332
|
+
**Bad**: `"Format this data"`, `"Extract text from PDF"`, `"Create a chart"` — 抽象的すぎて何もテストしない
|
|
298
333
|
|
|
299
|
-
|
|
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"` — 具体的、カジュアル、背景あり
|
|
300
335
|
|
|
301
|
-
|
|
336
|
+
**トリガーすべき**クエリ(8-10個)はカバレッジを考える。異なるフレーズ、フォーマル/カジュアル混在、スキル名を明示しないが明らかに必要なケース、珍しいユースケース。**トリガーすべきでない**クエリ(8-10個)はニアミス — キーワードを共有するが実際には異なるものが必要なクエリ。「フィボナッチ関数を書いて」のような明らかに無関係なクエリは避ける — テストにならない。
|
|
302
337
|
|
|
303
|
-
|
|
338
|
+
### ステップ2: ユーザーとレビュー
|
|
304
339
|
|
|
305
|
-
|
|
340
|
+
HTMLテンプレートで評価セットをユーザーに提示:
|
|
306
341
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
342
|
+
1. `assets/eval_review.html`のテンプレートを読む
|
|
343
|
+
2. プレースホルダーを置換:
|
|
344
|
+
- `__EVAL_DATA_PLACEHOLDER__` → 評価項目のJSON配列
|
|
345
|
+
- `__SKILL_NAME_PLACEHOLDER__` → Skill名
|
|
346
|
+
- `__SKILL_DESCRIPTION_PLACEHOLDER__` → 現在のdescription
|
|
347
|
+
3. 一時ファイルに書き出してブラウザで開く
|
|
348
|
+
4. ユーザーが編集し「Export Eval Set」をクリック
|
|
312
349
|
|
|
313
|
-
|
|
350
|
+
### ステップ3: 最適化ループの実行
|
|
314
351
|
|
|
315
|
-
|
|
352
|
+
バックグラウンドで実行:
|
|
316
353
|
|
|
317
|
-
|
|
354
|
+
```bash
|
|
355
|
+
python -m scripts.run_loop \
|
|
356
|
+
--eval-set <path-to-trigger-eval.json> \
|
|
357
|
+
--skill-path <path-to-skill> \
|
|
358
|
+
--model <model-id-powering-this-session> \
|
|
359
|
+
--max-iterations 5 \
|
|
360
|
+
--holdout 0.4 \
|
|
361
|
+
--verbose
|
|
362
|
+
```
|
|
318
363
|
|
|
319
|
-
|
|
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>`で全出力をタイムスタンプ付きサブディレクトリに保存可能。
|
|
320
365
|
|
|
321
|
-
|
|
366
|
+
### スキルトリガーの仕組み
|
|
322
367
|
|
|
323
|
-
|
|
324
|
-
2. SKILL.md本文はプロジェクトの主要言語で記述
|
|
325
|
-
3. フロントマター`description`:主要な説明はプロジェクトの主要言語を使用しますが、チームが使用する他の言語で重要なトリガーフレーズを含めます(バイリンガル説明はトリガーの失敗を防ぎます)
|
|
326
|
-
4. referenceファイルと出力テンプレートもプロジェクトの言語に従うべき
|
|
327
|
-
5. 技術用語(API名、ツール名、ファイル形式)はプロジェクト言語に関係なく英語のままで構いません
|
|
368
|
+
SkillはClaudeの`available_skills`リストにname + descriptionで表示される。Claudeは自力で簡単に処理できるタスクにはSkillを参照しない。複雑で複数ステップの専門的なクエリはdescriptionが一致するとSkillを確実にトリガーする。評価クエリはSkillの参照が有益なほど実質的であるべき。
|
|
328
369
|
|
|
329
|
-
### ステップ
|
|
370
|
+
### ステップ4: 結果の適用
|
|
330
371
|
|
|
331
|
-
|
|
372
|
+
JSON出力の`best_description`をSkillのSKILL.mdフロントマターに更新。ユーザーにbefore/afterを表示しスコアを報告。
|
|
332
373
|
|
|
333
|
-
|
|
334
|
-
scripts/package_skill.py <path/to/skill-folder>
|
|
335
|
-
```
|
|
374
|
+
---
|
|
336
375
|
|
|
337
|
-
|
|
376
|
+
### パッケージ化と提示(`present_files`ツールが利用可能な場合のみ)
|
|
338
377
|
|
|
339
378
|
```bash
|
|
340
|
-
scripts
|
|
379
|
+
python -m scripts.package_skill <path/to/skill-folder>
|
|
341
380
|
```
|
|
342
381
|
|
|
343
|
-
|
|
382
|
+
---
|
|
344
383
|
|
|
345
|
-
|
|
384
|
+
## Claude.ai固有の手順
|
|
346
385
|
|
|
347
|
-
|
|
348
|
-
- スキル命名規則とディレクトリ構造
|
|
349
|
-
- 説明の完全性と品質
|
|
350
|
-
- ファイル構成とリソース参照
|
|
386
|
+
Claude.aiではサブエージェントがないため、一部の手順を変更する。コアワークフロー(ドラフト→テスト→レビュー→改善→繰り返し)は同じ。
|
|
351
387
|
|
|
352
|
-
|
|
388
|
+
- **テスト実行**: サブエージェントなし=並列実行不可。各テストケースを順次に自分で実行。これはサブエージェント版より厳密性が低い(スキル作成者がスキル実行者でもあるため完全なコンテキストを持つ)が、有用なサニティチェックであり、人間のレビューステップが補完する。ベースライン実行はスキップ
|
|
389
|
+
- **結果レビュー**: ブラウザが使えない場合、会話内で直接結果を提示。出力がファイルの場合はパスを伝える
|
|
390
|
+
- **ベンチマーク**: スキップ(ベースライン比較がサブエージェントなしでは意味をなさない)
|
|
391
|
+
- **Description最適化**: `claude` CLI(`claude -p`)が必要なためスキップ
|
|
392
|
+
- **ブラインド比較**: サブエージェントが必要。スキップ
|
|
353
393
|
|
|
354
|
-
|
|
394
|
+
---
|
|
355
395
|
|
|
356
|
-
|
|
396
|
+
## Cowork固有の手順
|
|
357
397
|
|
|
358
|
-
|
|
398
|
+
- サブエージェントあり、メインワークフロー(テスト並行実行等)は動作する
|
|
399
|
+
- ブラウザがないため、ビューア生成時は`--static <output_path>`を使用
|
|
400
|
+
- フィードバックは`feedback.json`としてダウンロード(ファイルアクセスのリクエストが必要な場合がある)
|
|
401
|
+
- テスト実行後は**必ず**`generate_review.py`で評価ビューアを生成してから自己評価すること
|
|
359
402
|
|
|
360
|
-
|
|
403
|
+
---
|
|
361
404
|
|
|
362
|
-
|
|
363
|
-
2. 苦労や非効率性に気づく
|
|
364
|
-
3. SKILL.mdまたはバンドルリソースをどのように更新すべきかを特定
|
|
365
|
-
4. 変更を実装し、再度テスト
|
|
405
|
+
## リファレンスファイル
|
|
366
406
|
|
|
367
|
-
|
|
407
|
+
agents/ディレクトリには専門サブエージェントの指示がある。関連サブエージェントを起動する時に読む。
|
|
368
408
|
|
|
369
|
-
|
|
409
|
+
- `agents/grader.md` — アサーションの出力に対する評価方法
|
|
410
|
+
- `agents/comparator.md` — 2つの出力のブラインドA/B比較方法
|
|
411
|
+
- `agents/analyzer.md` — 一方が勝った理由の分析方法
|
|
370
412
|
|
|
371
|
-
|
|
413
|
+
references/ディレクトリには追加ドキュメント:
|
|
414
|
+
- `references/schemas.md` — evals.json、grading.json等のJSON構造
|
|
372
415
|
|
|
373
|
-
|
|
416
|
+
---
|
|
374
417
|
|
|
375
|
-
|
|
418
|
+
## スキルの初期化(init_skill.py)
|
|
376
419
|
|
|
377
|
-
|
|
420
|
+
新しいSkillをゼロから作成する場合は、`init_skill.py`スクリプトを実行する。
|
|
378
421
|
|
|
422
|
+
```bash
|
|
423
|
+
scripts/init_skill.py <skill-name> --path <output-directory>
|
|
379
424
|
```
|
|
380
|
-
einja-skill-name/
|
|
381
|
-
├── SKILL.md
|
|
382
|
-
├── scripts/ # オプション
|
|
383
|
-
├── references/ # 複数形(公式仕様準拠)
|
|
384
|
-
└── assets/ # オプション
|
|
385
|
-
```
|
|
386
|
-
|
|
387
|
-
### マネージドセクション
|
|
388
425
|
|
|
389
|
-
|
|
426
|
+
## スキルのパッケージ化(package_skill.py)
|
|
390
427
|
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
<!-- @einja:managed:start -->
|
|
394
|
-
この内容は`einja sync`で上書きされる
|
|
395
|
-
<!-- @einja:managed:end -->
|
|
428
|
+
```bash
|
|
429
|
+
scripts/package_skill.py <path/to/skill-folder> [output-directory]
|
|
396
430
|
```
|
|
397
431
|
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
プロジェクト固有の内容をここに追記
|
|
402
|
-
<!-- @einja:seed:end -->
|
|
403
|
-
```
|
|
432
|
+
---
|
|
433
|
+
|
|
434
|
+
コアループの再掲(見落とし防止):
|
|
404
435
|
|
|
405
|
-
|
|
436
|
+
- Skillの目的を理解する
|
|
437
|
+
- Skillをドラフトまたは編集する
|
|
438
|
+
- テストプロンプトでSkill付きClaudeを実行する
|
|
439
|
+
- ユーザーと共に出力を評価する:
|
|
440
|
+
- benchmark.jsonを作成し`eval-viewer/generate_review.py`でユーザーレビューを支援
|
|
441
|
+
- 定量的評価を実施
|
|
442
|
+
- 満足するまで繰り返す
|
|
443
|
+
- 最終Skillをパッケージ化してユーザーに返す
|
|
406
444
|
|
|
407
|
-
|
|
445
|
+
**TodoList**: ステップを見失わないよう、TodoListが利用可能であればステップを追加すること。特にCowork環境では「evalsのJSONを作成し `eval-viewer/generate_review.py` を実行して人間がテストケースをレビューできるようにする」を必ずTodoListに含める。
|
|
408
446
|
|
|
409
|
-
|
|
447
|
+
### 横断比較ツール(compare_runs.py)
|
|
410
448
|
|
|
411
|
-
|
|
449
|
+
複数スキルの`run_loop.py`出力を横断比較する場合は`compare_runs.py`を使用:
|
|
412
450
|
|
|
413
|
-
|
|
451
|
+
```bash
|
|
452
|
+
python -m scripts.compare_runs result1.json result2.json --verbose --json
|
|
453
|
+
```
|
|
414
454
|
|
|
415
|
-
|
|
455
|
+
<!-- @einja:excluded:start -->
|
|
456
|
+
## プロジェクト固有セクションの記入
|
|
416
457
|
|
|
417
|
-
|
|
458
|
+
SKILL.md等のmdファイルの末尾には以下を記入する:
|
|
459
|
+
|
|
460
|
+
```markdown
|
|
461
|
+
<!-- @einja:project-private:start id="{既存と同じID}" -->
|
|
462
|
+
<!-- プロジェクト固有の情報を記入 -->
|
|
463
|
+
<!-- @einja:project-private:end -->
|
|
464
|
+
```
|
|
465
|
+
<!-- @einja:excluded:end -->
|
|
418
466
|
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
467
|
+
<!-- @einja:project-private:start id="einja-skill-creator-project" -->
|
|
468
|
+
<!-- プロジェクト固有の情報を記入 -->
|
|
469
|
+
<!-- @einja:project-private:end -->
|