ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Kimi Code 的 EnterPlanMode 工具:进入 Plan 模式的时机判断与底层实现

2026/9/28 2:35:45 拓冰建站 浏览量
Kimi Code 的 EnterPlanMode 工具:进入 Plan 模式的时机判断与底层实现 AI Agent代码智能体人工智能大模型CLI【免费下载链接】kimi-codeKimi Code CLI — The Starting Point for Next-Gen Agents项目地址https://gitcode.com/gh_mirrors/ki/kimi-code点击查看免费下载导读在 Kimi Codeagent-core-v2包的 Agent 体系中EnterPlanMode是一个由模型主动调用的工具tool用于在开始非平凡non-trivial实现任务前先进入计划模式Plan Mode让用户先行确认实现思路从而避免盲目写代码造成返工。本文以 enter-plan-mode.md 为骨架完整讲解它的适用条件、反例场景、与权限模式manual / auto / yolo的交互以及从EnterPlanModeTool到AgentPlanService、计划文件落盘和只读守卫的源码级实现原理。读完你可以准确掌握什么时候该触发计划模式、进入后 Agent 被强制约束为只读、以及它与ExitPlanMode如何构成完整的工作流闭环。一、工具定位写代码前的方案确认闸门EnterPlanMode是agent-core-v2中plan功能域Feature注册的两个工具之一与 ExitPlanMode 成对出现。注册逻辑位于 planFeature.tsexport class PlanFeature extends Feature { static override readonly name plan; constructor() { super(); this.contributeAgentService(IAgentPlanService, AgentPlanService); this.contributeTool(IEnterPlanModeTool, EnterPlanModeTool, { name: EnterPlanMode, domain: plan, }); this.contributeTool(IExitPlanModeTool, ExitPlanModeTool, { name: ExitPlanMode, domain: plan, }); } }从工具契约看EnterPlanMode是一个零参数工具其输入 schema 定义为z.object({}).strict()见 enter-plan-mode.ts也就是说模型调用它时不需要携带任何参数进入计划模式本身即是全部意图。它的英文描述直接内嵌为工具描述import DESCRIPTION from ./enter-plan-mode.md?raw这正是本文所依托文档的原始用途——这段 Markdown 就是 Agent 的 system prompt 中该工具的说明文本。二、何时应该调用 EnterPlanMode完整条件清单原文档明确了七类应当主动使用EnterPlanMode的场景全部属于开始非平凡实现任务的范畴新功能实现New Feature Implementation例如为 API 增加缓存层涉及新增逻辑与数据流先确认方案价值高。存在多种可行方案Multiple Valid Approaches例如优化数据库查询至少存在加索引、重写查询、引入缓存三条路线先让用户拍板可以避免选错方向。代码修改Code Modifications例如重构 auth 模块以支持 OAuth改动面广、影响既有行为。架构决策Architectural Decisions例如为服务增加 WebSocket 支持属于结构级变更牵一发动全身。多文件改动Multi-File Changes涉及超过 23 个文件的改动单凭直觉推进很容易顾此失彼。需求不明确Unclear Requirements需要先探索exploration才能弄清范围的任务先进入只读探索环境是安全的选择。用户偏好影响方案User Preferences Matter如果用户的输入会实质性地改变实现方式应使用EnterPlanMode把决策结构化而不是边写边猜。同时原文档也划定了不应该使用的反例单行或几行的修复拼写错误、显而易见的 bug、小调整用户已给出非常具体、详尽的指令纯研究 / 探索类任务searching files、reading code、理解代码库时不要调用计划工具这一点在 exit-plan-mode.md 中也有同样强调。一句话概括判断标准只要先想清楚再做带来的收益大于进入计划模式的开销就应该用EnterPlanMode反之改动足够小、方向足够明确时直接动手。三、与权限模式的交互规则原文档给出了三条与权限模式permission mode相关的关键说明。权限模式本身由defaultPermissionMode配置项控制可选值为manual、auto、yolo见 configSection.ts进入不受审批在所有权限模式下EnterPlanMode都会自动进入计划模式不会弹出审批提示。这一点可以从 enterPlanModeTool.ts 看到resolveExecution直接调用planMode.enter()没有任何审批流程并记录plan_enter_resolved / outcome: auto_approved遥测事件。退出仍要审批在yolo和manual模式下ExitPlanMode依然会把计划呈现给用户审批auto模式下ExitPlanMode则直接退出计划模式、不询问用户。对应实现见 exitPlanModeTool.ts当permissionMode.mode auto时输出auto-approved结果并附带用户尚未显式批准的提醒否则走正常审批分支。auto 模式下的取舍在auto模式下不要用AskUserQuestion询问而是根据已有上下文做出最佳决策。仅当规划本身有价值时才使用EnterPlanMode不是每次任务都要走的仪式规划本身也要算账。四、进入计划模式后的完整工作流4.1 计划文件与只读约束一旦进入计划模式Agent 就处于只读状态。核心约束由 AgentPlanService 中的guardToolExecutionplanService.ts强制执行它在每个工具执行前挂钩hook检查Write/Edit只允许写当前计划文件writesOnlyPlanFile判断所有写访问是否都指向计划文件路径否则直接否决veto并返回Plan mode is active. You may only write to the current plan file...的拒绝消息TaskStop计划模式下不可用必须先ExitPlanModeCronCreate/CronDelete同样被否决因为它们会变更计划退出后仍要运行的后台任务。计划文件保存在会话目录下的固定路径中{sessionDir}/agents/{agentId}/plans/{id}.md见 planService.tsid由generateHeroSlug(randomUUID(), ...)生成planService.ts。4.2 工作流五步法原文档及进入计划模式后的返回消息共同勾勒出标准流程理解Understand使用Read、Grep、Glob等只读工具探索代码库仅在必要时使用Bash且Bash仍遵循正常权限模式规则。设计Design收敛出最佳方案权衡取舍但尽量给出单一推荐若存在 23 个真正有意义的备选方案则把它们作为options参数传给ExitPlanMode让用户在审批时选择。复核Review重读关键文件验证理解正确。写计划Write Plan用Write计划文件尚不存在时或Edit修改计划文件。计划应列出具体、可验证、落地于真实代码的步骤真实文件、函数、命令按合理顺序避免improve performance这类空话。退出Exit调用ExitPlanMode请求用户批准。在计划模式下模型回合只能以AskUserQuestion澄清需求/偏好或ExitPlanMode请求批准结尾不得以其他方式结束回合。注意AskUserQuestion只用于澄清影响方案的需求绝不能用来问这个计划 OK 吗——那是ExitPlanMode的职责同理也不要问我该继续吗。4.3 进入后的提醒注入机制为了让模型在整个计划期间不忘记自己的只读身份系统通过 PlanModeInjection 向上下文注入计划模式提醒reminder。该机制会按回合数动态选择提醒密度planModeInjection.ts首次进入且计划文件为空时注入完整版提醒full reminder见 plan-mode-full-reminder.md其中明确写道Plan mode is active. You MUST NOT make any edits (with the exception of the current plan file)...并重申TaskStop、CronCreate、CronDelete被封锁若计划文件已有内容例如从历史会话恢复注入 re-entry 提醒持续处于计划模式时按去重间隔PLAN_MODE_DEDUP_MIN_TURNS 2与完整刷新间隔PLAN_MODE_FULL_REFRESH_TURNS 5planModeInjection.ts在 sparse 与 full 变体之间切换退出计划模式后下一次提醒注入会切换为 plan-mode-exit-reminder.md提示模型约束已解除。五、EnterPlanMode 的源码执行链路EnterPlanMode的完整调用链可以从 enterPlanModeTool.ts 追踪幂等检查先查询planMode.status()若当前已有活动计划before ! null直接返回错误Plan mode is already active. Use ExitPlanMode when the plan is ready.防止重复进入。执行进入调用planMode.enter()AgentPlanService.enter(id, createFile)planService.ts会确保计划目录存在、派发PlanModeEnter事件并切换到plan遥测模式若指定createFile则写入空计划文件。若中途失败会回滚cancel(id)。遥测记录记录plan_enter_resolved / outcome: auto_approved。返回引导消息enteredPlanModeMessage(after?.path)enterPlanModeTool.ts根据是否有计划文件路径返回两种消息有路径时提示3. Write the plan to the plan file with Write or Edit.无路径宿主未提供计划文件时提示Wait for the host to provide a plan file path before calling ExitPlanMode并明确Do NOT use Write or Edit。状态管理层面planKey状态planOps.ts通过PlanModeEnter/PlanModeCancel/PlanModeExit/PlanRevision四个持久化durable事件驱动active标志与id一起被持久化因此计划模式可以跨会话恢复。退出后ExitPlanMode还会调用recordRevision()planService.ts把计划文件内容按版本存入 BlobStorekey 形如plan/{id}/v{n}.md同时记录 sha256 与字节数形成可审计的修订历史。六、测试验证与可靠性保障agent-core-v2的测试套件覆盖了EnterPlanMode的关键行为plan.test.ts约 950 行系统验证了AgentPlanService的进入、退出、取消、清空、状态查询、修订记录、计划文件读写约束以及跨会话恢复expectResumeMatches等行为plan-tools-telemetry.test.ts 验证进入 / 退出计划模式时plan_enter_resolved、plan_submitted、plan_resolved等遥测事件的落点权限策略相关测试如 default-tool-approve.test.ts、permissionPolicyService.test.ts覆盖了EnterPlanMode在不同权限模式下的审批差异loop.test.ts 与 resume.test.ts 则验证了计划模式在主循环中及会话恢复场景下的行为一致性。七、最佳实践小结把原文档的边界条件与源码实现结合起来可以提炼出以下可执行的判断框架场景是否进入计划模式理由新功能 / 架构决策 / 多文件改动✅ 调用EnterPlanMode方案确认收益大避免返工存在多种可行方案且方向未定✅ 调用EnterPlanMode用AskUserQuestion澄清后写单一推荐计划或以options参数呈现 23 个备选需求不明确、需先探索代码库✅ 调用EnterPlanMode天然处于只读环境安全探索单行修复 / 明显 bug / 小调整❌ 直接执行计划开销大于收益用户已给出非常具体的指令❌ 直接执行无需再确认方向纯研究 / 阅读代码任务❌ 直接执行不产生变更计划无意义进入计划模式后请记住三个红线只能写计划文件其余Write/Edit会被否决TaskStop、CronCreate、CronDelete被封锁回合必须以AskUserQuestion或ExitPlanMode收尾。遵循这套流程EnterPlanMode→ 只读探索 → 写计划文件 →ExitPlanMode审批就构成了 Kimi Code Agent 中可控、可审计、可恢复的先规划后动手闭环。相关文件索引工具描述文档本文骨架enter-plan-mode.md工具实现enterPlanModeTool.ts / enter-plan-mode.ts配套退出工具exit-plan-mode.md / exitPlanModeTool.ts计划服务与状态planService.ts / planOps.ts / plan.ts提醒注入planModeInjection.ts 与 plan-mode-full-reminder.md功能注册与配置planFeature.ts / configSection.ts测试plan.test.ts / plan-tools-telemetry.test.ts赞分享AI Agent代码智能体人工智能大模型CLI【免费下载链接】kimi-codeKimi Code CLI — The Starting Point for Next-Gen Agents项目地址https://gitcode.com/gh_mirrors/ki/kimi-code点击查看免费下载相关推荐VidBee 视频格式转换 3 步搞定MP4、AVI、MKV 快速互转完整指南VidBee 视频格式转换 3 步搞定MP4、AVI、MKV 快速互转完整指南 你刚下载的视频拷到电视上提示无法识别拖进剪辑软件时间线直接报错。VidB桌面应用音视频AI 应用语音Kimi Code Agent 的 Plan 模式规划模式全解析从 Inline 完整提醒到 EnterPlanMode / ExitPlanMode 工作流Kimi Code Agent 的 Plan 模式规划模式全解析从 Inline 完整提醒到 EnterPlanMode / ExitPlanMode 工AI Agent代码智能体人工智能大模型CLIKimi Code CLI 计划模式Plan Mode全解析从 EnterPlanMode 到 ExitPlanMode 的规划与审批工作流Kimi Code CLI 计划模式Plan Mode全解析从 EnterPlanMode 到 ExitPlanMode 的规划与审批工作流 导读 Kim人工智能AI Agent代码智能体交互助手CLI工具调用上一篇claude-seo 图片生成提示词工程实战6 组件推理简报、领域模式库与 Gemini 提示词优化指南下一篇jnv在微服务架构中的应用API响应处理方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考