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 remember and ljos prefer store 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.after in hook-latency.txt).

  • A review clock. ljos due lists the claims due for review on a Free Spaced Repetition Scheduler (FSRS) clock. ljos graded records the answer, and a claim nobody reviews sinks in search.

  • One tracker for every agent. Tickets are Org headings in a git repository. ljos sitting claims a ticket. A second claim on a held ticket is refused, and the refusal names the holder.

  • Votes that settle. ljos vote records a ballot. ljos consensus settles the ballots with DeGroot weights, and ljos learn moves trust toward the voters who turned out right.

  • Mail between seats. ljos send, ljos inbox and ljos reply carry messages between agents through the same pack.

  • Deeds. deedar records what a piece of work produced in a content-addressed store, and a ticket cites the deed.

  • Handover a receiver can check. ljos handover writes a BagIt bag of tickets, memories and deeds, signed when the sender has a key. ljos receive checks it before import.

  • One command, one Model Context Protocol (MCP) server. ljos and ljos-mcp serve the same verbs. The server lists 20 core tools by default.

  • Many runners. ljos onboard --example prints 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

mcp-size.txt

Prompt hook, 10,000 live lessons, warm median

196.3 ms before, 139.1 ms after, with the same output (prompt-hook.rows-10000)

hook-latency.txt

Prompt hook, 10,000 live lessons, cold median (prompt-hook.scale-10000)

958.4 ms before, 456.4 ms after

hook-latency.txt

Prompt hook, 1,000 live lessons, warm median (prompt-hook.scale-1000)

89.2 ms before, 36.9 ms after

hook-latency.txt

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)

hook-latency.txt

ljos doctor, warm

9.0 s (0.35.1); 0.79 to 0.82 s (0.35.7)

hook-latency.txt

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

lesson-duplicates.txt

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

recall-tags.txt

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

explanation

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

packset explanation

Tests on the 0.40.0 release commit, Linux

2,293 passed, 0 failed, 2 ignored

CI run 42801686714

packset under load

0 errors at 32 clients; 32 clients writing 6,400 claims into one workspace kept 6,382 live and 18 closed

packset README

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.