Ctf automation
CLEAVE: skills-based CTF agents for mechanics-first challenge triage and exploit orchestration.
npx -y skills add MateoBogo/CLEAVE --skill ctf-automationAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Orchestrator for CTF triage: fingerprint binaries, detect manifests (package.json/Cargo/go.mod/foundry.toml), find crypto/forensics/AI artefacts, emit JSON+markdown dispatch pointers into ctf-*/SKILL.md PRI. Bundles pwnsetup/cryptosetup/websetup/foreniq/aiprobe scripts. CTFd client (ctfd.py) for sync/triage/submit workflow.
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
5.5 KB, as published. Nobody here has run it
CTF Automation — one-shot triage and category setup
All scripts live in this directory. Every script emits JSON to stdout (when --json is given) so you can pipe into jq or the next stage of a chain.
Entry point: triage
bash /home/ubuntu/.claude/skills/ctf-automation/triage.sh <challenge-dir>
Outputs:
<challenge-dir>/.ctf-triage.json— machine-readable fingerprint<challenge-dir>/.ctf-triage.md— markdown report with pointers intoctf-*/SKILL.md#pattern-recognition-index
After triage, pick the indicated category script:
| If triage flags | Run next |
|---|---|
elf_dynamic=true | pwnsetup.sh <binary> |
crypto_artefacts>0 | python3 cryptosetup.py <challenge-dir> |
web_urls>0 | websetup.sh <url> |
forensics_artefacts | foreniq.sh <file> |
ai_endpoint | python3 aiprobe.py <url> |
Tool inventory philosophy
Each script performs a command -v check for every external tool it uses. Missing tools do not crash — they print the exact apt install … / go install … / pip install … command for the missing binary and continue on what remains available.
Scripts in this directory
triage.sh— master triage; emits JSON + markdown pointing to Pattern Recognition Index sectionspwnsetup.sh—checksec→ detect libc →libc.riplookup →patchelf→ generateexploit.pypwntools template pre-wired for local+remotecryptosetup.py— parses challenge files; detects RSA (n,e,c), ECDSA sigs (r,s), lattice shapes, post-quantum params (Kyber/Dilithium/Falcon); generates a Sage script stub with correct importswebsetup.sh— chained recon:subfinder→httpx→katana→ffuf→nuclei, merges to single JSONforeniq.sh— RF/audio/logic-analyzer pipeline: GQRX UDP / file →sox22050Hz mono →multimon-ng -a POCSAG512/1200/2400 -f alpha;.srfiles →pulseviewCLI exportaiprobe.py— LLM endpoint auto-attack: argument injection on tool-allow-lists, DNS rebind, language-guardrail-gap, metadata exfil, reverse-order prompt, literal-policy flip. Emits finding JSON per attack.ctfd.py— CTFd platform client: sync challenges + download files, run triage on workspace, submit flags, show progress, pick next challenge.
CTFd workflow (ctfd.py)
Full competition workflow against any CTFd instance:
SKILLS=~/.claude/skills/ctf-automation
# 1. init workspace (once per CTF)
python3 $SKILLS/ctfd.py init \
--url https://ctf.example.com \
--token <your-api-token> \
--out ./workspace
# 2. download all challenges + files
python3 $SKILLS/ctfd.py sync --dir ./workspace
# 3. fingerprint everything
python3 $SKILLS/ctfd.py triage --dir ./workspace
# 4. pick next target (lowest points first)
python3 $SKILLS/ctfd.py next --dir ./workspace
# → prints: Dir, connection info, triage hint
# 5. work the challenge … find flag …
# 6. submit
python3 $SKILLS/ctfd.py submit "CTF{...}" --chal challenge-name --dir ./workspace
# 7. loop back to step 4
python3 $SKILLS/ctfd.py status --dir ./workspace
Workspace layout written by sync:
workspace/
.ctfd.json ← config + challenge index
pwn/
heap-overflow/
vuln libc.so.6 Dockerfile
.meta.json ← id, pts, description, connection_info
.triage.json ← from triage step
.solved ← written on correct submit
web/
login-bypass/
...
next sorts unsolved challenges by points (easiest first); filter by category with --category pwn.
Pattern Recognition dispatch
triage.sh reads the file list and dependency manifests, then writes pointers like:
ctf-pwn/SKILL.md#pattern-recognition-index → row "MAP_FIXED exposed"
ctf-crypto/SKILL.md#pattern-recognition-index → row "post-quantum KEM"
ctf-misc/ai-ml.md → section "Argument injection on allow-listed tools"
The calling agent (/solve-challenge) reads the markdown report and dispatches to the skill(s) indicated. This replaces guessing the category from the user prompt — we dispatch on what is actually in the challenge folder.
Chain example
DIR=/tmp/ch-42
bash triage.sh "$DIR" --json | jq '.hints[]'
# If hints mention "libc":
bash pwnsetup.sh "$DIR/vuln"
# If hints mention "ai_endpoint":
python3 aiprobe.py http://chal.example/api --json > findings.json
Exit codes
0— triage ran, report written2— directory does not exist / unreadable3— no recognisable artefacts (empty, or only text README)
Never exit 1; that's reserved for unexpected script errors, which indicate a bug to fix.
Gives 0 of the 12 instructions most automation workflows skills give
Counted across 745 of the 1,008 authors here whose files we hold, read 2026-08-06
- write conventional commit messagesin 36 of 745, across 35 files
- delete branches after mergein 30 of 745, across 21 files
- make atomic commitsin 25 of 745, across 15 files
- write minimal code to pass testsin 22 of 745, across 10 files
- run tests before committingin 21 of 745, across 13 files
- re-snapshot after navigation or DOM changesin 21 of 745, across 13 files
- use try-catch for error handlingin 20 of 745, across 6 files
- write tests before implementationin 20 of 745, across 8 files
- configure branch protection rulesin 19 of 745, across 5 files
- explain the why in commit messagesin 19 of 745, across 9 files
- refactor code while tests remain greenin 19 of 745, across 6 files
- Interact with elements using refsin 19 of 745, across 11 files
Said here and by no other author read
- run the triage script on the challenge directory
- read the generated markdown triage report
- dispatch to the skill indicated by the report
- run the indicated category setup script after triage
- pass the json flag to scripts to emit json
- install missing tools using the printed command
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once.