ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Kimi Code 的 ExitPlanMode 工具:从计划模式到用户审批的完整工作流剖析

Kimi Code 的 ExitPlanMode 工具:从计划模式到用户审批的完整工作流剖析 AI Agent代码智能体人工智能大模型CLI【免费下载链接】kimi-codeKimi Code CLI — The Starting Point for Next-Gen Agents项目地址https://gitcode.com/gh_mirrors/ki/kimi-code点击查看免费下载导读ExitPlanMode 是 Kimi Codeagent-core-v2 计划功能中承接计划编制与用户审批两个阶段的关键工具。Agent 在计划模式下将实施方案写入计划文件后调用 ExitPlanMode 请求退出计划模式并提交审批用户批准后计划模式解除、全部工具恢复可用。本文以 exit-plan-mode.md 为骨架结合 exitPlanModeTool.ts、planService.ts 与 exitPlanModeReview.ts 等源码讲解该工具的触发时机、调用方式、options多方案参数约束以及它在 auto / yolo / manual 三种权限模式下的不同审批行为帮助读者理解并正确使用这一计划收尾环节。一、为什么需要 ExitPlanMode计划模式中的唯一出口1.1 计划模式的定位在 agent-core-v2 中plan 功能通过 PlanFeature 注册贡献了三个核心构件IAgentPlanService计划服务、EnterPlanMode工具与ExitPlanMode工具。其中EnterPlanMode负责进入计划模式ExitPlanMode负责提交计划并退出。计划模式的核心约束见 plan-mode-full-reminder.md是只读Agent 不得编辑任何文件当前计划文件除外也不得对系统做任何修改除非某个工具请求被显式批准。TaskStop、CronCreate、CronDelete等会改动系统状态的操作在计划模式下同样被封锁。这些约束由 planService.ts 中的registerPlanGuard在工具执行前统一拦截执行Write/Edit仅当写入目标是当前计划文件时才放行其余一律拒绝并提示Call ExitPlanMode to exit plan mode before editing other filesTaskStop提示需先调用 ExitPlanMode 再停止后台任务CronCreate/CronDelete因会变更计划退出后仍在运行的计划任务而被拒绝。因此ExitPlanMode 是 Agent 从只读调研状态回到可执行状态的唯一正规出口。正如 exit-plan-mode.md 开篇所述当你在计划模式下已完成计划文件编写、准备好请求用户批准时就使用这个工具。1.2 什么时候不该用 ExitPlanMode文档明确指出ExitPlanMode 只服务于需要规划实施步骤的任务。对于纯研究型任务搜索文件、阅读代码、理解代码库结构不要使用本工具——这类任务不需要进入计划模式自然也不需要退出。二、工具工作方式从计划文件读取而非携带参数ExitPlanMode 最容易被误解的一点是它不接受计划内容作为参数。Agent 应当先将完整计划写入计划模式提醒plan mode reminder中指定的计划文件ExitPlanMode 调用时自行从该文件读取计划内容用户审查时看到的就是这个计划文件的内容。从源码看这一逻辑位于 exitPlanModeTool.ts 的resolvePlan方法工具通过planMode.status()读取当前计划文件的内容与路径只有当内容非空trim().length 0时才视为有效计划若计划文件缺失或为空则返回错误No plan file found. Write the plan to path first, then call ExitPlanMode.计划文件的实际存放路径由 planService.ts 决定sessionDir/agents/agentId/plans/planId.md其中planId在进入计划模式时通过generateHeroSlug(randomUUID(), ...)生成planService.ts。2.1 一份好计划的标准文档给出了明确的评判标准计划应列出具体、可验证、基于真实代码库的步骤——真实的文件、函数和命令并按合理顺序排列。每一步都要具体到改什么、改哪里能够据此执行并核验。要避免 improve performance提升性能或 add tests添加测试这类含糊填充词而应明确说明改动内容和位置。三、options 参数多方案计划如何呈现给用户3.1 什么时候必须传 options当计划提供多个备选方案时必须通过options参数传递使用户能在审批时选择要执行的那一个。计划模式完整提醒plan-mode-full-reminder.md中有两条硬性约束备选方案应保持在23 个有实质差异的方案不要用细微变化凑数如果某个方案明显更优只提出那一个即可绝不允许在计划里写多个方案却不传options参数——那样用户只会看到默认审批控件没有任何选择具体方案的能力。在 yolo 和 manual 模式下用户可以在审批界面看到全部选项以及宿主的 Reject拒绝和 Revise修订控件见 exit-plan-mode.md。3.2 options 的格式与校验约束依据 exit-plan-mode.ts 中的ExitPlanModeInputSchemazod schemaoptions参数必须满足约束项规则说明数量min(1)~max(3)传 1 个选项等价于普通计划审批23 个有真实取舍的方案效果最佳label长度 180 字符建议 18 个词方案短名可在末尾追加 (Recommended) 标记推荐项description字符串默认方案的简要描述与权衡trade-offs说明标签唯一性归一化后trim 转小写不得重复例如 Approach A 与 Approach A 不允许同时出现保留标签不得使用Approve、Reject、Reject and Exit、Revise这些是审批控件保留标签大小写/首尾空格均会被归一化后拦截测试 exit-plan-mode.test.ts 对这些规则做了完整覆盖4 个选项被拒、空 label 被拒、81 字符 label 被拒、重复标签含 Reject 、大小写混合的 patch CONFIG 归一化后重复均被拒。一个合法的多方案调用示例{ options: [ { label: Approach A (Recommended), description: Minimal change: add a caching layer at the API boundary. }, { label: Approach B, description: Larger change: rewrite the query engine with an index. } ] }用户选定某方案后exitPlanModeReview.ts 会在输出中附上 Selected approach: ... Execute ONLY the selected approach. Do not execute any unselected alternatives. 的提示明确要求 Agent 只执行被选中的方案。四、不同权限模式下的审批行为ExitPlanMode 的行为随权限模式permission mode不同而显著变化这是 exit-plan-mode.md 重点强调的部分权限模式EnterPlanModeExitPlanMode 行为auto自动直接进入无需审批自动批准工具读取计划文件后直接退出计划模式不询问用户yolo全速直接进入无需审批仍将计划呈现给用户审批manual手动直接进入无需审批仍将计划呈现给用户审批4.1 auto 模式的特殊输出auto-approved 标记在 auto 模式下ExitPlanMode 直接执行退出而不询问用户。由于计划并未经过用户审阅工具的输出会明确标记这一事实exitPlanModeTool.tsPlan mode deactivated. All tools are now available. Note: this plan was auto-approved without user review — the user has NOT explicitly approved it. Follow the users original instructions on whether to proceed with execution; ... ## Plan (auto-approved, not user-reviewed): 计划内容测试 exit-plan-mode.test.ts 验证了 auto 模式下输出包含 ## Plan (auto-approved, not user-reviewed): 且不包含 ## Approved Plan:。4.2 manual / yolo 模式的审批流程在非 auto 模式下guardToolExecution检测到ExitPlanMode调用时会等待 ExitPlanModeReview.requestApproval 完成审批planService.ts。审批结果分支如下exitPlanModeReview.ts用户动作结果计划模式状态批准approved退出计划模式输出 ## Approved Plan: 与计划全文解除取消cancelled输出 Plan approval dismissed. Plan mode remains active.保持激活选择 Reject and Exit退出计划模式stopTurn: true输出 Plan rejected by user. Plan mode deactivated.解除选择 Revise 或附带反馈输出反馈文本如有stopTurn不触发保持激活直接拒绝rejectedstopTurn: true输出 Plan rejected by user. Plan mode remains active.保持激活其中stopTurn: true表示该轮对话随即结束。如果计划被拒绝Agent 应基于反馈修订计划后再次调用 ExitPlanMode文档明确If rejected, revise based on feedback and call ExitPlanMode again。4.3 审批前的自动修订记录revision值得注意的实现细节在非空计划呈现给用户前工具会自动调用planMode.recordRevision()记录一次计划修订exitPlanModeTool.ts。该修订经 planService.ts 计算 SHA-256 摘要并存入 blob storekey 形如plan/id/vversion.md同时派发PlanRevision事件planOps.ts。若计划内容为空则跳过记录即使修订记录失败如磁盘已满计划提交也不会中断见测试 exit-plan-mode.test.ts。五、与 AskUserQuestion 的分工不要把审批混入提问文档专门强调了 ExitPlanMode 与 AskUserQuestion 的边界AskUserQuestion 只用于澄清缺失的需求或影响方案的用户偏好绝不能用 AskUserQuestion 询问 这个计划可以吗 或 我该继续吗——这正是 ExitPlanMode 的职责在 auto 模式下也不要使用 AskUserQuestion而应基于现有上下文做出最佳决策exit-plan-mode.md。计划模式完整提醒同样强调plan-mode-full-reminder.md计划模式下一轮对话必须以 AskUserQuestion澄清需求/偏好或 ExitPlanMode请求审批结尾不能以其他方式结束。六、工具执行链路从调用到退出综合源码一次完整的 ExitPlanMode 调用链路如下调用触发Agent 在计划模式下调用ExitPlanMode可选带options参数守卫拦截planService.ts 的guardToolExecution捕获调用非 auto 模式下转入ExitPlanModeReview.requestApproval构建plan_review类型展示含计划全文、路径与 options并请求工具审批读取计划resolvePlan通过planMode.status()读取计划文件内容为空则报错见 exitPlanModeTool.ts记录修订非空计划在审批展示前执行recordRevision()审批裁决auto 模式直接放行manual/yolo 模式按用户选择进入上表分支退出计划模式审批通过后调用planMode.exit()派发PlanModeExit事件planOps.ts将planKey状态置为非激活并向事件总线广播AgentStatusUpdatedplanOps.ts遥测上报全程通过telemetry.track2上报plan_submitted/plan_resolved事件记录has_options、outcomeauto_approved/approved/rejected/revise/dismissed/rejected_and_exited以及chosen_option等维度exitPlanModeTool.ts、exitPlanModeReview.ts返回输出成功时输出 Exited plan mode. ... 及计划全文/保存路径auto 模式额外标注 auto-approved, not user-reviewed。七、常见错误与最佳实践小结不要在计划文件为空时调用会收到 No plan file found 错误先用 Write/Edit 把计划写入当前计划文件计划文件不存在时使用 Write不要把计划内容塞进参数ExitPlanMode 只接受options不接受plan字段测试明确验证{ plan: Plan }校验失败见 exit-plan-mode.test.ts多方案必须传 options否则用户无法选择具体执行路径遵守保留标签Approve/Reject/Reject and Exit/Revise不可用作选项标签被拒绝后修订重试根据用户反馈修改计划文件后再次调用 ExitPlanMode直到获得批准auto 模式下谨慎执行自动批准的方案未经用户审阅应遵循用户原始指令判断是否继续执行若用户要求暂停、等待或仅规划后总结则不要开始执行exitPlanModeTool.ts。延伸阅读进入计划模式的对应工具enter-plan-mode.md 与 enterPlanModeTool.ts计划模式完整工作流提醒plan-mode-full-reminder.md计划服务与守卫实现planService.ts审批结果处理exitPlanModeReview.ts计划状态事件与状态机planOps.ts测试覆盖exit-plan-mode.test.ts赞分享AI Agent代码智能体人工智能大模型CLI【免费下载链接】kimi-codeKimi Code CLI — The Starting Point for Next-Gen Agents项目地址https://gitcode.com/gh_mirrors/ki/kimi-code点击查看免费下载相关推荐Kimi Code CLI 计划模式Plan Mode全解析从 EnterPlanMode 到 ExitPlanMode 的规划与审批工作流Kimi Code CLI 计划模式Plan Mode全解析从 EnterPlanMode 到 ExitPlanMode 的规划与审批工作流 导读 Kim人工智能AI Agent代码智能体交互助手CLI工具调用Mistral-Small-4-119B-2603-eagle安全部署最佳实践企业级应用场景分析Mistral Small 4 119B 2603 eagle安全部署最佳实践企业级应用场景分析 Mistral Small 4 119B 2603 eaglAI Agent代码智能体人工智能大模型CLIQwen Code exit_plan_mode 工具详解计划模式到实施模式的审批交接Qwen Code exit_plan_mode 工具详解计划模式到实施模式的审批交接 导读 exit_plan_mode 是 Qwen Code开源终端人工智能AI Agent代码智能体工具调用交互助手CLIQwen上一篇如何快速开始egos-2000在QEMU上运行你的第一个教学OS下一篇终极指南如何在Electron.NET中使用Gamepad API实现游戏手柄交互创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表