一键导入
battle
Red vs Blue team security competition orchestrator. Runs long-running overnight battles with 1000s of interactions, scoring, and insight generation.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Red vs Blue team security competition orchestrator. Runs long-running overnight battles with 1000s of interactions, scoring, and insight generation.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Create receipt-backed persona dream packets from memory residue. Use when a persona should dream, reflect, or turn recent memories into persona insight; when create-movie/dream.py feels too heavy for the goal; when the desired output is a prompt, frame prompts, contact sheet, reflection, and memory write receipt rather than a full movie; or when a downstream movie workflow needs a dream_packet.json input.
Use when the user asks to query project memory, ask an oracle, use supported browser-backed reviewers, run Tau roundtable/single-handler workflows, run persona/deep-review workflows, generate image prompts, check OS/project health through composed skills, or run an ask DAG. This skill is the executable /ask runtime; do not replace it with an informal subagent, plain web search, or hand-written review.
Build structured evidence cases using Claims-Arguments-Evidence (CAE) trees. AGENT-DRIVEN composable orchestrator: the agent decomposes the question, calls existing skills for data collection and verification, then DECIDES the verdict. Python runner.py is a thin data collector and persistence layer.
Monitor Herdr-visible Codex/Claude agent panes for stalled, blocked, unknown, or confused state, then ask each stalled agent whether it needs human intervention or can self-unblock with brave-search or webgpt.
Internal Tau-owned LLM proxy on localhost:4001. Surfaces: chat/batch completions, scillm exec, OpenCode serve (coding delegate), OpenCode transport (DAG/SSE), standing Codex agents. Chutes, Gemini, Claude/Codex OAuth, OpenCode Go, Ollama. Auto-routes by model name. ZIP/PDF, JSON repair, batch pools. Project agents must not call this skill directly unless the human explicitly asks to operate SciLLM or the work is Tau/SciLLM maintenance.
Operate and verify the local T'au project at ${HOME}/workspace/experiments/tau. Use for Tau loop, harness, watchdog cron, GitHub issue orchestration, TUI, Memory-first chat, and E2E proof/status tasks. This skill is a light wrapper around the Tau repo and must report mocked/live proof boundaries explicitly.
| name | battle |
| description | Red vs Blue team security competition orchestrator. Runs long-running overnight battles with 1000s of interactions, scoring, and insight generation. |
| allowed-tools | ["Bash","Read"] |
| triggers | ["battle","thunderdome","red vs blue","overnight battle","security competition","red team vs blue team"] |
| metadata | {"short-description":"Red vs Blue team security competition","requires":"docker"} |
| provides | ["competitive-selection","docker-isolation"] |
| composes | ["hack","anvil","memory","treesitter","taxonomy","task-monitor","ops-docker","code-runner"] |
| complies | ["best-practices-skills","best-practices-python","best-practices-security"] |
| taxonomy | ["competition","selection","resilience"] |
STOP. READ THIS ENTIRE SKILL.MD BEFORE CALLING ANY ENDPOINT.
Red vs Blue Team Security Competition Orchestrator
Pits a Red Team (attack) against a Blue Team (defense) in a long-running competitive loop. Each team leverages all .pi/skills to attack or defend a target codebase.
Production Battle is an orchestration skill, not a large bespoke security engine. The host-side process should schedule rounds, choose personas, dispatch subagents, provision Docker runtimes, collect receipts, score hard runtime signals, write reports, and persist learning. Target code and team-generated code must execute only inside Docker.
Required production invariants:
$hack execution is a subagent responsibility, not a Battle Python
import. Battle performs or schedules scan/research/memory recall, builds the
candidate exploit list, chooses the Red persona, dispatches an
agent-skills/agents/Tau subagent with that contract, and records the
returned exploit receipt.tau.agent_handoff.v1 and tau.subagent_receipt.v1,
with Battle-specific fields layered on top rather than a separate ad hoc
protocol.scillm as the LLM/model caller. Battle owns
team selection, persona assignment, Docker runtimes, scorekeeping, artifacts,
and memory promotion.dogpile, brave-search, memory, GitHub/code search,
docs, papers, CVEs, and public writeups.$memory.brave-search and dogpile calls, including 10x concurrent Brave
search batches when needed, then store useful results and negative evidence in
$memory.Based on research into RvB framework, DARPA AIxCC, and Microsoft PyRIT:
┌─────────────────────────────────────────────────────────┐
│ Battle Orchestrator │
│ - Game loop (RvB pattern) │
│ - Concurrent Red/Blue execution │
│ - Entropy-driven termination │
│ - Checkpointing for overnight runs │
└─────────────────────────────────────────────────────────┘
│ │
┌────┴────┐ ┌────┴────┐
│ Red Team │ │ Blue Team│
│ (Thread) │ │ (Thread) │
├──────────┤ ├──────────┤
│ Skills: │ │ Skills: │
│ - hack │ │ - anvil │
│ - memory │ │ - memory │
└──────────┘ └──────────┘
│ │
└──────────┬───────────────────┘
│
┌───────────────┴────────────────────┐
│ Digital Twin │
│ ┌─────────────────────────────┐ │
│ │ Mode: git_worktree │ │
│ │ - Red attacks arena │ │
│ │ - Blue patches workspace │ │
│ │ - Cherry-pick to test │ │
│ ├─────────────────────────────┤ │
│ │ Mode: docker │ │
│ │ - Isolated containers │ │
│ │ - Battle network │ │
│ ├─────────────────────────────┤ │
│ │ Mode: qemu │ │
│ │ - Emulated firmware │ │
│ │ - GDB attach points │ │
│ └─────────────────────────────┘ │
└────────────────────────────────────┘
The battle skill supports multiple target types through its Digital Twin system:
For battling over git repositories. Creates isolated git worktrees for each team.
./run.sh battle /path/to/repo --rounds 100
For battling over containerized applications. Spins up separate containers for each team.
# Using a Docker image
./run.sh battle --docker-image nginx:latest --rounds 100
# Using a Dockerfile in the target directory
./run.sh battle /path/with/Dockerfile --mode docker
For battling over firmware and embedded systems. Boots firmware in QEMU emulator.
# Auto-detect architecture from ELF header
./run.sh battle firmware.elf --rounds 100
# Specify machine type explicitly
./run.sh battle firmware.bin --qemu-machine arm
./run.sh battle firmware.bin --qemu-machine riscv64
./run.sh battle bios.rom --qemu-machine x86_64
Supported QEMU machines:
arm - ARM Cortex-M (STM32, etc.)aarch64 - ARM64riscv32/riscv64 - RISC-Vx86_64/i386 - x86mips - MIPS (routers, embedded)For non-git directories. Creates simple file copies for each team.
# Start a battle (10 rounds for testing)
./run.sh battle /path/to/codebase --rounds 10
# Start overnight battle (1000 rounds)
./run.sh battle /path/to/codebase --overnight
# Battle a Docker container
./run.sh battle --docker-image myapp:latest --rounds 100
# Battle firmware with QEMU
./run.sh battle firmware.bin --qemu-machine arm --rounds 100
# Check battle status
./run.sh status
# Resume interrupted battle
./run.sh resume <battle-id>
# Generate report from completed battle
./run.sh report <battle-id>
# Run the deterministic Battle v0 fixture proof
./run.sh battle-fixture battle-001 --out /tmp/battle-001
# Run canonical BATTLE-004 with parent-spawn lineage requested
./run.sh arena-parent-spawn-proof battle-004 --out /tmp/battle-004-parent-spawn --red-workers 2 --blue-workers 2
Battle v0 is a narrow, deterministic proof rung for the Battle artifact contract. It runs one local Red -> Blue -> Judge fixture and emits replayable receipts:
red-receipt.jsonblue-receipt.jsonjudge/judge-receipt.jsonscoreboard.jsonmonitor-index.jsonrun-receipt.jsonThe Battle v0 scoreboard is derived from the independent Judge receipt, not from
Blue-side self-certification fields. This addresses the current battle loop gap
where a Blue patch can carry verified and functionality_preserved claims
without a separate Judge phase.
The fixture proof is intentionally limited:
mocked: no
live: local_deterministic_fixture
agentic: false
models_used: []
It proves the receipt boundary and monitor artifact rendering for the local
fixture only. It does not prove real Red or Blue agent behavior, scillm,
OpenCode, anvil, code-runner, memory learning, Docker, QEMU, or multi-round
campaign readiness. See docs/BATTLE_V0.md for the validation commands and
artifact-backed monitor proof path.
| Metric | Weight | Description |
|---|---|---|
| Vulnerability Discovery | 1x | Red team finds vulnerability |
| Exploit Proof | +0.5x | Red team proves exploitability |
| Successful Patch | 3x | Blue team patches vulnerability |
| Time Decay | Variable | Faster responses score higher |
| Functionality Preserved | Required | Patches must not break code |
Each round follows a learn → act → reflect pattern:
Round k:
┌─────────────────────────────────────────────────────────────┐
│ 1. RESEARCH PHASE │
├─────────────────────────────────────────────────────────────┤
│ Red Team: Blue Team: │
│ - Recall past attack attempts - Recall past defenses │
│ - Query /dogpile for new - Query /dogpile for │
│ exploitation techniques hardening strategies │
│ - Review opponent's patterns - Analyze attack evolution │
│ (Budget: 3 research calls max) │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 2. ACTION PHASE │
├─────────────────────────────────────────────────────────────┤
│ Red Team Attack: Blue Team Defense: │
│ - Execute learned strategy - Apply patches via anvil │
│ - AFL++ fuzzing with coverage - Verify via QCOW2 overlay │
│ - Collect crashes/findings - Run regression tests │
│ - Tag findings with /taxonomy - Tag patches with /taxonomy │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 3. REFLECTION PHASE │
├─────────────────────────────────────────────────────────────┤
│ Both Teams: │
│ - Archive round episode (actions, outcomes, learnings) │
│ - Store successful strategies in /memory │
│ - Update belief about opponent's capabilities │
│ - Evolve strategy for next round │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 4. SCORING & CHECKPOINT │
├─────────────────────────────────────────────────────────────┤
│ - Calculate AIxCC-style scores │
│ - Check termination conditions │
│ - Save checkpoint (QEMU state + team memories) │
└─────────────────────────────────────────────────────────────┘
Each team maintains isolated knowledge:
battle_red_<battle_id>/ battle_blue_<battle_id>/
├── strategies/ ├── strategies/
│ ├── successful_attacks │ ├── successful_patches
│ └── failed_attempts │ └── broken_defenses
├── research/ ├── research/
│ └── dogpile_results │ └── dogpile_results
├── episodes/ ├── episodes/
│ ├── round_001.json │ ├── round_001.json
│ └── round_002.json │ └── round_002.json
└── taxonomy/ └── taxonomy/
├── cwe_classifications ├── mitigation_types
└── severity_scores └── effectiveness_scores
Teams cannot access opponent's memory - this creates true adversarial learning.
Battle ends when ANY condition is met:
./run.sh stopBattles register with task-monitor for overnight progress tracking:
# View battle progress in TUI
.pi/skills/task-monitor/run.sh tui --filter battle
After battle completion, generates:
The skill integrates with the shared memory and taxonomy systems via
memory_integration.py for cross-battle learning:
recall_prior_battles): Before starting a battle, recalls prior
battle findings for the same target or technique. Enables teams to build on
accumulated security knowledge across battles.learn_battle): After battle completes, stores the full outcome
(target, red findings, blue defenses, winner, scores, TDSR) to memory with
taxonomy bridge tags.["battle", "security"] + bridgesGracefully degrades if common.memory_client or taxonomy/taxonomy.py are unavailable.
Battle Red agents may behave as nondeterministic exploit-code authors. A Red exploit subagent may combine high-level web, protocol, MITM, packet, timing, source-level, binary, assembly, fuzzing, and obscure research-derived techniques into generated exploit specimens.
Most generated specimens may be bad ideas: they may fail to compile, fail at runtime, combine irrelevant methods, or produce no useful target signal. Battle treats those outputs as genetic material, not proof.
Battle owns deterministic selection and evidence:
The first backend proof rung is exploit-combiner-proof. It is fixture-backed,
agentic:false, and proves the specimen lifecycle only: bad generated code,
Docker execution, captured failure observations, target contact, runnable
unproven code, and fail-closed non-claims. Live Tau generation, child
materialization, packet capture, Blue adaptation, memory promotion, and Judge
exploit-success replay are later rungs.
The second backend proof rung is spawn-architect-proof. It is fixture-backed,
agentic:false, and proves the DAG birth contract only: Battle loads a
spawn-policy decision, constructs a child knowledge packet from parent specimen
evidence, authors a tau.dag_contract.v1 child exploit-synthesis DAG, validates
private-artifact exclusions, and records that Tau execution is deferred to PR3.
It does not run Tau, materialize a child exploit, generate live exploit code,
compile child code, contact the target, or claim exploit success.
The current live Tau child DAG canary is live-tau-child-dag-canary. It is
non-mocked and invokes the existing local Tau DAG runtime without fixture
fallback. The PR3b/PR3c boundary is:
lineage-summarizer PASS
research-scout PASS with Tau-validated source-bearing design-input receipts
method-combiner PASS with a deterministic exploit genome candidate
exploit-code-author PASS only when Tau/SciLLM returns provider_live:true
provider-authorship evidence; otherwise BLOCKED at the precise attestation gap
The PR3c boundary may materialize provider-authored child exploit code, but it does not compile child code, run a child specimen in Docker, or claim exploit success. Compile repair, Docker execution, and Judge replay are later gates.
battle/
SKILL.md # This file
run.sh # Shell entry point; launches package through uv
sanity.sh # Deterministic fixture and structure sanity gate
pyproject.toml # Dependencies
.ask/browser-oracles.yaml # WebGPT project mapping for browser-oracle walk-up
src/battle_skill/
cli.py # Typer CLI entry point
config.py # Constants and paths
state.py # Data classes and BattleState
memory.py # Team-isolated memory system
scoring.py # AIxCC-style scoring
digital_twin.py # Git worktree, Docker, QEMU isolation
red_team.py # Red Team attack agent
blue_team.py # Blue Team defense agent
orchestrator.py # Game loop orchestrator
battle_fixture.py # Deterministic fixture proof runner
judge.py # Deterministic scorekeeper verifier
receipts.py # Receipt dataclasses and JSON writer
report.py # Report generation
qemu_support.py # QEMU emulator support
qemu_peripherals.py # QEMU peripheral emulation
fixtures/battle-001/ # Deterministic local fixture
spectator/ # Self-contained BATTLE-004 spectator UI + Pixi engine
monitor/battle/ # Artifact-backed React monitor
| Skill | Team | Purpose |
|---|---|---|
| hack | Red | Scanning, auditing, exploitation |
| anvil | Blue | Multi-agent patching (Thunderdome) |
| memory | Both | Recall prior strategies |
| treesitter | Blue | Code structure analysis |
| taxonomy | Both | Classify findings |
| task-monitor | Orchestrator | Progress tracking |
| ops-docker | Both | Container management |
# Start 100-round battle on current project
./run.sh battle --target . --rounds 100
# Output:
# Battle ID: battle_20250128_221500
# Target: /home/user/project
# Rounds: 100
#
# Registering with task-monitor...
# Starting Round 1/100...
# [Red] Scanning target with hack...
# [Red] Found 3 potential vulnerabilities
# [Blue] Analyzing attack logs...
# [Blue] Generating patch for SQL injection...
# [Blue] Patch applied, running verification...
# Round 1 complete. Red: 3 pts, Blue: 9 pts
# ...
#
# Battle Complete!
# Winner: Blue Team (847 pts vs 423 pts)
# Report: ./reports/battle_20250128_221500.md