bro —
memory for Claude Code between chats
What was wrong
I work in Claude Code across many projects. A chat forgets everything when it ends or when it gets compacted. The next chat starts without my rules, without the decisions we made, without who promised what. I had to retell them.
What I decided
- The chat writes. A script files. No AI model is involved in filing, so nothing is invented or dropped on the way.
- Every record has a kind: a rule, a decision, a task, my state, a word with a special meaning in the project, an idea worth keeping.
- Kinds are not built into the code. They are rows in one table. Add a row and you have a new kind.
- Nothing is deleted. A task nobody touches for 30 days moves to an archive. A decision is replaced only by a newer decision that names it.
What I built
While I work, the chat adds a short note to today’s journal and marks the lines worth keeping, for example TASK: Dana - send the July test results or DECISION: keep weekly reports. After every answer a small script files each marked line into a log, one line per record.
When a new chat starts, or is resumed, compacted or cleared, the logs are printed back into it: one block per kind, newest first. Above them sits the real date and time and the exact command for writing the journal. So the new chat starts already knowing my rules and my open tasks.
Since version 5.1 it also warns when I restate a task that is already open, and flags tasks nobody has touched for a few days.
── clock ── Thu 06 Nov 2026, 18:40
write: printf '%s\n' 'body' | bro-append.sh …
── rules ──
answer short
── decisions ──
d-a1b2c3 keep weekly reports
── tasks ──
t-b58d76 Dana - send the July test results
What changed
- I have used it since April 2026, in 11 of my projects.
What is left
- It runs on macOS and Linux only and needs
jq.
Link
Install:
curl -fsSL https://raw.githubusercontent.com/balaka/bro/main/scripts/bro-install.sh | bash