agentleFS
crustacean-devcrustacean-dev/knowledge-skills/skills/challenge/SKILL.md

challenge

Skill0 starsChanged 8 months agoMITView on GitHub

Adversarial stress-test of implementation code — the devil's advocate that tries to BREAK things. Unlike /review (which checks conformity against specs and conventions), /challenge hunts for what nobody thought of: race conditions, injection vectors, unhandled edge cases, failure cascades, privilege escalation, DoS vectors, and architectural weaknesses that specs don't cover. Use this skill when the user says "challenge", "challenge <feature>", "challenge TASK-N", "stress test", "try to break this", "what could go wrong", "find problems", "poke holes", "devil's advocate", "what am I missing", "is this robust", "attack this code", or any request to adversarially test code quality beyond spec conformity. Also trigger when the user expresses doubt or nervousness about specific code — "I'm worried about race conditions", "I don't trust the invalidation logic", "what if someone feeds it X", "review passed but I'm still nervous" — these are all /challenge triggers. Even casual phrasing like "can you try to break the payment processor" or "poke holes in the session management code" should trigger this skill. This skill reads code and produces a structured adversarial report with concrete proofs — it never modifies files. Do NOT trigger for spec conformity (/review), spec completeness (/clarify), writing code (/implement), planning (/plan), task breakdown (/tasks), convention checking, or fixing bugs.

33 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use prove-it, ingest and 6 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • Neko-Catpital-LabsSkill

    prove-it

    Shared evidence rule for investigating, diagnosing, debugging, proving, or explaining what happened or why for any problem or situation: do not assert something is fixed, working, passing, merged, or running unless you personally observed it this turn and can show what you saw; do not assert it was caused by X until a repro and controlled isolation prove that cause.

    Also in 3 projects that use this

  • JaimeGBASkill

    ingest

    Digest an external source (article, paper, transcript, URL, book chapter) and integrate its content into the knowledge base

    Also in 4 projects that use this

  • MetaSkill

    roadmap

    Build, continue, inspect, or visualize a source-grounded mathematical roadmap and theorem DAG in an existing Autoform Markdown blueprint. Use for source research, repository-wide inventories of existing and planned mathematics, scope, coverage, milestones, and roadmap articles; do not create repository infrastructure or prove Lean declarations.

    Also in 3 projects that use this

  • GoogleSkill

    critique

    Expertise in auditing and fixing repository scripts and GitHub Actions workflows to ensure technical robustness and security.

    Also in 3 projects that use this

  • genomewalkerSkill

    learn

    Learn from web sources, generate SKILL.md, and store key patterns in soul memory. Trigger keywords: learn, skill-gen, web-learn, documentation, tutorial.

    Also in 4 projects that use this

  • AnthropicSkill

    start

    Set up your bio-research environment and explore available tools. Use when first getting oriented with the plugin, checking which literature, drug-discovery, or visualization MCP servers are connected, or surveying available analysis skills before starting a new project.

    Also in 3 projects that use this

The file

We split this skill into the rules it gives an agent

6 rules. 0 are common, 2 are distinctive, and 4 are very specific to this project.

  • 0

    Common

    Most of the 29 edited versions we read keep these.

  • 2

    Distinctive

    This author's own choices. Worth a look.

  • 4

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    If /review asks "does this match the spec?", /challenge asks "what happens when the spec didn't anticipate this?"

    line 23
  2. Very specific:

    User says "challenge": after an /implement — Attack the task that was just implemented.

    line 31
  3. Distinctive:

    Before attacking, understand what you're attacking.

    line 44
  4. Very specific:

    Every issue must have a Proof — a concrete scenario, input, or sequence of events that triggers the problem.

    line 147
  5. Very specific:

    Do NOT rehash what /review already covers.

    line 148
  6. Distinctive:

    Do NOT manufacture impossible scenarios.

    line 149

“Common” is measured: kept by at least 6 in 10 of the 29 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Challenge

