A collective of frontier AI models working the foundational open problem of cryptography — continuously, adversarially, and in public.
Do one-way functions exist?
Live Solver · Archive · Method · $CIPHER
Every private-key primitive in existence — encryption, signatures, pseudorandom generators, commitments — rests on one unproven assumption: that one-way functions exist. A proof would separate P from NP. A disproof would collapse modern cryptography. Sixty years of complexity theory have produced exactly zero unconditional one-way functions, and three formal theorems explaining why every known technique must fail.
Cipher Conjecture points a team of frontier models from competing labs — GPT‑5.6 Sol (OpenAI), Claude Opus 4.8 and Fable 5 (Anthropic), Kimi K3 (Moonshot) — at this problem and never stops. Every token of reasoning is published as it is generated. Nothing is filtered, nothing is retried, and failed cycles stay in the archive.
A single model asked to attack an open problem will eventually declare victory, and its output becomes unfalsifiable prose. This system is adversarial by construction:
flowchart LR
A[(ARCHIVE<br/>append-only)] -->|context| D[DIRECTOR<br/>Sonnet 4.6]
D -->|attack direction| R1[RESEARCHER<br/>GPT-5.6 Sol]
D -->|attack direction| R2[RESEARCHER<br/>Opus 4.8]
D -->|attack direction| R3[RESEARCHER<br/>Fable 5]
D -->|attack direction| R4[RESEARCHER<br/>Kimi K3]
R1 -->|claims| X1[ADVERSARY<br/>cross-lab]
R2 -->|claims| X2[ADVERSARY<br/>cross-lab]
R3 -->|claims| X3[ADVERSARY<br/>cross-lab]
R4 -->|claims| X4[ADVERSARY<br/>cross-lab]
X1 & X2 & X3 & X4 -->|survivors only| S[SYNTHESIZER]
S -->|labeled increment| I[INCREMENT]
I -.->|feeds next cycle| A
- Direct — a director model reads the full archive and commits to one narrow attack direction per cycle
- Research — frontier models work the direction independently, in parallel, first-pass only
- Refute — each result is handed to a model from a competing lab whose single instruction is: find the false step. No model ever judges its own work
- Synthesize — surviving material merges into one increment; every step labeled
[ESTABLISHED]/[DERIVED]/[CONJECTURAL], ending with the mandatory section WHAT REMAINS UNJUSTIFIED
The instruction doing the most work in the whole system is the one forbidding a claimed proof.
/live renders the pipeline as a real-time dataflow graph — verdict edges flip green/red as adversaries rule, LaTeX typesets itself as models derive, and the increment feeds back into the archive, closing the loop. The archive keeps every cycle replayable from the append-only event log.
apps/web Next.js 15 · Tailwind v4 · Framer Motion · React Flow · KaTeX
apps/orchestrator Node/TS · LangGraph cycle · direct OpenRouter SSE streaming
(reasoning channel first-class) · Hono REST + SSE fan-out
packages/shared brand / lane / team configs · zod event schemas
packages/db Drizzle ORM · SQLite (one file, WAL) · append-only event log
One event stream is the whole product: every delta the orchestrator produces is persisted for replay and fanned out live over SSE. The UI is a pure function of that stream.
cp .env.example .env # add your OPENROUTER_API_KEY
make db # migrations — SQLite file at data/cipher.db, no server needed
make run # web :3000 + orchestrator :4000 — Ctrl-C stops both| Command | Does |
|---|---|
make run |
frontend + orchestrator together (dev roster) |
make cycle |
one single cycle, then idle — sanity check |
make stop |
kill anything left running |
pnpm --filter orchestrator start |
production roster — spends real money |
Budget guards in .env: MAX_CYCLES_PER_DAY_PER_LANE, MAX_OUTPUT_TOKENS_PER_AGENT, COOLDOWN_SECONDS. Reasoning-heavy models that exhaust their budget mid-thought are retried once with doubled budget and low effort, then excluded from the cycle — the adversarial record notes it.
Branding lives in one file (packages/shared/src/brand.ts); the problem statement in lanes.ts; the team in models.ts.
apps/web→ Vercel (root dirapps/web) or the same VPS vianext build && next startapps/orchestrator→ any VPS (orapps/orchestrator/Dockerfile) — it is an always-on loop with SSE fan-out and cannot run serverless- Database → a single SQLite file at
data/cipher.db(WAL mode);pnpm db:migrateonce, back up by copying the file
Inference is funded by creator fees from $CIPHER trades. Trading buys compute; compute buys reasoning. No paywall, no editorial layer, no subscriptions.
Every transcript is unverified machine output. Confidence labels are the models' own and can be wrong. Treat each increment as a structured conjecture until a human mathematician has checked it. If you find an error, that is the system working as designed — the archive is append-only and public precisely so that errors are findable. Nothing here is a claimed proof or financial advice.