agentic-actions-audito…
Audit GitHub Actions that run AI agents for prompt injection, unsafe interpolation, sandbox gaps, and permissive actor rules. Use…
Identify error-prone APIs, dangerous configuration, and footgun designs that enable security mistakes. Use for API ergonomics, misuse resistance, secure defaults, or pit-of-success reviews; use code-review for general defects.
$ npx -y skills add waybarrios/opencode-power-pack --skill sharp-edges --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/sharp-edgesContext preview
The summary Claude sees to decide when to auto-load this skill.
Identify error-prone APIs, dangerous configuration, and footgun designs that enable security mistakes. Use for API ergonomics, misuse resistance, secure defaults, or pit-of-success reviews; use code-review for general defects.
name: sharp-edges description: "Identify error-prone APIs, dangerous configuration, and footgun designs that enable security mistakes. Use for API ergonomics, misuse resistance, secure defaults, or pit-of-success reviews; use code-review for general defects." license: MIT (modified; see UPSTREAMS.json)
Evaluates whether APIs, configurations, and interfaces are resistant to developer misuse. Identifies designs where the "easy path" leads to insecurity.
**The pit of success**: Secure usage should be the path of least resistance. If developers must understand cryptography, read documentation carefully, or remember special rules to avoid vulnerabilities, the API has failed.
| Rationalization | Why It's Wrong | Required Action | |-----------------|----------------|-----------------| | "It's documented" | Developers don't read docs under deadline pressure | Make the secure choice the default or only option | | "Advanced users need flexibility" | Flexibility creates footguns; most "advanced" usage is copy-paste | Provide safe high-level APIs; hide primitives | | "It's the developer's responsibility" | Blame-shifting; you designed the footgun | Remove the footgun or make it impossible to misuse | | "Nobody would actually do that" | Developers do everything imaginable under pressure | Assume maximum developer confusion | | "It's just a configuration option" | Config is code; wrong configs ship to production | Validate configs; reject dangerous combinations | | "We need backwards compatibility" | Insecure defaults can't be grandfather-claused | Deprecate loudly; force migration |
APIs that let developers choose algorithms invite choosing wrong ones.
**The JWT Pattern** (canonical example):
**Detection patterns:**
**Example - PHP password_hash allowing weak algorithms:**
// DANGEROUS: allows crc32, md5, sha1 password_hash($password, PASSWORD_DEFAULT); // Good - no choice hash($algorithm, $password); // BAD: accepts "crc32"
Defaults that are insecure, or zero/empty values that disable security.
**The OTP Lifetime Pattern:**
# What happens when lifetime=0?
def verify_otp(code, lifetime=300): # 300 seconds default
if lifetime == 0:
return True # OOPS: 0 means "accept all"?
# Or does it mean "expired immediately"?**Detection patterns:**
**Questions to ask:**
APIs that expose raw bytes instead of meaningful types invite type confusion.
**The Libsodium vs. Halite Pattern:**
// Libsodium (primitives): bytes are bytes sodium_crypto_box($message, $nonce, $keypair); // Easy to: swap nonce/keypair, reuse nonces, use wrong key type // Halite (semantic): types enforce correct usage Crypto::seal($message, new EncryptionPublicKey($key)); // Wrong key type = type error, not silent failure
**Detection patterns:**
**The comparison footgun:**
// Timing-safe comparison looks identical to unsafe
if hmac == expected { } // BAD: timing attack
if hmac.Equal(mac, expected) { } // Good: constant-time
// Same types, different security propertiesOne wrong setting creates catastrophic failure, with no warning.
**Detection patterns:**
**Examples:**
# One typo = disaster verify_ssl: fasle # Typo silently accepted as truthy? # Magic values session_timeout: -1 # Does this mean "never expire"? # Dangerous combinations accepted silently auth_required: true bypass_auth_for_health_checks: true health_check_path: "/" # Oops
// Sensible default doesn't protect against bad callers
public function __construct(
public string $hashAlgo = 'sha256', // Good default...
public int $otpLifetime = 120, // ...but accepts md5, 0, etc.
) {}See [config-patterns.md](references/config-patterns.md) for detailed patterns.
Errors that don't surface, or success that masks failure.
**Detection patterns:**
54 rigorous skills for Codex, OpenCode, and Pi: code review, security audit, feature development, frontend design, MCP tools, Hugging Face ML/training, and more.
Audit GitHub Actions that run AI agents for prompt injection, unsafe interpolation, sandbox gaps, and permissive actor rules. Use…
Audit and improve project-rules files (AGENTS.md, CLAUDE.md, .agents/instructions, local overrides) so the agent keeps accurate…
Capture learnings from the current session into the project-rules file (AGENTS.md, CLAUDE.md, or local override) so future…
Operational rubric that turns "don't make AI slop" into observable properties, severity levels, evidence requirements, and repair…
Design a feature architecture by analyzing existing codebase patterns and conventions, then provide a comprehensive…
Deeply analyze an existing codebase feature by tracing execution paths, mapping architecture layers, understanding patterns and…