Skill Learning

wizard

1. Bilingual SKILL.md

左右滑动可直接切换英文版与中文版;两种语言按段落自动对齐。英文中的蓝色虚线词语可点击查看解释。共标记 13 处。

入口 skill:wizard左右滑动切换语言 · 段落位置自动对齐
# Wizard
A **wizard** is a bash script that walks a human, step by step, through a manual procedure that's and tedious to re-explain to an AI every time. It opens each URL, says exactly what to click and copy, captures the values, writes them where they belong (`.env`, GitHub secrets), confirms at every stage, and shows how many stages are left. It might configure third-party services, run a one-off migration, or move the project from one state to another.
The delightful UX is already solved by [template.sh](template.sh): , confirmation gates, cross-platform URL opening (including WSL), hidden secret entry, idempotent `.env` upserts, `gh secret`/`gh variable` writes, and a closing summary. **Your job is only to .** The library above the `STAGES` marker is identical in every wizard; that consistency is the point: never hand-edit it.
A wizard is : built for one run, saved to a scratch or `scripts/` path, deleted when the job's done. Commit it only when the user wants a repeatable setup path that should live in the repo.
## Process
### 1. Scope the procedure
Work out every manual step the human must take and every value that gets captured along the way. :
- For setup: `.env`, `.env.example`, `.env.*`, `README`, `docker-compose*`, framework config, and `.github/workflows/*` (every `secrets.*` / `vars.*` reference is a value the wizard must produce). - For a migration or transition: the current state, the target state, and .
Then show the user the ordered list of stages and the values each produces, and confirm: they may add, drop, or reorder.
**Done when:** every stage is named in order, and for each captured value you know (a) where the human gets it, (b) where it's written (`.env`, a GitHub secret, both, or nowhere; some stages are pure actions), and (c) whether it's secret (hidden entry) or public.
### 2.
For each stage, write the precise path a human follows: which URL to open, what to do there, where a value is shown, which variable it fills: e.g. "Dashboard → Developers → API keys → Reveal test key → copy". Where you don't actually know the current UI or the exact command, say so and ask the user or check the docs: .
**Done when:** every stage traces to concrete instructions a stranger could follow.
### 3. Author the wizard
Copy `template.sh` to the target path. Replace the example stage with one `stage` per step, . Use the library helpers: `stage`, `say`/`step`, `open_url`, `ask`/`ask_secret`, `write_env`, `set_secret`/`set_var`, `pause`/`confirm`. Set `TOTAL_STAGES` to the number of stages you wrote.
: open the URL before asking for its value, use `ask_secret` for anything secret, `write_env` every persisted value, `set_secret` only the values CI actually needs, and `confirm` before any irreversible action. Each `stage` clears the screen so only the current step is visible: keep a stage to one focused task so nothing the human needs scrolls away. Don't touch the library above the marker.
### 4. Verify and hand off
- `bash -n <script>`; run `shellcheck` if available. - `chmod +x <script>`. - Don't run it end-to-end yourself: it opens browsers and . : every value from step 1 is captured and lands where step 1 said, and every `set_secret` name exactly matches a `secrets.*` reference in CI. - Tell the user how to run it. If it's a repeatable setup path, commit it and link it from the README so the next person runs the script instead of asking an AI.
# Wizard
**向导(wizard)** 是一个 bash 脚本,它逐步引导人类完成某项手工流程。这类流程人工操作很繁琐,每次重新向 AI 解释也同样麻烦。它会打开每个 URL,准确说明该点击和复制什么,采集所需值,把它们写到正确位置(如 `.env`、GitHub secrets),在每个阶段请求确认,并显示还剩多少阶段。它可以配置第三方服务、执行一次性迁移,或把项目从一种状态转移到另一种状态。
令人愉悦的用户体验已经由 [template.sh](template.sh) 解决:逐阶段进度、确认关卡、跨平台 URL 打开(包括 WSL)、隐藏式 secret 输入、幂等的 `.env` 更新、`gh secret`/`gh variable` 写入,以及结束总结。**你的任务只是界定流程范围并编写各个阶段。** 每个向导中 `STAGES` 标记上方的库都完全相同;这种一致性正是设计目的,绝不要手工修改它。
向导默认是临时产物:为一次运行而构建,保存到 scratch 或 `scripts/` 路径,任务完成后删除。只有当用户希望保留一条可重复执行、应随仓库维护的设置路径时,才提交它。
## 流程
### 1. 界定流程范围
梳理人类必须执行的每个手工步骤,以及沿途需要采集的每个值。先阅读仓库,不要毫无准备地发问:
- 对于设置流程:检查 `.env`、`.env.example`、`.env.*`、`README`、`docker-compose*`、框架配置和 `.github/workflows/*`(每个 `secrets.*` / `vars.*` 引用都是向导必须产出的值)。 - 对于迁移或状态转换:明确当前状态、目标状态,以及两者之间不可逆的操作。
然后向用户展示有序的阶段列表,以及每个阶段会产出的值,并请求确认;用户可以添加、删除或调整顺序。
**完成标准:** 每个阶段都已按顺序命名;对于每个采集值,你都知道:(a) 人类从哪里获得它;(b) 它会写到哪里(`.env`、GitHub secret、两者,或任何地方都不写;有些阶段只是执行动作);以及 (c) 它是 secret(隐藏输入)还是公开值。
### 2. 绘制每个阶段的操作路径
为每个阶段写出人类要走的精确路径:打开哪个 URL、在那里做什么、值显示在哪里、它填入哪个变量。例如:“Dashboard → Developers → API keys → Reveal test key → copy”。如果你并不真正了解当前 UI 或准确命令,就明确说明,并询问用户或查阅文档;绝不要编造可能不存在的步骤。
**完成标准:** 每个阶段都对应一组陌生人也能照着完成的具体指令。
### 3. 编写向导
把 `template.sh` 复制到目标路径。将示例阶段替换为每一步对应的一个 `stage`,并按依赖顺序排列。使用库提供的 helper:`stage`、`say`/`step`、`open_url`、`ask`/`ask_secret`、`write_env`、`set_secret`/`set_var`、`pause`/`confirm`。把 `TOTAL_STAGES` 设置为实际编写的阶段数。
坚持模板设定的标准:先打开 URL,再请求对应的值;所有 secret 都用 `ask_secret`;每个需要持久化的值都用 `write_env`;只有 CI 真正需要的值才用 `set_secret`;任何不可逆操作之前都先 `confirm`。每个 `stage` 都会清屏,只留下当前步骤;因此一个阶段只做一项聚焦任务,避免人类仍需查看的内容滚出屏幕。不要修改标记上方的库。
### 4. 验证并交接
- 运行 `bash -n <script>`;如果可用,再运行 `shellcheck`。 - 运行 `chmod +x <script>`。 - 不要自行端到端运行:脚本会打开浏览器,并阻塞等待人类输入。改为做静态追踪:确认第 1 步列出的每个值都被采集并写到预定位置,且每个 `set_secret` 名称都与 CI 中真实的 `secrets.*` 引用完全一致。 - 告诉用户如何运行。如果它是一条可重复的设置路径,就提交脚本并从 README 链接过去,让下一个人直接运行脚本,而不是再次询问 AI。

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 端到端执行,因为脚本会打开浏览器并等待人工输入。

