What ljos does#
ljos gives coding agents what a new session does not keep: memory a person wrote on purpose, one tracker in git that every agent shares, and a record of who decided what. It calls no model. Each store is a file a person can open.
Features#
Memory written on purpose.
ljos rememberandljos preferstore one claim as written. No model reads the transcript to pick facts. A lesson an agent writes is labelled agent-derived until a person accepts it.Memory at the prompt. The prompt hook adds the memories a prompt bears on before the model reads it. On a pack of 10,000 lessons the warm hook takes a median of 139.1 ms (
prompt-hook.rows-10000.afterinhook-latency.txt).A review clock.
ljos duelists the claims due for review on a Free Spaced Repetition Scheduler (FSRS) clock.ljos gradedrecords the answer, and a claim nobody reviews sinks in search.One tracker for every agent. Tickets are Org headings in a git repository.
ljos sittingclaims a ticket. A second claim on a held ticket is refused, and the refusal names the holder.Votes that settle.
ljos voterecords a ballot.ljos consensussettles the ballots with DeGroot weights, andljos learnmoves trust toward the voters who turned out right.Mail between seats.
ljos send,ljos inboxandljos replycarry messages between agents through the same pack.Deeds.
deedarrecords what a piece of work produced in a content-addressed store, and a ticket cites the deed.Handover a receiver can check.
ljos handoverwrites a BagIt bag of tickets, memories and deeds, signed when the sender has a key.ljos receivechecks it before import.One command, one Model Context Protocol (MCP) server.
ljosandljos-mcpserve the same verbs. The server lists 20 core tools by default.Many runners.
ljos onboard --exampleprints shapes for Claude Code, Codex, Cursor, Grok, OpenCode, Windsurf, Antigravity, Hermes, omp and a plain shell.
Measured#
Every number below comes from a file in this repository or in packset, the memory writer ljos drives. Each file names the machine, the method and the commands that reproduce it.
What |
Result |
Source |
|---|---|---|
MCP tool list, tokens a session pays (o200kbase) |
7,946 for the 20 core tools; 17,900 for all 52 |
|
Prompt hook, 10,000 live lessons, warm median |
196.3 ms before, 139.1 ms after, with the same output ( |
|
Prompt hook, 10,000 live lessons, cold median ( |
958.4 ms before, 456.4 ms after |
|
Prompt hook, 1,000 live lessons, warm median ( |
89.2 ms before, 36.9 ms after |
|
Prompt hook on a seat of about 2,500 atoms |
970 ms and 27 pack requests (0.35.1); 247 to 303 ms and 8 requests (0.35.9) |
|
|
9.0 s (0.35.1); 0.79 to 0.82 s (0.35.7) |
|
Duplicate lessons, 78 duplicate pairs and 186 near-topic pairs |
0 near-topic pairs merged (precision 1.00), 12 duplicates found (recall 0.15); the pack’s own rewrite test: precision 0.30, recall 0.12 |
|
Recall by ticket tags, 6 tickets, 48 runs a build |
labelled memories shown: median 0 before, 5 after; wall median 99.1 ms before, 99.5 ms after |
|
ljos scorer, LongMemEvalS session retrieval, 470 questions, BM25+ |
hit@5 0.959574, recall@5 0.909113, recall@10 0.949894; 71.881 s on one CPU |
|
packset, LongMemEvalS session retrieval, 470 questions |
BM25+ alone: recall@5 0.914; BM25+ fused with e5-large-v2: recall@5 0.949, hit@1 0.889 |
|
Tests on the 0.40.0 release commit, Linux |
2,293 passed, 0 failed, 2 ignored |
|
packset under load |
0 errors at 32 clients; 32 clients writing 6,400 claims into one workspace kept 6,382 live and 18 closed |
The LongMemEvalS rows score retrieval: whether the sessions that hold
the evidence come back near the top. They are not answer accuracy, and
they do not measure the same thing as a question-answering score. The
before and after columns compare two ljos builds on the same machine
and the same input. No row compares ljos with another memory tool on a
shared benchmark: hook-latency.txt says so in its third-party line.
How ljos compares sets the designs side by side instead.
What it does not do#
It does not read a conversation to find facts nobody said to remember. Mem0 sends what it ingests through a model to do that, and so does Graphiti, the graph framework inside Zep.
It is not a sandbox. The command check warns and the command runs.
It does not host anything. Sync goes through a git remote you own.