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 tmj-90/gaffer --skill shell-scriptinggit clone --depth 1 https://github.com/tmj-90/gafferWrote 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/tmj-90/gaffer/shell-scripting)<a href="https://agentmods.dev/skills/tmj-90/gaffer/shell-scripting"><img src="https://agentmods.dev/badge/skills/tmj-90/gaffer/shell-scripting/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/tmj-90/gaffer/shell-scripting"><img src="https://agentmods.dev/badge/skills/tmj-90/gaffer/shell-scripting.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.00121 | $0.02160 |
| Opus 5.5 | $0.00048 | $0.00864 |
| Sonnet 5.5 | $0.00024 | $0.00432 |
| Haiku 4.5 | $0.00012 | $0.00216 |
Grade C, and why
shell-scripting scanned grade C with 2 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 16d 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.
Recursive force deletehighDestructive command
rm -rf with a variable or a broad path is one typo away from removing the wrong tree.
`rm -rf`: put such logic inside the script or its test file and run that. Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
`cd "$dir" || exit`; `curl -fsSL` so HTTP errors fail. How it starts
The opening of the file, as written. The whole thing — 121 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Write safe, portable shell
Shell is where quiet failures live: an unset variable expands to nothing, a failed command inside a condition is ignored, a filename with a space becomes two arguments, and two runs share one temp file. For the builder and the reviewer of a shell diff; the repo's existing scripts win over it.
Procedure
- Discover the repo's conventions first. Call
search_loreand read the existing scripts: the shebang (#!/usr/bin/env bashvs POSIX#!/bin/sh), the strict-mode line, sourced helper libraries, logging helpers,.shellcheckrc,.editorconfig(shfmt reads indentation from it), the test harness (bats, or the repo'stest/*.test.shpattern) and which OSes CI runs. macOS ships bash 3.2: no associative arrays,mapfile,${var,,}, and"${arr[@]}"on an empty array fails underset -ubefore bash 4.4. Match the repo; do not introduce a second style. - Decide it should be shell at all. Google's guide: past ~100 lines, or with non-trivial data structures, write it in the repo's main language instead.
- Write the change with the idioms below, then walk the failure section for every pipeline, condition, temp file and background job.
- Test each acceptance criterion's own behaviour. Run the script against a fixture directory and assert exit code, output and side effects, including one failure case (missing input, failing dependency) that must exit non-zero. If the script can run concurrently (CI jobs, cron, hooks), start two copies at once and assert neither corrupts the other's output.
- Verify, then stop. Done when:
bash -npasses,shellcheck -xis clean at the repo's severity (each disable has a code and reason), shfmt shows no diff if the repo uses it, the tests pass, and every AC has a test. Record the output with therecord-evidenceskill; the runner submits the work.
Commands
- Syntax:
bash -n script.sh(sh -nfor POSIX scripts). - Lint:
shellcheck -x script.sh(add-S warningor the repo's severity;-s shfor POSIX). - Format:
shfmt -d .when the repo uses shfmt. - Tests:
bats test/or the repo'sbash runner/test/x.test.shpattern. - In your own Bash tool calls (not the script), the safety hook blocks
$(…)or backticks combined with a read tool (grep,cat,sort,head,cp…) and anyrm -rf: put such logic inside the script or its test file and run that.
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.
- 16d ago Changed · +53 lines · +31 tokens per session scan A → C ab5232d752b3
- 19d ago First seen · 68 lines · 90 tokens per session scan A 349374d43ba4
shell-scripting is a skill published in the GitHub repository tmj-90/gaffer (2 stars, last pushed 17d ago), licensed Apache-2.0. It adds 121 tokens to every session and 2,160 once invoked, about $0.0005 per session on Opus 5.5. A static security scan graded it C with 2 findings (recursive force delete, makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-28.
Other skills, from other repositories
agent-github-modes
Agent skill for github-modes - invoke with $agent-github-modes.
release-engineering
Plan and verify software releases with versioning, changelogs, release branches, feature flags, canaries, migration gates, rollback, deployment checks, and release readiness. Use when preparing a release, shipping a risky PR, coordinating app/backend/database rollout, recovering from a bad deploy, or defining release…
land-and-deploy
Merge PR, wait for CI, verify deploy, run canary. The complete landing pipeline.
ci-cd-pipeline-authoring
Use when a repository needs CI/CD - author GitHub Actions workflows so TaskTrooper's pipeline auto-detects your validate/build/test jobs and stage/preprod/prod deploys, and so a dispatch delivery profile can dispatch the production deploy.
pipeline-digest
Daily release-pipeline digest with a change gate — reports which plugins are pending release, whether main's CI is green, and which branches went stale, and notifies the operator only when that state actually moved since the last run. Use when the operator asks "what moved in the pipeline", "anything to ship"…
ci-cd-ops
CI/CD pipeline patterns with GitHub Actions, release automation, and testing strategies. Use for: github actions, workflow, CI, CD, pipeline, deploy, release, semantic release, changesets, goreleaser, matrix, cache, secrets, environment, artifact, reusable workflow, composite action.