スキルビルダー — スキャフォールド&生成 は何をしますか?
プロセス
Step 1: 入力の収集
何を基に構築するかを決定します:
- 計画文書:
/skill-forge planの出力(推奨) - 説明: スキルの自然言語による記述
- 既存のスキル: 基礎として使用するスキルへのパス
計画が存在しない場合は、簡単な計画パスを実行します(3つの重要な質問):
- スキルは何をするのか?(1~2文)
- どのようなコマンドを持つべきか?(リスト)
- スクリプトや外部ツールは必要か?(はい/いいえ)
Step 2: フロントマターの生成
最も重要なステップです。descriptionフィールドがアクティベーションを決定します。
説明文作成のフレームワーク:
[能力宣言] + [詳細な機能] + [トリガーフレーズ]
ルール:
- 合計1024文字未満
- XMLの山括弧(< >)は使用しない
- ユーザーが言いそうなトリガーフレーズを5~10個含める
- 関連するファイルタイプがあれば言及する
- 過剰トリガーのリスクがある場合はネガティブトリガーを追加する
完全なフレームワークについては references/description-guide.md を参照してください。
Step 3: メインSKILL.mdの作成
以下のテンプレートに従って本文を構成します:
# [スキル名] -- [タグライン]
[1~2文の概要]
## クイックリファレンス
| コマンド | 説明 |
|---------|-------------|
| /name cmd1 | 説明 |
| /name cmd2 | 説明 |
## オーケストレーションロジック
[コマンドがサブスキルにルーティングされる方法]
[条件付きルーティングのための決定木]
## [ドメイン固有セクション]
[コアルール、しきい値、品質ゲート]
## 参照ファイル
[オンデマンドで読み込む参照ファイルのリスト]
## サブスキル
[1行の説明付きサブスキルのリスト]
重要なSKILL.mdのルール:
- 500行未満
- 5000トークン未満
- 実行可能な指示(曖昧さを避ける)
- エラーハンドリングを含める
- 参照はインライン化せずリンクする
Step 4: サブスキルの生成(Tier 3~4)
各サブスキルについて、以下のSKILL.mdを生成します:
---
name: parent-child
description: >
[説明]. ユーザーが「[トリガー1]」「[トリガー2]」
「[トリガー3]」「[トリガー4]」と言った場合に使用します。
---
サブスキル本文のガイドライン:
- 1つのワークフローに対する自己完結型の指示
- 他のサブスキルは名前で相互参照する(内容をインライン化しない)
- 親スキルの
references/ディレクトリにある共有ファイルを参照する - 明示的な入出力定義を含める
Step 5: スクリプトの生成(Tier 2~4)
各スクリプトについて:
#!/usr/bin/env python3
"""
目的: [このスクリプトの機能]
入力: [期待される入力形式]
出力: [期待される出力形式]
使用法: python scripts/script_name.py [引数]
"""
import argparse
import json
import sys
from typing import Any
def main(args: argparse.Namespace) -> dict[str, Any]:
"""メイン実行関数。"""
# 入力を検証
# 処理を実行
# 構造化された出力を返す
pass
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="[スクリプトの説明]")
parser.add_argument("input", help="[入力の説明]")
parser.add_argument("--output", "-o", help="出力ファイルパス")
args = parser.parse_args()
try:
result = main(args)
print(json.dumps(result, indent=2))
except Exception as e:
print(json.dumps({"error": str(e)}), file=sys.stderr)
sys.exit(1)
スクリプトのルール:
- 1つのスクリプト、1つの責務
- argparseを使用したCLIインターフェース
- 構造化されたJSON出力
- 明確なエラーメッセージ
- 可能な限りstdlib以外の依存関係を持たない
Step 6: 参照ファイルの生成
各参照ファイルについて:
- 1つのトピックに焦点を当てる
- 200行未満
- 具体的な例を含める
- しきい値や仕様にはテーブルを使用する
- 親SKILL.mdに「オンデマンドで読み込み」とマークする
Step 7: エージェント定義の生成(Tier 4)
エージェントファイルは(スキルとは異なり)YAMLフロントマターを使用します:
---
name: [スキル名]-[役割]
description: >
[このエージェントが分析するもの].
<example>ユーザーが「[トリガー]」と言った場合</example>
model: inherit
color: blue
tools:
- Read
- Grep
- Glob
---
あなたは[役割]のスペシャリストです。
## あなたの役割
[このエージェントが行うこと]
## プロセス
1. [ステップ...]
## 出力形式
調査結果と推奨事項を含む構造化されたマークダウンを返します。
スキルとの主な違い: エージェントの name は3~50文字、説明では <example> ブロックを使用可能、エージェント固有のフィールドには tools、color、permissionMode、maxTurns、memory が含まれます。本文はシステムプロンプト(二人称)になります。
Step 8: インストールスクリプトの生成
ファイルを ~/.claude/skills/ と ~/.claude/agents/ にコピーする install.sh を作成します。
Step 9: 検証
生成されたスキルに対して python scripts/validate_skill.py <path> を実行します。
メインSKILL.mdのすべての品質ゲートをチェックします。
Step 10: 出力サマリー
ユーザーに以下を提示します:
- 生成されたファイルツリー
- 主要なファイルとその目的
- インストール手順
- 推奨テストクエリ(トリガーされるべきもの3つ、トリガーされるべきでないもの3つ)
- 次のステップ(テスト、反復、公開)
スキャフォールディングコマンド
クイックスキャフォールディングには以下を使用:
python scripts/init_skill.py <skill-name> --tier <1-4> --path <output-path>
これにより、プレースホルダーコンテンツを含む完全なディレクトリ構造が作成されます。