Stop dropping tasks, start dropping updates.
Bentoban is a markdown-backed weekly planner that lives in your terminal. Keep every client cleanly compartmentalized, protect your daily focus, and let Bentoban gently nag you the second a task goes stale or a stakeholder is waiting on an update.
$ git clone https://github.com/fredrikburman/bentoban && cd bentoban && make installNeeds Go 1.25+. MIT licensed. The command is b.
A replica running in your browser, on a fake week with four clients. Fix the Flags on Home, or move cards on the Board. The real b reads your markdown files and reloads when they change.
Five clients. One of you.
Every client has its own board, its own notes and its own stakeholders. Nobody keeps the picture across all of them except you, and you’re in a meeting.
That’s where things slip: the update you promised Anna, the due date that crept up while another client ate your week, the Task that’s been “doing” since September.
Bentoban keeps that picture in one place and keeps poking you about it. Gently. Mostly.
Sorry, totally forgot to send that. Wait, that was due Friday? I was sure I'd told you. It's in progress. It has been for a while.
A week, not a backlog.
Endless backlogs are where plans go to die. Bentoban plans in Weeks: you commit to 3–5 results, link the work to them, and check in every day.
- Friday
Commit
Pick 3–5 Commitments for next week. Results that are true or not by Friday (“security controls documented”), not lists of Tasks.
/friday - Each morning
Pick Today
Choose 1–3 Tasks that move a Commitment. Three. Not eleven.
/today - Each evening
Wrap up
What got done, what carries over, who needs to hear about it.
/wrap - Next Friday
Keep or miss
Each Commitment is kept or missed. A missed one is carried, re-scoped or dropped with a reason. Nothing disappears quietly.
b week close
The whole routine, with a worked Week and a cheat sheet, is in the guide.
It nags. Softly, and only about real things.
b computes Flags from your files. They never block anything, and a Flag that’s always on gets ignored, so they stay few and fixable.
Press enter on one and b offers the fix: link it, move it, set a new date, mark it told. Overdue, Due soon and Untold are promises to other people, so those can’t be snoozed.
Overdue KITE-4 Send revised quote: due 2026-10-17, 3 days ago Due soon INT-4 Invoice September: due tomorrow (2026-10-21) Untold ACME-7 Fix currency rounding: done 1 day ago; tell Anna WIP nord: 2 doing Tasks (limit 1): NORD-9, NORD-11 Off-plan NORD-9 Rotate staging secrets: doing without a Commitment of 2026-W43 Stale NORD-8 Get VPN access from IT: waiting for 6 days; follow up with Lars
- OverduePast its due date.
- Due soonDue within two days.
- UntoldHas news its Notify list has not heard yet.
- WIPMore Tasks in doing than the Client’s limit (one, unless you say otherwise).
- StaleUntouched too long: doing for 3 days, waiting for 5, next for 3 weeks.
- Off-planIn doing, but serves none of this Week’s Commitments.
- No planThe Week has no Commitments. One Flag, instead of twenty Off-plans.
You did the work. Did you tell anyone?
Every Task can have a Notify list: the people who should hear about it. When it’s done, when its date moves or when it stops waiting, b marks it Untold until you’ve told them.
Claude drafts the message, you send it, and b told logs it under ## Updates. Next month, when someone asks “did you ever mention that?”, you can prove you did.
Untold since Mon: ACME-7 Fix currency rounding → done Notify: Anna (product owner, ACME Corp) · Slack Hi Anna, the currency rounding fix is live. Totals now round per line, so invoices match the quote again. Send it yourself, then I’ll record it with b told ACME-7. OK?
Plain markdown. Yours forever.
Your work lives in a Brain: a private git repo of plain markdown files, one file per Task with YAML frontmatter.
- Grep it, edit it in your editor, version it with git.
- No database, no account, no sync service.
- No “export your data” button, because it’s already yours.
b synccommits, pulls and pushes to your private remote. That’s the whole sync story.
brain/
├── config.yml
├── weeks/2026-W43.md
└── clients/acme/
├── client.yml
├── context.md
├── notes/2026-10-15-kickoff.md
└── workstreams/pricing/tasks/
└── ACME-3 - build-pricing-calculator.md--- id: ACME-3 title: Build pricing calculator status: doing priority: p1 due: 2026-10-22 commitment: 2026-W43/C1 notify: [Anna] --- ## Plan - [x] sketch UI - [ ] wire the API
A deterministic tool and a thoughtful assistant.
b never calls an LLM. It computes facts and hands them over as JSON. The judgment calls, like what matters today or what next week should commit to, go to optional Claude Code skills.
They propose. You say yes. Nothing is written without it. With make install-claude, every Claude session in any repo starts with your Focus.
Not into AI? Skip it. b is a complete app on its own.
Focus 2026-10-20 (Tue, 2026-W43) Inbox: 3 Commitments: C1 acme: Pricing calculator live for sales (4 tasks, 1 done) C2 nord: Security controls documented (2 tasks, 0 done) C3 internal: September invoiced, every client (1 task, 0 done) Today: ACME-3 Build pricing calculator (acme, doing, C1) NORD-11 Document access controls (nord, doing, C2) INT-4 Invoice September (internal, doing, C3) Flags: Overdue KITE-4 Send revised quote: due 2026-10-17, 3 days ago Due soon INT-4 Invoice September: due tomorrow (2026-10-21) ... 6 more
/todayMorning. Proposes 1–3 Tasks that move this Week’s Commitments, and what to park./wrapEvening. What got done, what carries over, who needs an update./fridayReviews the Week, triages the Inbox, and helps you commit to the next one./tellDrafts the message for a Task’s Notify list, or a whole Client update./note-actionsPulls action items out of meeting notes, and turns the ones you confirm into Tasks./onboard-clientInterviews you about a new engagement and drafts its Context, Workstreams and Tasks.
Client stuff stays put.
On your machine
Everything lives in your own repo. No account, no server, nothing to sign up for.
No phoning home
bmakes no network calls of its own. Onlyb syncreaches the network, through git, to the remote you set up.AI opt-out per Client
ai: falsein aclient.ymlhides that Client from all JSON, Focus and every Claude session. The TUI still shows it, for your eyes only.
Install
- Get
b. Needs Go 1.25+, and installs into~/.local/bin. - Make a Brain. It also writes
~/.config/b/config.ymlpointing at it. - Add a client and Capture something.
- Open it. Press ? anywhere for every key.
Optional: make install-claude (needs jq) for the rituals. Give the Brain a private git remote to back it up. It holds your client work, so never make that repo public.
# 1 $ git clone https://github.com/fredrikburman/bentoban $ cd bentoban && make install # 2 $ b init ~/brain # 3 $ b client new acme --key ACME --name "ACME Corp" $ b add "Build pricing calculator" -c acme # 4 $ b