You have made a thousand estimates. You have checked none of them. fibo reads the tracker and git, divides took by said for every task you ever closed, and prints one number.
said: a gif · took: the real thing, in your browser
A working copy of the program, in the browser, on the demo repository. Every line it prints was printed by the real one first; the refusals are the same rules. Type, or press a button. Nothing here is sent anywhere.
you@demo/tmp/fibo-demo · 230 tasks · 169 counted · 2 in the ledgerENGINE READYONE SUBJECTNO NETWORKNOTHING LEAVES
$
a3f9c1e
01 thirty seconds
said: 30 s · took: 0 s
$ pipx install git+https://github.com/0xkuch/Fibo
$ fibo demo
# then, inside your own repository:
$ fibo
The demo is two years of made-up history — the same numbers on every machine. Yours starts empty, and neither run sends anything anywhere.
PYTHON3.10+DEPS0TESTS227 ✓LICENSEMITSUBJECTSONELEAVES THE MACHINENOTHING
7b02d4c
02 a promise with a number on it
said: 3 lines · took: 3 lines · ×1.0
saidan estimate written down before the first commit: in your tracker, in the commit, or in the ledger
first commit → merge, in working hours, in the time zone your own commits carry
×took ÷ said for every task you finished, and the median of those, taken in log space
The auth migration took 9.6 days and shipped on a Friday. The search index took 14 hours. Hover a number — it tells you what was promised.
Your tracker already holds years of estimates (Jira, Linear, GitHub, GitLab), so the first run has history to work with. Without a tracker, put Estimate: 2d in the first commit of a branch. Without either, fibo say PROJ-412 2d writes it down before you start.
#An estimate nobody checks is not an estimate. It is a mood.
e91a5f0
03 the multiplier
said: 1 screen · took: 2 screens · ×2.0
0.0×this number is the whole product. it does not tell you to estimate better. it tells you what to multiply by.
drift · 90-day rolling mediantwo years → now
3.7×4.5× · last 90 days
median in log space. ×4 and ×¼ are the same distance from ×1, and the median does not care about the one ×40 disaster.
working hours. mon–fri, 9–18, in the offset your own commits carried. a day is 8h, a week is 40h. --calendar takes both sides literally, shown small.
span and active. span: first commit → merge. active clips any pause over three working days. the gap is how long tasks sat waiting.
p90 is the bad day: in the worst case, ×8.6.
by kind of work. tracker labels, then where the diff went (migrations/, tests/), then the words in the title. five tasks to be shown.
fibo PROJ-412 takes one task apart. fibo drift shows it quarter by quarter. fibo doctor checks that nobody nudged anything.
c47d210
04 what it refuses
said: 4 examples · took: 5 · ×1.25
fibo say PROJ-412 soon✗ not a duration
fibo say PROJ-412 2d✗ written after the work began
a task with no estimate✗ not counted, and not guessed
--whose someone@else.com✗ this tool has one subject
story points, no rate given✗ points are not time
not a duration. "soon", "by the end of the sprint", "quick" are not estimates. say a number and a unit.
written after the work began. the program knows when the field changed and when the first commit was made. the value that stood at the first commit counts. doctor lists the rest.
not guessed. a task without an estimate gets nothing by analogy, by average or by diff size. it is left out, and the output says so.
one subject. yours. it will not print another person's multiplier, aggregate a team, or export. --whose with anyone else's address fails loudly.
points are not time.--points-as-hours=N exists, and the output then says the number rests on your assumption.
#A mirror pointed at someone else is a different object with a different name.
51fe8ab
05 on disk · the ledger
said: 4 files · took: 4 files · ×1.0
.fibo.jsonoptional, yours: who you are, which tracker to ask.fibo/ledger.jsonlevery line hashes the one before.fibo/ledger.headthe hash of the last line.fibo/cache/tracker responses with a TTL; delete it any time
That is all of it. No database, no index, no daemon, no server, no account, no telemetry. Every run recomputes from history. With a tracker it only reads — GET and GraphQL queries; a mutation is refused before it is sent.
.fibo/ledger.jsonltry editing a line
$ fibo doctor
#A multiplier you can quietly edit after a bad quarter is not a multiplier.
deadbee
06 the token
the program does not touch it · said: nothing · took: nothing
$FIBrobinhood chainnot live yet
—price · said at launch took · whatever the chart says
A community token. The code does not know it exists: there is no import, no flag, no line in the ledger. fibo will never require it and will never print its price.
No promises. If someone tells you a date, run fibo on them first.
not financial advice · the owl is not a financial advisor · it is not even a real owl
the burnsaid: every 9 hours · took so far: —lit
when this reaches zero, every fee $FIB has earned buys $FIB, and that $FIB goes to the burn address. nothing comes back. then the clock starts over.
a wallet does this, not the program. the clock is on this page so that it can be checked; checking is the whole point.
00days:00hours:00min:00sec
first burn · —burn #1
live chartpowered by geckoterminal— · pool address appears here
—————
nothing is deployed yet. when $FIB is live on a pool the indexers can see, the pair, the price and this chart fill themselves in. what you see behind is made up, like the demo.
IT CANNOT SEE THINKINGthe clock starts at the first commit, not the first thought. your real multiplier is higher than the one printed.
IT CANNOT SEE INTERRUPTIONa branch that sat for a week looks like a week of work. active is there for that, and it is still an approximation.
THE DEMO IS A DEMOreproducible, and nobody's record of promises. yours starts empty.
IT DOES NOT KNOW THE RIGHT ANSWERthere is no correct estimate. it knows what you said and how long it took.
IT PREDICTS NOTHINGno model, no opinion. what was written down, what happened, one division.
ROADMAP · ORDER, NOT CALENDAR00 the tool ✓01 the multiplier ✓02 by kind of work ✓03 the drift ✓04 what is next has a number on it: 08 roadmap ↓
5a1d70c
08 roadmap · the ledger
said: 7 lines · took: 0 closed · ×—
Promises with numbers on them, in the program's own units: a day is 8 h, a week is 40 h. When a line ships, its took is written next to its said, and the multiplier that comes out is what the rest of this list should be multiplied by.
Order, not calendar. A said is a length, not a date, and nothing here moves up because someone asked.