The fix from three weeks ago. The branch you abandoned because something else worked. It is all still on your machine, in the transcripts Claude Code already writes.
braids is one binary that makes them findable: every session, every turn, every tool call, searchable in a few milliseconds. Local, open source, nothing hosted.
That picks the build for your machine and checks it against the published
checksums before it moves anything. One binary, no daemon, no config file,
nothing to sign up for. Prefer Go?
go install github.com/Ashes47/braids/cmd/braids@latest
Claude Code can already resume a conversation. It gives you a list of them, newest first, and you pick one. braids searches inside all of them, shows you which was cut from which, and starts a new one from any turn of any of them, not just the end.
Every message and tool call, every memory a project keeps, and the name of every file a session left on disk. Each hit says which kind it is, and ↵ opens the screen that can do something about it: a conversation at that turn, a memory in the reader, a file in the browser.
git knows when a file changed. braids knows what was being said in that directory at the time. Joining them gets you from a line of code back to the conversation it came out of.
~/src/storefront/checkout/handler.go
2 commits, against 6 conversations
6 ran in this repository
996282d5 2026-09-04 13:55 checkout: defer the tax lookup out of the lock
Checkout stalls at 80% under load, then recovers on its own · storefront · 24 turns in the window
last said 4 minutes before, at turn 24:
so we need the deferral to rejoin before receipt
braids --lane a1b2c3d4
Option C: move the lock inside the tax client and re-run the load test · storefront · 6 turns in the window
last said under a minute before, at turn 6:
stall is gone and the receipt total is right
braids --lane b2c3d4e5
5b407b53 2026-09-02 14:05 checkout: take the tax quote inline
Blobstore is doing 11 KiB reads per object instead of batching them · storefront · 4 turns in the window
last said 7 minutes before, at turn 4:
the reader asks per object, not per batch
braids --lane d4e5f6a7
These conversations were live when those commits landed. braids does not
know that they caused them; it knows when things happened and where.It does not claim those conversations caused those commits, and it says so outright. It offers you where to look. That is all a git log and two columns can honestly give you, and it is why this costs neither a model nor a moment.
Finding the moment is half of it. The spine collapses a long conversation to its landmarks: what you asked, what came back, where a tool call failed, where the context got compacted, where each branch left.
Put the cursor on a turn and press b. braids writes a new session
file holding that turn's ancestry, then hands you the
claude --resume command. Ask for a workspace and the branch
gets its own git worktree, so two branches can edit the same file and never
collide. The transcript you branched from is opened read only, and a test
hashes it before and after to prove it.
Every command that reports something takes --json, with whole
IDs meant to be passed back. Install the skill and Claude Code reaches for
your history itself, at the moments worth reaching: when you refer to
earlier work, when you ask why something is the way it is, and before it
proposes something that may already have been tried.
braids skill --install
# or, from inside Claude Code
/plugin marketplace add Ashes47/braids
Most of what the skill teaches is when not to look. Searching your history on every question is slow and usually beside the point, so it names the cases the code in front of it already answers. And it never claims a past conversation caused anything: it quotes what was said, with the turn number, and leaves the conclusion to you.
One row per conversation, with branches under the conversation they were cut from, tagged with the turn they left at. Search is the front door; this is where you see what you have and who is waiting on you.
t14 on a branch is
the turn of the parent it was cut at.~/.claude.Five more screens, each with a page of its own. They are the parts of a session you cannot see from inside it.
A session's scratch usually dwarfs its transcript. On one machine it was 3.3 GB against 360 MB. w opens it heaviest first, so you can bin the 231 MB dump and keep the rest.
What the project remembers, with the two problems a session cannot show you: a memory missing from the index, so nothing ever loads it, and a link pointing at one that was never written.
Everything braids deletes moves aside with a manifest and sits there for 14 days, keeping the directories it came from. Press u to get it back.
Bring a branch back as a new conversation, spliced from the real turns of both. A subagent's transcript can graduate into a conversation of its own.
Files cannot tell a running session apart from one waiting on your approval. One hook can. It merges with the hooks you already have, and removing it takes back only what it added.
go list -deps ./cmd/braids | grep net/http and see for
yourself.~/.braids/index.db.~/.braids is
0700 and the index is 0600, because it holds
the full text of every message it has read.~/.claude.28 conversations, about 62,000 messages, about 360 MB of transcripts. Rounded, because a corpus you are still working in will not sit still.
| Operation | Cost |
|---|---|
| First index, from nothing | about 8 s |
| Re-index after a turn lands in a 145 MB conversation | about 40 ms |
| Re-index when nothing changed | under 1 ms |
| Search across about 62,000 indexed units | 1 to 6 ms |
| Index on disk | about 125 MB |
That last row is the honest cost: about a third of the transcripts, because searching text means keeping a copy of it. Two thirds of the index is that copy and the search structure over it.
# picks the build for your machine and checks it against the published sums curl -fsSL https://braids.chat/install.sh | sh # or with Go go install github.com/Ashes47/braids/cmd/braids@latest # then braids index # read every transcript under ~/.claude braids # open the map
Run that first line again to update. It replaces braids where it already lives rather than leaving a second copy on your PATH, and says already installed and stops when there is nothing to do.
braids cannot tell you a newer version exists, because finding out would
mean asking, and it makes no network calls. What it can say is how long it
has been since anyone checked. After a month the map's header adds
3 months old · v to update to the version row, and
v runs the installer above, printing the command first.
Checking and finding yourself current resets the clock, so it asks once a
month at most and never claims you are behind.
# take the hook back out of ~/.claude/settings.json, if you added it braids hooks --remove # then the binary and the index rm "$(command -v braids)" rm -rf ~/.braids
That is all of it. Your conversations live in ~/.claude and are
never touched, so removing braids costs you the map and nothing else.
braids is one person's tool, made public because the problem is not one person's. A star is how the next person finds it. An issue is how it gets better.