---
id: gh-wizard
name: "wizard"
url: https://skills.yangsir.net/skill/gh-wizard
author: mattpocock
domain: automation
tags: ["bash", "automation", "cli", "setup", "workflow"]
install_count: 546200
rating: 4.90 (120 reviews)
github: https://github.com/mattpocock/skills/tree/main/skills/in-progress/wizard
---

# wizard

> 此技能生成交互式 Bash 向导，引导用户完成手动、重复性高的操作，如第三方服务设置、一次性迁移或状态转换。它能自动打开 URL、捕获值、确认步骤，并写入 .env 文件和 GitHub Actions secrets，显著提升操作效率和准确性。

**Stats**: 546,200 installs · 4.9/5 (120 reviews)

## Before / After 对比

### 复杂手动流程效率对比

**Before**:

在没有这个技能之前，用户需要手动执行复杂的第三方服务设置或一次性迁移，过程繁琐、耗时且容易出错，每次操作都需要重新记忆或查阅大量文档，导致效率低下和配置不一致。

**After**:

此技能通过交互式向导，将复杂的手动流程标准化和自动化。用户只需跟随指引，即可快速、准确地完成设置和迁移，大幅减少了操作时间、错误率和重复性工作，确保了配置的一致性。

| Metric | Before | After | Change |
|---|---|---|---|
| 完成时间 | 60分钟 | 10分钟 | -83% |

## Readme

# 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 much is 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) — progress with time-remaining, 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.

## Process

### 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.

### 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.

### 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` — and set `TOTAL_STAGES` and `TOTAL_MINUTES` to honest estimates (this drives the time-remaining display).

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.

### 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.


---
*Source: https://skills.yangsir.net/skill/gh-wizard*
*Markdown mirror: https://skills.yangsir.net/api/skill/gh-wizard/markdown*