WHAT
Analyze all extraction results of the course-bundle and create a plan of skills that can be generated (skill-plan.json). Design the purpose, inputs/outputs, required resources, and dependencies of each skill, and after user approval, pass it to skill-synthesizer.
Out of scope:
- Actual generation of skills (responsibility of skill-synthesizer)
- Extraction of transcripts (responsibility of concept-extractor, procedure-extractor, visual-indexer)
- Acquisition of resources (responsibility of resource-fetcher)
WHY
The knowledge, procedures, and resources obtained in the extraction phase are fragmentary. As they are, they cannot be turned into skills. In the planning phase, decide the following:
- What to turn into skills - Identify executable units from combinations of procedures + resources
- What to make into shared knowledge - Consolidate concepts and mindsets into foundational knowledge
- What the dependencies are - Make prerequisite relationships between skills explicit
- What is unresolved - Identify obstacles to skill creation, such as unacquired resources
Must not pass to skill-synthesizer without user approval. The user decides the skill composition.
Trigger conditions
- "Skill planning" "Skill design"
- "What skills can be created"
- 「skill plan」「plan skills」
/skill-planner
HOW
Input requirements
| Required | Content |
|---|---|
| manifest.json | Course metadata |
| knowledge/knowledge-graph.json | Concept dependency graph |
| Optional (use if available) | Content |
|---|---|
| chapters/*/knowledge.json | Concepts and tacit knowledge of each chapter |
| chapters/*/procedures.json | Step-by-step procedures of each chapter |
| chapters/*/visual-index.json | Frame classification of each chapter |
| resources-manifest.json | Acquired external resources |
| manuals/*.md | utage-manual output (reference only, do not copy) |
BLOCKER: Prerequisite check
Do not proceed to Step 2 until the following are confirmed:
- knowledge/knowledge-graph.json must exist
- At least one procedures.json must exist
If they do not exist, report to the user and suggest running concept-extractor or procedure-extractor.
Processing steps
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: Read all input files
Read all of the following (only those that exist):
- manifest.json → course name and chapter list
- knowledge/knowledge-graph.json → concept dependencies
- all chapters/*/knowledge.json → concepts and tacit knowledge
- all chapters/*/procedures.json → procedures
- resources-manifest.json → acquired resources
- file list of the manuals/ directory → for manual reference
Step 3: Identify skill candidates
For each procedure in procedures.json:
- Check whether it has an independent purpose (input→output)
- Check whether corresponding resources (prompts, templates, etc.) exist
- List as candidates
Step 4: Determining skill type
| Condition | → type |
|---|---|
| Prompt template (already acquired) + procedures exist | executable |
| Procedures exist but resources not acquired | executable(record in unresolved) |
| Centered on concepts, theory, and mindset; no executable artifacts | → Integrate into shared_knowledge |
Step 5: Designing shared knowledge
Consolidate the following into shared_knowledge:
- Foundational concepts (concepts that are prerequisites for multiple skills)
- NG/OK patterns (judgment criteria for the entire course)
- Checklist items (common criteria for quality checks)
- Mindset and values (extracted from tacit knowledge)
Step 6: Building the dependency graph
- Refer to prerequisite_graph in knowledge-graph.json
- Trace the prerequisites of the concepts each skill references
- Record as depends_on
- Confirm there are no circular dependencies
Step 7: Identifying unresolved items
Record the following in unresolved:
- Resources are mentioned but not acquired
- A URL is listed but cannot be accessed
- An external tool is required but unconfirmed
Step 8: Generating skill-plan.json
The schema is schemas/skill-plan.schema.json Comply with. Output destination: {course-bundle}/skill-plan.json
Step 9: Self-verification
Check all of the following, and fix any issues:
- Does each executable skill have resources or procedures?
- Is skill_name unique across the whole?
- Does depends_on reference skill names that actually exist?
- Are trigger_words specific words unique to the course? (Generic terms like "create" or "generate" are NG)
- Does shared_knowledge include foundational concepts?
- Are all unacquired resources listed in the unresolved section?
- Are there no circular dependencies in dependency_graph?
- Does 1 skill contain content from 3 or more chapters? (Giant skills prohibited)
Skill splitting rules
| Rules | Description |
|---|---|
| 1 skill = 1 purpose | A unit where input→output can be clearly defined |
| Separate per prompt template | Different template = different skill |
| Consolidate shared knowledge into a knowledge skill | Concepts, NG/OK, and checklists are shared |
| Make dependencies explicit with depends_on | Zero hidden dependencies |
| One giant skill is prohibited | 12 chapters→1 skill is NG |
For detailed criteria for splitting, refer to references/planning-strategy.md .
NG / OK table
| NG | OK | Reason |
|---|---|---|
| Combine 12 chapters into 1 skill | Split by purpose | Giant skills cannot be executed |
| Though the resource has not been acquired, write only executable | State it in the unresolved section and prompt acquisition | Cannot execute without the prompt body |
| Put all concepts into the skill | Put foundational concepts in shared_knowledge | Progressive Disclosure |
| Pass to the synthesizer without user approval | Always present plan → get approval | The user decides the skill structure |
| Generic words like "create" or "generate" in trigger_words | Course-specific words such as "PredictionX" or "FusionOmega" | Generic words cause false triggering |
| Skill names in depends_on that do not exist | Only skill names that actually exist | Broken dependencies cause runtime errors |
| Make it executable with no procedure and no resources | Integrate it into shared_knowledge or list it in unresolved | There are no materials necessary for execution |
BLOCKER: user approval
Once skill-plan.json is generated, always present it to the user in the following format and obtain approval. Do not pass it to skill-synthesizer until approval is obtained.
Presentation to the user
After processing is complete, present in the following format:
## 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} |
---
このプランでスキルを生成しますか?(全部 / 選択 / 修正)
Handling the user's response
| Response | Action |
|---|---|
| All | Finalize skill-plan.json as is. Propose running skill-synthesizer |
| Selection | Update skill-plan.json with only the skills the user selected |
| Revision | Update skill-plan.json according to the user's revision instructions and present it again |