
如何用 /goal 让 Qwen Code 跨回合持续工作直到目标条件达成【免费下载链接】qwen-codeAn open-source AI coding agent that lives in your terminal.项目地址: https://gitcode.com/GitHub_Trending/qw/qwen-code当你希望 Qwen Code 不只是一轮问答而是围绕一个明确的目标持续工作多个回合、直到条件被独立验证通过可以使用 Goal 机制。用/goal objective设定目标后会话会在当前回合结束后自动开启后续 Goal 回合每个回合都会被记录为证据当模型提出“目标已完成或被阻塞”时由一个独立的 verifier验证器仅凭证据作出判断。会话在 verifier 接受、Goal 被暂停/清除或被某个预算上限停止时结束。本文覆盖从写目标、设定 Goal、运行监控到暂停恢复的完整路径并给出 headless无界面下的用法。前置条件可信工作区创建、编辑或恢复 Goal 都需要 trusted workspace先用/trust确认当前目录已受信任。Headless 使用Goal 状态保存在会话中。在 headless 模式下跨进程查看或控制同一个 Goal需要保持general.chatRecording启用默认即为启用。交互模式下命令参考见 Commands/goal用于“Set a Goal — keep working until a verifier confirms it”。Goal 的判定机制证据决定一切先理解 verifier 的规则才知道目标该怎么写。verifier 不会自己执行命令或读取文件它只看会话记录transcript里已有的内容可见的助手输出和工具结果算证据目标文本、你的提示词、模型的隐藏推理不算。“打印出来的文字”只能证明文字被打印过。声称测试通过、文件已修改或远端已更新都需要对应的工具结果在记录里。声称“你确认、选择或批准了某事”需要你真实发送过消息verifier 会拒绝替它假设的确认。证据缺失时结论是 “not yet”尚未完成而不是 “done”已完成。一个无人能提供证据的条件会让循环一直运行直到被某个上限停止。因此目标必须让 agent 自己产出证据运行指定的检查命令并展示决定性输出。写一个能被验证的目标文档建议按以下顺序把这几部分写进目标文本中部分写什么Outcome:一句话做到什么程度算完成。Done when:编号的二元检查项。至少一项要指明命令及其预期的退出码或输出行并要求把该行粘贴出来。Must not:不许动的文件、不许削弱的测试或阈值、不许执行的不可逆操作push、delete、publish。Budget:给模型的“何时放弃”的咨询性指令例如 “stop as blocked after 20 turns”。On block:卡住时上报什么、哪个决策必须由人做。Context:只写 agent 在工作区里查不到的事实分支、环境、先前的决定。约束与细节一个 Goal 只承载一个目标。/goal set和/goal edit接受任意长度但建议控制在约 1,200 字符以内——目标文本会在每个 Goal 回合重复发送。模型通过propose_goal提出的目标上限为 1,500 字符。两个命令都会把换行折叠成空格所以用编号列条目不要依赖换行排版。Budget只是给模型的咨询性指令模型可能遵守也可能不遵守。要让运行时本身在回合数或时长上强制停止应改设置model.goalMaxTurns或model.goalMaxActiveMinutes写在目标文本里不会产生这个效果。文档给出的弱目标与强化对比可直接照此格式仿写弱写法为什么不行强化写法make checkout faster没有阈值没有检查Outcome: checkout p95 is below 250 ms. Done when: 1) npm run bench:checkout exits 0 and prints p95 250 (paste the line); 2) npm test exits 0. Must not: change the benchmark or skip tests. Budget: as model guidance, stop as blocked after 20 turns. On block: report the measured p95 and what blocks it.clean up the auth module“clean”没有可观察证据改成可观察的指标src/auth零 lint 警告、覆盖率阈值、文件数ship the release不可逆且需要人决策收窄到可检查的发布前状态tag 已存在、npm run release:dry-run退出码 0并在Must not里写 “do not publish”after I confirm the designverifier 看不到从未发生的确认把该决策移入On block:设定 Goal 并观察运行在交互会话中执行objective替换为你按上一节写好的目标文本/goal objective # 或显式形式 /goal set objective创建或替换活动 Goal。执行后 Goal 会自动开始工作。观察方式运行/goal可随时查看当前 Goal 及其状态。目标一旦计入过回合底部状态条和每个状态卡片都会以已花费/允许窗口的形式显示消耗文档示例格式为1.2k/30.0m。该数字只统计 Goal 在自己回合里发起的模型调用不包含子代理和 verifier 的检查。消耗窗口由model.goalTokenBudget设置未设置时使用内置默认值 30,000,000-1表示不限量。恢复resume一个已用完窗口的 Goal 会在此前已花费的基础上再授予一个新窗口因此数字会显示成30.0m/60.0m而不是归零。每个 Goal 回合都会汇报目前花了多少、后面跟了多少个回合以及除非目标是无界的允许窗口有多大。除最后一次收尾交接回合外每个回合都带有固定指令重新检查工作区而不是相信早前回合的汇报、朝目标要求的终态推进、上一回合没产生任何变化时换一种做法、在提出目标完成之前把每项要求对照可引用的证据检查一遍。两个可选的强制上限以下两项默认关闭在 设置文件 中配置model.goalMaxTurns限制 Goal 最多能完成的回合数含用户驱动的 Goal 回合。model.goalMaxActiveMinutes限制 Goal 在运行进程中保持活跃时的墙钟时间含等待和回合间空闲。暂停、阻塞或停止期间不计入跨重启的停机也不计入但进程仅被挂起时仍会计费。两者触达上限后的行为一致Goal 获得唯一的收尾wind-down回合用于交接然后停止直到你 resumeresume 会在已用量的基础上再授权一个新窗口。注意时间窗口是在回合之间读取的而不是由计时器强制执行所以一个 Goal 完全可能运行到明显超过窗口才停下来已在运行的回合永远不会被中途打断。这两个设置变更在重启后才生效且窗口只为变更之后创建的 Goal 激活——想约束一个已存在的 Goal需要用/goal set替换它新 Goal 从 revision 1 开始回合、token、活跃时间计量全部重置证据窗口从替换点开始旧 Goal 记录的证据不再可被引用或清除后重新开始。运行中如何转向、暂停和恢复发消息不等于暂停Goal 活跃时输入的消息会作为下一个 Goal 回合执行这正是你转向工作方向的方式。要停下来用/goal pause或/goal clear。Esc 中断在模型回答中或其工具仍在运行时按 Esc当前回合停止Goal 进入paused状态卡片和/goal都会说明停止原因。此后什么都不再运行直到你执行/goal resume。每次暂停都带原因你中断了它、你执行了/goal pause、会话 token 上限挡住了下一个模型请求、回合失败或连续三个回合没有记录到 verifier 可判断的内容且没有提案Goal 记账类读取如get_goal、update_goal不算进展。被上限停止的 Goal 会保留该上限的原因。完整命令集命令行为/goal显示当前 Goal 及其状态/goal objective创建 Goal或替换活动的 Goal/goal set objective同上显式形式/goal edit objective修订活动 Goal 的措辞不重新开始/goal pause//goal resume暂停或继续循环不丢失 Goal/goal clear删除 Goal确认 Goal 是否结束结束方式只有四种且都可以核对verifier 接受完成提案——证据足够会话停止你执行/goal pause或 Esc 暂停状态为paused原因可见你执行/goal clear清除被某个上限停止token 窗口、回合数或活跃时间取决于你启用了哪些。如果条件始终无法提供证据verifier 的结论保持 “not yet”循环会一直运行直到某个上限介入——这正是目标里Done when:必须写可执行检查的原因。可选用 /goal-draft 代写目标/goal-draft intent是一个内置技能替你完成上面的目标编写流程它只读取足够的工作区内容来确定范围和真实的验证命令不会运行测试、构建、安装依赖或启动服务。必要选择不明确时最多问一轮然后写出紧凑目标通常包含 3–5 个完成检查项够少则更少不会为了凑数添加检查项。如果某个成功判据、命令、输入路径或必要决策无法确定它会返回标记为 “Needs clarification” 并带TODO: …条目的草稿此时它不会提供审批也不会打印可运行的/goal set或/goal edit命令。非必要的默认值会被标记[ASSUMPTION]。你可以把已有目标传给/goal-draft让它收紧措辞对活动 Goal 的显式收紧请求会产出/goal edit替换则用/goal set。技能本身被指示为只读只有其非变更工具get_goal、read_file、glob、grep_search会被自动批准。项目或个人技能里名为goal-draft的技能会覆盖内置版skills.disabled可将其关闭。在交互终端或 Web Shell 中模型还带有propose_goal工具/goal-draft结束时或你要求一个跨多回合的结果时它可以弹出审批对话框直接提议目标批准后等效于执行/goal set。没有任何权限规则或审批模式包括 YOLO能跳过这个对话框工具在另一个 Goal 活跃、plan 模式、不受信任目录中会拒绝子代理也不会被提供该工具。不需要这个行为时在用户设置中写goals.modelProposed: disabled即可关闭该设置只从 user 和 system 作用域生效工作区.qwen/settings.json中的值会被忽略并告警。可选在 headless 模式中运行 GoalHeadless 模式接受把/goal作为完整提示词。Goal 状态与会话一起保存因此后续进程用--continue或--resume sessionId查看或控制同一个 Goal# 创建 Goal 并启动其工作 qwen -p /goal Finish the release checklist # 在同一会话中查看其保存的状态 qwen --continue -p /goal其余操作用相同的qwen --continue -p control模式控制行为/goal报告保存的状态不调用模型/goal objective或/goal set …创建或替换 Goal 并启动 headless Goal 工作/goal edit objective修订未完成的 Goal结果状态为 active 时立即开始工作/goal pause暂停活动 Goal不调用模型/goal resume恢复符合条件的 Goal 并启动 headless Goal 工作/goal clear清除 Goal无确认、无模型调用自动化相关的边界运行时调度的 Goal 续跑片段不计入--max-session-turns但真实用户提示计入显式的--max-wall-time和--max-tool-calls预算仍然生效超出任一项会先暂停活动 Goal 工作然后进程以该预算专属错误退出。使用--output-format stream-json时每次 Goal 状态变更都会发出event.type为goal_state的stream_event即使不开--include-partial-messages开启部分消息后旧的active_goal事件作为兼容投影跟随出现自动化应以goal_state为准。详见 Headless Mode。限制与边界证据检查点长 Goal 会周期性地把已记录证据压缩成 checkpoint claims 并由旁路模型检查保证后续回合和 verifier 仍可引用。单次检查的上限由model.goalCheckpointTimeoutSeconds控制默认 180 秒取值 1–900检查超时按“结论不明”放弃不会阻断 Goal 本身。目标文本每回合重复发送且命令会把换行折叠为空格——保持目标短小并用编号是避免每个回合额外消耗 token 的唯一手段文档给出的建议即约 1,200 字符以内。model.goalMaxTurns/model.goalMaxActiveMinutes的变更需要重启生效且只对变更之后新建的 Goal 激活resume 或 edit 永远不会给 Goal 增加创建时未激活的上限。verifier 永远不执行命令、不读文件它“看到”的边界就是你写入目标的检查项所产出的工具结果。完整设定与预算参数见 Goals、Headless Mode 与 设置参考。【免费下载链接】qwen-codeAn open-source AI coding agent that lives in your terminal.项目地址: https://gitcode.com/GitHub_Trending/qw/qwen-code创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考