Hanko, hand-lettered over a pink brush stroke
判子 · A seal you cannot take back

An agent that files receipts.

Twenty market voices go in. What comes out is a sized position, a receipt, and a commitment to what would prove it wrong.

Replayable, byte for byte, from the exact data the agent saw.

DECISION TRAIL · TOKENA SAMPLE · FIXTURE INPUTS

        
      

Three authors mentioned the token. Two were independent. voice_beta was demoted, with the reason attached. The last three lines are the commitment, written before the outcome is known. Real output from the real engine, run at build time against fixed, synthetic inputs (three fictional voices and a fictional token, not real accounts or prices) so the decision id on this page stays the same one every build. Run it against live data here.

Tests
351
All offline, about 5s
Lines
14,576
Across 103 commits
Layers
7
Sources to review
Transports
MCP + REST
Same facts either way
Missing data shrinks the position · sample inputs

Nothing in the rules changed. Only what it knew.

No rule says "halve the size if the safety check is unavailable." A gap lowers completeness, completeness lowers quality, and quality sets size, combined as a geometric mean, so one component at zero takes the whole score to zero.

Full evidence
3.28%
size
confidence 0.66
evidence quality 0.820
completeness 1.00 · freshness 0.75
corroboration 1.00 · independence 0.67
+ safety: safety score 0.82
Safety check unavailable
3.28%
size
confidence 0.62
evidence quality 0.769
completeness 0.75 · freshness 0.75
corroboration 1.00 · independence 0.67
. safety: no score available; size reduced
? gap market_field_missing: safety_score

Most entries treat missing data as a compliance checkbox. Here it's the risk model.

Independence, not agreement · sample inputs

Three voices, two opinions.

Three accounts quoting one thesis is one observation wearing a disguise. Reposts and near-duplicates get demoted to echoes, each tagged with the post it repeats and why.

α
voice_alpha
Original post. Bullish, conviction 0.8.
COUNTED
β
voice_beta
Marked as a repost or quote by the source.
DEMOTED TO ECHO
γ
voice_gamma
Separate thesis, separate timing.
COUNTED
Independent voices
3
of 3 mentions

This is the easiest way for a multi-voice agent to be confidently wrong. Five outlets covering one press release look like five sources. It's one wire story.

Pre-registration · sample inputs

The commitment is sealed before the outcome is known.

Move a threshold, a size, or a review date after the fact and the decision_id changes too: a new decision, not an edited one. Hindsight rationalisation becomes structurally impossible. Refusals commit too: a PASS records what would have flipped it.

At decision timeSealed
ENTER TOKENA
size 3.28% · confidence 0.66
dec_1c1fb9e7ae2020cb260d6f32
! wrong if price_usd < 1.0625 at any point within 72h
! wrong if liquidity_usd < 630000 at any point within 72h
! wrong if independent_voices < 2 at review, within 72h
review at 2026-08-30T12:00:00Z
At review timeGraded
ENTER TOKENA
dec_1c1fb9e7ae2020cb260d6f32 -> rev_24903844c6020591a568451b
x price_usd observed 1.02, committed to wrong below 1.0625
+ liquidity_usd observed 880000, holds
+ independent_voices observed 2, holds
realised return -18.4% (recorded, not used to grade)

A decision can be profitable and still falsified: the price rose while the liquidity that justified the size drained away. The reasoning was wrong; the outcome was luck. Both are recorded; only one sets the grade.

Don't take the rule list on faith. Remove a voice or tighten a threshold on this sample decision yourself and watch the real engine's verdict move, in the workbench.

Open the decision workbench
How it works

Four stages, and one boundary that matters.

Everything before the boundary may touch the network and fail; everything after it is a pure function of recorded inputs. Determinism and honest handling of missing data aren't features to remember. They're properties the code's shape enforces.

Stage 01
Collect
X, RSS and the six RYO research tools behind one adapter interface. Every response is stored under the hash of its own bytes.
impure · network
Stage 02
Interpret
Each post becomes a reading: which token, which direction, how strongly, how urgently. Produced once and frozen into the record. Today a transparent keyword interpreter; a model can replace it without touching replay.
frozen · rule-based
PURITY BOUNDARY
Stage 03
Decide
Independence check, evidence quality, verdict, size, and the falsifiers the decision commits to. No clock, no network, no model.
pure · replayable
Stage 04
Review
At the pre-registered date, each falsifier is checked against observed facts and graded against its own words.
pure · replayable

Interpretation is frozen, not repeated, so replaying a decision proves something specific: the reasoning is reproducible, not that the model would repeat itself, because the model isn't part of the question.

The MCP transport, and what a live x_search call actually returns (confirmed against the real API, not assumed), are written up in full in the docs.

Read the transport docs
Test coverage

What's actually proven.

Proven · 351 tests, all offline

The full list, 16 proven claims each mapped to a real test, is in the docs.

See everything that's proven