OpenClaw Agent引擎内核:Pi‑Mono内核(Pi‑Agent Runtime) OpenClaw Agent引擎内核Pi‑Mono内核Pi‑Agent RuntimeOpenClaw智能体真正内核叫Pi‑Mono简称Pi内核使用TypeScript编写运行在Node.js环境整体采用外层Gateway调度器 内层Pi‑Mono执行内核双层架构Gateway做上层编排Pi‑Mono负责底层Agent循环、模型调用、工具执行、会话生命周期管理是OpenClaw智能体的心脏。一、内核整体分层模型整体分为三层解耦设计外层Gateway调度层runEmbeddedPiAgent约1200行代码属于Pi的外层运行时控制器不负责LLM推理只做管控会话串行执行、API‑Key动态轮换、错误分级重试、上下文窗口裁剪、Hook拦截、多租户隔离、资源限流、上下文溢出恢复。Gateway通过内部RPC调用Pi‑Mono不走HTTP延迟更低。动态重试算法最大重试次数 min(160, max(32,24 密钥数量×8))配置越多API‑Key自动分配更多重试机会实现负载分摊错误区分限流、鉴权失败、服务器异常、上下文超限分类处理而不是无脑重试。内层Pi‑Mono内核Agent核心执行引擎真正的Agent Loop实现核心入口文件pi‑embedded‑runner.ts主循环pi‑embedded‑subscribe.ts流式解析pi‑embedded‑helpers.ts上下文组装、工具解析、记忆加载。Pi‑Mono严格遵循ReAct范式思考‑行动‑观察循环内核只保留4个原子原语read、write、edit、bash上层所有复杂技能全部基于这4个原语扩展保证内核极简稳定业务能力交给上层插件化Skill系统实现。外围支撑子系统由Pi内核驱动会话系统AgentSession每个对话独立Session实例记忆系统SQLite 向量混合存储短期会话上下文 定期总结的长期记忆读取SOUL.md、AGENTS.md、USER.md构建系统提示词工具执行节点Node分为Local‑Node本地执行、Remote‑Node远程Docker隔离执行高危指令自动放入沙箱运行模型适配器统一抽象Model Provider兼容OpenAI、Anthropic Claude、Gemini、Ollama本地模型。二、Pi‑Mono内核完整Agent Loop执行流程核心工作流每一次用户消息Pi内核严格执行6步闭环循环1. 会话初始化 Gateway收到消息后创建或复用AgentSessionPi‑Mono读取SOUL.md人格、价值观、AGENTS.md行为约束、记忆库、历史对话上下文拼接完整System‑Prompt。 2. 上下文压缩与窗口治理 Pi‑Mono内置上下文裁剪逻辑当token快要溢出时自动做摘要压缩、丢弃久远对话保留最近关键信息防止超长上下文报错。 3. 流式调用LLM模型 通过流式SSE接收模型返回内容Pi‑Mono实时解析返回内容区分三类输出块 - 普通文本块实时推送到Telegram、微信等消息渠道 - 思考块Reasoning可选展示推理过程 - Tool‑Call工具调用指令JSON格式Pi‑Mono解析工具名称和参数交给Node执行器运行shell、文件读写、浏览器、代码运行等任务。 4. 工具执行与结果回填 工具执行完成后Pi‑Mono把执行结果注入对话上下文再次把更新后的全部上下文丢回给LLM开启新一轮思考循环循环直到模型输出最终回答不再产生工具调用为止。 重点**循环次数完全由模型决定**内核不硬编码最大循环轮次上限复杂任务会自动多轮思考、多次调用工具这是OpenClaw自主完成复杂任务的关键。 5. 会话持久化 本轮对话结束后Pi‑Mono将对话存入SQLite后台异步任务提取重要信息写入长期记忆文件MEMORY.md实现跨会话记忆。 6. 返回结果 把最终回答通过WebSocket推送回Gateway再分发至对应消息渠道。三、内核关键技术特性1. 模型无关抽象层Pi‑Mono将模型调用做抽象隔离上层代码完全不需要关心后端是云端模型还是本地Ollama模型同时统一处理流式解析、工具调用格式适配适配不同模型的Function‑Call格式差异。2. 嵌入式RPC通信模式Gateway和Pi‑Mono使用进程内RPC通信而非HTTP请求大幅减少序列化开销Gateway接管全部状态流可以拦截、修改Agent思考过程、工具调用指令方便做权限校验、人工审批、日志审计Pi内核本身保持纯粹只专注推理逻辑业务逻辑剥离给上层Gateway做到内核极简可维护。3. 文档驱动内核配置Pi内核不使用硬编码系统提示词全部依靠*.md配置文件配置Agent行为SOUL.md人格、边界、价值观AGENTS.md工具使用规则、思考模式HEARTBEAT.md定时后台任务修改文档即可改变Agent行为不用修改内核源码降低自定义成本。4. 安全隔离机制内核区分可信本地节点与隔离远程节点Shell、系统命令默认放入Docker沙箱执行Pi‑Mono会解析工具指令高危操作删除文件、系统级命令触发Gateway人工确认流程本地优先全部会话数据、记忆文件默认保存在本机~/.openclaw目录不会上传第三方服务器。四、和同类Agent内核对比Manus内核是单进程整体代码调度、循环、工具执行耦合在一起OpenClaw采用Pi‑Mono微内核控制平面和执行内核分离扩展性更强AutoGPT循环轮次写死上限Pi‑Mono内核由模型自主决定循环次数普通ReAct框架大多是库LibraryPi‑Mono是独立运行时Runtime自带会话管理、记忆、多渠道接入、API‑Key负载均衡、自动重试开箱即用。五、源码精简版架构目录层面src/ ├─ gateway/ # 网关进程控制平面 └─ agents/pi‑core/ ├─ pi‑embedded‑runner.ts # Agent主循环 ├─ pi‑embedded‑subscribe.ts # 流式解析器 ├─ session‑utils.ts # 会话与上下文处理 ├─ memory‑core.ts # 记忆内核 └─ tool‑executor.ts # 工具调用解析六、一句话总结内核本质Pi‑Mono内核本质一个Node.js实现的、文档驱动、支持自动多轮思考、内置工具调用、具备动态容错能力的ReAct智能体运行时Gateway负责管控Pi‑Mono负责思考与执行二者组合构成OpenClaw完整Agent引擎。如果你需要我可以给你简化版伪代码实现Pi‑Agent‑Loop拆解Pi内核中工具调用的JSON解析逻辑。核心结论Pi‑MonoOpenClaw内核和OpenCode同源但二者是完全独立产物OpenClaw不会复用OpenCode的Agent运行时代码OpenCode只是OpenClaw可选的模型代理服务商并不是它底层引擎。先理清项目归属关系Pi‑MonoMario ZechnerlibGDX创始人开发Pi‑Mono里面包含两套组件pi‑agent‑core通用Agent运行时OpenClaw采用这部分pi‑coding‑agent也就是后来独立拆分出来的OpenCode专门面向编程场景的Agent。OpenClawPeter Steinberger基于pi‑agent‑coreSDK嵌入Pi‑Mono基础内核然后自己独立开发Gateway网关、会话持久化、记忆系统、沙箱执行、Skill插件体系完全抛弃pi‑coding‑agentOpenCode的Agent循环、权限逻辑、会话实现OpenClaw自己重写上层调度逻辑。OpenCode脱离Pi‑Mono主仓库之后独立发展基于BunTypeScript重构变成专注代码开发的Agent它有自己独立的Agent Loop、权限系统、子Agent调度和OpenClaw的Pi‑Mono运行时互不依赖。一、两层关系拆解1代码层面仅共用早期底层原语定义运行时完全分开早期Pi‑Mono仓库里无论是OpenClaw用的pi‑agent‑core还是OpenCode前身pi‑coding‑agent都继承Mario定下的极简理念只有4个基础原语read/write/edit/bashOpenCode拆分独立项目之后OpenCode自己实现一整套Agent Runtime内置build、plan等专属Agent、权限规则、子Agent调度逻辑OpenClaw只取用pi‑agent‑core里基础ReAct循环、LLM适配层会话存储、工具校验、上下文裁剪、多轮循环、记忆层全部由OpenClaw自研不共用OpenCode代码OpenClaw甚至不会读取OpenCode的.pi配置文件两套环境隔离。2业务层面OpenCode只是OpenClaw众多模型代理中的一个ProviderOpenClaw配置里的opencode只是模型中转服务OpenCode对外提供API网关统一封装Claude、GPT‑4o、Kimi、GLMOpenClaw可以选择调用OpenCode托管的模型OpenCode只负责LLM推理Agent思考循环、工具执行还是由OpenClaw内部Pi‑Mono内核完成OpenCode不会介入OpenClaw智能体执行流程。简单类比Pi‑Mono内核 发动机基础组件库OpenClaw Peter基于基础组件造了一台全能办公自动化整车OpenCode Mario拿同一套组件库单独造了一台专门写代码的专用汽车两台车发动机零件源头相同但整车控制逻辑完全独立OpenCode还顺便对外提供加油站服务模型API给OpenClaw使用。二、关键区分要点内核归属OpenClaw Agent引擎Pi‑Monopi‑agent‑core OpenClaw自研GatewayOpenCode Agent引擎独立自研Runtime和Pi‑Mono后期版本代码分叉。开发者区分Pi‑Mono与OpenCodeMario ZechnerOpenClawPeter Steinberger两个人是奥地利开发者好友但后期各自独立迭代项目。使用边界OpenClaw可以不用OpenCode直接对接OpenAI、Anthropic原生APIOpenCode完全不能给OpenClaw提供Agent内核二者Agent运行时互不调用。三、一句话精简总结OpenClaw的Pi‑Mono内核和OpenCode源自同一个早期Pi仓库但代码早已分叉OpenClaw只取用Pi‑Mono底层基础SDK完全不用OpenCode的Agent内核OpenCode对OpenClaw而言仅仅是可选的模型API服务商。如果你愿意我可以画出三者依赖层级图Pi‑Mono‑core → OpenClawPi‑coding‑agent → OpenCode。核心证据分4类GitHub仓库目录结构、NPM包划分、官方文档、代码依赖、作者本人表述同时区分早期同一个monorepo单仓badlogic/pi‑mono后期代码分叉拆分。证据1原始仓库 badlogic/pi‑mono 的目录结构最硬核源码证据GitHub仓库github.com/badlogic/pi‑monoMario Zechnerbadlogic维护的Monorepo单仓packages目录原生就分为两大模块packages/agent发布为mariozechner/pi‑agent‑corePi‑Mono内核OpenClaw所依赖的Agent运行时包含Re‑Act循环、AgentSession、4个基础原语read/write/edit/bash、上下文处理、工具调用解析。packages/coding‑agent发布为mariozechner/pi‑coding‑agent这就是后来独立改名后的OpenCode面向编程场景的CLI程序、编程专属子Agent、TUI终端界面、编程扩展插件系统。原始仓库结构直接证明二者最开始放在同一个Pi仓库内共用一套底层基础代码、原语定义、pi‑ai模型适配层只是分成两个子包pi‑agent‑core通用Agent内核OpenClaw选用pi‑coding‑agent代码专用Agent后续独立成OpenCode。后续事件Mario把pi‑coding‑agent拆分成独立项目OpenCode而pi‑agent‑core继续留在pi‑mono仓库二者之后各自独立迭代代码分叉。OpenCode后期甚至迁移至Bun重构脱离pi‑mono主仓库代码树。证据2OpenClaw仓库里的依赖与源码引用OpenClaw侧代码证据OpenClaw仓库github.com/steipete/openclawpackage.json里直接依赖mariozechner/pi‑agent‑core只引入agent内核包没有引入pi‑coding‑agent源码目录src/agents/pi‑embedded‑runner.ts直接导入pi‑agent‑core内部的createAgentSession、工具解析逻辑PeterOpenClaw作者只是嵌入式调用pi‑agent‑core的运行时自己开发Gateway、记忆系统、沙箱、多渠道适配层完全不使用pi‑coding‑agent的代码。OpenClaw的README原文致谢Special thanks to Mario Zechner and pi‑mono.明确承认OpenClaw底层运行时来自pi‑mono仓库OpenClaw全程没有依赖pi‑coding‑agentOpenCode只是共用同一个早期仓库的上游底座。证据3NPM包发布事实Mario在同一个pi‑mono仓库编译输出2个NPM包mariozechner/pi‑agent‑core通用Agent内核供给OpenClawmariozechner/pi‑coding‑agent就是OpenCode前身两个包共用仓库里packages/aipi‑ai模型适配层模型调用、流式解析逻辑早期代码完全同源后期OpenCode独立之后才重写Runtime。证据4作者本人和第三方权威技术文档佐证Mario Zechner本人在博客、AI Engineer London演讲里说明pi‑mono仓库分为内核SDKagent‑core和编码Agentcoding‑agentOpenClaw使用SDKpi‑coding‑agent后续独立为OpenCode。技术文档xiaow.dev、needhelp.icu的调研文档写明Pi‑coding‑agent就是OpenCode前身和pi‑agent‑core起源于同一个pi‑mono monorepoOpenClaw仅使用pi‑agent‑core后期OpenCode脱离pi‑mono独立演进二者运行时代码分叉。社区共识Armin RonacherFlask作者的文章提到pi‑mono的agent‑core是OpenClaw内核coding‑agent演化成OpenCode。理清边界纠正容易混淆的点同源 ≠ 后期共用代码2025‑10–2025‑12同一个pi‑mono仓库代码同源2026‑01之后pi‑coding‑agent独立拆分出来更名为OpenCodeOpenCode重写Agent Runtime不再复用pi‑mono后续版本代码OpenClaw继续依赖pi‑agent‑core二者后期代码完全独立。OpenClaw从来没有把OpenCode当作内核OpenCode对于OpenClaw仅可作为可选的模型API服务商和Agent内核无关。极简总结证据链同一个GitHub仓库badlogic/pi‑mono→ 分出两个子包pi‑agent‑coreOpenClaw Pi‑Mono内核、pi‑coding‑agentOpenCode前身这就是二者源自同一个早期Pi仓库的直接证据后期项目拆分分叉各自独立演进。如果你需要我可以给你pi‑mono早期commit历史链接查看二者还未拆分时代码OpenClaw package.json里依赖pi‑agent‑core的原文片段。