Nothing leaves without an account
Until you sign in, Ledger works only on your computer: the record is a local database and nothing is sent anywhere. lothal-ledger disable removes everything enable installed.
Point at any line or function, months later, and see which agent and model wrote it, in which session, and the prompt that asked for it. Nothing leaves your machine until you choose to share it.
from django.http import JsonResponse def health(request): return JsonResponse({"status": "ok", "version": 1}) def ready(request): return JsonResponse({"ready": True})$ lothal-ledger why app/views.py:9 app/views.py:9 ai (commit 29160534d20e Add health and ready views; local) return JsonResponse({"ready": True}) model: claude-opus-5-5 wrote s_f6f5dfd133f5b2::t_d3f4a8f83bd286 prompt: Run exactly this one shell command and nothing else. Do not use a file-editing tool and do not commit: printf '\n\ndef ready(request):\n return JsonResponse({"ready": True})\n' >> app/views.py commit sessions:
Claude Code, Codex, Cursor and omp run as before. Ledger notes every file an agent writes, with its session, turn, model and prompt, in milliseconds and without ever blocking the agent or a commit.
Point at a line or a whole function, today or next year. The answer follows the code through commits, rebases and renames, and a line no agent wrote says so instead of guessing.
Ledger is an MCP server in each agent. Before it changes code, an agent can call why and search, and leave its reasoning behind with record_decision.
Team sync needs an account: lothal-ledger login signs you in. What you record from then on is shared, prompts redacted on your machine first, and a teammate's why answers for lines written on your machine.
No account and no root. Ubuntu on x86_64; macOS on Apple silicon is built and smoke-tested.
curl -fsSL https://github.com/Lothal-App/lothal-ledger-releases/releases/latest/download/lothal-ledger-installer.sh | shThen open a new shell, or source the env file the installer names.
In the repository you work in: hooks for every agent it finds, and git hooks in free slots only.
cd ~/src/your-project
lothal-ledger enableUse your agent, then commit. Amends, rebases and squash merges keep the record.
claude # or codex, cursor-agent, omp
git commit -am "Add retry budget"Any line, or a function by name. blame, sessions and search read the same record.
lothal-ledger why src/http.py:42
lothal-ledger why src/http.py:fetchUntil you sign in, Ledger works only on your computer: the record is a local database and nothing is sent anywhere. lothal-ledger disable removes everything enable installed.
When you share, prompts and context are redacted on your machine first. Teammates see which agent wrote a line; they read your prompt only with a content grant, and each such read is logged.
Ledger notes what an agent writes, never a person typing. A line no agent wrote reads unattributed, never someone's name.