a second brain that marks its own homework
obsidian vault · terminal · zero dependencies
Two commands. Every number below is computed from the files, not written into the program.
$ pip install -e . $ yoink demo && yoink # a vault that already has a life
Four lines of frontmatter turn a thought into a bet. When the date lands,
yoink settle reads the source and writes the answer back into the file.
title: Robinhood testnet clears 10M claim: tx count is at or above 10000000 settles: 2026-10-01 reads: chain:robinhood-testnet/txcount test: gte 10000000 confidence: 0.7 ── the date lands, yoink settle runs ── outcome: false reading: 8412998 read_from: robinhood-testnet @ 9412998
Four lines. A number, a direction, a date, and where the answer will come from.
No model, no opinion — it reads the source you named and writes the reading back into your file.
A settled claim cannot settle twice, and the date cannot move after the fact.
Alive if something links to it, it links to something, you came back after the day you saved it, or it carries a bet that has not closed. Otherwise dead — a third of most vaults, and invisible, which is why people believe their vault is working.
From yoink demo on a fixed seed.
scripts/figures.py --check fails if this page and the code disagree.
Gold marks what needs you — a claim that is due, a link that dangles, the share of your vault that is dead. Everything healthy is green and quiet. This one is real: the refusals below are the same rules the program runs, and they run in your browser. Nothing here signs anything.
A claim is only worth making if somebody who was not there can check it.
| source | what it reads |
|---|---|
file:data/readings.json#chain.block | a JSON file, by key path |
csv:bars.csv#close@2026-10-01 | a column, on a date |
chain:robinhood-testnet/blocknumber | a public chain, over JSON‑RPC |
manual:https://… | you read it — and the URL is recorded |
robinhood 4663 ·
robinhood-testnet 46630 · ethereum 1.
Calls eth_chainId first and refuses if the
endpoint reports a different chain than the claim named.
Four methods, all four read. No signing, no keys, no wallet — and a test parses the file to prove the words are not there.
--claim "it will moon"
✗ refused — “moon” cannot be settled by reading a number. Say what number,
and which way.--settles 2020-01-01
✗ refused — not in the future. You cannot bet on yesterday’s race.--reads nowhere
✗ refused — not a source. Use file: csv:
chain: manual:--test "goes up"
✗ refused — not a test. Use gte 10 lte 3.5
gt 0 eq 1 between 2 4A settled claim cannot be settled again, and a claim cannot be attached to a date that has passed. No looking, then settling differently.
~/yoink-vault/ ├── 2026-09-11-robinhood-chain.md ├── claims-need-a-date.md ├── data/readings.json ← claims settle against this └── .yoink/ledger.jsonl ← the only file that is not a note
Everything — the graph, the search, the pulse — is recomputed from the files every run. Ten thousand notes scan in under a second.
The ledger is append-only, each line hashed over the one before it:
sha256( seq | at | kind | body | hash₋₁ ). A scoreboard you can quietly edit
is not a scoreboard — change one confidence after a bad outcome and
yoink doctor names the line.
Delete yoink and nothing is lost, because there was never anything but your files.
NOT LIVE YET · ADDRESS APPEARS HERE AT LAUNCH
The mark is a community token on
Robinhood Chain — the same chain a chain: claim reads a block height from.
The repository holds nothing, trades nothing and has no market in it.
Nothing is deployed yet. When the mark is live on a pool the indexers can see, the pair, the price and the chart fill themselves in.
A share of what is left is sent to an address nobody holds the keys to. It only moves one way — nothing brings it back. The clock below is the real one: it is counting to the next burn right now.
Every figure here is read from the chain at launch. Until an address is set they stay dashes — a number with nothing behind it is worse than no number.
How often, how much, and which address — all three are set before a single burn runs. A rule you can change after seeing the result is not a rule.
Each burn is a transaction. The ledger below carries its hash, so you verify it on the explorer instead of believing this page.
The burn address has no owner and no keys. Tokens that go there are out of the supply for good — that is the whole point.
No dates. A date you cannot settle is not a claim — and this project would have to refuse its own roadmap. So: order, not calendar.
The vault scanner, the four panes, claims with a date, settlement from four source kinds, the hash-chained ledger, the refusals. 201 tests, zero dependencies, MIT.
Alive against dead, said against right, and the gap between them printed where you cannot avoid reading it.
A pool on Robinhood Chain. The address lands on this page, the chart mounts itself, and every field that is a dash today fills from the chain.
The burn runs on the clock above, and each one is written into the ledger with its transaction hash so it can be checked without trusting this page.
A shared board: claims, confidences and outcomes that anybody can read. The score stops being a number you keep on your own machine.
More things a claim is allowed to read, each one added the same way: only if a stranger can check the answer.
yoink doctor --chain says who answered.