wizard
1. Bilingual SKILL.md
左右滑动可直接切换英文版与中文版;两种语言按段落自动对齐。英文中的蓝色虚线词语可点击查看解释。共标记 13 处。
Entry SHA-256: bdf31d48211ea559878f95a4f344aeabf8d85897488ba564382bab0b000daac1
2. Why This Skill Is Clever
一句话核心机制
把“agent 无权或无法替人完成”的多步骤操作编译成一个临时 bash 状态机:agent 负责调查、定界、编排和静态验证,人类只在脚本驱动下完成点击、复制、输入与确认。
触发与调用边界
直接来源: frontmatter 把触发条件写成四类人工瓶颈:基础设施配置、凭据或 CI secrets 设置、不熟悉的第三方控制台,以及一次性迁移或切换。最后一句 Don't invoke this for steps the agent can perform itself 是关键负边界:它不是把普通自动化重新包装成人工教程。
直接来源: 技能可以由模型在遇到人工步骤时调用,但产物必须由人类运行。原文明确禁止 agent 端到端执行,因为脚本会打开浏览器并等待人工输入。
解释: 这是一条能力边界上的“最后一公里”工具。它不试图突破权限墙,也不把一长串易丢失的操作塞进聊天,而是把人工参与变成可恢复、可验证的程序化体验。
信息架构 / 执行顺序
- 先调查仓库: 阅读
.env*、README、compose、框架配置与工作流中的secrets.*/vars.*,先把能从现有证据得到的信息找全。 - 定义输入输出契约: 对每个阶段和每个值,确定来源、落点、敏感性与是否需要持久化。
- 让用户确认范围: 在写脚本前展示有序阶段列表,允许添加、删除和重排。
- 映射人类旅程: 为每个阶段记录 URL、点击路径、值出现的位置和变量名;不了解当前 UI 时查文档或询问,绝不补写想象中的步骤。
- 复用固定运行库: 复制
template.sh,只在STAGES标记后编写阶段;用既有 helper 完成打开页面、输入、写环境变量、写 GitHub 配置和确认。 - 按依赖排序与控制屏幕密度: 一阶段只承载一个聚焦任务,并把
TOTAL_STAGES与真实阶段数保持一致。 - 静态验证而非冒险实跑: 用
bash -n、可用时的shellcheck和端到端数据流追踪验证脚本,再交给人类首次运行。 - 按用途决定寿命: 一次性流程运行后删除;真正可复用的设置路径才提交并从 README 链接。
最巧妙的设计点
1. 把权限边界转化为可执行界面
“steps only they can perform”
直接来源: wizard 专门覆盖人类必须亲自执行的步骤,并排除 agent 自己能做的工作。
解释: 常见失败有两个极端:agent 在权限墙前停止,或者输出一串脱离状态、容易滚走的说明。这里选择第三条路:agent 生成控制流程的程序,但不取得人的秘密和权限。自动化负责顺序、提示、持久化与错误预防,人类保留授权动作。
2. 在生成前先完成输入输出建模
“for each captured value you know (a) where the human gets it, (b) where it's written ... and (c) whether it's secret”
直接来源: 第一阶段的完成标准不是“收集了一些需求”,而是每个值都拥有来源、目的地和敏感性三元组。
解释: 这把模糊的设置教程转换成可验证的数据流。后续静态追踪可以逐值检查:是否采集、是否写到正确位置、是否使用隐藏输入、CI 名称是否完全匹配。明确契约也避免把本地变量无差别上传到 CI,或把公开变量误当 secret。
3. 先确认舞台列表,再投入实现
“they may add, drop, or reorder”
直接来源: agent 必须先展示有序阶段与产出,让用户确认后才编写脚本。
解释: 这是低成本的结构评审关卡。用户最容易判断“有没有漏掉服务”“顺序是否符合真实组织流程”,却不适合审查整段 bash。把确认放在脚本之前,可以在改动成本最低时修正范围,同时防止 agent 过早把错误假设固化为代码。
4. 固定库与可变阶段形成稳定边界
“The library above the
STAGESmarker is identical in every wizard”
直接来源: URL 打开、secret 输入、.env upsert、GitHub 写入、进度和总结都由模板提供;作者只能定制阶段,不能手改标记上方的库。
解释: 这是深模块思路:复杂且容易出错的交互机制被压缩在稳定接口后,具体向导只描述领域流程。每个新向导不必重新发明跨平台兼容、隐藏输入或幂等写入,审查范围也从“整个脚本”缩小到“阶段定义是否正确”。
5. 第三方 UI 不确定性被显式设为停止点
“never invent steps that may not exist”
直接来源: 不知道当前 UI 或命令时,必须说明并询问用户或查文档。
解释: 向导看似具体的错误指令比模糊说明更危险,因为它会获得“可执行程序”的权威感。技能把真实性置于流畅性之上:缺证据就停止补全。这条规则尤其适合变化频繁、权限因账户而异的 SaaS 控制台。
6. 用阶段清屏约束信息密度
“keep a stage to one focused task so nothing the human needs scrolls away”
直接来源: 每个 stage 会清屏,因此单阶段必须只做一件事,避免重要上下文滚出可见区域。
解释: 这不是纯粹的视觉偏好,而是由运行时行为反推内容粒度。阶段既是进度单位,也是认知窗口。把一个阶段压到一屏内,让用户在当前页面、提示和输入框之间切换时不必依赖记忆,也使中断后重跑更容易定位。
7. 不实跑副作用流程,改为静态闭环验证
“Trace it statically instead”
直接来源: agent 不应端到端运行会打开浏览器、等待人类并可能触发外部动作的脚本;它要静态确认每个值的采集与落点,并核对 CI secret 名称。
解释: 这里没有把“不能运行”误写成“无需验证”。验证策略随风险模型改变:语法检查保证脚本可解析,shellcheck 发现 shell 缺陷,数据流追踪覆盖业务契约,而真正的权限操作保留给人类。它清楚地区分了可自动验证与必须人工验收的部分。
防失败机制与显式不变量
直接来源:
- 只有人类必须亲自完成的步骤才适用;agent 能完成的工作不得转交给向导;
- 写脚本前必须先读仓库,不能冷启动式询问;
- 每个捕获值必须知道来源、落点和敏感性;
- 用户可以在实现前添加、删除或重排阶段;
- 不知道 UI 或命令时必须查证,禁止编造;
- 只能修改
STAGES标记后的阶段定义,固定库不得手改; - URL 必须在请求对应值之前打开;
- secret 必须使用
ask_secret,持久化值必须使用write_env; - 只有 CI 需要的值才写入 GitHub secret;
- 不可逆动作之前必须
confirm; - 一个阶段只做一个聚焦任务;
- 必须通过
bash -n,并在可用时运行shellcheck; - agent 不端到端运行脚本,而是静态追踪值流和 CI 名称;
- 默认产物是临时的,只有明确需要长期复用时才提交。
取舍、可移植风险与宿主假设
解释: bash 让产物透明、可检查、易于在仓库中保存,但它仍依赖本地 shell、终端交互和平台工具。模板解决了常见系统与 WSL 的 URL 打开,GitHub 写入则假设可用且已认证的 gh;迁移到没有 bash 或 gh 的环境时,需要重新实现运行库,而不应改写每个阶段。
支持性上下文: template.sh 是实现证据而不是本报告的所选原文。它具体承载隐藏输入、幂等 .env upsert、URL 打开和 GitHub 写入等能力;所选 SKILL.md 只定义如何使用这些能力和不能修改的边界。
支持性上下文: 官方 companion docs 记录了当前交互限制:阶段只能向前,输错通常需要 Ctrl-C 后重跑;重新运行会复用已写入 .env 的默认值。这说明“幂等重跑”是恢复模型,但不是完整的回退导航。
解释: 把流程编译成脚本可以减少聊天说明腐烂,但第三方控制台仍会变化。即使脚本被提交,也需要像其他代码一样维护;“可执行”并不天然意味着“永不过期”。对一次性迁移默认删除,正是在复用价值和维护成本之间作出的保守选择。
解释: 静态验证无法证明第三方页面仍与指令一致,也无法覆盖首次人工运行中的账户差异。最权威的验收仍是拥有正确权限的人类在目标环境中运行,并审查最终总结。技能诚实保留了这一边界。
可迁移原则
- 把人工参与做成接口,而不是异常。 明确哪些动作必须由人完成,再自动化其顺序、提示和结果落点。
- 先定义值流,再写流程代码。 每个输入都要有来源、目的地和敏感性,才能建立可验证契约。
- 把稳定机制封装为固定库。 让具体实例只描述变化部分,禁止复制后随意修改核心运行时。
- 在实现前确认阶段图。 让用户评审结构和顺序,而不是等到长脚本完成后才发现范围错误。
- 对未知界面 fail closed。 证据不足时查文档或询问,不把想象包装成精确指令。
- 让交互单位匹配可见认知窗口。 一个阶段只承担一项聚焦任务,并在不可逆动作前设置确认关卡。
- 验证方式要匹配副作用边界。 不能安全实跑时,使用语法、静态分析和数据流追踪,但明确保留首次人工验收。
今日实践题
假设仓库的工作流引用了 secrets.STRIPE_KEY 和 vars.STRIPE_MODE,本地开发还需要 .env 中的 STRIPE_WEBHOOK_SECRET,而创建 webhook 会立即影响测试环境。你会怎样把它们分成阶段,并为每个值标注来源、落点、敏感性和不可逆确认点?
Evidence note
本文关于适用场景、人工边界、仓库预读、值的来源/落点/敏感性、阶段确认、用户旅程、禁止编造、模板边界、helper 使用、依赖顺序、单屏阶段、静态验证和临时生命周期的结论均来自所选 skills/engineering/wizard/SKILL.md。关于模板的具体运行实现和 companion docs 中的前进式交互、Ctrl-C 重跑行为属于支持性上下文,不是所选原文。关于“权限边界上的最后一公里”、值流契约、深模块边界、交互单位和风险匹配验证的论述属于设计解释。
Source & provenance
- Repository path
- skills/engineering/wizard/SKILL.md
- Generated
- 2026-08-27 08:22 Asia/Shanghai
- Upstream commit
- 6654f6b60cd9d5be8b54c6fafe44346dabeb3b76
- Source
- View on GitHub