AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified Apache-2.0 Self-run

To Fuzz

skill-officialunofficial-skills-to-fuzz · by officialunofficial

Distill a fuzzing plan out of the current conversation and codebase — the targets worth fuzzing, each with its entry point, input model, and failure oracle — and write it to an in-repo doc. Use when the user wants to fuzz-test something, harden a parser or decoder against untrusted input, find crashes/panics/UB, turn invariants into fuzz targets, or plan a fuzzing campaign.

No reviews yet
0 installs
22 views
0.0% view→install

Install

$ agentstack add skill-officialunofficial-skills-to-fuzz

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-officialunofficial-skills-to-fuzz)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
1mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of To Fuzz? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Take the current conversation and codebase understanding and produce a fuzzing plan: the set of targets worth fuzzing, each pinned to a concrete failure oracle. Do NOT interview the user — synthesize what you already know. Then write the plan and, when the harness is obvious, scaffold the target stubs.

A fuzz target is three things: an entry point (the function under test), an input model (how bytes become that function's arguments), and an oracle (the check that decides a run failed). The oracle is the whole game — a fuzzer that only catches segfaults wastes most of its runs. If /to-invariants has already produced docs/INVARIANTS.md, mine it: every enforceable invariant is a ready-made oracle.

Process

1. Map the attack surface

Find the code that turns untrusted or complex input into internal state — that's where fuzzing pays. Sweep for:

  • Parsers / deserializers / decoders — anything named parse, decode, from_bytes, read_*, or that takes &[u8]/string from outside. Highest ROI; fuzz these first.
  • State machines — sequences of operations where the order can violate an invariant (a fuzzer drives random valid-ish op sequences).
  • Encoders paired with decoders — candidates for a round-trip oracle.
  • Arithmetic / indexing / allocation sized by input — overflow, panic, quadratic blowup, OOM.
  • Trust boundaries — any input crossing a network, file, or IPC edge.

2. Choose an oracle per target

Pick the strongest oracle you can compute cheaply. In rough order of value:

  • Differential — run two implementations that must agree (a reference vs the optimized one; the old version vs the new; a spec model vs the code) and assert equal outputs. Catches wrong answers, not just crashes.
  • Round-trip / inversedecode(encode(x)) == x, parse(print(x)) == x. Cheap, total, catches whole classes of corruption.
  • Invariant — assert a property from docs/INVARIANTS.md holds on the output/state. Reuse it directly.
  • Crash / assertion — panics, unwrap, UB, failed assert, memory errors under a sanitizer. The default floor; combine with one of the above rather than relying on it alone.
  • Resource — a wall-clock/allocation ceiling to catch algorithmic-complexity blowups.

A target with only a crash oracle is weak — say so and note the stronger oracle it could have.

3. Define the input model

  • Structured (preferred where the input is typed): derive/implement an Arbitrary-style generator so the fuzzer explores valid-shaped inputs and spends fewer runs on the parser rejecting garbage.
  • Raw bytes: for parsers whose whole job is to survive arbitrary bytes — feed the raw buffer.
  • Seed corpus: list concrete starting inputs — a minimal valid case, a known tricky case, a past regression. Seeds are the single biggest lever on how fast a fuzzer finds bugs.
  • Note a dictionary (format keywords/magic bytes) when the format has them.

4. Pick the harness

Match the stack (see [HARNESSES.md](HARNESSES.md) for scaffolding per tool): cargo-fuzz/libFuzzer or Arbitrary + proptest (Rust), native go test fuzzing (Go), Jazzer (JVM), Atheris (Python), libFuzzer/AFL++ (C/C++), fast-check or jsverify (JS/TS). If the project already fuzzes with one, use it.

5. Write the plan

Write to {{ARGUMENTS}} or docs/FUZZING.md. Use the template. When the harness is unambiguous, also scaffold each target's stub file (entry point + input model wired up, oracle as a TODO or filled if trivial) and say where you put them.

6. Report

List the targets, which oracle each got, and the surface you chose not to fuzz with the reason. Offer to run the campaign or wire it into CI (don't unless asked).

Fuzzing plan

> Targets worth fuzzing, each with an entry point, an input model, and an oracle. > Scope:

Targets

FUZZ-1:

  • Oracle:
  • Input model:
  • Seeds:
  • Harness:

Not fuzzed (and why)

Notes

What makes a good fuzz target

  • Strong, total oracle. It can judge every run, and it catches wrong answers, not only crashes. If the only thing that can fail is a segfault, the target is under-powered.
  • Narrow entry point, close to the untrusted input. Fuzz the parser directly, not the whole app around it — shorter path from bytes to bug, faster iterations.
  • Deterministic. Same input → same result. No clocks, threads, or network in the loop, or the fuzzer chases ghosts and can't minimize.
  • Seeded. Ships with a corpus that already reaches interesting states.

FUZZ: decode() on arbitrary bytes; oracle = round-trip encode(decode(x)) re-encodes to the same canonical bytes, AND no panic. Narrow entry point, total oracle that catches corruption (not just crashes), raw-byte input model — ideal.

FUZZ: run the whole request handler on random bytes; oracle = "doesn't crash". Entry point too wide (most runs die in the HTTP layer before reaching logic), oracle too weak (silent wrong answers pass). Narrow to the body parser; add a differential or invariant oracle.

Task: distill the fuzzing plan from the current context and write it to the doc. {{ARGUMENTS}}

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.