Open-source, AI-ready memory infrastructure. Local-first: one static Go binary with no runtime dependencies, a local SQLite store, and a Model Context Protocol server so coding agents can search and recall project context.
apps/web, apps/mobile the Flutter and web clients
core/api, core/mcp the HTTP entrypoint and the MCP server
shared/models the data model
shared/database the SQLite store
docs the plan and the decision records
claude mcp add evomem -- /absolute/path/to/evomem mcpFour tools read — search_notes, get_note, get_project_context,
list_projects — and propose_note suggests one. Nothing an agent proposes is
remembered until a person accepts it:
evomem review # what an agent suggested
evomem review -accept <id> # store it as a noteSee docs/mcp.md.
evomem servePOST /ingest for Apple Shortcuts and anything else, plus Telegram and Jira
webhook endpoints. Each needs its own secret in the environment, and an
endpoint whose secret is unset is not served. See docs/api.md.
evomem sync -init-remote # create the mirror's schema
evomem sync # push changes every five minutes
evomem archive -dry-run # what would be thinned outOne-directional: the local file is the authority and PostgreSQL is a mirror. Archiving holds back anything not yet synced. See docs/sync.md.
cp .env.example .env # fill in three secrets
docker compose up -dThe web app on http://localhost:8080, the server on
http://localhost:8787, PostgreSQL beside them — all published on loopback.
The server keeps its notes in PostgreSQL; the phone keeps SQLite so it works
with no network and pushes one way into the server (ADR-0028). The command
line and evomem mcp still use a file, so the binary stays one thing with no
runtime.
docs/docker.md has the rest.
./scripts/build.sh # dist/evomem, CGO_ENABLED=0
./scripts/test.sh # gofmt, go vet, go test
./scripts/ci.sh # everything CI runs
./scripts/test-postgres.sh # the sync transport and the store, on PostgreSQLGo 1.26 or newer. Nothing else: dependencies are vendored, so a build needs no network and no module cache.
Commits are signed off under the DCO; ./scripts/ci.sh is every check
CI runs. See CONTRIBUTING.md, and
SECURITY.md for the threat model and how to report a
vulnerability privately.
Decisions live in docs/adr. The ones worth knowing before reading the code: ADR-0002 on dependencies, ADR-0009 on third-party content reaching a model, and ADR-0012 on why sync goes one way.