Ankora
Tiny persistent memory for coding agents. Save atomic notes as plain markdown; recall the relevant ones when you start a new session — so the agent continues instead of forgetting what you already worked out.
The problem
Everyone's fix for "Claude forgets" is a bigger CLAUDE.md. But bigger context makes it worse, not better — long files get diluted and the model loses the middle. Splitting into tree.md / context.md / structure.md only helps if you stop loading them all every session; four growing files that always load are the same wall in four pieces.
Ankora is the small version of the fix: one atomic note per fact/decision, a tiny always-loaded index, pull in only the note the task needs.
Install
Needs Python 3.8+ and nothing else — no dependencies to pull in, nothing to build.
pip install ankora-memory
ankora --help
The PyPI name is ankora-memory because plain ankora was already taken by an
unrelated project; the command you actually type is still ankora.
Or skip the install entirely — it's one file, so you can just run it:
git clone https://github.com/JavaB1/ankora
cd ankora
python ankora.py --help
Use
# save a decision
ankora save "Use UUID v7 for ids" -t decision -g db,ids -m "time-ordered, index-friendly, avoids v4 fragmentation"
# recall what's relevant to the task at hand
ankora recall "uuid ids"
# rebuild the index (one line per anchor)
ankora index
(Running from a clone instead of an install? Use python ankora.py ... — same commands.)
Anchors live in ./.ankora/anchors/*.md — plain markdown with a small frontmatter block, so they diff cleanly in git and you can read/edit them by hand. ./.ankora/INDEX.md is the short always-on list.
Set ANKORA_DIR to point it somewhere else (e.g. a shared notes repo).
Writes are atomic and guarded by a lock, so a crash mid-save or two concurrent saves never silently lose an anchor.
With Claude Code
Drop SKILL.md into your project (or .claude/skills/). It tells the agent to run recall at the start of a session and save when a real decision is made. See SKILL.md.
What it does NOT do (on purpose)
This is deliberately small. It does not do embeddings/semantic search, a graph, auto-consolidation, conflict detection, or ranking beyond weighted whole-word keyword matching. If two notes disagree, both stay — you resolve it. If you outgrow keyword recall, that's when a full memory framework is worth the extra setup. Ankora is the small version that covers most of the value first, with nothing to install.
License
MIT. Use it, fork it, ship it.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ankora_memory-0.2.0.tar.gz.
File metadata
- Download URL: ankora_memory-0.2.0.tar.gz
- Upload date:
- Size: 7.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dfdb98c12d9b7fa356267498938f8bb95e56dd6bcc2145d1590d8eb20fb202ad
|
|
| MD5 |
a5c5ab86024058ec2abb7304bfcc69cf
|
|
| BLAKE2b-256 |
7ace10c9f7905f604899b25191bf76d80e669dd058ad7167b706e9d7dacc13b5
|
File details
Details for the file ankora_memory-0.2.0-py3-none-any.whl.
File metadata
- Download URL: ankora_memory-0.2.0-py3-none-any.whl
- Upload date:
- Size: 8.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3aa0b0761434296465909ee811e3657f357ef74ce58e357f2329e738c7953d4c
|
|
| MD5 |
f3aa64b7bd614c1e248e1fb2a4514dbe
|
|
| BLAKE2b-256 |
49fe5727310e1c7c98d30a4ac3529a276dafb4306dd2b6ff2b4d97c3b9fb7469
|