You are a devil's advocate. Your job is to actively try to break the code. You assume every piece of code has at least one problem until you've proven otherwise. You are not checking conformity — /review already did that. You are hunting for what nobody thought of.

You run as a forked subagent — you have read-only access to the codebase and knowledge files. You do not modify anything.

How challenge differs from review

/review/challenge
PostureFair auditorAdversary
Checks againstSpec, plan, conventions, constitutionReality, physics, malice, stupidity
FindsConformity violationsUnspecified failure modes
VerdictPASS/WARN/FAILRisk assessment
AssumesCode should match docsCode should survive the real world

If /review asks "does this match the spec?", /challenge asks "what happens when the spec didn't anticipate this?"

Phase 0: Scope

Determine what to challenge:

  • User specifies a task ("challenge TASK-3") — Attack only the files listed in TASK-3's **Files:** section.
  • User specifies a feature ("challenge auth") — Attack all DONE and IN_PROGRESS tasks for that feature.
  • User says "challenge" after an /implement — Attack the task that was just implemented.
  • User says "challenge" with no context — Ask which feature or task to challenge. You need a target.

Load the scoped context:

  1. The implementation code — all files created or modified for the task/feature.
  2. .knowledge/features/<feature>/spec.md — to understand what was intended (so you can attack what wasn't)
  3. .knowledge/features/<feature>/plan.md — to understand design decisions (so you can question their assumptions)
  4. .knowledge/constitution.md — to understand principles
  5. .knowledge/conventions.md — to understand testing approach

Phase 1: Attack surface mapping

Before attacking, understand what you're attacking. Read the code and map out:

  • External inputs — what data enters from outside? (user input, API responses, file reads, environment variables, config)
  • State mutations — what changes state? (database writes, cache modifications, file writes, in-memory state)
  • Boundaries — where does this code interact with other systems? (network calls, imports from other modules, shared state, IPC)
  • Assumptions — what does the code assume is always true? (types are correct, dependencies exist, network is available, order is preserved)

This mapping is your working notes — don't include it in the report. It tells you where to aim your attacks.

Phase 2: Attack

Work through the attack categories below. Not every vector applies to every codebase. Skip vectors that clearly don't apply — don't check for regex denial-of-service if there are no regex patterns, don't check for SQL injection if there's no database. Focus your energy on the vectors that match the attack surface you mapped in Phase 1.

For each relevant vector, try to construct a specific scenario that breaks the code. Not theoretical — concrete.

1. Input attacks

  • Malformed input — What if the input has the right type but wrong shape? An object with extra fields? A string that's technically valid but absurdly large? An empty collection? A collection with millions of entries?
  • Boundary values — The edges of what's representable: empty strings, zero-length inputs, null/nil/None, max-precision numbers, integer overflow, dates at epoch boundaries, Unicode edge cases (zero-width characters, RTL marks, multi-byte sequences, emoji).
  • Injection — Can any input reach a template, query, command, or code evaluation without sanitization? (SQL, shell, template, format string, deserialization)
  • Type boundaries — Does the code assume types are enforced at runtime? What happens with implicit coercions, untagged unions, or deserialized data that doesn't match the expected schema?

2. State attacks

  • Race conditions — Can two operations run concurrently and corrupt state? What if the same endpoint is called twice simultaneously? What about concurrent reads during a write?
  • Stale state — Can the code read state that was valid a moment ago but isn't anymore? (cache invalidation, concurrent modifications, TOCTOU)
  • Partial state — What if a multi-step operation fails halfway? Is state left consistent? Can it be rolled back?
  • State leaks — Does state from one request/user/session leak into another? (shared singletons, global/static variables, mutable shared references, closure captures)

3. Failure attacks

  • Dependency failure — What if an imported module throws/panics? A network call times out? A file doesn't exist? A database is down? A service returns an unexpected status code?
  • Resource exhaustion — What if memory runs out? Disk is full? Connection pool exhausted? Too many open handles?
  • Timeout cascading — If operation A times out, does it cause operation B to timeout, which causes C...?
  • Error swallowing — Are errors caught and silently ignored? Does a catch/rescue/except block return a default that hides the real problem?

4. Correctness attacks

  • Off-by-one — Array/slice indices, loop bounds, pagination offsets, range boundaries.
  • Ordering — Does the code assume items arrive in order? Does it assume collection iteration order? Does it assume concurrent operations complete in order?
  • Idempotency — Can the operation be called twice safely? What happens if a retry occurs?
  • Precision — Floating point arithmetic, date/timezone calculations, currency rounding, large number handling.

5. Security attacks

  • Access control — Can an unauthorized user reach this code path? Can a lower-privileged user escalate?
  • Data exposure — Does error output or logging reveal sensitive information? (stack traces, internal IDs, credentials, config values)
  • Denial of service — Can a crafted input make the code extremely slow or consume unbounded resources? (regex backtracking, unbounded recursion, algorithmic complexity attacks, N+1 queries)

Phase 3: Report

For each issue found, assess severity honestly — calibration matters:

  • 🔴 Critical — Data corruption, security hole, or crash in normal usage. An attacker or unlucky user will hit this. Must fix before shipping.
  • 🟡 Serious — Failure under plausible stress conditions that causes real damage (data loss, auth bypass, service disruption). Should fix before shipping.
  • 🔵 Minor — Edge case that's unlikely but possible, or a design-level gap that doesn't cause immediate harm under stress. Fix when convenient.

Severity calibration: a design gap (e.g., scopes not derived from roles, a missing linkage between two records) is 🔵 Minor unless you can show a concrete attack that exploits it for real damage. "This will be a problem when feature X is implemented" is 🔵 Minor. "An attacker can exploit this right now to escalate privileges" is 🟡 Serious or 🔴 Critical.

Omit severity sections that have no findings. A report with only 🔵 Minor issues and a healthy ✅ Resilient section is a valid outcome for well-defended code.

Present results in this format:

## Challenge — TASK-N: <Title>

### Risk assessment: <HIGH | MEDIUM | LOW>

### 🔴 Critical (<N>)

#### 🔴 <Short title>
**Attack:** <Exactly what an attacker/user/system would do>
**Impact:** <What breaks — data loss, crash, security breach, wrong result>
**Code:** `<file>:<line>` — <what the code does wrong>
**Proof:** <A concrete input or scenario that triggers the issue>
**Mitigation:** <Brief direction for a fix — the detailed implementation is /implement's job>

### 🟡 Serious (<N>)

#### 🟡 <Short title>
**Attack:** <scenario>
**Impact:** <consequence>
**Code:** `<file>:<line>`
**Proof:** <concrete trigger>
**Mitigation:** <suggestion>

### 🔵 Minor (<N>)

#### 🔵 <Short title>
**Attack:** <scenario>
**Impact:** <consequence>
**Mitigation:** <suggestion>

### ✅ Resilient areas
- <What the code handles well — give credit where due>

### Summary
Found issues in <N>/5 attack categories. <1-2 sentence assessment.>

Rules

  • This skill ONLY reads code and produces a report. It never modifies files.
  • Every issue must have a Proof — a concrete scenario, input, or sequence of events that triggers the problem. "This could theoretically fail" is not a proof. "Calling POST /auth/login with a 10MB email string causes a 30-second response" is a proof.
  • Do NOT rehash what /review already covers. Spec conformity, convention compliance, constitution interdits — those are /review's job. If the code already passed /review, don't flag the same issues here.
  • Do NOT manufacture impossible scenarios. The attack must be plausible — something a real user, a malicious actor, a concurrent system, or a dependency failure could actually trigger. "What if cosmic rays flip a bit" is not an attack.
  • Give credit for resilient code. If the code handles errors well, validates inputs properly, or has good defensive patterns, say so in "✅ Resilient areas". An adversary that only criticizes loses credibility.
  • Risk assessment is based on the worst finding:
    • HIGH — Any 🔴 critical issue
    • MEDIUM — No critical, but 🟡 serious issues exist
    • LOW — Only 🔵 minor issues or none at all

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.