Not a course. A living ecosystem.
LevelUpCTF isn't pre-authored content. In the REACTOR v2 lane, a Model Council of specialist agents designs, critiques, and revises through SAGE; independent solver, quality, and operator gates decide what earns promotion. You work it in a real Docker sandbox; the platform recalibrates nightly.
REACTOR drafts each challenge.
The Model Council starts with a specialist Designer: a vulnerable web app, intrusion scenario, malicious binary, or smart contract with a subtle bug. Peers critique the brief through SAGE; Static Analysis catches generator slop before build; Validator and Calibrator iterate toward the target ELO band.
REACTOR v2 treats a draft as a hypothesis, not a release. The exact revision must survive live validation, independent solver and quality review, then operator sign-off before promotion.
- Designer + Static Analysis ping-pong until the brief stabilizes
- Target difficulty set from the gap in your skill vector
- Flag format enforced:
LEVELUP{...}
Six stages plus two branches. Before you ever see it.
Every draft runs through the real state machine in orchestrator.py. We don't ship a broken sandbox. We don't ship an unsolvable one. And we definitely don't ship one an LLM can write up from public data.
You get a real box.
Not a multiple-choice quiz. Not a text-adventure sim. A live Docker container with a full analyst toolkit, a terminal, and a flag that requires real tradecraft to capture.
- Kali-style terminal + category-specific tools: sqlmap, pwntools, Volatility, Foundry
- Hints cost coins · streaks protect your XP · Eagles double your loot
- Clock runs against the AI solver's par — beat it and you pocket the Eagle
Every solve reshapes your skill vector.
Win, lose, or time out — your 15-axis challenge-type ELO updates. A matchmaker queues the next challenge in your growth zone: hard enough to stretch, not so hard you bounce off.
- Per-category ELO · σ drops as the system learns you
- Stuck? Targeted learning surfaces the exact resource, then brings you back
- Rank up · earn a badge · extend your streak · bank coins
Five loops at 00:01 UTC.
The evolution worker runs the nightly cron. Challenges that everyone solves too fast get mutated. Prompts that produce boring briefs get retired. Gaps in the catalogue get filled from real solve-rate data.
- evo.mutate — rewrite easy challenges to be harder-but-different
- recalibrate — re-score par based on actual solve data
- prompt.evolve — retire stale archetypes, breed better ones
- gap.fill — generate new challenges for under-covered skills
- retire — archive challenges that no longer meet the catalogue standard