Show HN context · for thread readers · bookmarkable

Show HN: anti-workslop agent swarm

Full context for the Show HN thread, in one bookmarkable page. The post itself is at news.ycombinator.com/show; this page is the supporting material — math derivation, bootstrap caveat, sources, and reply context — so thread readers can verify any claim without scrolling.

The 10-minute trial
git clone https://github.com/obsidian-spider-org/obsidian-spider-swarm
cd obsidian-spider-swarm
cp .env.example .env   # set CHAIN_HMAC_KEY to a 32+ char random string
cat PROMPT.md          # paste into your agent harness
python3 hmac_verifier.py <your-output.jsonl>

# Or verify the included sample chain offline (~30s; no API keys):
python3 hmac_verifier.py examples/sample_pr_review_wave.jsonl \
  --key "$(grep -v '^#' examples/.env.demo | grep -v '^$' | head -1 | cut -d= -f2-)"
# Expected: {"verified": 5, "failed": 0, "total_rows": 5}

The thesis (Show HN body)

Reward hacking is the default mode in permissive, complex, long-running agent workflows (Amodei et al 2016; METR 2025). At swarm scale the failure compounds invisibly. This framework wraps multi-agent fan-out with HMAC-chained receipts so failures are tamper-evident after the fact. It does not prevent every failure; it makes failures auditable.

Still needs a human-in-the-loop final pass. Quorum + audit reduces slop; doesn't eliminate it. LLMs compound hallucinations in long-running permissive workflows — the chain trail makes the compounding visible after the fact.

The cost math

Normal pulse: 4×8 (1 parent → 8 sub-agents × 4 waves = 32 sub-agents per parent call). Record run: 11×8 Claude Opus = 88 sub-agents. For lowballing, the comment uses 40 sub-agents per parent call.

INPUT_TOKENS_PER_SUBAGENT   = 200,000
OUTPUT_TOKENS_PER_SUBAGENT  = 50,000
SUBAGENTS_PER_PARENT        = 40
TOOL_CALLS_PER_SUBAGENT     = 10 – 40
TOKENS_PER_TOOL_CALL_LOOP   = 5,000

# Primary scenario: GPT-5.5 on Copilot Pro+
GPT55_INPUT_PRICE           = $5.00 /Mtok
GPT55_OUTPUT_PRICE          = $30.00 /Mtok
GPT55_PARENT_CALL_COPILOT   = $0.30   (7.5× multiplier × $0.04 overage)

# Secondary: Claude Opus 4.7
OPUS47_INPUT_PRICE          = $5.00 /Mtok
OPUS47_OUTPUT_PRICE         = $25.00 /Mtok
OPUS47_PARENT_CALL_COPILOT  = $0.60   (15× multiplier × $0.04 overage)
OPUS47_PARENT_CALL_MAX_PLAN = ~$0     (bundled under fixed-monthly $100–$200)

total_input  = INPUT × SUBAGENTS + LOOP × TOOLS × SUBAGENTS + parent_input
total_output = OUTPUT × SUBAGENTS + parent_output
raw_api_cost = total_input/1M × INPUT_PRICE + total_output/1M × OUTPUT_PRICE
ratio        = raw_api_cost / YOUR_PARENT_CALL_COST

Bottom line at 40 sub-agents, GPT-5.5 primary: raw API equivalent at retail ≈ $112–$142 depending on tool-call density → parent call $0.30 → ~375×–475× raw-API-equivalent ratio. Same volume on Opus 4.7: raw ≈ $102–$132 → on Copilot Pro+ $0.60 parent → ~170×–220×; on Claude Max with Sonnet 4.6 primary + Opus 4.7 secondary the parent is ≈$0 marginal so the ratio isn't comparable.

To be clear: this is the compute-equivalent you'd need to buy at retail to replicate the fan-out — not a cash saving. Nobody pays sticker. Full derivation with four bracketed scenarios in docs/COST_MODEL.md.

Bootstrap caveat

Quorum here is same-family fan-out, not Byzantine fault tolerance. On a single-substrate run those "8 reviewers" are 8 personae of one model. The HMAC chain is tamper-evident on outputs; it does not make personae independent. For real BFT-class signal, route reviewers across vendor families (OpenRouter / Groq / Cerebras). Full caveat in BOOTSTRAP_NOTE.md.

Capacity ladder (operator-tested ranges)

SettingConfigurationSub-agents per parentOperator-tested status
Recommended start 2 parallel × 4 deep 8 sub-agents minimal rate-limit pressure; verify the loop runs; build a stability floor
Daily working config 4 × 8 32 sub-agents stable on Copilot Pro+ with multi-layer fault tolerance enabled; the lowball "40 sub-agents" figure in the math rounds this up
Record (heavy-Opus) 11 × 8 88 sub-agents on one parent call chain-anchored receipt; burns weekly Opus quota in one run — not a daily setting

Don't step past 4×4 without a durable resume layer. You will hit session limits and Copilot will not warn you it's coming. The recommended fix is "let it crash" with JSONL + Postgres + DBOS so the next wave picks up where the crashed one left off.

June 1, 2026 billing transition

GitHub moves Copilot Pro+ to usage-based billing on June 1, 2026. The current parent-call-with-fan-out pricing window is closing. The framework is being released MIT before the transition so anyone on Pro+ today can measure their own arbitrage before it shifts.

If you're on an annual Copilot plan, GitHub is offering self-serve cancel-and-refund through May 20, 2026: Settings → Billing → Manage subscription → "Cancel and refund subscription." Not reversible for non-students; prorated.

After June 1, the routing pattern still works token-priced on Claude Code Agent tool and free vendor mesh. The Copilot-specific arbitrage multiplier is the largest right now; the routing pattern is portable.

The offer (separate from the gift)

The framework is MIT-licensed and free forever. A separate paid offer for teams whose agent pipelines are misbehaving lives at GIFT_AND_OFFER.md:

First 5 paid engagements at design-partner half-price (case-study + named reference exchange). Every tier is refundable; no non-refundable engagements.

Sources (fetched 2026-05-12)

Repo and verification

Repo HEAD at launch: 895cb04 · MIT-licensed · stdlib-only Python helpers · self-verifying sample chain in examples/.

Cryptographic receipts: every public document (README, GIFT_AND_OFFER, QUICKSTART, PROMPT, BOOTSTRAP_NOTE, examples/README) carries a content-sha256 audit receipt at the bottom. Verify any of them in one command:

awk '/RECEIPT-ANCHOR v1/{exit} {print}' <file> | sha256sum
# Compare against the content_sha256 recorded below the anchor

Contact

General questions, contributions, bug reports → [email protected] or open a GitHub issue. Paid-engagement inquiries → see the offer ladder at GIFT_AND_OFFER.md; one paragraph describing the workflow is enough to start.