
Skill Planner
- 4 installs
- Updated July 30, 2026
- naoterumaker/manabi-skills
Helps with productivity & planning tasks.
About
skill-planner is a Claude Code skill for productivity & planning. It helps solo builders move faster with AI-assisted development.
- skill-planner
- Productivity & Planning
- AI-coding skill
Skill Planner by the numbers
- 4 all-time installs (skills.sh)
- Ranked #2,331 of 3,282 Productivity & Planning skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/naoterumaker/manabi-skills --skill skill-plannerAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 4 |
|---|---|
| Last updated | July 30, 2026 |
| Repository | naoterumaker/manabi-skills ↗ |
What it does
Helps with productivity & planning tasks.
Files
Skill Planner
WHAT
course-bundleの全抽出結果を分析し、生成可能なスキルの計画(skill-plan.json)を作成する。 各スキルの目的・入出力・必要リソース・依存関係を設計し、ユーザー承認後にskill-synthesizerへ渡す。
スコープ外:
- スキルの実際の生成(skill-synthesizerの責務)
- トランスクリプトの抽出(concept-extractor, procedure-extractor, visual-indexerの責務)
- リソースの取得(resource-fetcherの責務)
---
WHY
抽出フェーズで得られたknowledge, procedures, resourcesは断片的。そのままではスキル化できない。 計画フェーズで以下を決定する:
1. 何をスキルにするか - 手順+リソースの組み合わせから実行可能な単位を特定 2. 何を共有知識にするか - 概念・マインドセットは基盤knowledgeに集約 3. 依存関係は何か - スキル間の前提関係を明示 4. 何が未解決か - リソース未取得など、スキル化の障害を特定
ユーザー承認なしにskill-synthesizerに渡してはならない。 スキル構成はユーザーが決める。
---
発動条件
- 「スキル計画」「スキル設計」
- 「何のスキルが作れるか」
- 「skill plan」「plan skills」
/skill-planner
---
HOW
入力要件
| 必須 | 内容 |
|---|---|
| manifest.json | コースメタデータ |
| knowledge/knowledge-graph.json | 概念依存関係グラフ |
| 任意(あれば使う) | 内容 |
|---|---|
| chapters/*/knowledge.json | 各章の概念・暗黙知 |
| chapters/*/procedures.json | 各章のステップバイステップ手順 |
| chapters/*/visual-index.json | 各章のフレーム分類 |
| resources-manifest.json | 取得済み外部リソース |
| manuals/*.md | utage-manual出力(参照のみ、コピーしない) |
BLOCKER: 前提条件チェック
以下を確認するまでStep 2に進むな:
1. knowledge/knowledge-graph.json が存在すること
2. 少なくとも1つのprocedures.jsonが存在すること
>
存在しない場合はユーザーに報告し、concept-extractorまたはprocedure-extractorの実行を提案すること。
---
処理ステップ
Step 1: 前提条件チェック ← BLOCKER
Step 2: 全入力ファイル読み込み
Step 3: スキル候補の特定
Step 4: スキルタイプの判定
Step 5: 共有知識の設計
Step 6: 依存関係グラフの構築
Step 7: 未解決項目の特定
Step 8: skill-plan.json生成
Step 9: 自己検証
Step 10: ユーザーへの提示 ← BLOCKER(承認必須)Step 2: 全入力ファイル読み込み
以下を全て読み込む(存在するもののみ):
1. manifest.json → コース名・章リスト 2. knowledge/knowledge-graph.json → 概念依存関係 3. 全chapters//knowledge.json → 概念・暗黙知 4. 全chapters//procedures.json → 手順 5. resources-manifest.json → 取得済みリソース 6. manuals/ ディレクトリのファイル一覧 → マニュアル参照用
Step 3: スキル候補の特定
procedures.jsonの各手順について: 1. 独立した目的(入力→出力)を持つか確認 2. 対応するリソース(プロンプト、テンプレート等)があるか確認 3. 候補としてリストアップ
Step 4: スキルタイプの判定
| 条件 | → type |
|---|---|
| プロンプトテンプレート(取得済み)+ 手順がある | executable |
| 手順はあるがリソース未取得 | executable(unresolvedに記載) |
| 概念・理論・マインドセット中心、実行物なし | → shared_knowledge に統合 |
Step 5: 共有知識の設計
以下を shared_knowledge に集約:
- 基盤概念(複数スキルの前提となる概念)
- NG/OKパターン(講座全体の判断基準)
- チェックリスト項目(品質確認の共通基準)
- マインドセット・価値観(暗黙知から抽出)
Step 6: 依存関係グラフの構築
1. knowledge-graph.jsonのprerequisite_graphを参照 2. 各スキルが参照する概念の前提を追跡 3. depends_onとして記録 4. 循環依存がないことを確認
Step 7: 未解決項目の特定
以下をunresolvedに記録:
- リソースが言及されているが未取得
- URLが記載されているがアクセスできない
- 外部ツールが必要だが未確認
Step 8: skill-plan.json生成
スキーマは schemas/skill-plan.schema.json に準拠。 出力先: {course-bundle}/skill-plan.json
Step 9: 自己検証
以下をすべてチェックし、問題があれば修正:
- [ ] 各executable skillにresourcesまたはproceduresがあるか
- [ ] skill_nameが全体で一意か
- [ ] depends_onが実在するスキル名を参照しているか
- [ ] trigger_wordsが講座固有の具体的なワードか(「作成」「生成」のような汎用語はNG)
- [ ] shared_knowledgeに基盤概念が含まれているか
- [ ] unresolved欄に未取得リソースが全て記載されているか
- [ ] dependency_graphに循環依存がないか
- [ ] 1スキルが3章以上の内容を含んでいないか(巨大スキル禁止)
---
スキル分割ルール
| ルール | 説明 |
|---|---|
| 1スキル=1目的 | 入力→出力が明確に定義できる単位 |
| プロンプトテンプレートごとに分離 | 別テンプレート=別スキル |
| 共有知識はknowledge skillに集約 | 概念・NG/OK・チェックリストは共有 |
| 依存関係をdepends_onで明示 | 隠れ依存ゼロ |
| 巨大1スキルは禁止 | 12章→1スキルはNG |
分割の詳細な判断基準は references/planning-strategy.md を参照。
---
NG / OK テーブル
| NG | OK | 理由 |
|---|---|---|
| 12章を1スキルにまとめる | 目的別に分割 | 巨大スキルは実行不能 |
| リソース未取得なのにexecutableとだけ書く | unresolved欄に記載し取得を促す | プロンプト本文なしでは実行できない |
| 全概念をスキルに入れる | 基盤概念はshared_knowledgeに | Progressive Disclosure |
| ユーザー承認なしでsynthesizerに渡す | 必ずプラン提示→承認 | スキル構成はユーザーが決める |
| trigger_wordsに「作成」「生成」のような汎用語 | 「PredictionX」「FusionOmega」等の講座固有ワード | 汎用語だと誤発動する |
| depends_onに存在しないスキル名 | 実在するスキル名のみ | 壊れた依存は実行時エラー |
| 手順なし・リソースなしでexecutableにする | shared_knowledgeに統合するか、unresolvedに記載 | 実行に必要な材料がない |
---
BLOCKER: ユーザー承認
skill-plan.jsonを生成したら、必ず以下のフォーマットでユーザーに提示し、承認を得ること。
承認を得るまでskill-synthesizerに渡してはならない。
---
ユーザーへの提示
処理完了後、以下のフォーマットで提示:
## Skill Plan: {course_name}
### ヒアリング仮説との照合
manifest.jsonのuser_context.skill_hypothesesがある場合、仮説との照合結果を表示:
| 仮説 | 結果 | 対応スキル |
|------|------|-----------|
| {hypothesis} | ✅ 検出 / ⚠️ リソース未取得 / ❌ 該当なし | {skill_name or "—"} |
➕ 追加発見: {仮説になかったが作れるスキル}
### Executable Skills ({n}件)
| # | スキル名 | 目的 | リソース | 状態 |
|---|---------|------|---------|------|
| 1 | {skill_name} | {purpose} | {resource_names} | Ready / Unresolved |
| ... |
### Shared Knowledge
- 基盤概念: {n}件
- NG/OKパターン: {n}件
- チェックリスト: {n}件
- 参照マニュアル: {manual_refs}
### 依存関係{dependency_graph as text}
### 未解決項目 ({n}件)
| リソース名 | 言及箇所 | 必要なアクション |
|-----------|---------|----------------|
| {name} | {mentioned_in} | {action_needed} |
---
このプランでスキルを生成しますか?(全部 / 選択 / 修正)---
ユーザーの回答への対応
| 回答 | 対応 |
|---|---|
| 全部 | skill-plan.jsonをそのまま確定。skill-synthesizerの実行を提案 |
| 選択 | ユーザーが選んだスキルのみでskill-plan.jsonを更新 |
| 修正 | ユーザーの修正指示に従いskill-plan.jsonを更新し、再提示 |
Planning Strategy
course-bundleの抽出結果からスキル計画を策定するための詳細ガイド。
---
1. Executableスキルの特定方法
判定フロー
procedures.jsonの各手順について:
├─ 明確な入力→出力があるか?
│ ├─ YES: スキル候補
│ └─ NO: shared_knowledgeへ
│
スキル候補について:
├─ 対応するプロンプト/テンプレートがresources-manifest.jsonにあるか?
│ ├─ YES (fetched): executable (Ready)
│ ├─ YES (not_fetched): executable (Unresolved記載)
│ └─ NO: 手順のみのexecutable(リソース不要型)
│
リソース不要型の判定:
├─ 手順だけで実行完結するか?(例: 設定手順、分析手順)
│ ├─ YES: executable
│ └─ NO: unresolvedに記載入力→出力の判定基準
以下のパターンがあればスキル候補:
| パターン | 例 |
|---|---|
| テキスト入力 → テキスト出力 | 文字起こし → 台本プロンプト |
| テンプレート + パラメータ → 成果物 | プロンプトテンプレート + ジャンル → 完成プロンプト |
| 既存コンテンツ → 変換コンテンツ | 長尺動画 → ショート動画台本 |
| 分析入力 → 分析レポート | チャンネルURL → 改善提案 |
| 設定指示 → 設定完了確認 | ツール名 → 設定手順ガイド |
スキルにならないもの
| パターン | 理由 | 行き先 |
|---|---|---|
| 「AIマインドを持ちましょう」 | 実行物がない | shared_knowledge.concepts |
| 「成功者の共通点は...」 | マインドセット | shared_knowledge.concepts |
| 「〇〇と△△の違いは...」 | 概念説明 | shared_knowledge.concepts |
| 「NGな例:...」 | 判断基準 | shared_knowledge.ng_ok_patterns |
---
2. スキル境界の判定(分割 vs 統合)
分割すべき場合
| シグナル | 例 | 対応 |
|---|---|---|
| 別のプロンプトテンプレートを使う | PredictionXプロンプトとFusionOmegaプロンプト | 別スキル |
| 入力の種類が異なる | 文字起こしテキスト vs チャンネルURL | 別スキル |
| 出力の種類が異なる | 台本 vs サムネイル | 別スキル |
| 独立して実行できる | 台本生成と動画編集 | 別スキル |
| 3章以上にまたがる | ch06-ch10の内容を1つに | 目的別に分割 |
統合すべき場合
| シグナル | 例 | 対応 |
|---|---|---|
| 連続した手順で分離不能 | テンプレート選択→パラメータ入力→生成 | 1スキル |
| 同じプロンプトの変形 | 基本版と応用版 | 1スキルのバリエーション |
| 前の出力が次の入力 | プロンプト生成→プロンプト実行 | 1スキル(内部ステップ) |
境界判定チェックリスト
以下すべてYESなら1スキル:
- [ ] 同じプロンプト/テンプレートを使うか?
- [ ] 入力の種類は同じか?
- [ ] 出力の種類は同じか?
- [ ] 途中で中断してもユーザーに意味のある成果物があるか? → NOなら分離不能
1つでもNOなら分割を検討。
---
3. 依存関係グラフの構築方法
Step 1: 概念依存の追跡
knowledge-graph.jsonのprerequisite_graphから:
concept A → prerequisite: concept B
concept Aを使うスキルXは、concept Bを含むスキルYに依存
→ skill X depends_on skill YStep 2: 共有知識への依存
ほぼ全てのexecutableスキルは shared_knowledge に依存する。 これは明示的にdepends_onに含める。
Step 3: スキル間の直接依存
スキルAの出力がスキルBの入力になる場合:
→ skill B depends_on skill AStep 4: 循環依存の検出
dependency_graphを深さ優先探索:
visitedセットにスキル名を追加しながら探索
既にvisitedにあるスキル名に到達 → 循環依存
循環依存が見つかった場合:
1. 共通部分をshared_knowledgeに切り出す
2. 両スキルがshared_knowledgeに依存する形に変更依存関係の原則
| 原則 | 説明 |
|---|---|
| 隠れ依存ゼロ | 「知っている前提」は全てdepends_onで明示 |
| 深さ制限 | 依存チェーンは3段階まで。それ以上はshared_knowledgeに分離 |
| 双方向禁止 | AがBに依存かつBがAに依存はNG |
---
4. 未解決リソースの扱い
分類と対応
| type | 状況 | 推奨アクション |
|---|---|---|
| resource_not_fetched | プロンプトやテンプレートが言及されているが未取得 | resource-fetcherの実行を提案 |
| url_inaccessible | URLがあるがアクセスできない(認証必要等) | ユーザーに手動取得を依頼 |
| external_tool_required | 外部ツール(GPTs, Notion等)が必要 | ツールのアクセス方法を確認 |
| permission_needed | 有料コンテンツや限定アクセス | ユーザーに権限確認を依頼 |
unresolvedがあってもスキルは作れるか?
| 状況 | 判断 |
|---|---|
| プロンプトテンプレート未取得 | executableにするがunresolved記載。テンプレートなしではスキルの核心が欠ける旨を明記 |
| 補足資料のみ未取得 | executableに影響なし。unresolvedに記載するが状態はReady |
| 外部ツール連携が未確認 | スキル自体は作成可能。ツール連携部分はプレースホルダーとして記載 |
---
5. Good vs Bad スキル計画の例
Bad: 巨大スキル
{
"skill_name": "youtube-booster-all-in-one",
"purpose": "YouTubeブースター講座の全内容を実行するスキル",
"procedures": ["p03-01", "p04-01", "p05-01", "p06-01", "p07-01", "p08-01", "p09-01", "p10-01", "p11-01", "p12-01"]
}問題点:
- 10章分の手順を1スキルに詰め込んでいる
- 入力→出力が不明確
- 全てのリソースが必要になりコンテキストを圧迫
- ユーザーが一部だけ使いたい場合に対応できない
Good: 目的別分割
{
"planned_skills": [
{
"skill_name": "prediction-x-generator",
"purpose": "PredictionXで参考台本から台本プロンプトを自動生成",
"procedures": ["p09-01"],
"resources": [{"id": "r01", "name": "PredictionXプロンプト", "status": "fetched"}],
"rationale": "PredictionXプロンプトが取得済みで、手順p09-01に5ステップの明確なワークフローがある"
},
{
"skill_name": "fusion-omega-generator",
"purpose": "FusionOmegaで新規台本をゼロから生成",
"procedures": ["p10-01"],
"resources": [{"id": "r02", "name": "FusionOmegaプロンプト", "status": "fetched"}],
"rationale": "FusionOmegaプロンプトが取得済みで、PredictionXとは入力が異なる(参考動画不要)"
}
]
}良い点:
- 1スキル=1目的
- 別テンプレート=別スキル
- 各スキルの入力→出力が明確
- 個別に実行可能
Bad: 汎用trigger_words
{
"trigger_words": ["作成", "生成", "作って"]
}問題点: あらゆるスキルが誤発動する
Good: 講座固有のtrigger_words
{
"trigger_words": ["PredictionX", "台本自動生成", "コピー3回", "参考台本"]
}良い点: 講座特有の用語で確実に正しいスキルが発動
Bad: 未解決リソースの無視
{
"skill_name": "gpts-template-builder",
"type": "executable",
"resources": [{"id": "r05", "name": "GPTsテンプレート", "status": "fetched"}]
}問題点: 実際にはfetchedではないのにfetchedと記載
Good: 正直な状態報告
{
"skill_name": "gpts-template-builder",
"type": "executable",
"resources": [{"id": "r05", "name": "GPTsテンプレート", "path": "", "status": "not_fetched"}],
"rationale": "手順p06-01は明確だが、GPTsテンプレートが未取得のため実行にはリソース取得が必要"
}加えてunresolvedに記載:
{
"unresolved": [
{
"type": "resource_not_fetched",
"name": "GPTsテンプレート",
"mentioned_in": "ch06",
"action_needed": "Notionページへのアクセスが必要"
}
]
}---
6. shared_knowledgeの設計指針
何を含めるか
| カテゴリ | 含める基準 | 例 |
|---|---|---|
| 基盤概念 | 2つ以上のスキルが参照する概念 | AIマインド、4つの壁 |
| NG/OKパターン | 講座全体に適用される判断基準 | 「AIのせいにする→自分の指示を改善する」 |
| チェックリスト | 品質確認の共通項目 | 「具体例が含まれているか」 |
| 用語定義 | 講座固有の用語 | 「コピー3回」の意味 |
何を含めないか
| カテゴリ | 理由 | 行き先 |
|---|---|---|
| スキル固有の手順 | 共有する必要がない | 各スキルのprocedures |
| スキル固有のプロンプト | 他スキルでは使わない | 各スキルのresources |
| 章固有の補足説明 | 共有より個別が適切 | 各スキルのmanual_ref |
命名規則
shared_knowledgeの名前は {course-name}-knowledge とする。 例: youtube-booster-knowledge, ai-marketing-knowledge
{
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "Skill Plan",
"description": "course-bundleの抽出結果から生成可能なスキルの計画",
"type": "object",
"required": ["course_name", "planned_skills", "shared_knowledge", "dependency_graph", "unresolved"],
"properties": {
"course_name": {
"type": "string",
"description": "コース名"
},
"planned_skills": {
"type": "array",
"description": "生成予定のスキル一覧",
"items": {
"type": "object",
"required": ["skill_name", "type", "purpose", "input", "output", "resources", "procedures", "knowledge_refs", "depends_on", "trigger_words", "rationale"],
"properties": {
"skill_name": {
"type": "string",
"description": "スキルのユニークな名前(kebab-case)",
"pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
},
"type": {
"type": "string",
"enum": ["executable"],
"description": "スキルタイプ"
},
"purpose": {
"type": "string",
"description": "スキルの目的(1文で)"
},
"input": {
"type": "object",
"required": ["description", "required"],
"properties": {
"description": {
"type": "string",
"description": "入力の説明"
},
"required": {
"type": "boolean",
"description": "入力が必須かどうか"
}
}
},
"output": {
"type": "object",
"required": ["description"],
"properties": {
"description": {
"type": "string",
"description": "出力の説明"
}
}
},
"resources": {
"type": "array",
"description": "このスキルが使用するリソース",
"items": {
"type": "object",
"required": ["id", "name", "path", "status"],
"properties": {
"id": {
"type": "string",
"description": "リソースID(resources-manifest.jsonのIDと対応)"
},
"name": {
"type": "string",
"description": "リソース名"
},
"path": {
"type": "string",
"description": "リソースのパス"
},
"status": {
"type": "string",
"enum": ["fetched", "not_fetched", "partial"],
"description": "リソースの取得状態"
}
}
}
},
"procedures": {
"type": "array",
"description": "このスキルが実行する手順のID一覧",
"items": {
"type": "string"
}
},
"knowledge_refs": {
"type": "array",
"description": "このスキルが参照する概念のID一覧",
"items": {
"type": "string"
}
},
"manual_ref": {
"type": "string",
"description": "対応するマニュアルファイルのパス"
},
"depends_on": {
"type": "array",
"description": "依存するスキル名の一覧",
"items": {
"type": "string"
}
},
"trigger_words": {
"type": "array",
"description": "このスキルの発動トリガーとなるワード(講座固有の具体的なワード)",
"items": {
"type": "string"
},
"minItems": 1
},
"rationale": {
"type": "string",
"description": "このスキルをexecutableとした根拠"
}
}
}
},
"shared_knowledge": {
"type": "object",
"required": ["name", "purpose", "concepts", "ng_ok_patterns", "checklist_items", "manual_refs"],
"description": "全スキルから参照される基盤知識",
"properties": {
"name": {
"type": "string",
"description": "共有知識スキルの名前(kebab-case)",
"pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
},
"purpose": {
"type": "string",
"description": "共有知識の目的"
},
"concepts": {
"type": "array",
"description": "基盤概念のID一覧",
"items": {
"type": "string"
}
},
"ng_ok_patterns": {
"type": "array",
"description": "NG/OKパターン(講座全体の判断基準)",
"items": {
"type": "object",
"required": ["ng", "ok", "reason"],
"properties": {
"ng": {
"type": "string"
},
"ok": {
"type": "string"
},
"reason": {
"type": "string"
}
}
}
},
"checklist_items": {
"type": "array",
"description": "品質確認の共通チェックリスト項目",
"items": {
"type": "string"
}
},
"manual_refs": {
"type": "array",
"description": "参照マニュアルのパス一覧",
"items": {
"type": "string"
}
}
}
},
"dependency_graph": {
"type": "object",
"description": "スキル名をキー、依存スキル名の配列を値とする依存関係マップ",
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
}
},
"unresolved": {
"type": "array",
"description": "未解決のリソースや課題",
"items": {
"type": "object",
"required": ["type", "name", "mentioned_in", "action_needed"],
"properties": {
"type": {
"type": "string",
"enum": ["resource_not_fetched", "url_inaccessible", "external_tool_required", "permission_needed"],
"description": "未解決項目のタイプ"
},
"name": {
"type": "string",
"description": "未解決リソースの名前"
},
"mentioned_in": {
"type": "string",
"description": "言及されている章やファイル"
},
"action_needed": {
"type": "string",
"description": "解決に必要なアクション"
}
}
}
}
}
}