llmfuzz CLI
Project description
llmfuzz v0.1.0
llmfuzz is a command-driven fuzz / eval / triage tool for LLM-agent-style targets (or any target you can invoke as a command). It runs one case or a small campaign, writes deterministic, inspectable artifacts under a work root, and supports deterministic evaluation + campaign triage. v0.1 is intentionally minimal: OSS runs use target.command (argv, no shell) and focus on a stable on-disk contract.
Governance
- This project is public but centrally governed.
- PRs may be reviewed selectively; there is no obligation to merge.
- Safety:
llmfuzzexecutes user-configured commands and is not a sandbox (run targets in a container/VM).
Install (editable)
- Python >= 3.11
Editable install (recommended for development):
pip install -e .
Standard install:
pip install .
60-second Quickstart
This repo ships runnable example specs in docs/phase3/examples/.
The default hello quickstart target is self-contained (pure Python) and does not require any external Accounting/LAB runtime.
# From the repo root
SPEC="docs/phase3/examples/fuzzspec_quickstart_hello_command.json"
llmfuzz validate --spec "$SPEC"
# run-one prints two lines:
# 1) the run directory path
# 2) the failure_record.json path
RUN_DIR="$(llmfuzz run-one --spec "$SPEC" | head -n 1)"
RUN_ID="$(basename "$RUN_DIR")"
WORK_ROOT_BASE="$(dirname "$(dirname "$RUN_DIR")")"
# Note: runs/<run_id>/llmfuzz/eval.json is written by eval-run (not by run-one).
# Evaluate the run (writes runs/<run_id>/llmfuzz/eval.json)
llmfuzz eval-run --work-root-base "$WORK_ROOT_BASE" --run-id "$RUN_ID"
ls "$RUN_DIR/llmfuzz/eval.json"
Next step (campaign + triage):
# Execute a small campaign (prints campaign_id then campaign_root)
CAMPAIGN_ID="$(llmfuzz campaign --spec "$SPEC" --cases 3 --exec | head -n 1)"
# triage-campaign writes artifacts under the campaign root printed by `llmfuzz campaign`.
# See docs/phase3/06_campaign_runner_v1.md for layout details.
llmfuzz triage-campaign --work-root-base "$WORK_ROOT_BASE" --campaign-id "$CAMPAIGN_ID"
Artifact layout (runs/<run_id>/...)
Runs are written under target.work_root_base using a fixed layout in v0.1:
<work_root_base>/runs/<run_id>/
context.json
exec/
exec.json
stdout.txt
stderr.txt
input/
original.seed.pdf
original.pdf
out/
# target-generated outputs (commonly *.json)
eval/
failure_record.json
llmfuzz/
fuzzspec.json
seed.json
mutations.jsonl
exec.json
runner.stdout.txt
runner.stderr.txt
eval.json
Notes:
exec/exec.json,exec/stdout.txt,exec/stderr.txtare the canonical execution evidence.llmfuzz/eval.jsonis the canonical evaluation artifact (written byllmfuzz eval-run; it appears only aftereval-run).eval/failure_record.jsonis written by the runner;eval-run --patch-failure-recordcan append eval fields to it.
SECURITY NOTE (important)
llmfuzz executes the commands you put in the spec (target.command) and writes artifacts to the configured work root. Run targets in a sandbox/container/VM, avoid running against untrusted binaries on machines that have secrets, and treat produced artifacts (stdout/stderr, inputs/outputs, JSON reports) as potentially sensitive.
Reserved fields + --strict
v0.1 accepts a small set of spec fields that are reserved / not implemented at runtime. When these fields are set to non-default values, llmfuzz validate emits warnings; llmfuzz validate --strict fails (exit code 2) instead.
Reserved fields checked by the v0.1 validator:
execution.work_root_mode(default:per_run)outputs.input_dir(default:runs/<run_id>/input)outputs.out_dir(default:runs/<run_id>/out)outputs.eval_dir(default:runs/<run_id>/eval)outputs.llmfuzz_dir(default:runs/<run_id>/llmfuzz)
In v0.1, customization is done via target.work_root_base; the runtime ignores non-default values for the reserved fields above.
Links / Further reading
- Evidence Pack v0.1 (Accounting harness replay proof): docs/llmfuzz/evidence/v0_1/ (tag: llmfuzz-evidence-v0.1)
docs/phase3/06_fuzzspec_v1.mddocs/phase3/05_orchestrator_v1.mddocs/phase3/07_evaluator_v1.mddocs/phase3/08_triage_dedup_v1.mddocs/phase3/06_campaign_runner_v1.md
Release
git tag -a v0.1.0 -m "llmfuzz v0.1.0"
git push --tags
# Optional sanity check:
python -m pip install -U build
python -m build
python -m venv .venv-wheel
. .venv-wheel/bin/activate
python -m pip install dist/*.whl
llmfuzz --help
python -m llmfuzz --help
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file plutonus_llmfuzz-0.1.0.tar.gz.
File metadata
- Download URL: plutonus_llmfuzz-0.1.0.tar.gz
- Upload date:
- Size: 38.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
75d4e12b884405a114f6f079330522954e11b1b4c27ef8c363812328928aeebd
|
|
| MD5 |
cc6466fae739f996e3c33e3db9a55c48
|
|
| BLAKE2b-256 |
9d86ebdcd6a4b910022484f56bbff8573df7f3a4d9211513f7fb1d8c2f155277
|
File details
Details for the file plutonus_llmfuzz-0.1.0-py3-none-any.whl.
File metadata
- Download URL: plutonus_llmfuzz-0.1.0-py3-none-any.whl
- Upload date:
- Size: 39.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ba8fa81252ff3bff43cfe50e01142251f766df85de474c80ddd4a21c1e4af9f8
|
|
| MD5 |
620640df7419c65da2ce7a77a79a55df
|
|
| BLAKE2b-256 |
c27584091d699d8e50bfca3afa99ec1ea4dc58933786f7114a906e47732a3c93
|