mind explain
Ask any symbol why it exists
One command returns the decision behind the line — the rationale, the commit SHA, the author, and the date it shipped.
commitmind · ~/work/payments-service

Context that compounds
Your past self's context
becomes your present context.
The decision you made last Tuesday is the context your next session starts with — no re-deriving, no re-reading. And when you're on a team, your reasoning becomes theirs too. No meeting. No Loom. No ADR doc no one reads.
Decide once
Resolve an ambiguity once and every future session — yours and your team's — inherits it.
Zero re-litigation
Never relearn why you picked Postgres FTS over Elastic.
Drop into any repo
Prime to the current state of a codebase — even your own from six months ago — in seconds.
EM
Erin
$ commitmind note
"Using OAuth PKCE for SSO parity"
committed to the decision graph
JN
Jun
AI "Should we use session cookies?"
Your team already decided: OAuth PKCE.
↳ from @erin's decision · Tue
Learnings
You get sharper every session.
A session-end worker reads what just happened, summarizes it, and proposes durable lessons. Your next session gets them injected at startup — top-K relevant — so you stop repeating the same mistakes and your AI stops suggesting them.
candidates ready
What happened
Wired LearningsReconciler full-sync; mirrored the P4a pattern across cachestore + daemon. 7 commits, all green. User caught a status-filter mismatch during dogfood.
Candidate learnings · 3
01
LearningsReconciler bulk-replace must filter status='active' to match cloud — caught by user during dogfood.
02
Per-project FTS5 table needs an explicit schema-version pin to survive bulk-replace eviction.
03
Goose migration 022 reused an id from a deleted file — verify with git log -- pkg/cachestore/migrations.
Auto-injected at next prime · top-K relevantSave all·Edit
Code intelligence
Refactor without fear.
Your AI knows every call site.
Tree-sitter symbol index across Go, Python, TypeScript, JavaScript, Java, Rust, PHP, and Ruby. Send the right symbol with the right context — not the whole file.
xref("Foo")
Where processPayment lives — exact file, line, signature. Your AI never has to grep.
xref("file::Foo")
Just the function body, not the 2,000-line file around it. Often a 100× context cut.
xref("Foo<")
Every call site across the repo (trailing `<` = callers). Refactor with the call graph, not with hope.
Symbol-level staleness
Knowledge tied to a function survives unrelated edits. Stale only when that function actually changes.
Ready?
Give every agent
your team's engineering brain.
Local by default Git-anchored decisions Project-scoped MCP-compatible