Each AI isn't one model guessing — it's 4 agents that debate until they agree, then bet real money. That's the product.
Season 1 was a public bake-off: eight frontier AIs, one paper book each, priced across the whole group stage. Now the tournament has narrowed to the knockouts, so Season 2 changes shape.
Season 2 is a single agent. Nick runs six different workflows and uses LLM consensus to make deeper prediction decisions on one game at a time.
The stakes are higher now, so the approach flips from volume to precision. Season 1 was many agents pricing many games fast. Season 2 is one agent going deep on each match: a closer read of both teams, the odds, the Elo, the markets, and past results, then a live bet on Polymarket.
Through the group stage, Round of 32, and Round of 16, every frontier AI got the same prediction-market dataset at the same moment, made its own calls, and ran a $1000 paper portfolio in public. 947 settled trades later, here is how it finished.
Best calls

Spain vs Cabo VerdeKimi$234
Norway vs EnglandDeepSeek$232
Norway vs EnglandKimi$226
Panama vs EnglandGrok$174
Germany vs CuracaoDeepSeek$166Worst calls

Argentina vs AlgeriaClaude-$80
United States vs AustraliaClaude-$80
Mexico vs South AfricaDeepSeek-$80
Germany vs CuracaoDeepSeek-$80
Argentina vs AlgeriaDeepSeek-$80Through to Season 2
France
Morocco
Spain
Belgium
Norway
England
Argentina
SwitzerlandEach agent started Season 1 with $1,000. Where the money went over the group stage, Round of 32, and Round of 16.
They chased edge, and it cut both ways.
Each agent bet whenever its own probability beat the Polymarket price. Read an underdog at 14% when the market said 10%, and it took the bet. That produced a lot of asymmetric bets, and a lot of losses: a four-point read on a 10% shot is still a coin flip that mostly lands against you.
The edge lived on the side markets.
Not the moneyline. Both teams to score and Over / Under 2.5 were the most-picked markets (548 and 547 settled bets), where a model's number could disagree with the book by enough to act on.
Same data, very different agents.
Every model saw the identical dataset, yet Grok pulled away from the field. A gap that wide comes down to training, not information. Claude went the other way: it decided most edges were not strong enough to back and traded the least, 10 settled bets all season.
A single NickAI workflow snapshots the world at the top of each cycle: live Polymarket prices, 50-book sportsbook consensus, Elo ratings, RSS news from the last 6 hours, weather for the host city, fixtures, and player props.
That frozen snapshot is the input every agent sees. No agent gets news the others did not, no agent gets odds 30 seconds fresher. Same data, same moment, for every AI, so the only variable is the AI.
Each AI is not a single model guessing. It is a swarm of four agents (Stats, Context, and Market analysts, each working a different slice of the read) then a Synthesizer that compiles their analysis into one decision. The same method runs for all eight, word for word. The only difference is the lab: Claude, GPT, Gemini, Grok, DeepSeek, Qwen, Kimi, and Mistral.
Each model returns structured JSON: action (BACK / LAY / MONITOR / HOLD), market, side, price, fair value, edge, confidence, and a short rationale. A deterministic FUNCTION node handles the bookkeeping. The LLMs never touch the books themselves.
Every agent began with the same $1000 paper portfolio. Positions opened at live Polymarket prices, marked to market every minute, settled when markets resolved.
No retroactive edits. No hidden trades. If an LLM hallucinated a market that did not exist, the FUNCTION node rejected the pick and the agent lost the opportunity.
Every signal, every position open and close, every mark-to-market is recorded with a cycle ID and timestamp. You can drill into any agent and replay exactly what it saw and did at any moment.
Group stage · 72
Mexico v South Africa
2–0
South Korea v Czech Republic
2–1
Canada v Bosnia-Herzegovina
1–1
USA v Paraguay
4–1
Qatar v Switzerland
1–1
Brazil v Morocco
1–1
Haiti v Scotland
0–1
Australia v Turkey
2–0
Germany v Curaçao
7–1
Netherlands v Japan
2–2
Ivory Coast v Ecuador
1–0
Sweden v Tunisia
5–1
Spain v Cape Verde
0–0
Belgium v Egypt
1–1
Saudi Arabia v Uruguay
1–1
Iran v New Zealand
2–2
France v Senegal
3–1
Iraq v Norway
1–4
Argentina v Algeria
3–0
Austria v Jordan
3–1
Portugal v DR Congo
1–1
England v Croatia
4–2
Ghana v Panama
1–0
Uzbekistan v Colombia
1–3
Czech Republic v South Africa
1–1
Switzerland v Bosnia-Herzegovina
4–1
Canada v Qatar
6–0
Mexico v South Korea
1–0
USA v Australia
2–0
Scotland v Morocco
0–1
Brazil v Haiti
3–0
Turkey v Paraguay
0–1
Netherlands v Sweden
5–1
Germany v Ivory Coast
2–1
Ecuador v Curaçao
0–0
Tunisia v Japan
0–4
Spain v Saudi Arabia
4–0
Belgium v Iran
0–0
Uruguay v Cape Verde
2–2
New Zealand v Egypt
1–3
Argentina v Austria
2–0
France v Iraq
3–0
Norway v Senegal
3–2
Jordan v Algeria
1–2
Portugal v Uzbekistan
5–0
England v Ghana
0–0
Panama v Croatia
0–1
Colombia v DR Congo
1–0
Switzerland v Canada
2–1
Bosnia-Herzegovina v Qatar
3–1
Scotland v Brazil
0–3
Morocco v Haiti
4–2
Czech Republic v Mexico
0–3
South Africa v South Korea
1–0
Ecuador v Germany
2–1
Curaçao v Ivory Coast
0–2
Tunisia v Netherlands
1–3
Japan v Sweden
1–1
Turkey v USA
3–2
Paraguay v Australia
0–0
Norway v France
1–4
Senegal v Iraq
5–0
Uruguay v Spain
0–1
Cape Verde v Saudi Arabia
0–0
New Zealand v Belgium
1–5
Egypt v Iran
1–1
Panama v England
0–2
Croatia v Ghana
2–1
Colombia v Portugal
0–0
DR Congo v Uzbekistan
3–1
Jordan v Argentina
1–3
Algeria v Austria
3–3Round of 32 · 16
South Africa v Canada
0–1
Brazil v Japan
2–1
Germany v Paraguay
1–1
Netherlands v Morocco
1–1
Ivory Coast v Norway
1–2
France v Sweden
3–0
Mexico v Ecuador
2–0
England v DR Congo
2–1
Belgium v Senegal
3–2
USA v Bosnia-Herzegovina
2–0
Spain v Austria
3–0
Portugal v Croatia
2–1
Switzerland v Algeria
2–0
Australia v Egypt
1–1
Argentina v Cape Verde
3–2
Colombia v Ghana
1–0