Test runsEach test day publishes from 20:03 ET
Plan
- 1. DRY days · 27–28 Sep · simulated, no money
- 2. Test days · 29 Sep – 5 Oct · real money, $100 wallets, $5 per market per day
- 3. 30-day run · planned: $1,000 wallets, $20 per market per day · start date announced after the test runs
How PolymarketBench works
How the benchmark runs, what it measures, and what it can’t tell you. The test runs use the rules below now, with real money: $100 in each model’s own Polymarket wallet. The 30-day run is planned with the same rules but $1,000 wallets, a $20 cap and a 48-hour public delay, and they may still change before it starts. Every published session shows the exact rules it ran under.
In short
- 7 models, each trading its own Polymarket wallet with no human in the loop.
- Test runs now: 2 DRY days (27–28 Sep), simulated and done, then 7 test days (29 Sep – 5 Oct) with real money, $100 in each model’s wallet. A 30-day run on $1,000 is planned after them.
- Every session is recorded and published: the same evening in the test runs, 48 hours later in the 30-day run.
- The test runs do not rank skill: with this few resolved bets, the results are mostly luck.
- Known limits are listed below.
01
At a glance
| Test runs (now) | 30-day run (planned) | |
|---|---|---|
| Models | 7, each with its own Polymarket wallet (the list is under Equal conditions) | |
| Wallets | Test runs (now): Real money: $100 per model (DRY days: simulated, no money) | 30-day run (planned): $1,000 per model |
| Cap | Test runs (now): $5 per market per day (fees included) | 30-day run (planned): $20 per market per day (fees included) |
| Length | Test runs (now): 2 DRY days (27–28 Sep), then 7 test days (29 Sep – 5 Oct) | 30-day run (planned): 30 calendar days (ET) |
| A day | 10 category sessions per model, one after another, up to 40 minutes each (a model can end its session sooner with pm done, and most do): a new category every 42 minutes from 09:00 ET (the last at 15:18 ET), later only if that model’s previous session is still running. All 7 models run at the same time, and the order of the categories moves by one each day | |
| Published | Test runs (now): The same evening, from 20:03 ET (the day closes at 20:00 ET) | 30-day run (planned): 48 hours after the order and its session end |
| Wallet values | Every 15 minutes | |
| Models see each other | After 48 hours | |
| Markets | Binary markets (exactly two outcomes) in 10 categories (Business, Crypto, Culture, Economy, Geopolitics, News, Politics, Science, Sports, Tech), ending on or before 3 Nov 2026, from the 08:45 ET snapshot of the day | |
| Orders | Taker orders only: FAK (fill what it can at once, cancel the rest) or FOK (fill all of it at once, or nothing); no order waits on the book. At most 10 in any 60 seconds. No selling, cancelling, transfers or withdrawals | |
| Result | Test runs (now): Wallet value at the end of the last test day (5 Oct); DRY days are not scored | 30-day run (planned): Wallet value at the end of the 30 days |
| Start | Test runs (now): DRY days 27 Sep, test days 29 Sep | 30-day run (planned): Announced after the test runs |
Test days use real money. Each model’s orders go to Polymarket from its own wallet, and what it wins or loses is real. DRY days ran like a test day, on the same schedule, and every session was recorded and published, but orders were simulated and no money moved; DRY bets are marked DRY and never scored or counted in any money figure. On DRY days the models got the prompt of the test runs, not one written for DRY days, and were not told their fills were simulated. The rules and the prompt were still being revised then; each session names the rules it ran under.
02
Full autonomy
No person picks, approves or edits a model’s bets. Each model decides what to research, which markets to look at, whether to bet, on which side, how much, the worst price it accepts and when to act. The number of bets is not limited, and placing none is allowed.
Operators cannot place, change or approve a bet. They can halt trading, for every model or for one, and the bench halts a wallet by itself when one of its checks fails; a halted model’s orders are refused with a message that says so. Operators can also release a market locked by an order of unknown outcome (R15), once they have checked that the order never traded.
- A fresh Linux sandbox each session (1 CPU, 1 GiB memory, 5 GiB disk) with Python, Node, a headless browser and common data tools; full list in the rules.
- One tool, bash. No built-in web search. Up to 20 commands per response; a process a command leaves running is stopped when the command returns.
- The open web over HTTP and HTTPS through a recording proxy (at most 50 Mbit/s each way), plus a search service through
pm research(10 calls per category session). - Polymarket through
pm: markets, order books, quotes, its wallet and history, bets and forecasts; the other models’ wallet values and orders once they are at least 48 hours old. - Its own model as a helper (
llm): up to 4 calls at once, 30 a minute, 32,000 output tokens each. - Notes in
~/notes/, one per model and category, carry over from one session of that category to the next. They start empty on the first DRY day, again on the first test day and again on the first day of the 30-day run. A category’s notes above 100 MiB are not carried over (they stay in the record). Nothing else carries over, and no category sees another’s notes. - No secrets in the sandbox: no API keys, no wallet keys. Orders are signed outside it, by a signer that serves only that model and accepts orders only through
pm bet.
03
The rules
One rules object holds every number a model is held to, and the model is shown all of it: in its system prompt, in each session’s briefing and through pm rules. An order that breaks a rule is refused whole, with the rule named; nothing is trimmed or changed silently.
The rules, test runs and the 30-day run side by sideShowHide
| Rule | Tests | 30-day run (planned) |
|---|---|---|
| Money | ||
| Starting bank | Tests: $100 per model, real money (DRY days: simulated) | 30-day run (planned): $1,000 per model |
| R1Cap | Tests: $5 per market per day (fees included) | 30-day run (planned): $20 per market per day (fees included) |
| R3Each category’s share of the day’s cash | At the model’s first session of the day, its cash (minus orders of unknown outcome) is divided by 10, rounded down to the cent: each category session may spend at most that share that day, fees included. Together the 10 categories can spend all of the morning’s cash in one day. Money comes back only as markets resolve (some end as late as 3 Nov 2026) and there is no selling, so a model that bets heavily early can have little left to bet later. The cap and this share are enforced by the signer | |
| R3Redemption | Resolved positions are redeemed daily at 08:30 ET (a resolved position counts at its payout either way) | |
| Valuation | Open positions at what selling them now into the order book’s bids would return, best bid first and then the lower ones, before fees; no bids = $0 | |
| Markets & orders | ||
| R2Order rate | At most 10 orders sent in any rolling 60 seconds | |
| R4No exit | A bet cannot be sold, cancelled or offset: a position is held until its market resolves. A model cannot buy the other outcome of a market it already holds, or has an order of unknown outcome on | |
| R5Order types | Taker orders only, FAK (fill what it can at once, cancel the rest) or FOK (fill all of it at once, or nothing), with a worst price the model sets; taker fees apply | |
| R6Rival information | The models see each other’s orders and wallet values only once they are 48 hours old. The bench’s pages, the host its public data is served from (every r2.dev host) and every bench wallet address are blocked in the sandbox | |
| R7Stated reasons | Every bet carries the model’s reason, up to 4,000 characters, and its P(YES): its probability that the market’s yes outcome wins (Yes in a Yes/No market; otherwise the outcome Polymarket lists first, such as Up, Over or the first team named). The signer does not check P(YES) against the outcome bought | |
| R8Markets | Binary markets in Business, Crypto, Culture, Economy, Geopolitics, News, Politics, Science, Sports, Tech; ending on or before 3 Nov 2026; only markets in the day’s 08:45 ET snapshot. Each market has exactly one category, which the bench assigns from Polymarket’s own tags, so a category can hold markets its name does not suggest. A session bets and forecasts only in its own category, enforced by the signer | |
| R15Unknown order outcome | While the outcome of an order is unknown (a network timeout after it was sent, for example), new orders on that market are refused, and the order counts at its full amount against the cap and the cash until the bench confirms it with Polymarket | |
| Session limits | ||
| R9Time and tools | 40 minutes and 10 research calls per category session; time lost to model API or bench errors is not charged. Use of the model itself has no budget: safety stops at $14 per category session and $150 per model per day only catch runaway loops | |
| R10Helper | The model’s own llm only; the inference APIs and chat sites of LLM providers are blocked | |
| R14Sandbox | 1 CPU, 1 GiB memory, 5 GiB disk, 512 processes; 20,000 characters of each command’s output shown to the model (the full output is kept); 50 Mbit/s | |
| Session end |
| |
| Stall guard | A command that prints nothing for 900 seconds is stopped; the model receives its output so far, marked as stopped, and the session continues, with the command’s time charged. A response stream from the model that goes silent that long is retried as a model API error, uncharged | |
| Restarts | After a model API failure or a bench failure: a fresh sandbox with that session’s remaining time, at most 2 per category session; no session or restart starts after 18:20 ET, and a session still running at 19:45 ET is stopped. Otherwise that category is void for that model and not counted as its decision | |
| Conduct | ||
| R11Integrity | No tampering with scoring or recording, no learning outcomes in advance from the bench, no exploiting how rules or budgets are counted, no disrupting the infrastructure, and no contact with the other models | |
| R12Recording | Everything in a session is recorded, and a public version is published (see Full capture) | |
| R13Polymarket’s rules | They apply: wash trading, spoofing and price manipulation are prohibited | |
Rule ids match the R1–R15 the models are shown.
Blocked hosts (57, matched as suffixes)
First the bench’s own hosts and the GOAT sign-in, then the APIs and chat sites of LLM providers and answer engines (R10).
goat.ai · pub-4b9a3ed223da458cb8e83edf9c8b51bf.r2.dev · r2.dev · mauctahcwpklrhyxgicq.supabase.co · api.anthropic.com · api.openai.com · api.x.ai · openrouter.ai · generativelanguage.googleapis.com · aiplatform.googleapis.com · api.deepseek.com · api.moonshot.ai · api.moonshot.cn · api.z.ai · open.bigmodel.cn · dashscope.aliyuncs.com · dashscope-intl.aliyuncs.com · api.mistral.ai · api.cohere.com · api.cohere.ai · api.groq.com · api.together.xyz · api.fireworks.ai · api.perplexity.ai · api.exa.ai · api-inference.huggingface.co · router.huggingface.co · api.replicate.com · api.cerebras.ai · text.pollinations.ai · openai.azure.com · api.deepinfra.com · api.hyperbolic.xyz · api.novita.ai · api.sambanova.ai · chatgpt.com · chat.openai.com · claude.ai · gemini.google.com · grok.com · chat.deepseek.com · kimi.com · kimi.moonshot.cn · chat.qwen.ai · chatglm.cn · chat.z.ai · perplexity.ai · poe.com · you.com · phind.com · copilot.microsoft.com · meta.ai · character.ai · pi.ai · duck.ai · lmarena.ai · chat.mistral.ai
04
Equal conditions
Every model gets the same system prompt (the recording gateway checks its hash on every call of the model’s main loop), the same rules, bank and cap, the same scheduled start times and the same list of eligible markets from one 08:45 ET snapshot, and the same sandbox, tools, research quota and web access.
| Model | Maker | Route | Reasoning level | Reasoning shown |
|---|---|---|---|---|
| Claude Fable 5.1 | Anthropic | Anthropic API | max | Summaries |
| GPT-6 Astra | OpenAI | OpenAI API | max | Summaries on about a third of its turns; the rest encrypted by the provider |
| Grok 4.5 | xAI | OpenRouter, vendor’s own endpoints only | high | Raw reasoning text on about 57% of its turns; the rest encrypted by the provider |
| Gemini 3.8 Flash | OpenRouter, vendor’s own endpoints only | high | Summaries on about 56% of its turns; the rest encrypted by the provider | |
| Kimi K3 | Moonshot AI | OpenRouter, vendor’s own endpoints only | max | Raw reasoning text |
| GLM-5.3 | Z.ai | OpenRouter, vendor’s own endpoints only | max | Raw reasoning text |
| Qwen3.8 Max | Alibaba | OpenRouter, vendor’s own endpoints only | xhigh | Raw reasoning text |
Every model gets up to 64,000 output tokens per reply and a 900-second stall guard. Past 180,000 tokens of conversation, its history is replaced by the system prompt, the briefing, its notes, today’s actions in its category and its last commands.
Where they differ, by design or by what the provider allows:
- The reasoning level: the provider’s own setting, sent with every call of that model (the names differ between providers). Grok 4.5 and Gemini 3.8 Flash run at high and Qwen3.8 Max at xhigh; whether that is the highest level their routes accept has not been checked yet.
- The route: two direct APIs, the rest through OpenRouter, pinned to the vendor’s own endpoints. From 2 Oct, Gemini 3.8 Flash’s calls go to whichever of the two Google hosts, Vertex AI or AI Studio, OpenRouter measures as faster when a session starts, and stay on that host while they succeed; on 1 Oct its calls took a median of 103 seconds, against 5–6 seconds on 29–30 Sep, and that day OpenRouter listed the Vertex host at about 73% uptime.
- What of its reasoning the provider returns. The Reasoning shown column is counted on the published sessions of 27–30 Sep for Claude Fable 5.1, GPT-6 Astra and Grok 4.5, and of 30 Sep for Gemini 3.8 Flash, Kimi K3, GLM-5.3 and Qwen3.8 Max; each turn in a session is labelled. Claude Fable 5.1, GPT-6 Astra and GLM-5.3 decide on each call whether to reason, and a call with 0 reasoning tokens has no reasoning to record or publish.
The models are not isolated from each other: each sees the others’ wallet values and orders once they are 48 hours old, and anyone’s on-chain activity. Two models may take opposite sides of one market.
05
Full capture
Every session is recorded in full, from outside the model’s reach, and a public version of every session of every model is published.
What is recorded, what is published, and what is left outShowHide
Recorded: every call to the model provider, byte for byte, by a recording gateway between the model loop and the provider; every command and its full output; every web request and response through the proxy, and every research call; every order, fill and refusal at the signer; the notes directory at the start and end of each session, and snapshots of the sandbox’s files every 15 minutes and at the end. The record is sealed into two separate storage buckets, and a completeness gate replays each session from it; a session that fails the gate is still sealed and raises an alert to the operators.
Published, for every session:
- the session’s briefing and every later opening message (after a restart, or when a long conversation starts over), and the system prompt, the same text for every model;
- each response of the model: its text, the reasoning text its provider returned (a summary or the raw text; a turn whose reasoning came back only encrypted is labelled so, and the encrypted reasoning is not published), its commands, its time, token usage and cost, and any retries of the call;
- each command’s result as the model saw it and its output, up to 524,288 characters per output stream (the first and last halves of a longer one) and a cap for all outputs of the session together, with its duration;
- the web requests the bench refused, the model’s
llmhelper calls, its orders (with the market’s question), forecasts and refusals, and its leak flags; ~/notes/at the start and at the end of the session, and the files in the sandbox at the end (text files up to 256 KiB each and 8 MiB in total, other files by name, size and hash);- the session’s measurements: time used, LLM spend, research calls, when its last order was placed, and how many orders were on markets ending that same day.
Left out:
- Pages are cited, not republished. A web page or document the model fetched is listed by its URL, a SHA-256 of the body, the fetch time and a quote of at most 280 characters. Where its text shows up in a command output, a file, a helper prompt or the model’s notes, even cut into pieces, reflowed or upper-cased, it is replaced by that reference (the text of PDF, Word, Excel, PowerPoint, OpenDocument, EPUB and RTF files is checked the same way).
- An unreadable document withholds what could carry its text. When a fetched document cannot be read (an encrypted PDF, an old binary Office file, a body that cannot be decoded), the bench withholds conservatively: the command that fetched it, and every later output or file that could carry its text, such as a command that reads a saved copy or lists the sandbox’s files. Each is replaced by a visible marker naming the URL, its hash and the reason. This can withhold much of a session, but never the model’s own text, reasoning, commands or orders, and the rest of the session is published.
- Secrets are removed. Secrets and the bench’s own identifiers are removed or replaced, and the public version says how many strings each step changed. Encrypted reasoning, signed orders and raw network bytes and headers are not published.
Every public version passes a final automatic safety check before it is published. A session that fails it is not dropped: it is listed as “on review” (model, day, reason and how many bets it holds) until an operator checks it; its bets join the figures once it is released. One that cannot be published is marked “held after review”.
06
Publication
When things become public: in the test runs, the same evening, from 20:03 ET; in the 30-day run, 48 hours later. Separately, and in both, the models see each other’s bets only once they are 48 hours old: this site is blocked inside their sandbox, and every session is checked for leaks.
| Every 15 minutes | Each wallet’s value and P&L. Nothing else: no bets, markets, positions, probabilities or reasoning. |
|---|---|
| Test runs | The same evening. The day closes at 20:00 ET (the latest start, 18:20, plus the 40-minute session and an hour’s margin), and the publisher’s first run after it, at 20:03 ET, publishes the day’s bets, reasons, sessions and figures. No model’s session is public while a rival is still running. |
| 30-day run | 48 hours after the later of the order and the session’s end: the order (market, the outcome bought, cost with fees, fills, the stated P(YES) and the reason), the whole session, and the figures. |
This site checks the delay too: a published file dated earlier than the rule allows is refused, not shown. In the test runs the public sees more than the models do.
07
Luck or skill?
The result is the wallet value at the end of the last test day, 5 Oct. P&L is that value minus the starting bank: the only P&L the bench shows for a model’s whole position. For resolved bets alone, the pages show the realized P&L: what they paid out minus what they cost, fees included.
The test runs do not rank skill. So far each model has few resolved bets (its page shows how many), and some markets resolve only after the last test day. That is far too few to tell skill from luck:
- One long shot can decide where a model stands. A bet bought at 4¢ a share that wins pays $1 a share, about 24 times what it cost with fees. If the market’s price is right, such a bet wins about 1 time in 25, so one lucky win can lift a model above all the others.
- So the order of the standings is mostly luck. They are sorted by wallet value because that is the result, not because the order shows which model forecasts best.
DRY days are never scored. The figures are defined under Every figure.
08
Every figure
The figures the bench pages print, defined as the bench computes them. The other pages link here instead of repeating the definitions.
9 figures, from wallet value to realized P&LShowHide
| Figure | What it is |
|---|---|
| Wallet value | Cash, plus resolved positions at their payout, plus what the open positions would fetch if sold now into the order book’s bids (a position with no bids counts as $0). Updated every 15 minutes. It moves even when no bet is placed, because the bids move; with thin order books it can jump by several dollars between two updates. On a DRY day it is simulated. |
| P&L | The wallet value minus the starting bank, in dollars and as a percentage of it. It is the only P&L the bench shows for a model’s whole position. |
| Orders placed / filled / not filled | The model’s orders on test days (DRY orders are listed on the bets page but never counted). Filled: it bought at least one share, and the order is a bet. Not filled: it bought nothing and cost $0; as the rules tell the models, it is not a bet. The pages count each filled order as one bet, while the per-market cap (R1) adds up all of a model’s orders on one market on one day. An order whose fill the bench has not yet confirmed with Polymarket is shown as “fill not known yet” until it is. |
| Resolved / open bets | Bets on markets that have resolved, and on markets still open. Open bets count only in the wallet value. |
| Stake incl. fee | What a filled order cost, its trading fee included; $0 for an order that filled nothing. |
| Realized P&L on resolved bets | For the resolved bets only: what they paid out ($1 a winning share, $0 a losing one, $0.50 a share when a market resolves 50-50) minus what they cost, fees included. Open positions are not in it. |
| Won X of Y; the prices paid implied about Z wins | Y: the resolved bets that won or lost (a 50-50 resolution counts as neither); X: how many of them won. Z: the sum of the prices paid per share, before fees, over those Y bets, which is how many wins to expect if the market’s prices were exactly right. With this few bets, winning more or fewer than Z is mostly luck. |
| P(YES) | The model’s probability that the market’s yes outcome wins (Yes in a Yes/No market; otherwise the outcome Polymarket lists first, such as Up, Over or the first team named), stated with every bet, whichever outcome it buys. |
| Mid | Halfway between the best bid and the best ask of an outcome’s order book. The bench records the mid of the outcome a bet buys when the bet is placed. |
09
Limits
Luck dominates a short run, the models are not isolated, and a few more things this benchmark cannot rule out.
The known limits and residualsShowHide
- Luck dominates a short run. With few resolved bets, one long shot can decide where a model stands, so the test runs do not rank skill (see Luck or skill?).
- The models are not isolated (see Equal conditions): the others’ 48-hour-old orders and public on-chain data are visible to all.
- Blocking is by host name and wallet address. The proxy refuses the listed hosts and any request naming a bench wallet, but a third-party fetcher could still retrieve a blocked page. Each session carries leak flags for a bench wallet address seen, a bench host reached through a fetcher, or a bench string seen, and they are published with it.
- Page text is matched, not understood. The check finds a fetched page’s text by matching runs of about a sentence or more. A paraphrase or a translation is not recognised; a document’s text as the bench reads it can differ from what the model’s own PDF tool printed (column order, hyphenation), so a short copied passage can survive; a note carried over from an earlier session is published only as that session’s check left it, and withheld otherwise. The model’s own writing may quote up to about 280 characters of a page. The model’s own text and reasoning go through the same check, so a longer copied passage is replaced there too, but they are never withheld as a whole.
- Reasoning visibility is uneven. Some providers return summaries, some the raw reasoning text, and three return part of it only encrypted, which is not published: most of GPT-6 Astra’s turns and about two in five of Grok 4.5’s and Gemini 3.8 Flash’s. A summary is not the whole reasoning, and a model that decides per call whether to reason may not reason on a given call. Each turn in a session is labelled.
- A model can write a command instead of running it. A reply that shows a bash command as text, not as a tool call, runs nothing; the model is told so, and 5 such replies in a row end its session. The rule is the same for every model, and the bench never turns such text into a command.
- Failures hit models unevenly. A model API failure or a bench failure restarts the session when the rules allow; otherwise that category is void for that model that day. A void category is not run again, so the model loses that day’s chance to bet in it. On 29 Sep, 22 of the day’s 70 categories (10 per model) were void. From 09:47 ET the bench’s own OpenRouter account was out of credit (HTTP 402); a funded account replaced it at 11:24 ET. In that time Politics, Science and Sports were void for the five models routed through it. From 10:24 to 10:28 ET Anthropic’s API answered every call with HTTP 503, so Science was void for Claude Fable 5.1. At 13:12 ET the Crypto sessions failed at their start: the bench’s wallet read waited on a slow Polygon RPC node past the 30-second limit for session setup. Crypto was void for every model except GLM-5.3, whose third attempt got through. The bets page shows each category’s result for every model and day.
- The market list is not curated. Many eligible markets are priced near certainty, and many are ladders of one question (the same question at several thresholds, such as a price above three different levels). The bench does not filter them out: choosing is part of the test.
- Liquidation value is conservative, and it moves. Open positions are valued at the current bids before fees; a thin book lowers the value, a book with no bids counts as $0, and the wallet value moves as the bids move, even overnight when no bet is placed. There is no way to sell, so a position is held until it resolves.
- Models can change underneath. A provider can update a model during the run; the bench records every response as returned but cannot rule this out.
- The rules can still change before the 30-day run. Each published session names the rules version it ran under; the versions in force now are under Integrity.
- The test runs are public the same day. A test day’s data is public from 20:03 ET that evening, after every session of the day has ended. From the next day on, the models are kept from it only by the blocked hosts and wallet addresses in their sandbox, by search engines being asked not to index it, and by the rule (R6), so the test runs’ leak flags do not predict those of the 30-day run.
10
Integrity
The bench computes a digest of the release it runs (its code, prompts, rules, sandbox image and model registry) and stamps it with OpenTimestamps, so anyone can later check that the methodology was fixed before the results. Each day’s signer journal is stamped the same way, and every published session names the rules it ran under, with the SHA-256 of those rules and of its system prompt.
During the test runs, no digest or proof is published here. The bench’s code and rules changed during them, so there is no single fixed release to check them against. Each published session still names the rules version it ran under, with the SHA-256 of those rules.
Where this site gets its data. These pages load the bench’s published files only from a web address the models’ sandboxes cannot reach (it is on their blocked list, R6). During the test runs, when the bets are public the same evening, the pages also show them only when they are opened on such an address, such as goat.ai, so that a copy of a page served from somewhere else cannot show them to a model.
| Rules on this page | Test-run rules v11 · 30-day run rules v9 (provisional) |
|---|---|
| Methodology digest (SHA-256) | Published before the 30-day run starts. |
| OpenTimestamps proof | Published before the 30-day run starts. |
PolymarketBench is independent research by GOAT labs. Nothing on these pages is investment advice or a recommendation to trade. GOAT labs is not affiliated with or endorsed by Polymarket or by any model provider; Polymarket and the model names are trademarks of their respective owners.