Memory for coding agents

Memory your agent
can verify.

Every memory carries evidence from your code. Aletheia re-checks it on every recall, points your agent at the exact lines, and keeps stale facts out of its context.

$ go install github.com/firatmio/aletheia/cmd/aletheia@latest
Watch it work ↓

The source opens soon. The command works from launch day.

scroll to watch an agent work with Aletheia

claude · ~/src/exprturns 0read before first edit 0k charsmemories 0
without Aletheia: 26 turns · 52k chars
> Add a new builtin function hypot(a, b) that returns sqrt(a*a + b*b) as a float. Type-check, document and test it like the existing math builtins.
● UserPromptSubmit · aletheia hook3 memories · code map · 0 agent turns
okNew builtin: register it in the Builtins slice, validate in validation.go builtin.go:35-1081
okMulti-arg builtins need an arity entry in TestBuiltin_works_with_any builtin_test.go:263
okgo.mod targets go 1.18, so Go's min/max builtins are not available go.mod:3
● Read builtin/builtin.go lines 35–50 · 15 lines, not 1,081
● Read builtin/validation.go lines 12–40
● Edit builtin/builtin.go +14
● Edit builtin/builtin_test.go +22 · arity entry added, as the memory said
● Bash go test ./... ok · 14 packages
you do it, or it happens as you scroll
$ git mv builtin/builtin.go builtin/registry.go
> Add a new builtin function cbrt(x) that returns the cube root of a number as a float.
● aletheia hook · checked against the files just now1 stale memory hidden
okMulti-arg builtins need an arity entry in TestBuiltin_works_with_any builtin_test.go:263
staleNew builtin: register it in the Builtins slicebuiltin/builtin.go: missing · hidden from your agent
mapBuiltins builtin/registry.go:35-1081 · found in the code right now
● Read builtin/registry.go lines 35–50
● Edit builtin/registry.go +12
● Bash go test ./... ok · 14 packages
⏺ Added cbrt with type checks, docs and tests.
● Stop · aletheia hook · read the session, no model callreplaced the earlier map for this kind of change
okMap: a task like "Add a new builtin function cbrt(x)…" changed builtin/lib.go, builtin/validation.go, builtin/registry.go, builtin/builtin_test.go, docs/language-definition.md
replayed from lab run R5, expr-lang/expr task 4 · commands shortened
How it works

Every claim is tied to the line that proves it.

Anchors are checked mechanically on every recall: no model calls, no embeddings, no network.

builtin/registry.gochecked just now
33// Builtins lists every function the language provides.
34
35var Builtins = []*Function{
36 {
37 Name: "all",

Try it: break the evidence.

Runs in your browser. Nothing is sent anywhere.

● anchor holds · the memory reaches the agent

Results

Measured, with the method attached.

−12%1cost per task sequence on expr-lang/expr
−60%2code read before the first edit, first task
12/123tasks passed, same as without Aletheia

Quick start

One static binary, no dependencies. Memories are plain Markdown in .aletheia/, so you can commit them and share them with your team.

Paste this into Claude Code, Cursor or any coding agent:

Read https://aletheia.firattunaarslan.me/agents.md and set up Aletheia in this project.

/agents.md is plain Markdown written for agents: install, connect, and how to use memory well, in one read. /llms.txt indexes it.