解释: 这是一条能力边界上的“最后一公里”工具。它不试图突破权限墙,也不把一长串易丢失的操作塞进聊天,而是把人工参与变成可恢复、可验证的程序化体验。

信息架构 / 执行顺序

  1. 先调查仓库: 阅读 .env*、README、compose、框架配置与工作流中的 secrets.* / vars.*,先把能从现有证据得到的信息找全。
  2. 定义输入输出契约: 对每个阶段和每个值,确定来源、落点、敏感性与是否需要持久化。
  3. 让用户确认范围: 在写脚本前展示有序阶段列表,允许添加、删除和重排。
  4. 映射人类旅程: 为每个阶段记录 URL、点击路径、值出现的位置和变量名;不了解当前 UI 时查文档或询问,绝不补写想象中的步骤。
  5. 复用固定运行库: 复制 template.sh,只在 STAGES 标记后编写阶段;用既有 helper 完成打开页面、输入、写环境变量、写 GitHub 配置和确认。
  6. 按依赖排序与控制屏幕密度: 一阶段只承载一个聚焦任务,并把 TOTAL_STAGES 与真实阶段数保持一致。
  7. 静态验证而非冒险实跑: 用 bash -n、可用时的 shellcheck 和端到端数据流追踪验证脚本,再交给人类首次运行。
  8. 按用途决定寿命: 一次性流程运行后删除;真正可复用的设置路径才提交并从 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 STAGES marker 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 缺陷,数据流追踪覆盖业务契约,而真正的权限操作保留给人类。它清楚地区分了可自动验证与必须人工验收的部分。

防失败机制与显式不变量

直接来源:

取舍、可移植风险与宿主假设

解释: bash 让产物透明、可检查、易于在仓库中保存,但它仍依赖本地 shell、终端交互和平台工具。模板解决了常见系统与 WSL 的 URL 打开,GitHub 写入则假设可用且已认证的 gh;迁移到没有 bash 或 gh 的环境时,需要重新实现运行库,而不应改写每个阶段。

支持性上下文: template.sh 是实现证据而不是本报告的所选原文。它具体承载隐藏输入、幂等 .env upsert、URL 打开和 GitHub 写入等能力;所选 SKILL.md 只定义如何使用这些能力和不能修改的边界。

支持性上下文: 官方 companion docs 记录了当前交互限制:阶段只能向前,输错通常需要 Ctrl-C 后重跑;重新运行会复用已写入 .env 的默认值。这说明“幂等重跑”是恢复模型,但不是完整的回退导航。

解释: 把流程编译成脚本可以减少聊天说明腐烂,但第三方控制台仍会变化。即使脚本被提交,也需要像其他代码一样维护;“可执行”并不天然意味着“永不过期”。对一次性迁移默认删除,正是在复用价值和维护成本之间作出的保守选择。

解释: 静态验证无法证明第三方页面仍与指令一致,也无法覆盖首次人工运行中的账户差异。最权威的验收仍是拥有正确权限的人类在目标环境中运行,并审查最终总结。技能诚实保留了这一边界。

可迁移原则

  1. 把人工参与做成接口,而不是异常。 明确哪些动作必须由人完成,再自动化其顺序、提示和结果落点。
  2. 先定义值流,再写流程代码。 每个输入都要有来源、目的地和敏感性,才能建立可验证契约。
  3. 把稳定机制封装为固定库。 让具体实例只描述变化部分,禁止复制后随意修改核心运行时。
  4. 在实现前确认阶段图。 让用户评审结构和顺序,而不是等到长脚本完成后才发现范围错误。
  5. 对未知界面 fail closed。 证据不足时查文档或询问,不把想象包装成精确指令。
  6. 让交互单位匹配可见认知窗口。 一个阶段只承担一项聚焦任务,并在不可逆动作前设置确认关卡。
  7. 验证方式要匹配副作用边界。 不能安全实跑时,使用语法、静态分析和数据流追踪,但明确保留首次人工验收。

今日实践题

假设仓库的工作流引用了 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