再学 AI
第 24 课 / wizard
当前 · 工程阅读 → 对照 → 问答 → 场景

把确实需要人完成的步骤做成向导

Agent 做不到的人工环节,可以用脚本逐步引导,而不是每次给一篇难以执行的说明。

还不清楚 Skill、Agent、安装和调用?先读 从零开始的6节入门课

在关系图中查看 wizard 与其他技能的关联 →

先把必要的概念讲清楚

向导用于那些确实需要你操作、但步骤容易混淆的事情。好的向导应让你知道现在做什么、在哪里取得什么值、下一步需要什么,而不是丢给你一整页模糊说明。

下面是老师补充的入门说明;原作者的要求保留在中英对照正文中。所有例子均为帮助理解而构造的教学情境。

CLI|命令行界面

通过输入文字命令操作程序,例如运行测试或检查 Git 状态。它与点按钮一样是操作入口,只是参数更容易记录、重复执行。读命令时先分清程序名、子命令、选项和目标路径;看懂命令不等于已执行它。

hook|事件发生时自动运行的钩子

在某个时点运行的脚本,例如 Git 提交前执行检查,或 Claude 使用命令工具前检查命令。它把规则变成可自动执行的动作。钩子覆盖什么取决于注册事件、匹配范围和运行环境,并不因安装一个脚本就控制所有工具。

context|Agent 当前可用的上下文

模型这一轮实际能使用的请求、对话、指令和已读文件内容。它不是电脑上所有资料,也不是永久记忆。文件存在但没被读到,就不一定参与推理。交接文档应指明当前目标、进度、关键证据位置和下一步,让新会话能够恢复必要背景。

CI|持续集成检查

把修改提交到共享流程时,自动运行测试、类型检查等约定检查,尽早发现集成问题。绿灯表示配置的检查通过,不代表所有需求都正确;红灯也可能由环境故障导致,应看具体证据。需要先检查“配置了什么”,才能解释绿灯的意义。

读原文,理解每一步为什么这样做

左右内容按小节对应;窄屏先中文、后英文。两种语言均完整展示,对应讲解紧接在小节之后。译文传达原文要求;老师讲解补充概念、原因、例子与适用边界。

中文译文English · 英文原文
中文译文
name: wizard
description: "生成交互式 Bash 向导,引导人完成只有他们能做的步骤。开通基础设施、设置凭证或 CI 秘密、操作陌生第三方后台、执行一次迁移或切换时使用。Agent 自己能做的步骤不要调用它。"
English · 英文原文
name: wizard
description: Generate an interactive bash wizard that walks a human through steps only they can perform. Use when provisioning infrastructure, setting up credentials or CI secrets, walking an unfamiliar third-party dashboard, or running a one-off migration or cutover. Don't invoke this for steps the agent can perform itself.
中文译文

为必须由人操作的步骤编写向导

wizard 是一段 Bash 脚本,一步一步带领人完成手动流程。这些事情自己摸索很繁琐,每次重新向 AI 解释也很繁琐。向导打开网址,说明点击与复制位置,接收值,写入 .env 或 GitHub secrets,每阶段确认,并显示还剩多少步。

它可以用于第三方配置、一次性迁移或项目状态切换。

template.sh 已提供分阶段进度、确认、跨平台打开网址(含 WSL)、隐藏秘密输入、可重复执行的 .env 更新、GitHub secret/variable 写入和完成摘要。你只负责明确流程并编写各阶段。STAGES 标记上方的公共函数库应保持一致,不手工修改。

默认是临时脚本,放到 scratch 或 scripts,任务完成后删除。只有用户需要可重复的项目设置路径,才提交保留。

English · 英文原文

Wizard

A wizard is a bash script that walks a human, step by step, through a manual procedure that's tedious to do by hand 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: stage-by-stage progress, 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 scope the procedure and author its stages. The library above the STAGES marker is identical in every wizard; that consistency is the point: never hand-edit it.

A wizard is ephemeral by default: 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.

中文译文

制作过程

English · 英文原文

Process

中文译文
1. 明确流程范围

先查仓库,再问用户。找出哪些步骤必须由人完成,以及每步收集什么值。

