2. システムプロンプトとアイデンティティ

AIの人格がどのように構築され、プロンプトがどう組み立てられるか

概要

OpenClawの「パーソナル」な性格は、3層のアイデンティティシステムと、 20以上のセクションから成る巨大なシステムプロンプトによって実現されています。 このセクションでは、AIの人格がどのように定義・構築・注入されるかを詳細に解説します。

アイデンティティの3層構造

核心ポイント:OpenClawはジェネリックなAIアシスタントではありません。 初回起動時の対話的オンボーディングを経て、ユーザーと協力して固有の人格を獲得します。

Layer 1: 設定ベースのアイデンティティ

src/agents/identity.ts

resolveAgentIdentity() が設定ファイルの config.agents.list[].identity から アイデンティティ情報を読み取ります。

フィールド用途
name表示名(メッセージプレフィックスに使用)
themeテーマ
emojiACKリアクション(デフォルト: 👀)
avatarアバター画像パス

Layer 2: ファイルベースのアイデンティティ

src/agents/identity-file.ts

ワークスペースの IDENTITY.md ファイルからMarkdown形式で人格情報を読み込みます。 設定ベースよりも拡張されたフィールドを持ちます:

フィールド説明
name名前Clawd
emoji絵文字🦞
creatureキャラクター種別lobster
vibe雰囲気・性格friendly and direct
avatarアバター(画像パス)
themeテーマocean

parseIdentityMarkdown() がMarkdownファイルを解析し、プレースホルダー値("pick something you like" 等)を自動フィルタリングします。

Layer 3: SOUL.md — ペルソナエンジン

これがOpenClawの人格の核心です。

SOUL.mdとは:エージェントの振る舞い原則を定義するファイルです。 システムプロンプトの「Project Context」セクションに注入され、 AIの応答スタイル全体を支配します。

SOUL.mdテンプレートが定める主要原則:

特筆すべき点:SOUL.mdは「自己進化型」に設計されています。ファイル自体に「This file is yours to evolve(このファイルはあなた自身で進化させるもの)」と記載されています。

初回オンボーディング(BOOTSTRAP.md)

src/agents/workspace.ts

パーソナル化の起点:初回起動時にBOOTSTRAP.mdが読み込まれ、 対話的な自己発見プロセスが始まります。

BOOTSTRAP.mdの初回オンボーディングフロー:

  1. エージェントが起動し、「Hey. I just came online. Who am I? Who are you?」と自問する
  2. ユーザーと対話しながら:名前、キャラクター種別、雰囲気、絵文字を協力して決定
  3. IDENTITY.md、USER.md、SOUL.mdを更新
  4. BOOTSTRAP.mdを削除 — 「You don't need a bootstrap script anymore — you're you now」

オンボーディング状態は .openclaw/workspace-state.jsonbootstrapSeededAtonboardingCompletedAt として記録されます。

ブートストラップファイル群

src/agents/workspace.ts:412-466

ワークスペースから読み込まれる標準ファイル群:

ファイル用途サブエージェントに共有
AGENTS.mdワークスペース指示、セッションプロトコルはい
SOUL.md人格・ペルソナ定義いいえ
TOOLS.mdツール利用ガイドはい
IDENTITY.md名前、キャラクター、絵文字いいえ
USER.mdユーザープロフィール(名前、タイムゾーン、好み)いいえ
HEARTBEAT.md定期チェックタスクいいえ
BOOTSTRAP.md初回オンボーディング(使用後削除)いいえ
MEMORY.md長期メモリいいえ
セキュリティ設計:サブエージェントとCronセッションには AGENTS.mdTOOLS.md のみが共有され、 個人情報(USER.md、MEMORY.md等)は漏洩しません。 これは filterBootstrapFilesForSession() で制御されています。

ブートストラップファイルの制限

src/agents/pi-embedded-helpers/bootstrap.ts

システムプロンプトの組み立てフロー

src/agents/system-prompt.ts:169-639

buildAgentSystemPrompt() が30以上のパラメータを受け取り、 以下のセクションを順番に組み立てます:

プロンプトモード

モード用途含まれるセクション
fullメインエージェントすべて
minimalサブエージェントTooling, Workspace, Runtimeのみ
none最小基本アイデンティティ行のみ

セクション一覧(組み立て順)

システムプロンプト構成: "You are a personal assistant running inside OpenClaw." ├── ## Tooling ← 利用可能ツール一覧 + 概要 ├── ## Tool Call Style ← ツール呼び出し時のナレーション指針 ├── ## Safety ← 安全性規則(自己保存の禁止等) ├── ## OpenClaw CLI Quick Reference ← CLIコマンドリファレンス ├── ## Skills (mandatory) ← スキルスキャン・読み込み指示 ├── ## Memory Recall ← メモリ検索の利用指示 ├── ## OpenClaw Self-Update ← セルフアップデート制御 ├── ## Model Aliases ← モデルエイリアス ├── ## Workspace ← 作業ディレクトリ情報 ├── ## Documentation ← ドキュメントリンク ├── ## Sandbox ← サンドボックス情報(有効時のみ) ├── ## User Identity ← オーナー電話番号 ├── ## Current Date & Time ← タイムゾーン ├── ## Workspace Files (injected) ← 注入ファイルヘッダー ├── ## Reply Tags ← 返信タグ指示 ├── ## Messaging ← クロスセッションメッセージング ├── ## Voice (TTS) ← テキスト読み上げヒント ├── ## Group Chat Context ← グループチャットコンテキスト ├── ## Reactions ← リアクション利用指針 ├── ## Reasoning Format ← 思考タグフォーマット ├── # Project Context ← ★ ここにSOUL.md等が注入される │ ├── AGENTS.md │ ├── SOUL.md ← "embody its persona and tone" │ ├── TOOLS.md │ ├── USER.md │ ├── MEMORY.md │ └── IDENTITY.md ├── ## Silent Replies ← 無言応答トークン ├── ## Heartbeats ← ハートビートACKプロトコル └── ## Runtime ← ランタイム情報行

アイデンティティ解決の階層

メッセージプレフィックスやリアクション絵文字は、多層的な優先度で解決されます:

ACKリアクション解決順

  1. L1 チャンネルアカウントレベル(channels.{channel}.accounts.{id}.ackReaction
  2. L2 チャンネルレベル(channels.{channel}.ackReaction
  3. L3 グローバルレベル(messages.ackReaction
  4. L4 エージェントアイデンティティの絵文字フォールバック
  5. デフォルト 👀

メッセージプレフィックス解決順

  1. 明示的に設定されたプレフィックス
  2. hasAllowFrom が true → 空文字(プレフィックスなし)
  3. アイデンティティ名をブラケット囲み([name]
  4. フォールバック: [openclaw]

プロンプトセキュリティ

src/agents/sanitize-for-prompt.ts

sanitizeForPromptLiteral() はプロンプトインジェクション対策として、 ワークスペースパス等の外部入力値から以下を除去します:

これにより、攻撃者がディレクトリ名にプロンプト命令を埋め込む攻撃を防止します。

システムプロンプトパラメータ解決

src/agents/system-prompt-params.ts

buildSystemPromptParams() が以下を解決します:

エージェントスコープ(マルチエージェント)

src/agents/agent-scope.ts

OpenClawは複数のエージェントを同時に運用できます。各エージェントは独立した設定を持ちます: