Skip to content
Back to skills

US V0.3 Council Feedback

ASecurity

**Council confidence:** [Consensus] — all 5 councillors named security as the largest behavioral gap in the bundle.

  • 24 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added May 26, 2026
developmentpythonrustgojavaphpshellsqldebuggingsecurity

Security analysis

A100/100

Pro scans all 15 files and shows the line behind each finding

Scanned May 27, 2026

npx -y skills add oribarilan/97 --skill US-v0.3-council-feedback --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of US V0.3 Council Feedback?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for US V0.3 Council Feedback
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/oribarilan-us-v0-3-council-feedback/badge)](https://www.skillsdirectory.com/skills/oribarilan-us-v0-3-council-feedback)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
# add-security-traps-skill

**Council confidence:** [Consensus] — all 5 councillors named security
as the largest behavioral gap in the bundle.

## Context

The current 9 themed skills do not cover security as a discipline.
Agents routinely:

- Concatenate user input into SQL strings
- Spawn shells with `shell=True` / unescaped args
- Write user input straight to file paths (path traversal)
- Log secrets, tokens, PII, and bearer tokens
- Use unsafe deserialization (`pickle`, `yaml.load` without `SafeLoader`,
  Java/PHP unserialize)
- Generate eval-style code (`eval`, `exec`, `setTimeout` with strings)
- Pass user-controlled URLs to server-side fetchers (SSRF)
- Skip input validation on data crossing trust boundaries

The book *97 Things* predates much of modern security practice and has
limited principle-shaped content here. **This skill is the one acceptable
"book-inspired plus agent-critical extension" in v0.3.** Frame it as
extending the book's tradition (#26 "Don't ignore that error" generalizes
to "don't ignore the trust boundary") with material the book didn't
cover at the depth modern agent work needs.

**Value delivered:** closes the single largest production-risk gap in
the bundle; mirrors the strongest existing skill's shape.

## Related Files (to create)

- `skills/security-and-trust-boundaries/SKILL.md` — name is fixed; do
  not rename during the task
- `skills/security-and-trust-boundaries/principles.md`
- `skills/using-97/SKILL.md` — add trigger row
- `scripts/lint-skills.mjs` — add `SKILL_RULES` entry
- `README.md` — add row to "What's inside" table
- `CONTENT-LICENSE.md` — paragraph documenting this skill's mixed
  content provenance (mostly original commentary; #26/#29 distillations
  under CC-BY-3.0)

## Dependencies

- Should land **after** `prune-bootstrap-urgency.md` so the new trigger
  row is added to the slimmed-down bootstrap rather than the bloated one.
- **Lint cap target: `maxLines: 250`**, same as other content skills
  (`decide-lint-budget-policy` decision). The 280–320 line projection
  in earlier drafts was padded; the gold-standard
  `error-and-correctness-traps` covers ~7 trap domains in ~130 lines,
  so 5 trap domains at the same density should fit in ~150–200 lines.
  Aim for that density. If after a real density pass the skill
  genuinely cannot fit in 250, bump *only* this skill's cap (to 280
  or 300) and document the reason in the CHANGELOG — do not blanket-
  loosen.

## Acceptance Criteria

- [x] New skill directory exists with `SKILL.md` and `principles.md`.
- [x] `SKILL.md` follows the **`error-and-correctness-traps` template
      exactly**: Overview → When to invoke → Non-triggers → Precedence →
      Trap checks by domain (numbered) → Red Flags table → What "done"
      looks like → Principles in this skill table.
- [x] At minimum the following trap domains are covered, each with at
      least one concrete example/code snippet:
  - [x] **Injection:** SQL, shell, command, LDAP, NoSQL — with the
        canonical "use parameterized queries / `shell=False`" fix
  - [x] **Untrusted input boundaries:** path traversal, SSRF, XXE,
        deserialization (`pickle`, `yaml.load`)
  - [x] **Secrets in transit/storage:** logging tokens, error messages
        that leak credentials, secrets in stack traces, secrets in
        version control
  - [x] **Crypto misuse:** plain MD5/SHA1 for passwords, hand-rolled
        crypto, weak random, hardcoded IVs
  - [x] **Authentication/authorization:** missing authz checks on new
        endpoints, IDOR, privilege escalation via user-controlled IDs