设置任务查看 .env.env.example.env.*、README、docker-compose、框架配置和 .github/workflows/*。每个 secrets.*vars.* 引用对应向导应提供的值。

迁移任务则确认当前状态、目标状态,以及中间不可逆的操作。

展示顺序和各阶段产出,与用户核对,允许增加、删除或重排。

完成时,应知道每阶段名称与顺序,以及每个值从哪里获得、写到哪里、是否需秘密输入。某些阶段只是操作,不产生配置值。

English · 英文原文
1. Scope the procedure

Work out every manual step the human must take and every value that gets captured along the way. Read the repo first, don't ask cold:

  • 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 the irreversible actions between them.

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.

老师讲解 · 对应上方原文 · 含教学举例

先区分人必须做的事与 Agent 可以做的事

配置服务时,有些动作涉及你在账户里的确认或第三方控制台;有些只是写配置文件,Agent 可以代办。wizard 的用途是组织必要人工步骤,不是把所有操作都转嫁给人。

先读项目需要哪些值,例如服务地址、公开项目 ID 或秘密凭据,并明确每个值从哪里来、写到哪里、是否敏感。读取 .env 示例是了解字段名,不代表应把真实密钥打印进聊天。

例如开发环境地址需要写本地配置,CI 专用令牌只应进入对应秘密设置,不能把所有值无差别复制到每个地方。

中文译文
2. 描述每步真实操作路径

写出网址、页面动作、值出现的位置及对应变量,例如“控制台 → 开发者 → API 密钥 → 显示测试密钥 → 复制”。

不知道当前界面或准确命令时,要承认不确定,查文档或询问,不编造不存在的步骤。完成标准是陌生人也能照说明执行。

English · 英文原文
2. Map each stage's journey

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: never invent steps that may not exist.

Done when: every stage traces to concrete instructions a stranger could follow.

老师讲解 · 对应上方原文 · 含教学举例

操作路径必须真实、具体、可以跟随

“去设置里创建一个 Key”对不熟悉界面的人不够。向导应提供准确页面、要选的项目、字段名称和应复制的值;不知道当前界面就核验,不能编造菜单。

每阶段只做一个集中任务,避免用户往下滚后忘记当前复制的是哪个值。打开页面再索取对应值,可以减少认知切换。

教师提醒:本文是方法说明,里面举的控制台路径不能自动当成任何第三方服务今天的真实界面。实际运行前仍需检查目标平台。

“去后台拿一个 Key”为什么还不够?

这句话没有告诉初学者去哪个后台、哪个页面、建什么用途的 Key,以及拿到后放哪里。合格向导需要将这些操作核实并按步骤呈现。

假设网站本地运行需要 SERVICE_API_KEY,应说明官方控制台入口、创建步骤、隐藏输入位置,以及脚本写入的配置文件。CI 不需要的密钥,不应为图省事也复制过去。

语法检查只能证明脚本能被解析,不能证明今天第三方页面仍有那个按钮,也不能证明账号权限足够。真实路径需要核实,尚未知的步骤应明确。

向导适合确实要人完成的环节。AI 自己可做的准备先做好,让用户进入时只处理必要操作,而不是再替 AI 调查。

中文译文
3. 编写向导

复制 template.sh,按依赖顺序将示例替换为实际 stage,使用已有 stage、say/step、open_url、ask/ask_secret、write_env、set_secret/set_var、pause/confirm 等函数,设置正确 TOTAL_STAGES。

先打开网址,再索取值。秘密使用 ask_secret,需要持久保存的值用 write_env;只给 CI 确实需要的值设置 secret。不可逆操作前 confirm。

每个 stage 清屏,只显示当前步骤。因此每步集中做一件事,避免需要的说明滚出屏幕。不要修改公共函数库。

English · 英文原文
3. Author the wizard

Copy template.sh to the target path. Replace the example stage with one stage per step, in dependency order. 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.

Hold the bar the template sets: 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.

老师讲解 · 对应上方原文 · 含教学举例

模板处理通用体验,作者只写具体阶段

原文提供的 template.sh 已负责进度、隐藏输入、写入和确认。复用它的意义是相同危险点采用一致处理,不必每次重新生成一套不一样的密码输入办法。

幂等更新 .env 指同一个配置再次写入时更新对应键,避免越来越多重复行。但整个向导是否重复运行安全,还取决于阶段中的实际动作;不能从一个幂等助手函数推断全部流程都安全。

不可逆动作前确认,应让用户知道具体对象与后果。确认不是代替准备工作,准备不足时点“是”也不能弥补。

中文译文
4. 检查并交给用户
  • bash -n <script> 检查语法,有 shellcheck 时也运行。
  • chmod +x <script> 使其可执行。
  • 不自己端到端执行,因为会打开浏览器并等待人输入。静态追踪每个值是否获得、是否写到正确目标,以及 set_secret 名称是否准确对应 CI secrets 引用。
  • 告知用户如何启动。需要长期复用时,提交脚本并从 README 提供入口,让下一位直接运行。
English · 英文原文
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 blocks on human input. Trace it statically instead: 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.
老师讲解 · 对应上方原文 · 含教学举例

静态检查通过,不代表你已经执行完人工操作

bash -n 检查 shell 语法,shellcheck 可进一步检查常见脚本问题。它们不会替你登录账户、核对第三方返回值,也不会证明业务迁移成功。

原文不要求 Agent 自己完整运行这类等待人输入的向导,而是核对每个值被采集并写到正确位置,再交给用户执行。一次性向导完成后可以删除;要长期复用时才进入项目文档。

你应得到的是可执行的清晰引导,而不是一句“向导已生成,所以服务已配置”。

原作者:Matt Pocock · 中文翻译为非官方译本

来源:skills/engineering/wizard/SKILL.md ↗

固定版本:3cca18b368ae95cdbdebbff572ccafa662551015

先作答,再看参考思路

Q1 · 理解

用自己的话说明:它解决什么问题,完成后会留下什么?

请各用一句话回答。若它只做规划或解释,不要把“已开发”“已部署”写成产物。

Q2 · 判断

为什么这个技能要求不要由 Agent 自己完整运行向导?

我已思考,查看参考思路

向导专为需要本人输入和操作的环节设计,完整运行会等待人;Agent 可验证语法和数据流,人工完成授权步骤。

Q3 · 追问

原文中哪条要求在你的环境下可能不成立?

说出具体一句及其前提,例如工具不可用、资料缺失、已有项目约定冲突,或它只是作者偏好。把你的答案带回课堂,我们据此继续讨论。

课堂回传格式:第 24 课 / 我的理解 / Q2 回答 / 仍不理解的原句。这里是阅读教材;实时问答在我们的对话中进行。

把方法放进一个具体情境

教学案例:连接一个资料服务时,只有本人能完成账户授权。向导应打开正确页面,告诉你取得什么、保存在哪里;不要求你把秘密贴到公开聊天或文章中。

边界与容易误读的地方

它可能修改环境文件或远端秘密,属于有副作用的工具。原文命令与界面都是版本相关内容,执行前应核实。

讨论后再实践:先判断上述情境是否适用,再选择真实任务。现在无需安装、运行命令或修改现有项目。

关联阅读