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 経由でルーティングされる、モデル ID が gpt-5* のすべてのモデルに適用され、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.bash.*エイリアスを含め、tools.exec.ask/tools.exec.securityの書き換えを拒否します。 - ワークスペース:作業ディレクトリ(
agents.defaults.workspace)。 - ドキュメント:ローカルのドキュメント/ソースパスと、それらを読むべきタイミング。
- ワークスペースファイル(挿入済み):ブートストラップファイルが下部に含まれていることを示します。
- サンドボックス(有効な場合):サンドボックス化されたランタイム、サンドボックスのパス、昇格実行の可否。
- 現在の日付と時刻:タイムゾーンのみ(キャッシュに対して安定。現在時刻は
session_statusから取得します)。 - アシスタント出力ディレクティブ:添付ファイル、音声メモ、返信タグの簡潔な構文。
- Heartbeat:デフォルトエージェントで Heartbeat が有効な場合の、Heartbeat プロンプトと確認応答の動作。
- ランタイム:ホスト、OS、Node、モデル、リポジトリルート(検出された場合)、思考レベル(1 行)。
- 推論:現在の可視性レベルと
/reasoning切り替えのヒント。
大きく安定した内容(プロジェクトコンテキストを含む)は、内部プロンプトキャッシュ境界より上に配置されます。ターンごとに変化するセクション(Control UI の埋め込みガイダンス、メッセージング、音声、グループチャットコンテキスト、リアクション、Heartbeat、ランタイム)は、その境界より下に追加されます。これにより、プレフィックスキャッシュを持つローカルバックエンドは、チャンネル間のターンで安定したワークスペースプレフィックスを再利用できます。受け入れ可能なスキーマに該当するランタイム詳細がすでに含まれている場合、ツールの説明に現在のチャンネル名を埋め込むことは避けてください。
ツールセクションには、長時間実行される作業についてのガイダンスも含まれます。
- 後でのフォローアップ(
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 が利用可能かどうかは、引き続きツールポリシーによって制御されます。
システムプロンプト内の安全ガードレールは助言であり、強制ではありません。強制的な制御には、ツールポリシー、exec の承認、サンドボックス化、チャンネル許可リストを使用してください。オペレーターは設計上、プロンプトのガードレールを無効化できます。
ネイティブの承認カード/ボタンを備えたチャンネルでは、プロンプトはエージェントに、まずその UI を利用するよう指示します。手動の /approve コマンドを含めるのは、ツール結果がチャット承認を利用できないと示す場合、または手動承認が唯一の経路である場合に限ります。
プロンプトモード
OpenClaw は、サブエージェント向けに小さなシステムプロンプトをレンダリングします。ランタイムは実行ごとに promptMode を設定します(ユーザー向けの設定ではありません)。
full(デフォルト):上記のすべてのセクション。minimal:サブエージェントで使用されます。メモリプロンプトセクション(メモリの呼び出しとして同梱)、OpenClaw の自己更新、モデルエイリアス、ユーザー ID、アシスタント出力ディレクティブ、メッセージング、サイレント返信、Heartbeatを省略します。ツール、安全性、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 |
存在しないファイルについては、短い欠落ファイルマーカーが挿入されます。未加工/挿入済みの詳細な件数は、/context、/status、doctor、ログなどの診断情報に保持されます。
メモリファイルの場合、切り詰めはデータ損失ではありません。ファイルはディスク上に完全な状態で残ります。ネイティブ Codex では、利用可能な場合にメモリツールを通じて MEMORY.md が必要に応じて読み込まれ、それ以外の場合は制限付きのプロンプトフォールバックが使用されます。他のハーネスでは、モデルがメモリを直接読み取るか検索するまで、短縮された挿入コピーのみが表示されます。MEMORY.md が繰り返し切り詰められる場合は、より短く持続的な要約に整理し、詳細な履歴を memory/*.md に移動するか、意図的にブートストラップ制限を引き上げてください。
サブエージェントのセッションでは、AGENTS.md と TOOLS.md のみが注入されます(サブエージェントのコンテキストを小さく保つため、ほかのブートストラップファイルは除外されます)。
内部フックは、agent:bootstrap イベントを介してこのステップをインターセプトし、注入されるブートストラップファイルを変更または置換できます(たとえば、SOUL.md を別のペルソナ用ファイルに差し替えられます)。
より画一的でない表現にするには、SOUL.md パーソナリティガイドから始めてください。
注入された各ファイルの寄与量(生データと注入後の比較、切り詰め、ツールスキーマのオーバーヘッド)を確認するには、/context list または /context detail を使用します。コンテキストを参照してください。
時刻の処理
現在の日付と時刻セクションは、ユーザーのタイムゾーンが判明している場合にのみ表示されます。また、プロンプトキャッシュを安定させるため、タイムゾーンのみが含まれます(動的な時計や時刻形式は含まれません)。
エージェントが現在時刻を必要とする場合は、session_status を使用します。そのステータスカードにはタイムスタンプ行が含まれます。同じツールで、必要に応じてセッション単位のモデルオーバーライドも設定できます(model=default で解除されます)。
次の項目で設定します。
agents.defaults.userTimezoneagents.defaults.timeFormat(auto|12|24)
動作の詳細については、タイムゾーンおよび日付と時刻を参照してください。
Skills
利用可能な Skills が存在する場合、OpenClaw は、各 Skills のファイルパスと内容から生成された <version>sha256:...</version> マーカーを含む、コンパクトな <available_skills> リスト(formatSkillsForPrompt)を注入します。プロンプトは、モデルに対して read を使用して、一覧に示された場所(ワークスペース、管理対象、または同梱)にある SKILL.md を読み込むよう指示します。また、Skills の <version> が前のターンと異なる場合は再読込するよう指示します。利用可能な Skills がない場合、Skills セクションは省略されます。
ネイティブの Codex ターンでは、このリストはターンごとのユーザー入力ではなく、ターンスコープのコラボレーション用開発者指示として渡されます。ただし、スケジュール済みのプロンプトをそのまま保持する軽量な Cron ターンは例外です。ほかのハーネスでは、通常のプロンプトセクションが維持されます。
場所は、skills/personal/foo/SKILL.md のようなネストされた Skills を指すこともできます。ネストは整理のためだけのものであり、プロンプトでは SKILL.md のフロントマターにあるフラットな Skills 名が使用されます。
利用可否の判定には、Skills のメタデータゲート、実行時の環境および設定のチェック、さらに agents.defaults.skills または agents.list[].skills が設定されている場合の有効なエージェント Skills 許可リストが含まれます。Plugin に同梱された Skills は、所有元の Plugin が有効な場合にのみ利用できます。これにより、ツール Plugin は、すべてのツール説明に詳細なガイダンスを埋め込むことなく、より詳しい運用ガイドを提供できます。
<available_skills> <skill> <name>...</name> <description>...</description> <location>...</location> <version>sha256:...</version> </skill></available_skills>これにより、基本プロンプトを小さく保ちながら、対象を絞った Skills の使用が可能になります。サイズ管理は Skills サブシステムが担い、汎用的な実行時の読み込みおよび注入のサイズ管理とは分離されています。
| スコープ | Skills プロンプトの上限 | 実行時抜粋の上限 |
|---|---|---|
| グローバル | skills.limits.maxSkillsPromptChars |
agents.defaults.contextLimits.* |
| エージェント単位 | agents.list[].skillsLimits.maxSkillsPromptChars |
agents.list[].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 を参照するようエージェントに指示します。