
原文版本:2026-05-06;本次资料核对:2026-10-13。 源码基线:openclaw/openclaw @ 5584b0ad。以下区分 embedded、CLI 与 native Codex 等运行时,不把五月的实现当成所有版本通用契约。
一、核心设计原则
- OpenClaw 管理自己的提示词层:纯渲染器
buildAgentSystemPrompt、配置门面buildConfiguredAgentSystemPrompt和运行时适配器分工组装。native Codex 等宿主还会加入自己的上下文,不能把 OpenClaw 输出等同于原始模型请求的全部内容。 - Provider contribution 与通用 Hook 分工:Provider 可替换指定 section、贡献稳定前缀和动态后缀;这不等于获得整段提示词的任意替换权。全局 prompt hook 是另一套能力。
- 按稳定性分层:缓存边界是传输与缓存优化,不是指令权限边界。当前工具能力、Skills 目录与 Memory Recall 指导也可能在边界下刷新,不再统一归为“稳定层”。
- Skills 渐进加载:通常先放名称、描述、路径,模型需要时读取
SKILL.md;列入目录不代表全文已读取。 - 磁盘记忆与当前上下文分开:
MEMORY.md有受门控的引导加载;memory/*.md通常按需检索。native Codex 在记忆工具可用时以按需访问为主,不能一概说全部记忆都外置或全部自动注入。
这些原则对应固定版本的 System Prompt 文档。
二、完整 Prompt 结构
2.1 各 Section 详解
System Prompt 不是永远不变的固定表。以下是当前版本的主要内容组,是否出现受工具、渠道、prompt mode 和运行时影响:
| 内容组 | 作用 | 生命周期 |
|---|---|---|
| 身份、工作空间、Project Context | 人格与项目规则 | 较稳定,仍可刷新或截断 |
| Execution Bias、Promised Work | 行动与后续工作责任 | 通用指导 |
| Provider 稳定前缀 | 模型家族适配 | 缓存优化用 |
| Tooling、Skills、Memory Recall | 当前可用能力与读取指导 | 目录/权限变化时可刷新 |
| Care、Documentation、Sandbox | 操作注意、资料入口和沙箱事实 | 根据当前能力渲染 |
| OpenClaw Control、Messaging | 配置控制与渠道动作指导 | 工具与渠道相关 |
| Runtime、Reasoning、UI 等 | 运行环境与交互约束 | 易变 |
| 单独的 Runtime Context 消息 | 本地日期、时区、活动任务等 | 每轮更新,不是动态改写整个 system prompt |
原文的 Current Date & Time、独立 Safety、Heartbeats section 与旧表不能直接套到当前版本。尤其是硬权限由工具策略、审批、沙箱和渠道授权执行,不靠安全段落是否排在前面。
缓存稳定前缀能否实际命中,要看具体 provider、传输方式、前缀字节是否一致和缓存策略。当前 OpenClaw 在支持的 Anthropic API-key 与 native OpenAI Responses 路径有相应前缀保持机制,并非只有本地后端缓存。
2.2 Tooling Section 额外指导
长任务的设计仍强调区分“现在运行”和“以后唤醒”:
- 未来提醒、定时跟进使用调度能力;
exec/process管理当前已启动的工作。 - 有完成唤醒时,依赖完成路径,不循环查询列表等待。
- 子代理是否推送完成或需要收集,要看接受的 completion mode;子代理结束不代表用户目标已完成。
- 是否具备这些工具、是否允许调用,仍以该轮工具策略为准。
三、组装流程详解

3.1 入口点
Gateway 的 agent 请求、CLI agent 和连接的聊天入口最终都会涉及会话与运行准备;RPC 返回、会话保存及事件顺序要按入口区分,不应把一种入口的 { runId, acceptedAt } 当成所有入口统一返回值。
3.2 完整组装步骤
用户消息
→ 会话路由、请求与身份解析
→ 工作空间 / 沙箱 / Skills / 引导上下文准备
→ Context Engine 组装有限历史与可选提示增量
→ OpenClaw 提示词渲染、Provider contribution 与插件 hook
→ 运行时适配、工具策略与支持的输入门控
→ 模型调用 ↔ 工具执行
→ 回复整理与投递
→ 会话持久化、必要的压缩及后续维护
这张图是职责视图,不是源码函数的严格调用序列。runEmbeddedPiAgent 是嵌入式运行入口,不是与“Prompt 组装”完全分离的一次纯推理调用;native Codex / Copilot 有不同的宿主与历史管理边界。Agent Loop、Context Engine。
四、系统提示词(System Prompt)构建细节

4.1 基础构成
可以把组装理解为“渲染器接收明确输入,再由运行时提供事实”,而不是五层文本永远按同一顺序叠加:
配置与已解析的运行事实
├── OpenClaw 基础指导
├── Provider contribution
├── 已通过门控的工作空间上下文
├── 当前工具 / Skills / 渠道目录
└── Context Engine / Plugin 增量
↓
目标运行时的提示词与消息投影
↓
模型实际接收的系统/开发者指导、历史与当前输入
拼接位置不是安全优先级。 同一段 system prompt 内的先后位置可能影响模型注意力,却不能推出“后写规则覆盖前写安全要求”。消息角色、输入来源、运行时工具授权是不同层次;OpenAI 对消息角色的说明也不是按文本先后来决定权限。OpenAI 官方消息角色文档。
4.2 Skills 处理
通常先注入紧凑目录,再按任务读取:
<available_skills>
<skill>
<name>example</name>
<description>任务适用条件</description>
<location>skills/example/SKILL.md</location>
</skill>
</available_skills>
Eligibility 包含 metadata gates、环境/config 检查、agent allowlist;bundled skills 还受插件启用状态控制。当前 per-agent 配置采用 agents.entries.<id>,不能继续照抄旧的 agents.list[]。
目录预算 skills.limits.maxSkillsPromptChars 与 agents.entries.<id>.skillsLimits.maxSkillsPromptChars,和实际工具读取内容的预算分开。native Codex 的目录载体还取决于是否有受管理的 inference relay。Skills 文档。
4.3 Bootstrap Files(Project Context)注入
下表描述当前文件职责,不表示每种会话每轮都把全文直接塞进 system prompt:
| 文件 | 职责 | 当前加载边界 |
|---|---|---|
AGENTS.md |
工作空间/项目指令 | 引导上下文;native Codex 可走原生项目发现 |
SOUL.md、IDENTITY.md |
人格、身份 | 配置工作空间来源,受运行时载体约束 |
USER.md |
用户资料与偏好 | 受用户选择和隐私范围约束 |
BOOTSTRAP.md |
新工作空间引导 | 新建模板后按存在状态处理,不是所有会话必有 |
MEMORY.md |
精炼长期事实 | 非 Codex 可受限注入;native Codex 工具可用时按需读 |
TOOLS.md |
本地工具说明 | 原文的独立 Bootstrap 列表已不适用于该源码版本 |
| 心跳材料 | 定时任务检查上下文 | 心跳专用,不是普通 turn 的通用 Bootstrap |
当前普通 Bootstrap 列表不再把 HEARTBEAT.md 当作通用引导文件。实际执行目录与配置的 agent workspace 不同时,也不能任意加载执行目录里的 persona/用户记忆。
memory/*.md 每日笔记不参加普通引导注入;裸 /new / /reset 首轮可以带入最近每日笔记。
当前默认限制:
| 参数 | 默认值 | 说明 |
|---|---|---|
agents.defaults.bootstrapMaxChars |
20,000 | 单文件字符预算 |
agents.defaults.bootstrapTotalMaxChars |
60,000 | 合计字符预算 |
原文的 12,000 单文件默认值已更新;bootstrapPromptTruncationWarning 也不应继续作为当前可调示例。当前截断通知内置,诊断可见各文件 raw / injected 大小。截断的是注入副本,不是磁盘原文件。
普通子代理 Bootstrap allowlist 当前只保留 AGENTS.md,不是 AGENTS.md + TOOLS.md。native harness 继承的线程指导还需另行区分。agent:bootstrap 内部 hook 可修改引导文件集合。加载与过滤源码。
4.4 Prompt 模式(Prompt Modes)
| 模式 | 说明 |
|---|---|
full |
完整渲染,仍受工具与渠道条件控制 |
minimal |
精简子代理指导;当前可保留提供的 Skills、Care、Tooling 等 |
none |
只返回基础身份行 |
promptMode 是运行时选项,不是面向用户的普通配置开关。“minimal 一定去掉 Skills”是旧描述。
五、用户提示词(User Prompt)构建
5.1 用户消息处理
消息会经过渠道 envelope、命令/directive、附件及运行时上下文处理。命令是否识别、是否剥离,受渠道和发送者授权影响,不能把任何 /... 都当成已授权控制命令。
图片、音频、文件可能作为多模态输入、提取文本或附件引用进入请求,不统一使用工具结果格式。
5.2 历史消息(Conversation History)
历史是带角色的消息集合,不是全部拼成一个 User Prompt。模型能看到的是经过可见性、修剪、压缩和预算处理的历史。
该版本默认会话与 transcript 存储已转为每 agent 的 ~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite;旧 sessions/<sessionId>.jsonl 路径属于历史实现/导出兼容场景,不宜写成唯一现行存储。Session 文档。
5.3 工具调用与结果
模型请求工具 → 运行时校验/审批 → 执行 → 结果加入后续模型输入
工具结果是资料,不因进入上下文就获得更高指令权限;调用与返回还要保持配对,避免压缩后产生无对应结果的调用。
六、会话历史管理与 Compaction
6.1 Context Engine
| 生命周期 | 作用 |
|---|---|
ingest |
摄入单条消息 |
assemble |
返回预算内消息与可选 systemPromptAddition |
compact |
总结/缩减上下文 |
afterTurn 等 |
可选的后处理、维护与子代理生命周期 |
当前必需接口还包括 info;afterTurn 不是每个插件必须实现的方法。内置 legacy 默认保持既有组装与压缩行为;native Codex 仍拥有原生线程历史与 compactor。
6.2 Compaction(压缩)
通常是旧历史摘要加近期原文,而非“删掉磁盘上的全部旧对话”。当前内置压缩保留 transcript 的原消息,并记录摘要/压缩状态。
自动 memory flush 通常在压缩前提供一次静默保存机会,受启用配置、可写访问和工具策略限制;它不保证关键事实全部保存。可配置专用模型,但本地模型是否更快取决于硬件和模型,不能预设。Compaction、Memory Flush。
6.3 Session Pruning
Pruning 主要修剪模型请求中的旧工具结果,通常不改底层 transcript;Compaction 生成持久化摘要并改变后续有效上下文。两者都不应被描述成模型获得无损、无限的记忆。
七、Provider Hooks 与插件扩展
7.1 Provider 插件可贡献的内容
Provider contribution 可替换 interaction_style、tool_call_style、execution_bias 三个命名 section,添加稳定前缀与动态后缀。模型家族专属调优优先走该接口,真正全局的 prompt 修改再考虑通用 hook。
7.2 Plugin Hooks(OpenClaw 生命周期拦截点)
以下是与本文有关的子集,不是完整 hook 列表:
| Hook | 作用与限制 |
|---|---|
before_model_resolve |
覆盖本轮 provider/model/fallbacks |
agent_turn_prepare |
处理已准备消息与排队注入;并非所有 harness 都接线 |
before_prompt_build |
文本增量、系统覆盖与缩小工具面,按运行时支持 |
before_agent_run |
支持的 embedded / CLI 等路径上输入门控,不能泛化到 Codex |
before_agent_reply |
支持路径上短路返回合成回复 |
before_agent_finalize |
自然答案验收时可请求修订,受额外轮次预算限制 |
agent_end |
完成观察,不等于最终回复一定成功 |
before_tool_call / after_tool_call |
工具参数、策略与结果生命周期 |
处理器收到 (event, ctx),不是通用的 event.context 包装。访问对话与允许 prompt 注入有分别的插件权限门。工具支持的数据召回可使用 requiresToolAuthority 的授权后阶段。官方 Hook 契约。
八、关键配置参数
以下是局部示例,不是可直接覆盖现有环境的完整配置。部署时应按安装版本 schema 合并校验。
8.1 Bootstrap 控制
{
agents: {
defaults: {
workspace: "~/.openclaw/workspace",
bootstrapMaxChars: 20000,
bootstrapTotalMaxChars: 60000
}
}
}
8.2 Skills 控制
{
skills: { limits: { maxSkillsPromptChars: 5000 } },
agents: {
defaults: { skills: ["github", "weather"] },
entries: { docs: { skills: ["docs-search"] } }
}
}
5,000 是这里人为选择的目录预算,不是官方默认值;技能名称也只是示例,须实际存在且符合 eligibility。
8.3 Compaction 控制
{
agents: {
defaults: {
compaction: {
memoryFlush: { model: "ollama/qwen3:8b" }
}
}
}
}
此字段对应专用 flush 模型,示例不证明该模型已安装或能够加速。
8.4 Context Engine
{
plugins: { slots: { contextEngine: "legacy" } }
}
安装并启用其他引擎后,才可改为其注册 ID。配置参考。
九、Inspect 命令
| 命令 | 用途 |
|---|---|
/status |
查看当前会话与上下文状态 |
/context list |
查看已注入文件及粗略大小 |
/context detail |
查看更细的文件、工具 schema、目录开销 |
/usage tokens |
开启回复用量显示 |
/compact |
手动请求压缩 |
原文示例同时写“单文件 12,000”与“注入 20,962”,彼此矛盾,因此不再保留这组伪诊断数字。实际输出随版本、运行时和当前工具而变;本文没有执行上述命令。Context 诊断。
十、完整数据流图
Gateway / CLI / 渠道输入
↓
会话路由 + 工作空间 + 身份/可见性
↓
上下文引擎 + OpenClaw prompt + 插件/Provider contribution
↓
目标 harness(embedded / CLI / native Codex / 其他)
↓
模型消息投影 ↔ 已授权工具执行
↓
回复整理、投递、状态与 transcript 持久化
↓
需要时压缩、记忆保存机会与后台维护
上图保留职责全景,不把不同 harness 的函数名、缓存和存储强行画成同一套实现。
十一、相关文档索引
2026-10-13 资料核对:已浏览官方文档并读取上述固定提交的提示词文档、工作空间过滤源码、Hook 契约和会话/上下文资料;OpenAI 相关先读本地 openai-docs 技能,再查官方消息角色文档。本文未运行 OpenClaw 或任何配置/缓存测试。