Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add DamiMartinez/book-skills --skill automate-boring-stuffgit clone --depth 1 https://github.com/DamiMartinez/book-skillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/damimartinez/book-skills/automate-boring-stuff)<a href="https://agentmods.dev/skills/damimartinez/book-skills/automate-boring-stuff"><img src="https://agentmods.dev/badge/skills/damimartinez/book-skills/automate-boring-stuff/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/damimartinez/book-skills/automate-boring-stuff"><img src="https://agentmods.dev/badge/skills/damimartinez/book-skills/automate-boring-stuff.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00194 | $0.01291 |
| Opus 5 | $0.00097 | $0.00646 |
| Sonnet 5 | $0.00039 | $0.00258 |
| Haiku 4.5 | $0.00019 | $0.00129 |
Grade A, and why
automate-boring-stuff scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 11d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 42 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Automate the Boring Stuff with Python
Apply this skill when the user wants to turn a repetitive, manual, computer-based task into a script. The book's core value isn't clever code — it's picking the right practical tool for the task and not breaking things while automating them.
Core concepts
Is this worth automating? — Good candidates are tasks that are repetitive, rule-based (a human could write down the steps as a checklist), and either time-consuming or error-prone by hand. If a task is a one-off or requires real judgment calls each time, a script may cost more to write than it saves — flag this tradeoff rather than automating reflexively.
Regex and string handling — Use regular expressions for pattern-based text extraction/validation (emails, phone numbers, log lines, filenames matching a pattern); use plain string methods (split, strip, replace, f-strings) when the pattern is simple — regex adds power but also fragility and unreadability, so don't reach for it by default.
File and folder operations — Use os/shutil/pathlib for bulk copy/move/rename/delete across files and directories. For anything destructive or hard to undo (bulk rename, bulk delete, overwriting files), do a dry run first: print what would happen before actually doing it, and prefer generating a log of changes made — bulk file operations are one of the easiest ways to silently destroy real user data.
Structured file formats — Read/write CSV with the csv module, Excel with openpyxl, PDFs with a PDF library (extraction is often messy — text layout doesn't always extract cleanly), Word docs with python-docx, and JSON with the built-in json module. The goal is always to get data out of (or into) a format a script can work with programmatically instead of a human doing it by hand in the GUI.
Web scraping — Use requests + BeautifulSoup for static pages (fetch HTML, parse with selectors); use Selenium (or similar) only when the page requires JavaScript execution, logins, or interaction to reveal the content. Before scraping, check whether the site offers an API instead (more stable than scraping), and be mindful of rate limits, robots.txt, and the site's terms of service — flag this explicitly rather than assuming scraping is always fine.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 11d ago First seen · 42 lines · 194 tokens per session scan A 417984b91dd1
automate-boring-stuff is a skill published in the GitHub repository DamiMartinez/book-skills (11 stars, last pushed 1mo ago), licensed MIT. It adds 194 tokens to every session and 1,291 once invoked, about $0.0010 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
content-hash-cache-pattern
Cache expensive file processing results using SHA-256 content hashes — path-independent, auto-invalidating, with service layer separation.
python-release
Handle Python SDK release, build, bump, packaging metadata, PyPI client pin, uv.lock, nox/build workflow, and publish verification changes. Use for Python release process work or dependency pin bumps; do not use for ordinary Python feature implementation.
notebook.refactor_to_utils
Move or add notebook code to a utils.py library file.
notebook.split_header_cells
Split Jupyter notebook header cells so each cell has a single header and comment.
notebook.split_cells
Split Jupyter notebook cells so each cell performs only one logical task.
python-cli-ops
CLI application patterns for Python. Triggers on: cli, command line, typer, click, argparse, terminal, rich, console, terminal ui.