Fundamentals
システムプロンプト
OpenClaw はエージェントの実行ごとに独自のシステムプロンプトを構築します。ランタイムのデフォルトプロンプトはありません。
構築は 3 つのレイヤーで構成されます。
buildAgentSystemPromptは、明示的な入力からプロンプトをレンダリングします。純粋なレンダラーとして維持され、グローバル設定を直接読み取りません。resolveAgentSystemPromptConfigは、特定のエージェントについて、設定に基づくプロンプト調整項目(所有者表示、TTS ヒント、モデルエイリアス、メモリ引用モード、サブエージェント委任モード)を解決します。- ランタイムアダプター(組み込み、CLI、コマンド/エクスポートプレビュー、Compaction)は、ライブ情報(ツール、サンドボックス状態、チャネル機能、コンテキストファイル、プロバイダーのプロンプト提供内容)を収集し、設定済みのプロンプトファサードを呼び出します。
これにより、ランタイムのあらゆる詳細を単一の巨大なビルダーに詰め込むことなく、エクスポート/デバッグ用のプロンプトサーフェスをライブ実行と整合させられます。
プロバイダー Plugin は、OpenClaw が所有するプロンプトを置き換えることなく、キャッシュを考慮したガイダンスを提供できます。プロバイダーランタイムでは次のことができます。
- 名前付きの 3 つのコアセクションのいずれかを置き換える:
interaction_style、tool_call_style、execution_bias - プロンプトキャッシュ境界の上に安定したプレフィックスを挿入する
- プロンプトキャッシュ境界の下に動的なサフィックスを挿入する
モデルファミリー固有の調整には、プロバイダー所有の提供内容を使用してください。従来の before_prompt_build フックは、互換性維持または真にグローバルなプロンプト変更のためにのみ使用してください。
同梱の OpenAI/Codex GPT-5 ファミリーオーバーレイ(resolveGpt5SystemPromptContribution)は、この仕組みを使用します。stablePrefix 動作契約(実行ポリシー、ツール規律、出力契約、完了契約)に加え、より親しみやすいトーンにするための任意の interaction_style オーバーライドで構成されます。OpenAI または Codex Plugin 経由でルーティングされるすべての gpt-5* モデル ID に適用され、agents.defaults.promptOverlays.gpt5.personality("friendly"/"on" または "off")で制御されます。
構造
プロンプトはコンパクトで、次の固定セクションがあります。
- ツール:構造化ツールが信頼できる唯一の情報源であることの注意事項と、ランタイムでのツール使用ガイダンス。実験的な
update_planツールが有効な場合(tools.experimental.planTool)、そのツール自体の説明に次の内容が追加されます。複雑で複数ステップの作業にのみ使用し、in_progressのステップは最大 1 つに保ち、単純な 1 ステップの作業では使用しないこと。 - 実行方針:対応可能なリクエストにはそのターン内で対処し、完了またはブロックされるまで継続し、不十分なツール結果から回復し、変化し得る状態をライブで確認し、最終回答前に検証します。
- 安全性:権力追求的な振る舞いや監督の回避を防ぐための短いガードレール注意事項。
- Skills(利用可能な場合):必要に応じてスキルの指示を読み込む方法をモデルに伝えます。
- OpenClaw の制御:設定/再起動作業には
gatewayツールを優先し、CLI コマンドを捏造しないよう指示します。 - OpenClaw の自己更新:
config.schema.lookupで設定を安全に検査し、config.patchでパッチを適用し、config.applyで設定全体を置き換え、ユーザーから明示的に要求された場合にのみupdate.runを実行します。エージェント向けのgatewayツールは、tools.exec.modeの書き換えを拒否します。 - ワークスペース:作業ディレクトリ(
agents.defaults.workspace)。 - ドキュメント:ローカルのドキュメント/ソースパスと、それらを読むべきタイミング。
- ワークスペースファイル(挿入済み):ブートストラップファイルが以下に含まれることを示します。
- サンドボックス(有効な場合):サンドボックス化されたランタイム、サンドボックスパス、昇格実行の可否。
- 現在の日付と時刻:タイムゾーンのみ(キャッシュに対して安定。ライブ時計は
session_statusから取得)。 - アシスタント出力ディレクティブ:添付ファイル、音声メモ、返信タグの簡潔な構文。
- Heartbeats:デフォルトエージェントで Heartbeat が有効な場合の Heartbeat プロンプトと ACK の動作。
- ランタイム:ホスト、OS、Node、モデル、リポジトリルート(検出された場合)、思考レベル(1 行)。
- 推論:現在の可視性レベルと
/reasoning切り替えのヒント。
大きく安定した内容(プロジェクトコンテキストを含む)は、内部プロンプトキャッシュ境界の上に配置されます。ターンごとに変化するセクション(Control UI の埋め込みガイダンス、メッセージング、音声、グループチャットコンテキスト、リアクション、Heartbeats、ランタイム)は境界の下に追加されるため、プレフィックスキャッシュを持つローカルバックエンドは、チャネルのターン間で安定したワークスペースプレフィックスを再利用できます。受け入れ可能なスキーマにそのランタイム情報がすでに含まれている場合、ツールの説明には現在のチャネル名を埋め込まないでください。
ツールセクションには、長時間実行される作業に関するガイダンスも含まれます。
- 将来のフォローアップ(
check back later、リマインダー、定期作業)には、execのスリープループ、yieldMsの遅延テクニック、またはprocessの反復ポーリングではなく Cron を使用する - 現在開始してバックグラウンドで継続するコマンドにのみ
exec/processを使用する - 自動完了ウェイクが有効な場合、コマンドを一度だけ開始し、プッシュベースのウェイクパスに任せる
- 実行中のコマンドに対するログ、ステータス、入力、または介入には
processを使用する - 大規模なタスクでは
sessions_spawnを優先する。サブエージェントの完了通知はプッシュベースで、リクエスト元へ自動的に通知される - 完了を待つためだけに
subagents list/sessions_listをループでポーリングしない
agents.defaults.subagents.delegationMode(デフォルトは "suggest")で、この方針を強化できます。"prefer" は専用のサブエージェント委任セクションを追加し、メインエージェントに対して、応答性の高いコーディネーターとして動作し、直接回答より複雑な作業はすべて sessions_spawn を通じて処理するよう指示します。これはプロンプトのみに影響し、sessions_spawn が利用可能かどうかは引き続きツールポリシーによって制御されます。
システムプロンプト内の安全ガードレールは助言であり、強制機構ではありません。厳格な強制には、ツールポリシー、実行承認、サンドボックス化、チャネルの許可リストを使用してください。設計上、運用者はプロンプトのガードレールを無効化できます。
ネイティブの承認カード/ボタンを備えるチャネルでは、まずその UI に依存し、ツール結果でチャット承認が利用できない、または手動承認が唯一の手段であると示された場合にのみ、手動の /approve コマンドを含めるようプロンプトがエージェントに指示します。
プロンプトモード
OpenClaw は、サブエージェント向けに小さなシステムプロンプトをレンダリングします。ランタイムは実行ごとに promptMode を設定します(ユーザー向け設定ではありません)。
full(デフォルト):上記のすべてのセクション。minimal:サブエージェントに使用されます。メモリプロンプトセクション(メモリの想起として同梱)、OpenClaw の自己更新、モデルエイリアス、ユーザー ID、アシスタント出力ディレクティブ、メッセージング、サイレント返信、Heartbeatsを省略します。ツール、安全性、Skills(提供された場合)、ワークスペース、サンドボックス、現在の日付と時刻(判明している場合)、ランタイム、挿入されたコンテキストは引き続き利用できます。none:基本の ID 行のみを返します。
promptMode=minimal では、追加で挿入されたプロンプトはグループチャットコンテキストではなくサブエージェントコンテキストとラベル付けされます。
チャネルの自動返信実行では、直接、グループ、またはメッセージツール専用のコンテキストが可視返信の契約をすでに担っている場合、OpenClaw は一般的なサイレント返信セクションを省略します。従来の自動グループ/チャネルモードでのみ NO_REPLY が表示され、ダイレクトチャットとメッセージツール専用の返信ではサイレントトークンのガイダンスが省略されます。
プロンプトスナップショット
OpenClaw は、Codex ランタイムの正常系に対応するコミット済みプロンプトスナップショットを test/fixtures/agents/prompt-snapshots/codex-runtime-happy-path/ に保持します。これらは、選択されたアプリサーバーのスレッド/ターンパラメーターに加え、Telegram のダイレクト、Discord のグループ、Heartbeat の各ターンについて再構築されたモデル向けプロンプトレイヤースタックをレンダリングします。これには、固定された Codex gpt-5.5 モデルプロンプトフィクスチャ、Codex の正常系権限に関する開発者テキスト、OpenClaw の開発者指示、OpenClaw が提供する場合のターン単位のコラボレーションモード指示、ユーザーのターン入力、動的ツール仕様への参照が含まれます。
固定された Codex モデルプロンプトフィクスチャは pnpm prompt:snapshots:sync-codex-model で更新します。デフォルトでは、$CODEX_HOME/models_cache.json、次に ~/.codex/models_cache.json、その次にメンテナーのチェックアウト規約である ~/code/codex/codex-rs/models-manager/models.json を検索します。いずれも存在しない場合、コミット済みフィクスチャを変更せずに終了します。特定の models_cache.json または models.json ファイルから更新するには、--catalog <path> を渡します。
これらのスナップショットは、OpenAI への生リクエストをバイト単位で完全に再現したキャプチャではありません。OpenClaw がスレッドおよびターンのパラメーターを送信した後、Codex はランタイム所有のワークスペースコンテキスト(AGENTS.md、環境コンテキスト、メモリ、アプリ/Plugin の指示、組み込みのデフォルトコラボレーションモード指示)を追加できます。
pnpm prompt:snapshots:gen で再生成し、pnpm prompt:snapshots:check で差分を検証します。CI は追加境界シャードと並行して差分チェックを実行するため、プロンプト変更とスナップショット更新は同じ PR に含めます。
ワークスペースのブートストラップ挿入
ブートストラップファイルはアクティブなワークスペースから解決され、その有効期間に対応するプロンプトサーフェスへルーティングされます。
AGENTS.mdSOUL.mdTOOLS.mdIDENTITY.mdUSER.mdHEARTBEAT.mdBOOTSTRAP.md(新規ワークスペースでのみ)MEMORY.md(存在する場合)
ネイティブ Codex ハーネスでは、OpenClaw は安定したワークスペースファイルをユーザーの各ターンで繰り返さないようにします。Codex は独自のプロジェクトドキュメント検出を通じて AGENTS.md を読み込みます。TOOLS.md は、継承される Codex 開発者指示として転送されます。SOUL.md、IDENTITY.md、USER.md はターン単位のコラボレーション開発者指示として転送されるため、ネイティブ Codex サブエージェントには継承されません。HEARTBEAT.md の内容は直接挿入されません。ファイルが存在し、かつ空でない場合、Heartbeat ターンにはそのファイルを参照するコラボレーションモードの注記が付与されます。MEMORY.md の内容も、ネイティブ Codex の各ターンに貼り付けられることはありません。ワークスペースでメモリツールが利用可能な場合、Codex のターンには、モデルを memory_search または memory_get に誘導する短いワークスペースメモリの注記が追加されます。ツールが無効、メモリ検索が利用不可、またはアクティブなワークスペースがエージェントのメモリワークスペースと異なる場合、MEMORY.md は通常の制限付きターンコンテキストパスにフォールバックします。BOOTSTRAP.md は通常のターンコンテキストの役割を維持します。
Codex 以外のハーネスでは、ブートストラップファイルは既存の条件に従って OpenClaw プロンプトに組み込まれます。デフォルトエージェントで Heartbeat が無効になっている場合、または agents.defaults.heartbeat.includeSystemPromptSection が false の場合、通常の実行では HEARTBEAT.md が省略されます。挿入するファイルは簡潔に保ってください。特に Codex 以外の MEMORY.md は、厳選された長期的な要約として維持し、詳細な日次メモは memory/*.md に保存して、必要に応じて memory_search / memory_get から取得できるようにしてください。Codex 以外でサイズの大きい MEMORY.md ファイルはプロンプト使用量を増加させ、以下のブートストラップファイル制限により一部のみ挿入される場合があります。
大きなファイルは、マーカー付きで切り詰められます。
| 制限 | 設定キー | デフォルト |
|---|---|---|
| ファイルごとの最大文字数 | agents.defaults.bootstrapMaxChars |
20000 |
| 全ファイルの合計 | agents.defaults.bootstrapTotalMaxChars |
60000 |
切り詰め警告(off|once|always) |
agents.defaults.bootstrapPromptTruncationWarning |
always |
見つからないファイルには、短い欠落ファイルマーカーが挿入されます。詳細な raw/挿入後の件数は、/context、/status、doctor、ログなどの診断情報に保持されます。
メモリファイルでは、切り詰めによってデータが失われることはありません。ディスク上のファイルはそのまま維持されます。ネイティブ Codex では、利用可能な場合、MEMORY.md は必要に応じてメモリツールを通じて読み込まれ、それ以外の場合は上限付きのプロンプトフォールバックが使用されます。他のハーネスでは、モデルがメモリを直接読み取るか検索するまで、短縮された挿入コピーのみがモデルに表示されます。MEMORY.md が繰り返し切り詰められる場合は、より短い永続的な要約にまとめ、詳細な履歴を memory/*.md に移すか、ブートストラップ上限を意図的に引き上げてください。
サブエージェントセッションでは、AGENTS.md と TOOLS.md のみが挿入されます(サブエージェントのコンテキストを小さく保つため、他のブートストラップファイルは除外されます)。
内部フックは、agent:bootstrap イベントを介してこのステップをインターセプトし、挿入されるブートストラップファイルを変更または置換できます(たとえば、SOUL.md を別のペルソナに差し替える場合)。
より画一的でない語り口にするには、SOUL.md パーソナリティガイドから始めてください。
挿入される各ファイルの寄与量(raw と挿入後、切り詰め、ツールスキーマのオーバーヘッド)を調べるには、/context list または /context detail を使用します。コンテキストを参照してください。
時刻の処理
現在の日付と時刻セクションは、ユーザーのタイムゾーンが判明している場合にのみ表示され、プロンプトキャッシュを安定させるため、タイムゾーンのみが含まれます(動的な時計や時刻形式は含まれません)。
エージェントが現在時刻を必要とする場合は、session_status を使用します。そのステータスカードにはタイムスタンプ行が含まれます。同じツールで、セッションごとのモデルオーバーライドを任意に設定することもできます(model=default で解除します)。
次のように設定します。
agents.defaults.userTimezoneagents.defaults.timeFormat(auto|12|24)
動作の詳細については、タイムゾーンと日付と時刻を参照してください。
Skills
対象となるスキルが存在する場合、OpenClaw は、スキルごとのファイルパスとコンテンツから生成された <version>sha256:...</version> マーカーを含む、コンパクトな <available_skills> リスト(formatSkillsForPrompt)を挿入します。プロンプトはモデルに対し、read を使用して、一覧に記載された場所(ワークスペース、管理対象、またはバンドル済み)にある SKILL.md を読み込むよう指示します。また、<version> が前のターンと異なる場合は、スキルを再読み込みするよう指示します。対象となるスキルがない場合、Skills セクションは省略されます。
ネイティブ Codex のターンでは、厳密なスケジュール済みプロンプトを維持する軽量な cron ターンを除き、このリストをターンごとのユーザー入力ではなく、ターンスコープのコラボレーション用開発者指示として受け取ります。他のハーネスでは、通常のプロンプトセクションが維持されます。
場所は、skills/personal/foo/SKILL.md のようなネストされたスキルを指すことができます。ネストは整理のみを目的としており、プロンプトでは SKILL.md frontmatter のフラットなスキル名が使用されます。
対象判定には、スキルメタデータのゲート、ランタイム環境および設定のチェック、さらに agents.defaults.skills または agents.entries.*.skills が設定されている場合は、有効なエージェントスキル許可リストが含まれます。Plugin にバンドルされたスキルは、その所有元 Plugin が有効な場合にのみ対象となります。これにより、ツール Plugin は、すべてのツール説明にガイダンス全体を埋め込むことなく、より詳細な運用ガイドを公開できます。
<available_skills> <skill> <name>...</name> <description>...</description> <location>...</location> <version>sha256:...</version> </skill></available_skills>これにより、対象を絞ったスキルの使用を可能にしながら、基本プロンプトを小さく保てます。サイズ管理は Skills サブシステムが担い、汎用的なランタイムの読み取りおよび挿入サイズとは分離されています。
| スコープ | Skills プロンプト予算 | ランタイム抜粋予算 |
|---|---|---|
| グローバル | skills.limits.maxSkillsPromptChars |
agents.defaults.contextLimits.* |
| エージェントごと | agents.entries.*.skillsLimits.maxSkillsPromptChars |
agents.entries.*.contextLimits.* |
ランタイム抜粋予算には、memory_get、ライブツール結果、Compaction 後の AGENTS.md 更新が含まれます。
ドキュメント
ドキュメントセクションは、利用可能な場合はローカルドキュメント(Git チェックアウト内の docs/、またはバンドルされた npm パッケージのドキュメント)を参照し、それ以外の場合は https://docs.openclaw.ai にフォールバックします。また、OpenClaw のソースの場所も記載されます。Git チェックアウトではローカルのソースルートが示され、パッケージインストールでは GitHub のソース URL とともに、ドキュメントが不完全または古い場合はそこでソースを確認するよう指示されます。
プロンプトは、モデルが OpenClaw の仕組み(メモリと日次ノート、セッション、ツール、Gateway、設定、コマンド、プロジェクトコンテキスト)を理解する前に、OpenClaw 自体に関する知識の典拠としてドキュメントを位置付けます。また、AGENTS.md、プロジェクトコンテキスト、ワークスペース、プロファイル、メモリのノート、および memory_search は、OpenClaw の設計や実装に関する知識ではなく、指示コンテキストまたはユーザーメモリとして扱うようモデルに指示します。ドキュメントに記載がない場合や古い場合、モデルはその旨を明示してソースを調べる必要があります。また、可能であればモデル自身が openclaw status を実行し、アクセス権がない場合にのみユーザーに依頼するよう指示します。
特に設定については、正確なフィールド単位のドキュメントと制約を確認するため、エージェントに gateway ツールのアクション config.schema.lookup を参照させ、その後、より広範なガイダンスとして docs/gateway/configuration.md と docs/gateway/configuration-reference.md を参照させます。