fleet/ holds runnable environment code: each family is a self-contained orchestrator that brings up vulnerable targets, runs an agent under a defined protocol, scores a mechanical win condition, and snapshots a verified trajectory for the factory loop (../index.md → stream D).
Shared agent protocol: fleet/protocol.md (cyber-factory/agent@1): one task JSON line on stdin, newline-delimited progress/result JSON on stdout, secret/answer/evidence in the final result. Currently spoken by vulhub-farm/runner.py and webapp-asserts/runner.py; adopting it in the other families is the unification TODO below.
| Family | Dir | Environments | Verifier kinds | Protocol | Status |
|---|---|---|---|---|---|
| vulhub-farm | fleet/vulhub-farm/ | 30 curated vulhub envs (SQLi, RCE, SSRF, file-upload/fileread, deserialization, auth bypass) out of 334 enumerated | file_read_canary · command_exec_canary · http_marker · http_callback · db_canary | ✅ protocol.md | 🟡 scaffolded — --list works anywhere; needs sync.py + docker host |
| webapp-asserts | fleet/webapp-asserts/ | DVWA (8 tasks) + OWASP Juice Shop (7 tasks), per-run randomized state | db_row · js_challenges · agent_secret · http_marker | ✅ protocol.md | 🟡 scaffolded — smoke structural pass; docker host pending |
| evm-asserts | fleet/evm-asserts/ | Ethernaut/Damn-Vulnerable-DeFi challenges | on-chain asserts | — | scaffolded (see its README) |
| agentdojo-gym | fleet/agentdojo-gym/ | AgentDojo wrapper + randomized injection suites (pip agentdojo==0.1.35) | utility + ASR (security verifier wiring) | — | scaffolded — live smoke: utility 100%, ASR 100% |
| k8s-goat | fleet/k8s-goat/ | 5 container-escape scenarios on local kind (dashboard, privileged pod, hostPath, RBAC, runtime socket) | env checks + per-run canary post-conditions | — | scaffolded — verifiers selftested; live smoke needs kind+docker |
| pwn-college-dojo | fleet/pwn-college-dojo/ | pwn.college dojo scaffold (pwn/web/crypto/rev/forensics) | dojo verifier | — | scaffolded |
| procedural-generator | fleet/procedural-generator/ | randomized env generator | task verifier | — | scaffolded |
| purple-loop | fleet/purple-loop/ | red-trains-blue Sigma hunt loop | detection asserts | — | scaffolded (smoke runs present) |
| held-out-eval | fleet/held-out-eval/ | private rotation manifest + scorer | held-out scoring | — | scaffolded (see ROTATION.md) |
Wiki pages: fleet/vulhub-farm.md, fleet/webapp-asserts.md, fleet/procedural-generator.md, fleet/pwn-college-dojo.md, fleet/evm-asserts.md, fleet/agentdojo-gym.md, fleet/k8s-goat.md.
Common properties enforced by the protocol.md-speaking runners:
(../competitors/bugcrowd-rl-environments.md): per-run randomized challenge–response secrets, nonces, DB rows, CTF keys and challenge subsets; marker-path baseline prechecks abort env-dirty runs.
host ports, DB never published, always down -v teardown.
data/trajectories/<run_id>/run.jsonwith materialized goal, task message, agent stdout/stderr, verifier verdict, timings and compose logs.
cd fleet/vulhub-farm && python3 -I runner.py --list && python3 -I runner.py --smoke fastjson/1.2.47-rce
cd fleet/webapp-asserts && python3 -I runner.py --list && python3 -I runner.py --smoke all
Both --smoke modes degrade gracefully without docker (structure-only pass).
--version` fails) and re-run both smokes with the full lifecycle.
protocol.md so one agent binary runs the whole fleet.
DOCKER_HOST workers).(fleet/held-out-eval/ROTATION.md).