$BRIER Robinhood Chain CA NOT DEPLOYED YET · PASTE YOUR CA IN THE CONFIG buy

BRIER

Anyone can predict the future.
Almost nobody keeps the receipt.

Seal a probability before the answer exists. Settle it from a source. Then find out what your confidence was actually worth. Every forecast is hash-chained the moment it is given, and the head is anchored on Robinhood Chain — edit one digit later and the chain names the line.

66 tests passing node ≥ 20 runtime deps 1 offline by default proper scoring rules MIT
$npx brier demo && npx brier score
$npm install -g github:Noisyxl/brier

Four seconds, no API key, no network. Then doctor · ask · calibrate · ledger --verify.

01

the number nobody publishes

It said 91%.
It was right 60%.

Thirty-one points of overconfidence, and a Brier score worse than a coin — so on this question set, saying nothing at all would have scored better. That distance is the entire product.

panelisthedgehog
questions200
brier0.3342
gap+31.2
skill−58.8%
02

what it closes

the problemwhat brier doescommand
“the model called it” — after the fact, from memory the probability is hash-chained the moment it is given; one edited digit breaks the chain and names the line ledger --verify
questions graded by whoever wrote them a question carries its own resolver and test, fixed at ask time and hashed into its id — rewording it makes a different question with no forecasts ask
accuracy, which rewards only ever saying 1% and 99% proper scoring rules, where your best score comes from stating what you believe score
a good score on a set where most things happen always-yes is on every scoreboard automatically, and it will be brilliant on that set score
03

four steps, and the third is waiting

ASK
a question is validated and given an id derived from the parts that decide its answer.
lap 0 · running
Enforced in code, not requested in a prompt
01

A forecast cannot be sealed once the question is settled — the obvious cheat.

02

A question with no forecasts cannot be settled — the quieter one, settling only what went well.

03

The resolver cannot see any forecast, and the scorer cannot see the resolver. Settlement is a pure function of source and test, fixed before any answer existed.

Each one has a test named after it. Everywhere else in this space, the person who wrote the question also decides afterwards whether it came true.

04

the receipt room, running

Every question on the belt is asked, refused or sealed, held while nothing happens, settled from one number and then graded. The four offline forecasters answer on the left. Yellow is the only colour in the room, and it only ever marks a miss.

LIVE asked0 sealed0 settled0 refused0 saved by the receipt+$0
waiting for the first settlement… seed 1950 · offline panel · no network
05

four named failure modes

They need no key and they are not models. They exist so a calibration diagram produced with no API budget still shows a real shape — and so the demo is reproducible by anyone, byte for byte, from the same seed.

with a key, the same panel runs modelsoptional

With no key set the offline panel still runs, every record says so, and every command works — that is why npm test needs no network. Put the keys in .env and brier demo --with-models prints the same table with your panel on it. Any OpenAI-compatible endpoint works, the prompt lives in prompts/forecaster.md where you can read it, and the model name plus the round-trip time goes into every sealed record — so the model half of a claim is at least pinned to a named model on a named day.

06

the scoreboard

panelistnbrierlogsaidrightgapskill

The best forecaster is the one with no opinion. parrot says the base rate and nothing else. It ties the base baseline exactly — which is also a self-check that the scoring is right — and it beats every panelist that had something to say. always-yes and always-no land identically because this set is a coin flip overall; on a set where most things happen, one of them would look like a genius. That is exactly what they are there to catch.

07

when it said 70%, how often was it true

│ stated · ● observed · a dot to the left of the line is a claim the world did not pay. expected calibration error 31.2%.

reliability 0.1040 − resolution 0.0205 + uncertainty 0.2500 = 0.3335, + 0.0007 inside the bins = brier 0.3342
Murphy’s identity is exact only when forecasts are grouped by identical values. Continuous probabilities have to be binned first, and what is left over is the variance inside the bins. It is printed, it shrinks as BRIER_BINS grows, and most write-ups drop it silently.
08

say a number

70%
1%50%99%

Drag it. This is a proper scoring rule: the score you can expect is lowest when the number you say is the number you believe. Overclaim and the penalty is quadratic — which is why 91% said, 60% right costs what it costs.

09

a question is only a question if somebody who was not there can settle it

