skills/do-nothing-scripting/SKILL.md
Derive a do-nothing bash script from an asciinema .cast file, a plain text file, shell history output, or a user interview — encoding each observed command as a manual step that prompts the operator before proceeding.
npx skillsauth add abuxton/skills do-nothing-scriptingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Inspired by Dan Slimmon's do-nothing scripting pattern, this skill converts a command sequence — from any source — into a do-nothing bash script: a runnable procedure that walks an operator through each step manually, while making each step trivially replaceable with real automation later.
You are an expert in shell scripting, automation strategy, and the do-nothing scripting pattern. You understand:
.cast files and extract the sequence of commands a user ranThis skill accepts four input modes. Choose the mode that matches what the user provides:
| Mode | When to use | Example |
| ---- | ----------- | ------- |
| cast | An asciinema .cast recording exists | ./tmp/deploy.cast |
| text | A plain text file lists the commands, one per line | ./tmp/steps.txt |
| history | The user wants to derive a script from recent shell history | history 20 > /tmp/history.txt |
| interview | No input file is available; gather steps interactively | (ask the user) |
A do-nothing script:
Determine the input source — Ask the user which input mode applies if it is not already clear:
"Do you have an asciinema .cast file? If so, what is the path?""Do you have a text file listing the commands? If so, what is the path?""Would you like to use your recent shell history? Run: history <N> > /tmp/history.txt""I don't see an input file. Let's build the script together — what is the first step in your procedure?"
Continue asking "What is the next step?" until the user says there are no more steps. Record each step description as a command line in /tmp/<name>_steps.txt, then proceed as for the text mode.Extract the command list — Use references/extract_commands.py to pull the command sequence.
The script auto-detects the format, or you can override with --format=:
# auto-detect (cast, history, or text)
python3 skills/do-nothing-scripting/references/extract_commands.py ./tmp/<name>.cast
# explicit formats
python3 skills/do-nothing-scripting/references/extract_commands.py --format=cast ./tmp/<name>.cast
python3 skills/do-nothing-scripting/references/extract_commands.py --format=history ./tmp/history.txt
python3 skills/do-nothing-scripting/references/extract_commands.py --format=text ./tmp/steps.txt
The script prints each detected command prefixed with its sequence number. Review the output and discard noise (shell prompts, clear, incidental cd calls that are part of navigation rather than procedure).
Capturing history directly:
history 20 > /tmp/history.txt
python3 skills/do-nothing-scripting/references/extract_commands.py --format=history /tmp/history.txt
Group commands into logical steps — Examine the command list and cluster related commands into named steps. Good step names are verb phrases that describe what a human does, not what the computer does:
create_feature_branch (not git_checkout)update_config_file (not sed)wait_for_pipeline (not watch)Aim for 1–5 commands per step. A step that is a single trivially-automatable command is fine and desirable.
Identify context variables — Note any values that will differ between runs: usernames, branch names, ticket IDs, environment names, file paths. These become context variables, collected once in main() and passed to step functions.
Write the do-nothing bash script — Generate the script following the template in references/do_nothing_template.sh. Rules:
#!/usr/bin/env bashset -euo pipefail immediately after the shebangstep_<snake_case_name>()echo "==> Step N: <Human readable name>"wait_for_enter at the endwait_for_enter() utility function using read -rpcollect_context() function that prompts for all context variablesmain() function that calls collect_context then each step in order, finishing with echo "✓ Done."main "$@" as the last line of the fileAnnotate automation potential — Add an inline # TODO: automate comment on functions whose body is a single deterministic command. This signals which steps are lowest-effort to convert from manual to automated.
Write the script to ./tmp/<name>_do_nothing.sh and make it executable:
chmod +x ./tmp/<name>_do_nothing.sh
Validate the script — Run:
bash -n ./tmp/<name>_do_nothing.sh
Fix any syntax errors reported before presenting the result.
Present a summary — Show the operator:
extract_commands.py inspects the first line for a JSON header (cast), checks whether the majority of lines match N command (history), and falls back to plain-text otherwise. Use --format= to override when auto-detection is incorrect."o" (output) events and no "i" (input) events, extract_commands.py falls back to parsing command prompts from the output stream. Results may be less accurate; review carefully.# are treated as comments and skipped. Blank lines are ignored.history (bash/zsh), which prefixes each line with a sequence number: N command.wait_for_enter pause with clear instructions — do not attempt to poll or sleep.printf over echo for portable output when the string may contain escape sequences; use echo for simple prose lines.development
Fetch a matching XKCD comic and generate validated Markdown or HTML embed output for docs or terminal use.
testing
Author high-quality agent skills following the agentskills.io specification, with correct frontmatter, workflow structure, and reference assets.
tools
Analyse a repository to identify its focus, technology stack, and labels, then search for and apply appropriate shields.io badges to markdown files.
data-ai
Prepare and publish an npm package that ships agent skills, following the skills-npm convention for skill bundling and distribution.