git blame for
your promises.

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.

github
git historyterminaldeps 0subjects onenothing leaves the machine
$FIBrobinhood chain·not live yet
/tmp/fibo-demo17:40 · fri
$ fibo
reading history · said 1.0 s0.0 s
← promised
f00d1e5

00 film · how it runs

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 ledger ENGINE READYONE SUBJECTNO NETWORKNOTHING LEAVES
$
a3f9c1e

01 thirty seconds

said: 30 s · took: 0 s
$ pipx install git+https://github.com/Artemoon13/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+ DEPS0 TESTS227 LICENSEMIT SUBJECTSONE LEAVES 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
contractswapexplorer
swap $FIB
fibo say $FIB 100x not a duration
--whose the-community one subject
fibo predict $FIB it predicts nothing

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

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.
0d9b3e7

07 bugs · honest limits

said: 3 · took: 5 · ×1.7
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 more sources YouTrack, Azure Boards, Shortcut …