<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Bash on Top AI Skills</title><link>https://topaiskills.com/tags/bash/</link><description>Recent content in Bash on Top AI Skills</description><generator>Hugo</generator><language>en</language><lastBuildDate>Mon, 21 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://topaiskills.com/tags/bash/index.xml" rel="self" type="application/rss+xml"/><item><title>Wizard Skill FAQ: The Bash Script That Walks Humans Through Setup</title><link>https://topaiskills.com/tutorials/guides/wizard-skill-faq/</link><pubDate>Mon, 21 Sep 2026 00:00:00 +0000</pubDate><guid>https://topaiskills.com/tutorials/guides/wizard-skill-faq/</guid><description>&lt;script type="application/ld+json"&gt;{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","acceptedAnswer":{"@type":"Answer","text":"It generates an interactive bash script — a 'wizard' — that walks a human, step by step, through a manual procedure only they can perform: provisioning infrastructure, setting up credentials or CI secrets, navigating an unfamiliar third-party dashboard, or running a one-off migration or cutover. The agent authors the stages; the human drives the browser and pastes values back. It sits in mattpocock/skills at skills/engineering/wizard/ with 392.6K all-time installs (rank 133 on skills.sh on 2026-09-21)."},"name":"What does the wizard skill actually do?"},{"@type":"Question","acceptedAnswer":{"@type":"Answer","text":"Use it when a procedure is tedious to do by hand and tedious to re-explain to an agent every time, and the steps genuinely require a human: browser dashboards, secret entry, irreversible confirmations. Don't invoke it for steps the agent can perform itself. The skill's trigger list: provisioning infrastructure, setting up credentials or CI secrets, walking an unfamiliar third-party dashboard, running a one-off migration or cutover."},"name":"When should I use it — and when not?"},{"@type":"Question","acceptedAnswer":{"@type":"Answer","text":"A banner lists the total stages, then each stage clears the screen and shows one focused task: the URL to open, exactly what to click and copy, and where the captured value lands. open_url opens the page in the human's browser, ask and ask_secret collect values, confirm gates anything irreversible, and a finishing summary lists .env values written, GitHub secrets set, and anything skipped. Interrupt with Ctrl-C and re-run later — it remembers values already saved."},"name":"What does a generated wizard look like when run?"},{"@type":"Question","acceptedAnswer":{"@type":"Answer","text":"template.sh splits at a marker. Everything above it is a wizard library that is identical in every generated wizard — banner, stage, say, step, note, warn, open_url, pause, confirm, ask, ask_secret, write_env, set_secret, set_var, finish, plus _clear and _existing helpers. Everything below is the author's stages. The skill is explicit: never hand-edit the library; the agent's whole job is scoping the procedure and authoring the stages below the marker."},"name":"What is the 'library above the STAGES marker'?"},{"@type":"Question","acceptedAnswer":{"@type":"Answer","text":"Three steps. Scope: read the repo first — .env, .env.example, README, docker-compose, and every workflow file, because each secrets.* or vars.* reference is a value the wizard must produce — then list the ordered stages and confirm with the user, who may add, drop, or reorder. Map: for each stage write the precise journey (URL to open, what to do, where the value appears, which variable it fills). Author: copy template.sh, replace the example stage with one stage per step, set TOTAL_STAGES to match, and verify."},"name":"How does the authoring process work?"},{"@type":"Question","acceptedAnswer":{"@type":"Answer","text":"It must not run it end-to-end — wizards open browsers and block on human input. Instead: bash -n for syntax, shellcheck when available, chmod +x, then a static trace — every value from the scoping step lands where step 1 said it would (including the right ENV_FILE), and every set_secret name exactly matches a secrets.* reference in CI. The skill's bar: a stranger should be able to follow the stages without asking the agent anything."},"name":"How does the agent verify a wizard it can't run?"},{"@type":"Question","acceptedAnswer":{"@type":"Answer","text":"ask_secret reads input hidden from the terminal. write_env upserts KEY=VALUE into the .env file idempotently — it replaces any existing line and keeps the current value as a default on re-runs. set_secret writes only the values CI actually needs, pushing them via gh, and records a SKIPPED warning with the exact manual command if gh is missing or unauthenticated, so the human gets a to-do list in the finishing summary."},"name":"How are secrets handled?"},{"@type":"Question","acceptedAnswer":{"@type":"Answer","text":"Inventing UI steps that may not exist — if you don't know the current dashboard, say so and check the docs instead. Asking the user cold instead of reading the repo first. Bundling several actions into one stage, since each stage clears the screen. Skipping confirm() before irreversible actions. And committing an ephemeral one-off wizard that was meant to be thrown away after the job."},"name":"What are the common traps?"},{"@type":"Question","acceptedAnswer":{"@type":"Answer","text":"Ephemeral by default: built for one run, saved to a scratch or scripts/ path, deleted when the job is done. Commit it only when the user wants a repeatable setup path that should live in the repo — then link it from the README so the next person runs the script instead of asking an agent. The template's closing line makes the same point: 'only the stages below this marker are yours.'"},"name":"Is a wizard ephemeral or committed?"},{"@type":"Question","acceptedAnswer":{"@type":"Answer","text":"Yes. skills.sh on 2026-09-21 showed wizard at #133 with 392,600 all-time installs and a weekly series of 19,850, 42,981, 41,317, 44,161, 41,947, 41,252, 37,335, 34,729 — a peak near 44K about seven weeks back, now settling in the mid-30K band. The repo pushed on 2026-09-18, and the skill's SKILL.md reads only 4 KB while template.sh carries 8.5 KB of the actual UX."},"name":"Is the 392.6K install number real?"}]}&lt;/script&gt;
&lt;div class="space-y-6 mt-8"&gt;
 &lt;h2 class="text-xl font-bold text-foreground mb-6"&gt;Frequently Asked Questions&lt;/h2&gt;&lt;details class="group rounded-xl border border-border/40 bg-card/30 backdrop-blur-sm transition-all duration-200 hover:border-primary/30 hover:bg-card/40"&gt;
 &lt;summary class="flex cursor-pointer items-center justify-between gap-4 px-5 py-4 text-sm font-semibold text-foreground"&gt;
 &lt;span&gt;What does the wizard skill actually do?&lt;/span&gt;
 &lt;svg class="h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200 group-open:rotate-45" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;line x1="12" y1="5" x2="12" y2="19"&gt;&lt;/line&gt;&lt;line x1="5" y1="12" x2="19" y2="12"&gt;&lt;/line&gt;&lt;/svg&gt;
 &lt;/summary&gt;
 &lt;div class="px-5 pb-5 pt-0 text-sm leading-relaxed text-muted-foreground border-t border-border/30 mt-0 pt-4"&gt;
 It generates an interactive bash script — a &amp;lsquo;wizard&amp;rsquo; — that walks a human, step by step, through a manual procedure only they can perform: provisioning infrastructure, setting up credentials or CI secrets, navigating an unfamiliar third-party dashboard, or running a one-off migration or cutover. The agent authors the stages; the human drives the browser and pastes values back. It sits in mattpocock/skills at skills/engineering/wizard/ with 392.6K all-time installs (rank 133 on skills.sh on 2026-09-21).
 &lt;/div&gt;
 &lt;/details&gt;&lt;details class="group rounded-xl border border-border/40 bg-card/30 backdrop-blur-sm transition-all duration-200 hover:border-primary/30 hover:bg-card/40"&gt;
 &lt;summary class="flex cursor-pointer items-center justify-between gap-4 px-5 py-4 text-sm font-semibold text-foreground"&gt;
 &lt;span&gt;When should I use it — and when not?&lt;/span&gt;
 &lt;svg class="h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200 group-open:rotate-45" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;line x1="12" y1="5" x2="12" y2="19"&gt;&lt;/line&gt;&lt;line x1="5" y1="12" x2="19" y2="12"&gt;&lt;/line&gt;&lt;/svg&gt;
 &lt;/summary&gt;
 &lt;div class="px-5 pb-5 pt-0 text-sm leading-relaxed text-muted-foreground border-t border-border/30 mt-0 pt-4"&gt;
 Use it when a procedure is tedious to do by hand and tedious to re-explain to an agent every time, and the steps genuinely require a human: browser dashboards, secret entry, irreversible confirmations. Don&amp;rsquo;t invoke it for steps the agent can perform itself. The skill&amp;rsquo;s trigger list: provisioning infrastructure, setting up credentials or CI secrets, walking an unfamiliar third-party dashboard, running a one-off migration or cutover.
 &lt;/div&gt;
 &lt;/details&gt;&lt;details class="group rounded-xl border border-border/40 bg-card/30 backdrop-blur-sm transition-all duration-200 hover:border-primary/30 hover:bg-card/40"&gt;
 &lt;summary class="flex cursor-pointer items-center justify-between gap-4 px-5 py-4 text-sm font-semibold text-foreground"&gt;
 &lt;span&gt;What does a generated wizard look like when run?&lt;/span&gt;
 &lt;svg class="h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200 group-open:rotate-45" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;line x1="12" y1="5" x2="12" y2="19"&gt;&lt;/line&gt;&lt;line x1="5" y1="12" x2="19" y2="12"&gt;&lt;/line&gt;&lt;/svg&gt;
 &lt;/summary&gt;
 &lt;div class="px-5 pb-5 pt-0 text-sm leading-relaxed text-muted-foreground border-t border-border/30 mt-0 pt-4"&gt;
 A banner lists the total stages, then each stage clears the screen and shows one focused task: the URL to open, exactly what to click and copy, and where the captured value lands. open_url opens the page in the human&amp;rsquo;s browser, ask and ask_secret collect values, confirm gates anything irreversible, and a finishing summary lists .env values written, GitHub secrets set, and anything skipped. Interrupt with Ctrl-C and re-run later — it remembers values already saved.
 &lt;/div&gt;
 &lt;/details&gt;&lt;details class="group rounded-xl border border-border/40 bg-card/30 backdrop-blur-sm transition-all duration-200 hover:border-primary/30 hover:bg-card/40"&gt;
 &lt;summary class="flex cursor-pointer items-center justify-between gap-4 px-5 py-4 text-sm font-semibold text-foreground"&gt;
 &lt;span&gt;What is the &amp;#39;library above the STAGES marker&amp;#39;?&lt;/span&gt;
 &lt;svg class="h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200 group-open:rotate-45" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;line x1="12" y1="5" x2="12" y2="19"&gt;&lt;/line&gt;&lt;line x1="5" y1="12" x2="19" y2="12"&gt;&lt;/line&gt;&lt;/svg&gt;
 &lt;/summary&gt;
 &lt;div class="px-5 pb-5 pt-0 text-sm leading-relaxed text-muted-foreground border-t border-border/30 mt-0 pt-4"&gt;
 template.sh splits at a marker. Everything above it is a wizard library that is identical in every generated wizard — banner, stage, say, step, note, warn, open_url, pause, confirm, ask, ask_secret, write_env, set_secret, set_var, finish, plus _clear and _existing helpers. Everything below is the author&amp;rsquo;s stages. The skill is explicit: never hand-edit the library; the agent&amp;rsquo;s whole job is scoping the procedure and authoring the stages below the marker.
 &lt;/div&gt;
 &lt;/details&gt;&lt;details class="group rounded-xl border border-border/40 bg-card/30 backdrop-blur-sm transition-all duration-200 hover:border-primary/30 hover:bg-card/40"&gt;
 &lt;summary class="flex cursor-pointer items-center justify-between gap-4 px-5 py-4 text-sm font-semibold text-foreground"&gt;
 &lt;span&gt;How does the authoring process work?&lt;/span&gt;
 &lt;svg class="h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200 group-open:rotate-45" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;line x1="12" y1="5" x2="12" y2="19"&gt;&lt;/line&gt;&lt;line x1="5" y1="12" x2="19" y2="12"&gt;&lt;/line&gt;&lt;/svg&gt;
 &lt;/summary&gt;
 &lt;div class="px-5 pb-5 pt-0 text-sm leading-relaxed text-muted-foreground border-t border-border/30 mt-0 pt-4"&gt;
 Three steps. Scope: read the repo first — .env, .env.example, README, docker-compose, and every workflow file, because each secrets.* or vars.* reference is a value the wizard must produce — then list the ordered stages and confirm with the user, who may add, drop, or reorder. Map: for each stage write the precise journey (URL to open, what to do, where the value appears, which variable it fills). Author: copy template.sh, replace the example stage with one stage per step, set TOTAL_STAGES to match, and verify.
 &lt;/div&gt;
 &lt;/details&gt;&lt;details class="group rounded-xl border border-border/40 bg-card/30 backdrop-blur-sm transition-all duration-200 hover:border-primary/30 hover:bg-card/40"&gt;
 &lt;summary class="flex cursor-pointer items-center justify-between gap-4 px-5 py-4 text-sm font-semibold text-foreground"&gt;
 &lt;span&gt;How does the agent verify a wizard it can&amp;#39;t run?&lt;/span&gt;
 &lt;svg class="h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200 group-open:rotate-45" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;line x1="12" y1="5" x2="12" y2="19"&gt;&lt;/line&gt;&lt;line x1="5" y1="12" x2="19" y2="12"&gt;&lt;/line&gt;&lt;/svg&gt;
 &lt;/summary&gt;
 &lt;div class="px-5 pb-5 pt-0 text-sm leading-relaxed text-muted-foreground border-t border-border/30 mt-0 pt-4"&gt;
 It must not run it end-to-end — wizards open browsers and block on human input. Instead: bash -n for syntax, shellcheck when available, chmod +x, then a static trace — every value from the scoping step lands where step 1 said it would (including the right ENV_FILE), and every set_secret name exactly matches a secrets.* reference in CI. The skill&amp;rsquo;s bar: a stranger should be able to follow the stages without asking the agent anything.
 &lt;/div&gt;
 &lt;/details&gt;&lt;details class="group rounded-xl border border-border/40 bg-card/30 backdrop-blur-sm transition-all duration-200 hover:border-primary/30 hover:bg-card/40"&gt;
 &lt;summary class="flex cursor-pointer items-center justify-between gap-4 px-5 py-4 text-sm font-semibold text-foreground"&gt;
 &lt;span&gt;How are secrets handled?&lt;/span&gt;
 &lt;svg class="h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200 group-open:rotate-45" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;line x1="12" y1="5" x2="12" y2="19"&gt;&lt;/line&gt;&lt;line x1="5" y1="12" x2="19" y2="12"&gt;&lt;/line&gt;&lt;/svg&gt;
 &lt;/summary&gt;
 &lt;div class="px-5 pb-5 pt-0 text-sm leading-relaxed text-muted-foreground border-t border-border/30 mt-0 pt-4"&gt;
 ask_secret reads input hidden from the terminal. write_env upserts KEY=VALUE into the .env file idempotently — it replaces any existing line and keeps the current value as a default on re-runs. set_secret writes only the values CI actually needs, pushing them via gh, and records a SKIPPED warning with the exact manual command if gh is missing or unauthenticated, so the human gets a to-do list in the finishing summary.
 &lt;/div&gt;
 &lt;/details&gt;&lt;details class="group rounded-xl border border-border/40 bg-card/30 backdrop-blur-sm transition-all duration-200 hover:border-primary/30 hover:bg-card/40"&gt;
 &lt;summary class="flex cursor-pointer items-center justify-between gap-4 px-5 py-4 text-sm font-semibold text-foreground"&gt;
 &lt;span&gt;What are the common traps?&lt;/span&gt;
 &lt;svg class="h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200 group-open:rotate-45" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;line x1="12" y1="5" x2="12" y2="19"&gt;&lt;/line&gt;&lt;line x1="5" y1="12" x2="19" y2="12"&gt;&lt;/line&gt;&lt;/svg&gt;
 &lt;/summary&gt;
 &lt;div class="px-5 pb-5 pt-0 text-sm leading-relaxed text-muted-foreground border-t border-border/30 mt-0 pt-4"&gt;
 Inventing UI steps that may not exist — if you don&amp;rsquo;t know the current dashboard, say so and check the docs instead. Asking the user cold instead of reading the repo first. Bundling several actions into one stage, since each stage clears the screen. Skipping confirm() before irreversible actions. And committing an ephemeral one-off wizard that was meant to be thrown away after the job.
 &lt;/div&gt;
 &lt;/details&gt;&lt;details class="group rounded-xl border border-border/40 bg-card/30 backdrop-blur-sm transition-all duration-200 hover:border-primary/30 hover:bg-card/40"&gt;
 &lt;summary class="flex cursor-pointer items-center justify-between gap-4 px-5 py-4 text-sm font-semibold text-foreground"&gt;
 &lt;span&gt;Is a wizard ephemeral or committed?&lt;/span&gt;
 &lt;svg class="h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200 group-open:rotate-45" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;line x1="12" y1="5" x2="12" y2="19"&gt;&lt;/line&gt;&lt;line x1="5" y1="12" x2="19" y2="12"&gt;&lt;/line&gt;&lt;/svg&gt;
 &lt;/summary&gt;
 &lt;div class="px-5 pb-5 pt-0 text-sm leading-relaxed text-muted-foreground border-t border-border/30 mt-0 pt-4"&gt;
 Ephemeral by default: built for one run, saved to a scratch or scripts/ path, deleted when the job is done. Commit it only when the user wants a repeatable setup path that should live in the repo — then link it from the README so the next person runs the script instead of asking an agent. The template&amp;rsquo;s closing line makes the same point: &amp;lsquo;only the stages below this marker are yours.&amp;rsquo;
 &lt;/div&gt;
 &lt;/details&gt;&lt;details class="group rounded-xl border border-border/40 bg-card/30 backdrop-blur-sm transition-all duration-200 hover:border-primary/30 hover:bg-card/40"&gt;
 &lt;summary class="flex cursor-pointer items-center justify-between gap-4 px-5 py-4 text-sm font-semibold text-foreground"&gt;
 &lt;span&gt;Is the 392.6K install number real?&lt;/span&gt;
 &lt;svg class="h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200 group-open:rotate-45" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;line x1="12" y1="5" x2="12" y2="19"&gt;&lt;/line&gt;&lt;line x1="5" y1="12" x2="19" y2="12"&gt;&lt;/line&gt;&lt;/svg&gt;
 &lt;/summary&gt;
 &lt;div class="px-5 pb-5 pt-0 text-sm leading-relaxed text-muted-foreground border-t border-border/30 mt-0 pt-4"&gt;
 Yes. skills.sh on 2026-09-21 showed wizard at #133 with 392,600 all-time installs and a weekly series of 19,850, 42,981, 41,317, 44,161, 41,947, 41,252, 37,335, 34,729 — a peak near 44K about seven weeks back, now settling in the mid-30K band. The repo pushed on 2026-09-18, and the skill&amp;rsquo;s SKILL.md reads only 4 KB while template.sh carries 8.5 KB of the actual UX.
 &lt;/div&gt;
 &lt;/details&gt;&lt;/div&gt;
&lt;h2 id="why-a-wizard-faq-exists"&gt;Why a Wizard FAQ Exists&lt;/h2&gt;
&lt;p&gt;Matt Pocock&amp;rsquo;s &lt;code&gt;wizard&lt;/code&gt; skill generates a bash script that walks a human through steps only they can perform — provisioning infrastructure, pasting API keys, clicking through a vendor dashboard. It sounds niche until you count the setup tasks you re-explain to an agent every week. The SKILL.md is short (4 KB), but the real substance lives in template.sh (8.5 KB), which ships the entire wizard library: every helper, the STAGES marker, the closing summary. I read both files plus the skills.sh leaderboard on 2026-09-21; every answer above traces to one of them.&lt;/p&gt;</description></item></channel></rss>