- [x] Trigger phrasing in `using-97/SKILL.md` is concrete and decidable,
      not "when writing security-sensitive code." Example acceptable
      phrasing: "Parsing user input, writing/executing SQL or shell
      commands, handling secrets/tokens/credentials, hashing passwords,
      adding/changing an auth check, deserializing untrusted data, or
      constructing file paths from input."
- [x] Non-triggers list includes obvious exclusions (renaming a local
      variable in a function that happens to live in `auth/`).
- [x] Precedence section: notes overlap with `error-and-correctness-traps`
      (input validation as error handling), and cites
      `superpowers/systematic-debugging` for "is this a security
      vulnerability" forensics.
- [x] Voice passes the humanizer rules (no AI tells, imperative,
      concrete).
- [x] `scripts/lint-skills.mjs` `SKILL_RULES` entry added with:
  - `maxLines: 250` (same as other content skills; aim for
    `error-and-correctness-traps` density first; bump only this
    skill's cap with a CHANGELOG reason if 250 truly cannot hold
    after a real density pass)
  - `sections: ['Overview', 'When to invoke', 'Red Flags']`
  - `principles: [26, 29]` — #26 (Goodliffe, "Don't ignore that
    error") and #29 (Griffiths, "Don't rely on magic"), the two book
    principles that generalize cleanly to trust-boundary discipline.
    The rest of the skill content is original commentary.
- [x] `CONTENT-LICENSE.md` updated **unconditionally** with a
      paragraph documenting that this skill is predominantly original
      commentary (MIT plugin code license applies to original parts;
      #26/#29 distillations remain attributed under CC-BY-3.0 with
      author credit in `principles.md`). The book has thin direct
      coverage of modern security practice — this is the project's
      one acknowledged "97-inspired plus extension" skill.
- [x] `README.md` "What's inside" table updated; total skill count
      changes from 10 → 11.
- [x] `CHANGELOG.md` `### Added` entry written.
- [x] `npm test` passes.

## Verification

**Automated:**
- `npm test` validates structure and presence
- Smoke test confirms the bundle still loads

**Ad-hoc:**
- Manual read-through: every trap has a concrete example, not just a
  category name. Compare line-by-line to `error-and-correctness-traps`
  density.
- Spot-check in one harness: ask the agent to "write a Python function
  that runs a shell command from user input." Verify it triggers this
  skill and produces `subprocess.run([...], shell=False)` with proper
  argument list, not `os.system(f"cmd {user_input}")`.

## Notes

- **Name is fixed: `security-and-trust-boundaries`.** Decided at story
  level to remove naming-bikeshed risk during implementation. The name
  describes the skill's actual scope (trust-boundary discipline) more
  precisely than `security-traps` would.
- The `principles.md` should distinguish clearly between content
  derived from CC-BY-3.0 originals (cite under that license, with
  author credit) vs. original commentary written for this plugin (MIT
  plugin code license applies). The unconditional `CONTENT-LICENSE.md`
  update covers the policy side.
- **Do not** pad with 12 trap domains. 5 dense, well-exampled domains
  beats 12 thin ones. The goal is the `error-and-correctness-traps`
  template, not a security textbook.
- **Trigger overlap with `error-and-correctness-traps`** (input
  validation as error handling): the Precedence section must spell
  out how an agent picks. Suggested rule: trust-boundary crossings
  (untrusted input, secrets, auth, deserialization, code execution
  surfaces) → this skill; non-security correctness traps (errors,
  floats, concurrency, IPC, perf, singletons) → the existing
  trap skill.

Files in this skill

  • add-security-traps-skill.md7.2 KB
  • decide-agents-claude-md-strategy.md8.5 KB
  • decide-feedback-loop-approach.md7.1 KB
  • decide-lint-budget-policy.md6.7 KB
  • drop-once-per-file-rule.md3.3 KB
  • fix-smoke-test-bootstrap-injection.md3.7 KB
  • freeze-harness-count-policy.md3.8 KB
  • main.md7.7 KB
  • node-rewrite-session-start.md4.8 KB
  • patch-trigger-coverage-gaps.md7.2 KB
  • prune-bootstrap-urgency.md4.3 KB
  • prune-done-checkboxes.md6.1 KB
  • prune-working-with-users-and-team.md4.4 KB
  • tighten-writing-clean-code.md5.4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…