b

Stop dropping tasks. Start sending updates.

A kanban board and weekly planner for your terminal. Plain markdown files, one board per client.

For consultants juggling several clients at once. Every client gets its own compartment, you plan once a week, and Bentoban nags you the moment something is overdue or someone is waiting on an update.

Commitment
A result you promise for the week, true or not by Friday.
Flag
A nudge about something overdue, untold or due a chase. Never blocks you.
Notify list
The people who should hear when a Task is done or moves.
Brain
Your folder of markdown files. It is all your data.
  1. Press enter on the Overdue Flag on Home and pick a fix.
  2. Press 2 for the Board, move a card between columns and press * to star it Important.
  3. Press 3 for Notes: each client’s ranked Objectives and Commitments tied to them.
~/brain — bclick, then use the keys

A replica running in your browser, on a fake week with four clients. The real b reads your markdown files and reloads when they change.

$ git clone https://github.com/fredrikburman/bentoban && cd bentoban && make install

Needs Go 1.25+. MIT licensed. The command is b. Step-by-step install

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.

~ ❯ cat excuses.txt
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 and link the work to them. One review a week is the whole routine. Nothing is daily.

  1. Friday, or whenever

    Review and commit

    Settle the Weeks that are over, then pick 3–5 Commitments for the next one: results that are true or not by Friday (“security controls documented”), not lists of Tasks.

    /friday
  2. All week

    Capture and star

    Requests go straight to the Inbox. Star what should make next Week’s plan, up to five, so it is not lost between now and then.

    b add
  3. As it happens

    Tell and chase

    Done work gets told to the people who care, and a stalled wait gets a nudge. Focus shows both at the start of every Claude session.

    /tell
  4. Next review

    Keep or miss

    Each Commitment is kept or missed. A missed one is carried, re-scoped or dropped with a reason. Skip a Friday and nothing breaks: it is named as Review due until you get to it.

    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.

Daily, you see only what needs action today. How the work is spread and ageing (WIP andStale) waits for the weekly review: b flags --review.

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.

~/brain ❯ b 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)
Untold ACME-7 Fix currency rounding: done 1 day ago; tell Anna
Chase NORD-8 Get VPN access from IT: waiting 6 days on Lars (chased 1×)
  • OverduePast its due date.
  • Due soonDue within two days.
  • UntoldHas news its Notify list has not heard yet.
  • ChaseA waiting Task whose chase date has come: time to nudge whoever it waits for.
  • UntriagedThe oldest Inbox Task is over five days old.
  • No planThe Week has no Commitments, though Tasks are doing or next. Shown instead of Review due, never both.
  • Review dueThe weekly review has a Week to settle or plan. One line at the top of Focus.
  • WIPMore Tasks in doing than the Client’s limit. Read on Friday, not every day.
  • StaleUntouched too long: doing for 3 days, next for 3 weeks. Also a Friday read.

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.

~/brain ❯ claude /tell ACME-7
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 sync commits, pulls and pushes to your private remote. That’s the whole sync story.
~ ❯ tree ~/brain
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
…/tasks ❯ cat ACME-3*.md
---
id: ACME-3
title: Build pricing calculator
status: doing
important: true
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, and opens with one line when the weekly review is due.

Not into AI? Skip it. b is a complete app on its own.

~/brain ❯ b focus --brief
Focus 2026-10-20 (Tue, 2026-W43)
acme: 1. Self-serve pricing · 2. Fewer support tickets
Inbox: 3
Important: 3/5
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)
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)
  ... 2 more
Doing:
  acme: ACME-3 Build pricing calculator (due 2026-10-22)
  ... 2 more
  • /fridayThe one ritual. Settles the Weeks that are over, plans the next 3–5 Commitments, drafts every Client’s update. Works on any day.
  • /tellDrafts the message for a Task’s Notify list, a whole Client update, or a nudge to whoever you are waiting on.
  • /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, Objectives, Workstreams and Tasks.
  • /todayOptional. Names each Client’s top Objective and proposes 1–3 Tasks for the day. Skipping it costs nothing.
  • b didNot a skill, a command: what you finished, told and chased, by Client. For updates and timesheets.

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

    b makes no network calls of its own. Only b sync reaches the network, through git, to the remote you set up.

  • AI opt-out per Client

    ai: false in a client.yml hides that Client from all JSON, Focus and every Claude session. The TUI still shows it, for your eyes only.

Install

Four commands, about a minute. Everything stays in plain files on your machine.

  1. Install b

    Builds the binary and puts it in ~/.local/bin. Needs git, make and Go 1.25+. Make sure that folder is on your PATH.

    $ git clone https://github.com/fredrikburman/bentoban
    $ cd bentoban && make install
    
  2. Create your Brain

    The Brain is a plain folder of markdown files, and it is all your data. This also writes ~/.config/b/config.yml so b can find it.

    $ b init ~/brain
    
  3. Add a client and a first Task

    Every Task belongs to a Client. The key (ACME) becomes its Task IDs, like ACME-1.

    $ b client new acme --key ACME --name "ACME Corp"
    $ b add "Build pricing calculator" -c acme
    
  4. Open the board

    $ b
    

Optional extras

  • Claude Code rituals. Run make install-claude in the repo (needs jq).
  • Back it up. Give the Brain a private git remote. It holds your client work, so never make that repo public.