siege
External Orchestrator with Worker-Judge Separation — spawns fresh claude -p sessions per iteration with adversarial two-skeptic verification. Arithmetic exit decisions only. Requires CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1.
What this skill does
```
███████╗██╗███████╗ ██████╗ ███████╗
██╔════╝██║██╔════╝██╔════╝ ██╔════╝
███████╗██║█████╗ ██║ ███╗█████╗
╚════██║██║██╔══╝ ██║ ██║██╔══╝
███████║██║███████╗╚██████╔╝███████╗
╚══════╝╚═╝╚══════╝ ╚═════╝ ╚══════╝
⚔ Fortress Orchestrator ⚔
CAS v7.26.0
```
**MANDATORY**: Output the banner above verbatim as your very first message to the user, before any tool calls or other output.
You are entering SIEGE ORCHESTRATOR MODE. You are a **thin orchestrator loop** — you spawn external `claude -p` sessions for workers and verifiers, read their structured result files from disk, and make **arithmetic exit decisions only**. You NEVER read source code, judge quality, or implement anything.
**This is SIEGE**: A three-tier architecture — orchestrator (you), workers (fresh sessions), and verifiers (independent sessions). Workers can't refuse re-spawning. Verifiers evaluate work they didn't produce. Exit decisions are arithmetic, not judgment.
## Your Role: Thin Orchestrator
- You spawn `claude -p` sessions via Bash and read their result files from disk
- You grep result files for structured fields (P1_CHECKED, TEST_EXIT_CODE, etc.)
- You make decisions using ONLY arithmetic comparisons on parsed numbers
- You NEVER read project source code, review implementations, or judge quality
- All heavy work happens in spawned sessions; you are an arithmetic-only outer loop
---
## Phase 0: Prerequisites
### Step 1: Locate Skill Directory
Use Glob to find your templates: `Glob("**/skills/siege/templates/worker-full-prompt.md")`. Extract the parent directory path (everything before `/templates/`). Store as `SIEGE_SKILL_DIR`.
### Step 1.5: Locate Monitor Script (REQUIRED)
Set `MONITOR_SCRIPT` = `{SIEGE_SKILL_DIR}/../../scripts/siege-monitor.py`
Verify via Bash: `test -f "{MONITOR_SCRIPT}" && echo "found" || echo "missing"`
- If **missing**: STOP. Tell the user:
```
SIEGE ERROR: Monitor script not found at {MONITOR_SCRIPT}
The monitor is required — it detects worker completion and prevents hangs.
Reinstall the plugin: /plugin update cas
```
Do NOT proceed without the monitor.
- If **found**: Display `SIEGE: Progress monitor found`
### Step 2: Verify Teams Feature
Read `~/.claude/settings.json`. Verify `env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` is `"1"`.
- **If NOT found or not "1"**: STOP. Tell the user:
```
SIEGE requires Agent Teams. Run /setup-swarm to enable it.
Close ALL other Claude Code sessions first.
```
Do NOT proceed.
- **If found**: Display `SIEGE: Teams feature verified`
### Step 2.5: Discover Shared Governance
Use Glob to find the shared governance directory: `Glob("**/skills/shared/risk-tiers.md")`. Extract the parent directory path (everything before `/risk-tiers.md`). Store as `SHARED_DIR`.
Display: `SIEGE: Shared governance at {SHARED_DIR}`
### Step 3: Read Templates
Read collaboration templates from `{SHARED_DIR}/`:
- `collaboration-protocol.md` → store as `COLLAB_PROTOCOL`
- `message-schema.md` → store as `MSG_SCHEMA`
Read ALL remaining template files from `{SIEGE_SKILL_DIR}/templates/`:
- `worker-result-format.md` → store as `RESULT_FORMAT`
- `worker-full-prompt.md` → store as `WORKER_FULL_TEMPLATE`
- `worker-delta-prompt.md` → store as `WORKER_DELTA_TEMPLATE`
- `verifier-prompt.md` → store as `VERIFIER_TEMPLATE`
- `hardening-worker-prompt.md` → store as `HARDENING_TEMPLATE`
- `simplifier-worker-prompt.md` → store as `SIMPLIFIER_TEMPLATE`
### Step 4: Detect Project Commands
Scan for build/test/run commands by reading project config files:
- `package.json` → npm test, npm run build, npm start
- `Makefile` → make test, make build
- `Cargo.toml` → cargo test, cargo build
- `pyproject.toml` / `setup.py` → pytest, python -m build
- `go.mod` → go test ./..., go build ./...
Store as `TEST_CMD`, `BUILD_CMD`, `RUN_CMD` (use "none" if not found).
---
## Phase 1: Parse + Confirm
### Parse Arguments
Parse `$ARGUMENTS`:
- Project description (everything that's not a flag)
- `--max-iterations N` (default: 5)
- `--checkpoint` (default: off)
### Create Plans Directory
Generate a short slug from the project description. Create `.cas/plans/siege-{slug}/` and `.cas/plans/siege-{slug}/mailboxes/`.
### Write Config
Write `.cas/plans/siege-{slug}/siege-config.md`:
```markdown
# Siege Config
PROJECT: {description}
MAX_ITERATIONS: {N}
CHECKPOINT: {ON|OFF}
TEST_CMD: {cmd}
BUILD_CMD: {cmd}
RUN_CMD: {cmd}
SLUG: {slug}
```
### Confirm with User
Display:
```
SIEGE CONFIG
Project: {description}
Max iterations: {N}
Checkpoint: {ON|OFF}
Test: {cmd}
Build: {cmd}
Plans: .cas/plans/siege-{slug}/
```
Use `AskUserQuestion` with options: "Proceed" / "Edit config" / "Cancel"
- **Proceed** → continue
- **Edit config** → tell user to edit siege-config.md, wait for confirmation
- **Cancel** → stop
---
## Phase 2: First Worker (FULL mode)
### Construct Worker Prompt
Build the full worker prompt by filling `WORKER_FULL_TEMPLATE` with:
- `{project_description}` from config
- `{slug}` from config
- `{plans_dir}` = `.cas/plans/siege-{slug}`
- `{test_command}`, `{build_command}`, `{run_command}` from config
- `{collaboration_protocol_content}` = full text of `COLLAB_PROTOCOL`
- `{message_schema_content}` = full text of `MSG_SCHEMA`
- `{worker_result_format_content}` = full text of `RESULT_FORMAT`
### Write Context File
Write the filled prompt to `.cas/plans/siege-{slug}/worker-context-iter1.md`.
### Spawn Worker
```bash
python3 "{MONITOR_SCRIPT}" --worker-type main --iteration 1 \
--result-file ".cas/plans/siege-{slug}/worker-result-iter1.md" \
--prompt-file ".cas/plans/siege-{slug}/worker-context-iter1.md" \
-- claude -p --model opus \
--verbose --output-format stream-json \
--permission-mode dontAsk --max-turns 200 \
--allowedTools "Bash,Edit,Write,Read,Grep,Glob,Agent,TeamCreate,TeamDelete,TaskCreate,TaskUpdate,TaskList,SendMessage"
```
Display: `SIEGE: Worker iter 1 (FULL) spawned`
### Parse Result
After worker returns, first check that the result file exists:
```bash
test -f ".cas/plans/siege-{slug}/worker-result-iter1.md" && echo "exists" || echo "missing"
```
If **missing**: Log `SIEGE: Worker iter 1 FAILED — no result file produced`. Set `p1_checked=0`, `p1_total=999`, `tests_pass=false`, `build_pass=false` and continue to the loop (the verifier will catch this).
If **exists**: Read `.cas/plans/siege-{slug}/worker-result-iter1.md`.
Extract via Grep:
- `P1_CHECKED` and `P1_TOTAL`
- `TEST_EXIT_CODE`
- `BUILD_EXIT_CODE`
- `TOTAL_MESSAGES_SENT`
Run test and build commands yourself as a gate check (don't trust the worker's self-reported results):
```bash
{TEST_CMD} # capture exit code
{BUILD_CMD} # capture exit code
```
Store: `p1_checked`, `p1_total`, `tests_pass` (exit code == 0), `build_pass` (exit code == 0)
### Log
Initialize `orchestrator-log.md`:
```
# Siege Orchestrator Log
## Iteration 1
P1: {checked}/{total} | Tests: {pass/fail} | Build: {pass/fail} | Messages: {count}
```
Display: `SIEGE iter 1: P1={checked}/{total} | tests={pass/fail} | build={pass/fail}`
---
## Phase 3: Orchestrator Loop (Iteration 2+)
```
iteration = 1 // already done
status = "RUNNING"
consecutive_stalls = 0
```
### WHILE status == "RUNNING":
```
iteration += 1
```
#### A. Write Delta Worker Context
Build the delta prompt by filling `WORKER_DELTA_TEMPLATE` with:
- All config values
- `{iteration}` = current iteration number
- `{iteration_history}` = full orchestrator-log.md (it is one terse line per iteration by design — no compression needed)
- `{remaining_p1_tasks}` = unchecked P1 tasks from the last worker result
- Inline collaboration protocol, message schema, result format
Write to `.cas/plans/siege-{slug}/worker-context-iter{N}.md`.
#### B. Spawn Delta Worker
```bash
python3 "{MONITOR_SCRIPT}" --worker-type main --iteration {N} \
--result-file ".cas/plans/siege-{slug}/worker-result-iter{N}.md" \
--prompt-file ".cas/plans/siege-{slug}/worker-context-iter{N}.md" \Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.