Gemini CLI 实践指南:用 Plan Mode 加 Model Steering 实时驾驭复杂任务的规划过程 Gemini CLI 实践指南用 Plan Mode 加 Model Steering 实时驾驭复杂任务的规划过程【免费下载链接】gemini-cliAn open-source AI agent that brings the power of Gemini directly into your terminal.项目地址: https://gitcode.com/GitHub_Trending/gemi/gemini-cli复杂任务的方案设计往往不是一次就能做对的代理可能找错目录、漏掉关键依赖或者在你还没看到方案时就选定了不合适的架构。Gemini CLI 提供了两个可以组合使用的机制——Plan Mode只读的规划环境与 Model Steering执行中的实时提示注入。本文以官方教程 plan-mode-steering.md 为主线完整还原「启动任务 → 纠正调研 → 中途改设计 → 批准实现」的四步工作流并结合仓库源码拆解一条 steering hint 从输入框到模型上下文的实际流转路径帮助你掌握在规划阶段实时纠偏的实战方案。需要说明的是Model Steering 是实验性功能experimental默认关闭且当前处于活跃开发中可能需要通过/settings手动开启Plan Mode 本身默认启用。为什么要把 Plan Mode 和 Model Steering 组合使用Plan Mode 是一个只读的设计环境代理在其中研究代码库、评估权衡、起草实施计划全程不改动任何代码。它的典型流程是线性的——调研、提出、起草research, propose, draft。线性的代价是一旦代理在调研阶段走偏你只能等它把这一轮完整跑完才能干预。加入 Model Steering 后这条线性路径变成了可实时干预的循环带来三个直接收益引导调研方向代理正在看错目录或漏掉关键依赖时立刻纠正它起草中途迭代代理还在写计划时就提出更换架构模式的建议加速反馈循环不必等一整轮调研结束再提供关键上下文。这个组合在长时间运行的子代理subagent执行、复杂的规划工作流中尤其有用——这正是 model-steering.md 文档中明确指出的两个典型场景。前置条件与开启方式前置条件Gemini CLI 已安装并完成认证Plan Mode 已在设置中启用默认即为启用可通过/settings管理Model Steering 已在设置中启用默认关闭见下文。开启 Model SteeringModel Steering 属于实验性功能配置项为experimental.modelSteering。两种开启方式在 Gemini CLI 中输入/settings搜索Model Steering将值设为true在settings.json中直接配置{ experimental: { modelSteering: true } }这个配置项在仓库中有完整的定义链可以确认它的行为语义配置 Schema 定义在 settingsSchema.ts类型为布尔值标签Model Steering归类于Experimental默认falserequiresRestart为false即无需重启会话即可生效描述为「Enable model steering (user hints) to guide the model during tool execution」启用模型转向/用户提示在工具执行期间引导模型CLI 配置层在 config.ts 中把settings.experimental?.modelSteering读入核心配置核心层 packages/core/src/config/config.ts 暴露isModelSteeringEnabled()方法作为全局唯一的开关查询入口UI 层的所有 steering 逻辑都依赖它。Plan Mode 的进入方式教程的第一步是进入 Plan Mode。按 plan-mode.md 文档有三种进入方式启动参数gemini --approval-modeplan一次性以 Plan Mode 启动快捷键按ShiftTab在审批模式间循环切换Default→Auto-Edit→Plan斜杠命令在输入框输入/plan [目标]例如/plan implement authentication会切换模式并立即把提示词提交给模型。四步实战在规划中实时转向以下完整还原教程中的场景为代码库实现一个基于 Redis 的新通知服务。Step 1启动一个需要调研的复杂任务进入 Plan Mode 并启动任务/plan I want to implement a new notification service using Redis.Gemini CLI 进入 Plan Mode开始研究现有代码库确定新服务应该放在哪里。此时你会看到它陆续调用list_directory、grep_search等只读工具。Step 2纠正调研阶段的方向观察代理的工具调用时你发现它遗漏了关键上下文。操作在 spinner 仍在转动代理工作中时直接输入你的提示Dont forget to check packages/common/queues for the existing Redis config.结果Gemini CLI 会先确认收到你的提示用一小段快速生成的应答消息随即把它纳入调研。你会看到它在接下来的下一轮中就开始探索你指定的目录。从源码看「工作中输入不会打断会话而是被识别为 hint」这一行为发生在 UI 层的提交入口处AppContainer.tsx 中当isModelSteeringEnabled()为真、代理正在运行流式响应中或有工具在执行且输入不是斜杠命令时提交走的是handleHintSubmit路径而不是普通的submitQuery。同时 AppContainer.tsx 会在工具执行期间把输入组件切到hintMode输入框进入专门的 hint 缓冲状态——这就是「看到 spinner 就打字」这个交互在实现上的对应物。Step 3起草中途修正设计调研结束后代理开始起草实施计划。如果你发现它提出的设计与目标不符比如它打算用简单队列而不是 Pub/Sub立即纠正Actually, lets use a Publisher/Subscriber pattern instead of a simple queue for this service.结果代理会停止起草当前版本基于你的反馈重新评估设计然后开始一份使用 Pub/Sub 模式的新草案。这正是 Model Steering 文档描述的「分类更新」能力——内部注入的指令会要求模型把新提示分类为「新任务」或「补充上下文」并对受影响的计划做最小差异minimal-diff修改。Step 4批准并进入实现当代理用你的多条提示打磨出满意的计划后审阅最终的.md计划文件默认存放在~/.gemini/tmp/project/session-id/plans/目录可用CtrlX在外部编辑器中打开查看或修改。操作Looks perfect. Lets start the implementation.Gemini CLI 退出 Plan Mode转入实现阶段。由于计划已经过实时反馈打磨代理执行每一步的置信度更高、出错更少。补充一点如果使用的是 auto 模型Plan Mode 还会自动做模型路由——规划阶段路由到高推理能力的 Pro 模型计划批准后自动切换到高速 Flash 模型执行实现可通过general.plan.modelRouting: false关闭。Hint 的底层流转从输入框到模型上下文教程描述的行为确认收到 → 注入下一轮 → 模型重新评估在源码中有一条清晰的实现链值得了解以建立对功能边界的准确预期提交判定AppContainer.tsx 中先判断输入是否为斜杠命令斜杠命令不走 hint 路径除非是支持并发执行的 safe 命令再判断 steering 是否开启且代理是否正在运行满足条件则调用handleHintSubmit并返回不进入常规查询队列。注入时机pending hint 不会凭空插入正在进行的流式响应而是在合适的边界消费。AppContainer.tsx 中的效果会在配置就绪、steering 开启、流式状态回到 Idle 且 MCP 就绪时通过consumePendingHints()取出待处理提示并用buildUserSteeringHintPrompt(pendingHint)包装后以submitQuery提交。流式中的注入工具执行间隙useGeminiStream.ts 中同样出现buildUserSteeringHintPrompt(hintText)hint 也能在工具调用轮次之间送达实现「调研下一轮立刻生效」的效果。包装逻辑buildUserSteeringHintPrompt会在你的原文前追加一段内部指令要求主代理重新评估当前计划、把更新分类新任务 / 额外上下文、对受影响任务做最小差异修改——这与 model-steering.md 文档「How it works」一节的三步描述即时确认、上下文注入、下一轮实时更新一一对应。确认消息文档说明确认由一个小的快速模型生成一句话应答UI 侧的提示呈现则由HintMessage组件HintMessage.tsx渲染。由于 hint 最终是作为用户侧输入进入模型上下文的它受与正常输入相同的策略与安全约束steering 本身不提供绕过 Plan Mode 只读限制的能力。编写有效 Hint 的要点教程给出的三条原则结合 model-steering.md 中的通用用例可以整理成一份速查表原则 / 用例反例正例具体明确Be specificdo it differentlyuse the existingLoggerclass insrc/utils纠正路径Correcting a path—Actually, the utilities are insrc/common/utils.跳过步骤Skipping a step—Skip the unit tests for now and just focus on the implementation.补充上下文Adding context—TheUsertype is defined inpackages/core/types.ts.重定向努力Redirecting the effort—Stop searching the codebase and start drafting the plan now.处理歧义Handling ambiguity—Use the existingLoggerclass instead of creating a new one.尽早转向Steer early等最终计划完成再反馈在调研阶段就给出提示效率更高传递代码外知识Use for context—We are planning to deprecate this module next month这类信息读代码读不出来核心思想steering hint 的价值在于把「代码里读不出来的知识」和「你比代理更早看到的问题」以最低延迟送入规划循环越早转向废弃的无效调研越少。行为验证测试与评估如何覆盖这条链路如果你想知道这些行为是否被自动化测试锁定可以在仓库中查看集成测试 modelSteering.test.tsx 以configOverrides: { modelSteering: true }启动 App 级测试验证开启 steering 后的交互行为行为评估 model_steering.eval.ts 对 steering 能力做端到端评估覆盖提示注入后模型是否按提示调整行为UI 侧 AppRig.test.tsx 中同样以modelSteering: true构造测试环境验证 hint 交互的组件级表现Plan Mode 侧则有 plan-mode.test.ts 覆盖模式的进入、计划生成与退出流程。小结与后续探索把本文的实践路径压缩成一句话开启experimental.modelSteering用/plan 目标进入只读规划环境在 spinner 转动时把具体、简短的提示直接打进输入框让模型在下一轮就重新评估计划最后审阅并批准打磨过的计划文件进入实现。这样得到的实施计划是「设计阶段即对齐」的而不是「事后返工」的。后续可以继续深入Plan Mode 完整文档工具白名单、自定义策略policy engine 的plan.toml、自定义计划目录、hooks 归档等Model Steering 参考文档常见用例与内部机制细节Agent Skills为规划轮次注入领域专业知识与 steering 互补——skills 解决「代理不知道怎么做」steering 解决「代理此刻走偏了」。【免费下载链接】gemini-cliAn open-source AI agent that brings the power of Gemini directly into your terminal.项目地址: https://gitcode.com/GitHub_Trending/gemi/gemini-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考