- TurnsText-input turns — Sonnet 5 wrapped in the Hammerstein system prompt.
- RulesRulebook ingest — client-side pdf.js parsing; rulebooks never leave the browser.
- EthicsAnti-metagame ethical constraint — a hard rule, not a courtesy.
- DemoFree demo: 25 turns per IP per day.
How it's built.
This page is for developers, press, and anyone who wants to see past the table talk: the open-source framework, the local model, the coding benchmark, and the full build log. None of this is required reading to use Hammerstein. The main site is where you play.
Run it locally
The framework, the local model, and the CLI / TUI are open-source and stay open-source. If you want to run audits locally with no subscription, those tools are free:
- hammerstein — framework canon (system prompt + RAG corpus)
- hammerstein-7b-framework — distilled QLoRA model on Qwen2.5-7B, runs on any 8GB+ Mac via Ollama
- hammerstein-tui — Rust TUI, early/experimental
The five hosted modes are the paid surface, because they need hosted vision, persistent campaign storage, and Sonnet API costs covered. Everything in the list above stays free.
The same discipline, measured on code
Hammerstein refuses the stupid-industrious move. That move produces elaborate builds that feel like work but deliver nothing. We wrapped a coding model in that discipline to test whether the refusal survives contact with real coding tasks. It survives. Across every model we tested, the wrap stops a system that defaults to over-engineering. It still completes the legitimate work.
Over-engineering baits refused (higher is better):
| Model | Plain | Hammerstein-CODER |
|---|---|---|
| Claude Opus 4.8 | 70% | 100% |
| Claude Sonnet 4.6 | 0% | 100% |
| GPT-5 | 0% | 100% |
| GLM-5.2 / Kimi / Qwen3-Coder | 0–10% | 90–100% |
The wrap does not produce a model that refuses everything. On bounded, legitimate tasks it implements at 90 to 100 percent, matching the plain model. The scoring is symmetric, so a prompt that only refuses fails the bench.
Why we'll tell you when it does the least
We ran the wrap on the strongest model we tested. It moved the least. Opus 4.8 already refuses most over-engineering on its own, so the wrap took it from 70 to 100 percent, not from near zero. We report that small lift deliberately. A discipline layer that barely improves a model that already has the judgment is grading the model, not the prompt. The wrap does least where it is needed least. It does the most for the rest, and most models do not start with that much native restraint. For those, the wrap closes the gap.
More than "do less"
We tested the wrap against ponytail, an off-the-shelf prompt built on the laziest thing that works. Both handle the refusal to over-engineer similarly. Generic minimalism covers that ground. The split appears on vague requests. Ask ponytail to add caching and it applies the smallest possible cache. Ask the wrapped coder and it evaluates what the code actually requires, then implements it. The wrap forces a scoping step before generation begins.
What this isn't
The benchmark tests judgment, not baseline coding ability. We verified this. Applying the wrap does not change the model's accuracy on standard problems (HumanEval pass@1 on the three open coders moved within ±0.05 of plain: GLM +0.05, Kimi −0.03, Qwen 0.00). It is the same model underneath. The wrap only changes what the system attempts to build. The claim is narrow because the evidence is narrow. A zero-cost prompt layer forces the model to refuse the unnecessary build, scope the vague request, and deliver the functional code. It disengages on models that already perform those steps.
Tested 2026-06-21 on Claude Opus 4.8, Sonnet 4.6, GPT-5, GLM-5.2, Kimi-K2.7-Code, Qwen3-Coder-480B. Restraint scored by an independent LLM judge over a 15-task adversarial bait bank. Correctness by execution-based pass@1 on HumanEval. Full methodology ↗
Roadmap
Phase 2G (mobile Sources panel) is shipping next. The full phase log is below.
The full phase log
Updated 2026-05-29. The product ships in phases — each phase is foundational for the next. What's live today is what made next month's work tractable.
- VisionBoard-photo upload — multimodal in, browser-resized and EXIF-normalized before send.
- RateSubscriber rate-lift on the paid tier — 120 turns/month at launch, since superseded by the Basic 40 / Regular 300 split.
- BillingStripe + access-token plumbing.
- StoragePersistent campaign memory across machines, backed by Cloudflare D1.
- SessionMulti-turn campaign memory within a session.
- TourWalkthrough-first /wargamer/ rebuild — five turns of The World Undone: Galicia, step-through, before the live demo.
- ProofPublic benchmark dashboard at /benchmark/ — versioned trajectory v0–v0.7, win-rates, methodology, caveats.
- FunnelSubscribe CTA on /wargamer/ + paid-tier rate-lift bumped 120 → 300 turns / month.
- ChatA persistent Hammerstein strategic assistant at /chat/ — sidebar campaign list, streaming replies.
- KriegsspielLive referee at /kriegsspiel/: rules Q&A, AI player mode for solitaire play, map generation.
- MatrixHammerstein as referee for Engle's Classical Matrix Game at /matrix/.
- VassalVASSAL save (.vsav / .vlog) + screenshot ingest, live on /wargamer/ — the first non-photo input pathway. The save unzips in your browser and the board state lands in the field for review; nothing's uploaded.
- MobileMobile UX pass — Sources panel refactored mobile-first.
- VoiceVoice tier — Whisper STT in, orders out as TTS.
- DesktopDesktop hotkey app — Tauri-based, Raycast-style.
- SchemaCDG / per-game-state schema — Twilight Struggle and Pax Pamir family first.