shell-development
Skill4 starsChanged 3 months agoApache-2.0View on GitHub
Safe, portable, low-noise Bash/sh automation. Company-common per governance/engineering/agent-skill-architecture.md (HORO-969) §1 — it owns shell scripting technique and the process/filesystem safety non-negotiables; it does not own any other language's build/test tooling. Auto-used, no manifest.yaml — deliberately, matching the five original company-process skills (governance-doctor, jira-delivery, public-release-reconcile, release-assurance, repo-bootstrap). agents/common/project_skills.py's resolve_applicable_skills() treats a skill with no manifest as always applicable, which is correct here: every repo has shell scripts somewhere (CI glue, dev scripts, hooks), so there is no single stack-evidence file that…
- Reads credentials
- Deletes or force-pushes
In this repository21 other files it gives its agents.
- .claude/CLAUDE.mdCLAUDE.md
- adr-governanceSkill
- credential-operationsSkill
- documentation-experienceSkill
- engineering-loopSkill
- governance-doctorSkill
- homebrew-tap-mergeSkill
- jira-deliverySkill
- product-validationSkill
- public-release-reconcileSkill
- release-assuranceSkill
- release-docs-syncSkill
- release-evidence-finalizeSkill
- release-qa-gateSkill
- release-security-gateSkill
- release-tag-cutSkill
- release-validate-channelsSkill
- repo-bootstrapSkill
- repo-scaffoldSkill
- rust-developmentSkill
- terraform-developmentSkill
The file
We split this skill into the rules it gives an agent
7 rules. About 0 are common, 0 are distinctive, and 7 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Very specific: line 41
Use engineering-loop's Explore → Narrow → Validate → Escalate → Full Gate loop for iterating on a script.
- Very specific: line 55
Never: use raw env, printenv, set (no args), export -p, or cat .env* for credential discovery — these dump every variable in scope, secret …
- Very specific: line 58
Never: run set -x (or bash -x) around a command that constructs or passes a credential — xtrace echoes literal argv, including secret …
- Very specific: line 61
Never: put a secret value in argv or debug output when a safer channel (stdin, a file descriptor, an env var passed by reference) is …
- Very specific: line 64
Never: use pkill <generic-name> or killall <generic-name> — identify the exact PID and confirm its owning process/worktree/session before …
- Very specific: line 78
Before deleting, killing, or reading credentials, check references/process-and-filesystem-safety.md's prohibited-pattern list and its "what …
- Very specific: line 81
Run ShellCheck/shfmt (see references/safe-shell-patterns.md) as the Narrow-stage check before considering a script done.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
<!-- horonom:generated --><!-- Source: horonomy/.github agents/skills/shell-development/SKILL.md. Do not hand-edit — rerun `python3 agents/common/project_skills.py`. -->SKILL.md — shell-development
Purpose
Safe, portable, low-noise Bash/sh automation. Company-common per
governance/engineering/agent-skill-architecture.md (HORO-969) §1 — it
owns shell scripting technique and the process/filesystem safety
non-negotiables; it does not own any other language's build/test tooling.
Type
Auto-used, no manifest.yaml — deliberately, matching the five original
company-process skills (governance-doctor, jira-delivery,
public-release-reconcile, release-assurance, repo-bootstrap).
agents/common/project_skills.py's resolve_applicable_skills() treats a
skill with no manifest as always applicable, which is correct here: every
repo has shell scripts somewhere (CI glue, dev scripts, hooks), so there is
no single stack-evidence file that could gate this the way Cargo.toml
gates rust-development.
When to use
Writing, editing, or debugging any Bash or POSIX sh script or inline
shell snippet — CI steps, dev/build scripts, git hooks, wrapper commands
around a noisy tool.
When NOT to use
- As a substitute for a language skill's own build/test commands invoked
from a shell script — the script glue is this skill's concern, the
underlying
cargo/pytest/etc. invocation is the relevant*-developmentskill's. - For non-shell scripting languages (Python, Node) even when they replace a shell script — use the matching language skill instead.
Composes with engineering-loop
Use engineering-loop's Explore → Narrow → Validate → Escalate → Full Gate
loop for iterating on a script. references/safe-shell-patterns.md's
guidance on avoiding blind tail -N truncation is a shell-specific
instance of engineering-loop's L0–L3 diagnostic contract
(agents/skills/engineering-loop/references/diagnostic-contract.md rule
4): a wrapper that truncates a failing pipeline's output can hide the
actual error the same way a naive test summarizer can.
Non-negotiables (see references/process-and-filesystem-safety.md)
These mirror governance/engineering/security.md's non-waivable
invariants and must never be relaxed by a script, wrapper, or one-off
command:
- Never use raw
env,printenv,set(no args),export -p, orcat .env*for credential discovery — these dump every variable in scope, secret or not, straight into command output. - Never run
set -x(orbash -x) around a command that constructs or passes a credential — xtrace echoes literal argv, including secret values, to stderr. - Never put a secret value in argv or debug output when a safer
channel (stdin, a file descriptor, an env var passed by reference) is
available — argv is visible via
psand shell history. - Never use
pkill <generic-name>orkillall <generic-name>— identify the exact PID and confirm its owning process/worktree/session before terminating anything. - Never recursively delete an ambiguous or unowned directory — confirm
the target's contents match what the script expects before
rm -rf.
Routing decision
- Detect target interpreter (Bash-only features vs. POSIX
sh) — seereferences/safe-shell-patterns.md's shell-detection section — before writing anything, since the two have materially different safe-quoting and array semantics. - Apply quoting/array/pipeline-exit-status patterns from
references/safe-shell-patterns.md. - Before deleting, killing, or reading credentials, check
references/process-and-filesystem-safety.md's prohibited-pattern list and its "what to do instead" for the safe replacement. - Run ShellCheck/shfmt (see
references/safe-shell-patterns.md) as the Narrow-stage check before considering a script done.
Worked example
examples/safe-wrapper-with-preserved-exit-code.md— wrapping a noisy command for compact output without losing$?through a pipeline.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

