Skip to main content

metaculus-bot-review

Review how a Metaculus forecasting bot performed on the questions it forecast.

bot-review builds a table of how your bot's forecasts turned out and attaches the reports it posted, so you can see what it was thinking on the questions it got wrong. Everything is read-only and requires no LLM spend. All it needs is METACULUS_TOKEN.

It reads the reports your bot published as Metaculus comments, so it works whether or not the bot saved anything locally. It parses only the format forecasting-tools itself writes, so it works on any bot built on the framework.

Install

pip install metaculus-bot-review

Or with poetry:

poetry add metaculus-bot-review

Set METACULUS_TOKEN in your environment or in a .env file in the directory you run from. That token is what decides which bot gets reviewed.

Scoring your questions

bot-review review --tournament <slug-or-id> --output review.json --summary review.md
bot-review review --resolved-since 30              # anything that resolved recently
bot-review review --post 44328 44326               # specific questions
bot-review review --from-json review.json --top 3  # re-render without refetching

The markdown summary gives your leaderboard standing, how many questions were forecast and scored, and the best and worst questions ranked on whichever score the leaderboard uses — spot peer for the AI benchmark tournaments, time-averaged peer for the Metaculus Cup.

The JSON adds per-question detail: the official scores, the bot's forecast, and one RunTrace per run taken from the comment that run posted — each forecaster's prediction, the run time, and, when the bot publishes its cost metadata, what the run cost and how long it took. QuestionOutcome.trace picks the run that was standing when the question was spot scored, which is the one that earned the score.

Reading the reasoning

Reasoning text is not stored in the table. Pull it a piece at a time:

bot-review show 44328 --section research
bot-review show 44328 --forecaster R1:F3 --comment 921582  # a specific run

Sections are summary, research and forecasts. A research section runs to tens of thousands of characters, so on a question whose resolution you already know it is usually cheaper to search it than to read it:

bot-review show 44328 --section research | grep -niE "death toll" | head

From Python

from metaculus_bot_review.outcomes import get_tournament_outcomes
from metaculus_bot_review.summary import build_summary
from metaculus_bot_review.traces import attach_traces, get_trace

table = get_tournament_outcomes("minibench-2026-06-29")
attach_traces(table)
print(build_summary(table))
print(get_trace(44328, section="research"))

Agent skill

skill/SKILL.md drives the whole loop with an agent which builds the table, decides on the questions worth investigating, reads the reports and writes the review.

Copy it into your bot's repo to use it with Claude Code:

mkdir -p .claude/skills/review-bot
curl -o .claude/skills/review-bot/SKILL.md \
    https://raw.githubusercontent.com/LouisP96/metaculus-bot-review/main/skill/SKILL.md

Then ask it to review the bot.

Rate limits

Metaculus rate-limits at roughly 5 requests per second. The CLI spaces requests by 0.7s; change it with --seconds-between-requests.

License

MIT

Metadata

Release files for metaculus-bot-review 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for metaculus-bot-review 0.1.1
File Size Uploaded
metaculus_bot_review-0.1.1.tar.gz 14.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for metaculus-bot-review 0.1.1
File Interpreter ABI Platform
metaculus_bot_review-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 31.2 kB

Release files / metaculus_bot_review-0.1.1.tar.gz

Download URL metaculus_bot_review-0.1.1.tar.gz
Size 14.0 kB
Tags Source
SHA-256 checksum
How to use checksums
c7e7b0693bb3c4bf8eeb6f90ade9d8b3472258253aad870ff54aac921967f8ac
BLAKE2b-256 checksum
How to use checksums
1f713b5e2f4ad72868f87bbf007b93144bdc7faf76469d1a9c540ed8c79b1776
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.3 {"installer":{"name":"uv","version":"0.10.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Pop!_OS","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / metaculus_bot_review-0.1.1-py3-none-any.whl

Download URL metaculus_bot_review-0.1.1-py3-none-any.whl
Size 17.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
72b7643a8be8d766cba0c084333277f09e8d5acbbcccc8f411aaacab4cb780dd
BLAKE2b-256 checksum
How to use checksums
a7805828462edee41ba7796134ac9f5e62292c26d62c9b332af48982fac91a0c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.3 {"installer":{"name":"uv","version":"0.10.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Pop!_OS","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

0.1.2

2 release files

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page