Goals
Goal 让 Qwen Code 跨轮次持续工作,直到满足指定条件。使用 /goal <objective> 设置一个 Goal;每轮结束后,一个独立的验证器会检查对话记录,会话会持续进行,直到目标被验证为完成、验证为受阻、暂停或清除。
命令
| 命令 | 行为 |
|---|---|
/goal | 显示当前 Goal 及其状态。 |
/goal <objective> | 创建 Goal,或替换当前活动的 Goal。 |
/goal set <objective> | 与上面相同,显式形式。 |
/goal edit <objective> | 修改活动 Goal 的措辞,无需从头开始。 |
/goal pause / resume | 停止或继续循环,不会丢失 Goal。 |
/goal clear | 移除 Goal。 |
/goal-draft <intent> | 在设置之前让系统帮你编写目标(见下文)。 |
创建、编辑或恢复 Goal 需要 trusted workspace(/trust)。无头模式用法请参阅无头模式。
Goal 如何判定
验证器不会自行运行命令或读取文件。它只能看到对话记录中已有的内容:
- 可见的助手输出和工具结果算作证据。目标文本、你的 prompt 和模型的隐藏推理不算。
- 打印的文本只能证明文本被打印了。关于测试通过、文件已更改或远程已更新的声明需要对话记录中有相应的工具结果。
- 关于你确认、选择或批准了某事的声明需要来自你的真实消息;验证器会拒绝假设已确认的提案。
- 当证据缺失时,判定结果为”尚未完成”,而非”已完成”。没有人能提供证据的条件会让循环持续运行,直到限制将其停止。
因此,目标必须让代理产出证据:运行指定的检查并展示决定性的输出。
编写一个好的目标
按以下顺序将这些部分写入目标:
| 部分 | 要写的内容 |
|---|---|
Outcome: | 一句话:完成时什么是成立的。 |
Done when: | 编号的二进制检查。至少一项要指定命令及其预期退出码或输出行,并要求粘贴该行。 |
Must not: | 不要触碰的文件、不要弱化的测试或阈值、不要采取的不可逆操作(push、delete、publish)。 |
Budget: | 何时放弃:“stop as blocked after 20 turns”或时间限制。 |
On block: | 受阻时报告什么,以及人类必须做出什么决定。 |
Context: | 仅包含代理无法在工作区中找到的事实:分支、环境、早期决策。 |
保持一个目标,大致不超过 1,200 个字符。/goal set 和 /goal edit 会将换行折叠为空格,因此请对条目编号,而不要依赖换行。
| 弱目标 | 失败原因 | 更强的目标 |
|---|---|---|
| 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: stop as blocked after 20 turns. |
| clean up the auth module | ”Clean”没有可观测的证据。 | 思考什么是可观测的:src/auth 中零 lint 警告、覆盖率阈值、文件数量。 |
| ship the release | 不可逆,且需要人类决定。 | 缩小为可检查的预发布状态(tag 存在、npm run release:dry-run 退出码为 0),并将”do not publish”写入 Must not。 |
| after I confirm the design | 验证器无法看到从未发生过的确认。 | 将其移至 On block: 作为人类必须做出的决定。 |
让 /goal-draft 帮你编写
/goal-draft <what you want done> 是一个内置 skill,可以帮你完成上述工作。它会检查请求是否是一个 Goal,读取工作区以获取真实的测试和 lint 命令而不是猜测,在答案会影响检查或范围时最多询问一轮多选题,按上述格式起草目标,运行自检,并打印一个可以直接运行的 /goal set … 行。它不会自行开始工作,也不会代你设置 Goal。
传入现有目标以使其更严谨:/goal-draft all tests pass and the lint is clean。
该 skill 被指示为只读,且只有其非变更工具会被自动批准(get_goal、read_file、glob、grep_search)。ask_user_question 故意不被自动批准,因此其问题对话框会在 skill 根据你的答案起草之前显示。与其他内置 skill 一样,名为 goal-draft 的项目或个人 skill 会覆盖它,skills.disabled 可以将其关闭。请参阅 Skills 了解内置 skill 的发现方式。