mcpField
S
skill-system-soul

skill-system-soul

github.com/arthur0824haoエージェントワークフロー68 回インストール
リポジトリ

skill-system-soul について

Skill System Soulは、エージェントの行動プロファイルとその進化を管理するスキルです。タスク別のモード設定や継続的な調整に使えます。プロファイル比較、嗜好シグナルの抽出、バージョン保存とロールバックに対応し、進化アリーナは自動切り替えや統合を行わず提案のみを出します。

主な機能

  1. 01行動プロファイルの読み込みと管理
  2. 02嗜好シグナルの抽出と状態マトリックスの更新
  3. 03プロファイルの合成と進化案の作成
  4. 04アリーナでの候補プロファイル比較
  5. 05バージョン管理と変更のロールバック

活用シーン

  1. 01タスクに応じた創造的または厳密なモードの選択
  2. 02セッションからのユーザー嗜好の抽出
  3. 03プロファイル変更によるタスク結果の比較
  4. 04以前の行動プロファイルの復元

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/arthur0824hao/skills --skill skill-system-soul

インストール後、Claude Code で/skill-system-soulを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

profiles/
balanced.md
Corvus.md
creative.md
EP.md
Finch.md
Lark.md
Research.md
SK.md
strict.md
talkative.md
Work.md
Wren.md
prompts/
evolution-planning.md
facet-extraction.md
lark-idea-capture.md
recipe-evolution.md
soul-synthesis.md
schema/
evolution-plan.yaml
evolution-snapshot.yaml
facet.yaml
soul-state.yaml
scripts/
evolution_arena.py
evolve-recipes.md
evolve-soul.md
extract-facets.md
insight_bundle_b012.py
list-versions.md
rollback.md
synthesize-profile.md
test_evolution_arena.py

詳細

スキルシステムの魂

Soul は、エージェントのパーソナリティプロファイル、セッションの側面、二重マトリックスの魂の状態、バージョン管理された魂の進化を一元管理します。行動プロファイルを適用する、ユーザーの好みを示すシグナルを抽出・更新する、アリーナでプロファイル変更案を比較する、または魂の進化のスナップショットとロールバックを管理する必要がある場合に読み込んでください。

理由

モデル(Claude、GPT、Gemini)によって、デフォルトの振る舞いは異なります。Soul のプロファイルはこれを標準化し、基盤となるモデルにかかわらず、同じプロファイルであれば同様の振る舞いを実現します。

また、タスクによって必要な行動モードも異なります。

  • アイデアの探索 → 創造的で、発想を広げ、たくさん質問します
  • コードレビュー → 厳格に、一度に一つのルールを確認し、妥協しません
  • ユーザーとの対話 → 話好きで、深く掘り下げ、質問ツールを使います

プロファイルの選択

タスクに合ったプロファイルを選びます。

タスクの種類プロファイル適用場面
ブレインストーミング、探索、調査creative正確さよりアイデアを重視し、発散的思考が必要な場合
コードレビュー、リンティング、コンプライアンスstrict速度より正確さを重視し、曖昧さを一切許容しない場合
ユーザーインタビュー、要件の収集、ディスカッションtalkative効率より理解を重視し、ユーザーの意図を深く掘り下げる場合
標準的な開発作業balancedデフォルトです。すべてのモードをバランスよく組み合わせます。

プロファイルファイルを読み込みます。profiles/<name>.md

プロファイルの構成

各プロファイルでは、次の項目を定義します。

  1. アイデンティティ — このモードでの自分の役割
  2. 意思決定のヒューリスティクス — 不確かなときの選択方法
  3. コミュニケーションスタイル — 自分を表現する方法
  4. 品質基準 — 何をもって「完了」とするか
  5. ツールの優先設定 — 優先して使うツール
  6. アンチパターン — このモードで避けること

標準言語ポリシー:言語圧縮

レビュアープロファイルには、アーキテクチャ、診断、システムの動作について 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-profile
  • evolve-proposals / observe-from-compaction / suggest-scriptification
  • evolve-arena-loop / evolve-soul
  • list-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."
  }
}

コメント