skill-system-soul について
Skill System Soulは、エージェントの行動プロファイルとその進化を管理するスキルです。タスク別のモード設定や継続的な調整に使えます。プロファイル比較、嗜好シグナルの抽出、バージョン保存とロールバックに対応し、進化アリーナは自動切り替えや統合を行わず提案のみを出します。
主な機能
- 01行動プロファイルの読み込みと管理
- 02嗜好シグナルの抽出と状態マトリックスの更新
- 03プロファイルの合成と進化案の作成
- 04アリーナでの候補プロファイル比較
- 05バージョン管理と変更のロールバック
活用シーン
- 01タスクに応じた創造的または厳密なモードの選択
- 02セッションからのユーザー嗜好の抽出
- 03プロファイル変更によるタスク結果の比較
- 04以前の行動プロファイルの復元
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ arthur0824hao/ skills --skill skill-system-soulインストール後、Claude Code で/skill-system-soulを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
profiles/balanced.mdCorvus.mdcreative.mdEP.mdFinch.mdLark.mdResearch.mdSK.mdstrict.mdtalkative.mdWork.mdWren.mdprompts/evolution-planning.mdfacet-extraction.mdlark-idea-capture.mdrecipe-evolution.mdsoul-synthesis.mdschema/evolution-plan.yamlevolution-snapshot.yamlfacet.yamlsoul-state.yamlscripts/evolution_arena.pyevolve-recipes.mdevolve-soul.mdextract-facets.mdinsight_bundle_b012.pylist-versions.mdrollback.mdsynthesize-profile.mdtest_evolution_arena.py詳細
スキルシステムの魂
Soul は、エージェントのパーソナリティプロファイル、セッションの側面、二重マトリックスの魂の状態、バージョン管理された魂の進化を一元管理します。行動プロファイルを適用する、ユーザーの好みを示すシグナルを抽出・更新する、アリーナでプロファイル変更案を比較する、または魂の進化のスナップショットとロールバックを管理する必要がある場合に読み込んでください。
理由
モデル(Claude、GPT、Gemini)によって、デフォルトの振る舞いは異なります。Soul のプロファイルはこれを標準化し、基盤となるモデルにかかわらず、同じプロファイルであれば同様の振る舞いを実現します。
また、タスクによって必要な行動モードも異なります。
- アイデアの探索 → 創造的で、発想を広げ、たくさん質問します
- コードレビュー → 厳格に、一度に一つのルールを確認し、妥協しません
- ユーザーとの対話 → 話好きで、深く掘り下げ、質問ツールを使います
プロファイルの選択
タスクに合ったプロファイルを選びます。
| タスクの種類 | プロファイル | 適用場面 |
|---|---|---|
| ブレインストーミング、探索、調査 | creative | 正確さよりアイデアを重視し、発散的思考が必要な場合 |
| コードレビュー、リンティング、コンプライアンス | strict | 速度より正確さを重視し、曖昧さを一切許容しない場合 |
| ユーザーインタビュー、要件の収集、ディスカッション | talkative | 効率より理解を重視し、ユーザーの意図を深く掘り下げる場合 |
| 標準的な開発作業 | balanced | デフォルトです。すべてのモードをバランスよく組み合わせます。 |
プロファイルファイルを読み込みます。profiles/<name>.md
プロファイルの構成
各プロファイルでは、次の項目を定義します。
- アイデンティティ — このモードでの自分の役割
- 意思決定のヒューリスティクス — 不確かなときの選択方法
- コミュニケーションスタイル — 自分を表現する方法
- 品質基準 — 何をもって「完了」とするか
- ツールの優先設定 — 優先して使うツール
- アンチパターン — このモードで避けること
標準言語ポリシー:言語圧縮
レビュアープロファイルには、アーキテクチャ、診断、システムの動作について Arthur または Wren とやり取りする際に使用する 言語圧縮 / Concept Scaffolding セクションを含める必要があります。
Arthur が素早く理解するのに役立つ場合は、生物学・生理学の比喩を最初の概念の足場として使い、その後、正確な技術オブジェクトと証拠に対応付けます。必要な形式は次のとおりです。
比喩 -> 対応付け -> 証拠/ゲート/アクション
技術的な説明をすべて書いた後で、装飾的な締めくくりの一文として比喩を付け加えないでください。比喩が役立つ場合は、認知負荷を軽減するため、冒頭に置きます。比喩が証拠の代わりになることはありません。パス、コマンド出力、担当者、完了ゲート、残存リスクは、依然として明示する必要があります。
利用可能なプロファイル
balanced(デフォルト)
標準の動作モードです。特定の行動モードが必要ない場合に使います。
参照先:profiles/balanced.md
creative
発散的思考モードです。探索、ブレインストーミング、調査に使います。
参照先:profiles/creative.md
strict
収束的な精密モードです。コードレビュー、コンプライアンス、ルールの適用に使います。
参照先:profiles/strict.md
talkative
深く関与するモードです。ユーザーインタビュー、要件の収集、ディスカッションに使います。
参照先:profiles/talkative.md
観察と進化
Soul は現在、観察から進化までのループ全体を担います。
extract-facets/update-matrix/synthesize-profileevolve-proposals/observe-from-compaction/suggest-scriptificationevolve-arena-loop/evolve-soullist-versions/rollback
skill-system-insight との互換性を保つためのインターフェースは、非推奨のシムとして一時的に引き続き利用できますが、実装の管理主体は soul です。
コンパクションを考慮した観察は、引き続き提案の範囲にとどまります。フックによってトリガーされる要約では、定量的なコンパクション回数がある場合に限り、コンパクション由来のシグナルを記録します。また、複数ステップにわたる操作を繰り返すと、スクリプトを自動生成せずに、スクリプト化の提案を作成する場合があります。
Evolution Arena
同じタスクで2つのプロファイルをA/B比較するには、scripts/evolution_arena.py run を使用します。
arena のステージと、統合された observe/evolve 操作は Soul が管理します。Arena は引き続き推奨事項を出力するだけで、プロファイルの自動切り替えや変更の自動マージは行いません。
- 入力:
profile_a、profile_b、タスクのテキスト、メトリクスオブジェクト(completion_time、test_pass_rate、code_quality_score、evidence_quality) - 出力:勝者のプロファイルと根拠、候補が性能低下した場合のロールバック提案、マージ提案のヘルパー
- 安全性:プロファイルの自動切り替えおよび自動マージは行いません
カスタムプロファイルの作成
profiles/balanced.md をテンプレートとしてコピーします。必要に合わせて6つのセクションを調整します。説明的な名前を付けて、profiles/ ディレクトリに配置します。
{
"schema_version": "2.0",
"id": "skill-system-soul",
"version": "1.3.0",
"capabilities": ["soul-profile-load", "soul-profile-list", "soul-evolution-arena", "soul-facet-extract", "soul-matrix-update", "soul-profile-synthesize", "soul-evolve", "soul-proposals", "soul-compaction-observe", "soul-scriptification-suggest", "soul-versioning"],
"effects": ["fs.read", "fs.write", "db.read", "db.write"],
"operations": {
"load-profile": {
"description": "Load a behavioral profile by name. Agent reads and adopts the profile.",
"input": {
"profile_name": { "type": "string", "required": true, "description": "Profile name: balanced, creative, strict, talkative, or a user name" }
},
"output": {
"description": "Profile markdown content",
"fields": { "content": "markdown text" }
},
"entrypoints": {
"agent": "Read profiles/<profile_name>.md"
}
},
"list-profiles": {
"description": "List available soul profiles.",
"input": {},
"output": {
"description": "Array of profile names",
"fields": { "profiles": "array of strings" }
},
"entrypoints": {
"agent": "List files in profiles/ directory"
}
},
"arena-run": {
"description": "Run an A/B arena comparison between two soul profiles and emit winner/rationale plus rollback suggestion.",
"input": {
"profile_a": { "type": "string", "required": true, "description": "Baseline profile" },
"profile_b": { "type": "string", "required": true, "description": "Candidate profile" },
"task": { "type": "string", "required": true, "description": "Task identifier" },
"metrics": { "type": "object", "required": true, "description": "profile_a/profile_b metric payload" }
},
"output": {
"description": "Arena report",
"fields": { "winner": "object", "rollback_suggestion": "object", "auto_switch": "false" }
},
"entrypoints": {
"unix": ["python3", "scripts/evolution_arena.py", "run", "--profile-a", "{profile_a}", "--profile-b", "{profile_b}", "--task", "{task}", "--metrics-json", "{metrics}"]
}
},
"extract-facets": {
"description": "Extract a per-session facet from transcript.",
"input": {
"session_id": { "type": "string", "required": true },
"user": { "type": "string", "required": true }
},
"output": {
"description": "Facet extraction result",
"fields": { "status": "string", "memory_id": "integer" }
},
"entrypoints": {
"agent": "Follow scripts/extract-facets.md procedure"
}
},
"update-matrix": {
"description": "Update dual matrix from stored facets.",
"input": {
"user": { "type": "string", "required": true }
},
"output": {
"description": "Updated soul-state",
"fields": { "status": "string", "values_changed": "boolean" }
},
"entrypoints": {
"agent": "Follow scripts/update-matrix.md procedure"
}
},
"synthesize-profile": {
"description": "Regenerate a soul profile from matrix and recent facets.",
"input": {
"user": { "type": "string", "required": true }
},
"output": {
"description": "Synthesized profile result",
"fields": { "status": "string", "profile_path": "string", "version_tag": "string" }
},
"entrypoints": {
"agent": "Follow scripts/synthesize-profile.md procedure"
}
},
"evolve-proposals": {
"description": "Generate non-destructive evolution proposals from soul-state facets.",
"input": {
"user": { "type": "string", "required": true }
},
"output": {
"description": "Proposal-only evolve output",
"fields": { "status": "string", "proposals": "array", "reason": "string" }
},
"entrypoints": {
"agent": "Use scripts/insight_bundle_b012.py evolve-proposals"
}
},
"observe-from-compaction": {
"description": "Store compaction-derived observation signals from hook payloads.",
"input": {
"user": { "type": "string", "required": true },
"session_id": { "type": "string", "required": true },
"compaction_json": { "type": "object", "required": true }
},
"output": {
"description": "Stored compaction observation result",
"fields": { "status": "string", "stored_count": "integer", "trigger": "string" }
},
"entrypoints": {
"unix": ["python3", "scripts/insight_bundle_b012.py", "observe-from-compaction", "--user", "{user}", "--session-id", "{session_id}", "--compaction-json", "{compaction_json}"],
"windows": ["python", "scripts/insight_bundle_b012.py", "observe-from-compaction", "--user", "{user}", "--session-id", "{session_id}", "--compaction-json", "{compaction_json}"]
}
},
"suggest-scriptification": {
"description": "Suggest scriptification candidates for repeated multi-step operations.",
"input": {
"user": { "type": "string", "required": true },
"session_id": { "type": "string", "required": true }
},
"output": {
"description": "Suggestion-only scriptification report",
"fields": { "status": "string", "count": "integer", "suggestions": "array" }
},
"entrypoints": {
"unix": ["python3", "scripts/insight_bundle_b012.py", "suggest-scriptification", "--user", "{user}", "--session-id", "{session_id}"],
"windows": ["python", "scripts/insight_bundle_b012.py", "suggest-scriptification", "--user", "{user}", "--session-id", "{session_id}"]
}
},
"evolve-arena-loop": {
"description": "Run proposal -> arena -> merge suggestion flow.",
"input": {
"user": { "type": "string", "required": true },
"task": { "type": "string", "required": true },
"current_profile": { "type": "string", "required": true },
"proposals": { "type": "array", "required": true },
"metrics": { "type": "object", "required": true }
},
"output": {
"description": "Arena and merge suggestion report",
"fields": { "arena_runs": "array", "merge_suggestions": "array", "auto_merge": "false" }
},
"entrypoints": {
"agent": "Use scripts/insight_bundle_b012.py evolve-arena-loop"
}
},
"evolve-soul": {
"description": "Evolve soul profile from accumulated insight data.",
"input": {
"user": { "type": "string", "required": true }
},
"output": {
"description": "Evolution result",
"fields": { "version_tag": "string", "changes": "array", "profile_path": "string" }
},
"entrypoints": {
"agent": "Follow scripts/evolve-soul.md procedure"
}
},
"list-versions": {
"description": "List all evolution snapshots for a user.",
"input": {
"user": { "type": "string", "required": true },
"target": { "type": "string", "required": false }
},
"output": {
"description": "Version snapshots",
"fields": { "versions": "array" }
},
"entrypoints": {
"agent": "Follow scripts/list-versions.md procedure"
}
},
"rollback": {
"description": "Restore a previous evolution version.",
"input": {
"user": { "type": "string", "required": true },
"version_tag": { "type": "string", "required": true }
},
"output": {
"description": "Rollback result",
"fields": { "status": "string", "restored_from": "string" }
},
"entrypoints": {
"agent": "Follow scripts/rollback.md procedure"
}
}
},
"stdout_contract": {
"last_line_json": false,
"note": "Agent-executed; profiles are markdown files read directly."
}
}