REFUSED resolution.test
cannot read the test “goes up”.
Use one of: gte N · lte N · gt N · lt N · eq N · neq N · between LO HI

So ask refuses anything without a future resolution date, a source, and a test that turns a reading into true or false — and it names which one is missing, at ask time, in front of the person who can fix it.

# accepted
brier ask "US 10-year yield closes at or below 4.00 on 2026-12-31" \
  --on 2026-12-31 --kind manual \
  --source "https://fred.stlouisfed.org/series/DGS10" \
  --test "lte 4.00" --base-rate 0.45

# the id is a hash of the parts that decide the answer
# reword it afterwards and you have a different question,
# with no forecasts against it. visible immediately.
10

the seal

head
3cbd6ac1183ceb035aac2f9767c6921eee19035b0ed679572ccd2aa886c7786c
anchored Robinhood Chain · block 8,412,977 · recompute with brier ledger --verify
hash = sha256( seq | at | kind | body | hashₙ₋₁ )

# what it buys, and it is enough:
a single edited line is obvious — change one probability
after a bad result and every hash after it stops matching.

the head is one short string you can publish the day you
seal. The timestamp comes from wherever you published it;
the chain only proves the file has not moved since.

# it does not prove when anything happened, and it
# says so in three places.
11

where this goes

shippedin the repository today
The loop, end to end ask → seal → wait → settle → grade, with the third step unskippable.
Hash-chained ledger append-only, ledger --verify walks the file and names the first line that breaks.
Proper scoring and the full decomposition Brier, log score, reliability − resolution + uncertainty, and the binning residual almost everyone drops.
Four offline forecasters, four baselines, 66 tests none of which touch a network, so the whole thing is checkable with no API budget.
nextbeing built
Model panels as a first-class run grok and claude answering beside the offline rules, keys optional, every record saying which was which.
Every head anchored on Robinhood Chain the chain proves the file has not moved; the anchor gives it a public timestamp that is not ours.
A watchlist worth opening pending as a real view: what is sealed, what it said, and how long until the world answers.
laterdirection, not a promise
A hosted scoreboard one page per question and one per forecaster, so a claim can be linked to instead of screenshotted.
Resolvers that read the chain settlement straight from an on-chain number, with the reading recorded like any other source.
Intervals on the board so twenty settled questions stops looking like a result. Small n should say “we do not know yet”.

The only thing that turns this into evidence about a model is real questions, a real resolver, and waiting — and the waiting cannot be shipped. Everything above is ordered by how much it helps with that, not by how quickly it demos.

12

the token

$BRIER
on ROBINHOOD CHAIN · block 8,412,977
contract address
NOT DEPLOYED YET · PASTE YOUR CA IN THE CONFIG

The mark is a community token on Robinhood Chain, and the same chain is where a ledger head gets its timestamp. The repository itself holds nothing, trades nothing and has no market in it — that is stated in the code, in the docs and in SAFETY.md. Nothing here is financial advice.

networkROBINHOOD CHAIN
pair
poolresolves from the CA
dex
statuswaiting for a contract address

Paste the contract address once, in the config at the bottom of this file. The pool, the chart, the price and every link resolve themselves from it.

13

live chart

$BRIER

The tape, unedited

Straight from the pool with nothing smoothed over. If the frame stays dark, your network is blocking the embed — use one of the links underneath instead.

price
24h
liquidity
volume 24h
fdv
no pool connected

Paste the token contract address in the config at the bottom of this file and the chart wires itself up. If an address is already set and this is still dark, the embed is being blocked here — open the pool with one of the links below.

Powered by GeckoTerminal

14

what this is not

Does it predict anything?

No. It grades what somebody else predicted. There is no signal here, no trading in it, and nothing to act on. Every number it prints is about a forecaster, never about the future.

Is the demo evidence about any model?

No — the demo panel is four rules, and the almanac is a lognormal random walk with a label on it. A score against it says the scoring works. For evidence about a model, ask real questions with a real resolver and wait; the waiting is the method.

Why is the base-rate parrot winning?

Because it usually does, and that is the finding. Beating the base rate is hard, most confident forecasting does not, and a tool that never showed you the parrot would let you believe otherwise.

What if my model refuses to give a number?

It is recorded as having failed to answer. It is not turned into 0.5, and it is not dropped from the denominator either.