packset
What does this seat know, standing? A pack of written claims with a review clock: one claim per atom, written on purpose, never mined from a transcript; ranked by a measured panel of scorers; reviewed before it is forgotten; faded when it is not; retracted with the deed that showed it wrong. One daemon owns one LMDB file and every tool is a client.
Docs: https://leidarljos.github.io/packset/
| Page | What it answers |
|---|---|
| Getting started | A scratch pack that remembers two claims and ranks them |
| How-to | Review, island, handover, one writer |
| Reference | Verbs, atoms, the daemon |
| Explanation | Why write on purpose, and what was measured |
The seat that sits on this pack is documented at https://leidarljos.github.io.
Install
$ cargo binstall --locked packset
# or: cargo install --locked packset
$ packset ensure
That installs packset, the writer packsetd and the read-only MCP
surface packset-mcp. The packset-daemon crate on crates.io stops at
0.9.21, from before packset carried packsetd; do not install it. packset-embed, the optional dense encoder, is its
own crate and links a source-built or system Open Neural Network Exchange
(ONNX) Runtime. The prebuilt
runtime from cdn.pyke.io is the download-binaries feature. The pack
answers without the encoder, and search stays lexical.
First minute
$ packset remember "BM25+ is the default lexical scorer. It beat BM25 by two points."
3f9c... lesson due 2026-09-13T08:54:37.394Z
$ packset search lexical scorer
7.0000 lesson 3f9c... BM25+ is the default lexical scorer. It beat BM25 by two points.
$ packset due # tomorrow: what to review
$ packset island fusing two ballots # the memories a task activates
What holds
-
Writes are
rememberandprefer, two sentences at most, stored as given. Nothing is extracted from a transcript. -
Every claim has a validity window and a review clock (FSRS). Retrievability scales search; on a longitudinal corpus it ranks a recalled claim first 0.947 of the time against 0.230 for words alone.
-
A later claim closes the earlier one it rewrites; the closed one keeps its window for an as-of read (
packset search --as-of TS,packset atoms --as-of TS).consolidateruns the rule over what is held. -
Search fuses a prefix scan, BM25+ and a dense ballot. The default top k adds a fourteen-day half-life and retrievability.
packset search --rank relevance(or/v1/search?rank=relevance) selects that top k by lexical, BM25 and cosine alone;GET /v1/statuslistssearch.ranks, and an older writer omitssearch.packset search --rerank(orPACKSET_RERANK=1//v1/search?rerank=1) runs the measured cross-encoder over the top 20 and returns its score asrerank_score(null when the stage did not score the hit); off by default. LongMemEval_S session retrieval, 470 answerable questions: 0.889 hit@1 and 0.949 recall@5 for BM25+ fused with e5-large-v2. hit@1 counts a question whose top result is a session holding its evidence; recall@5 is the share of evidence sessions in the top five, averaged over questions. These numbers score retrieval; answer accuracy on the same 470 is 0.549 (explanation page). MemoryAgentBench, scored per source as its paper scores it, with a seven-billion-parameter reader: lexical retrieval answers 0.568 of the accurate-retrieval questions (95% CI 0.530 to 0.605), below the published BM25 row of 0.605 with a hosted reader, and the replacement rule answers 0.395 of the conflict-resolution questions at 262K. -
A workspace holds at most
PACKSET_LIVE_CAPlive claims (twenty thousand); past it the least retrievable lessons are forgotten as tombstones. Every claim carries the seat that wrote it. -
Forgetting by neglect: a review left due past twice its interval lapses as a missed review would, and a never-recalled lesson missed three times is forgotten. The writer sweeps once a day;
packset sweepruns it now. -
Claims link by shared names; links carry weights that use strengthens;
islandreturns the cluster a task activates. -
One writer, one LMDB file. Zero errors at 32 clients, and a herd of 32 writing 6400 distinct claims into one workspace loses none of them. A second host is a second pack; a signed handover crosses. The hammer rerun, 200 operations a client, measured:
Clients Requests Wall Rate Errors Workspace 1 600 9.89 s 61 req/s 0 separate 4 2400 20.89 s 115 req/s 0 separate 16 9600 86.18 s 111 req/s 0 separate 32 19200 131.55 s 146 req/s 0 separate 4 2400 15.55 s 154 req/s 0 shared, 799 live + 1 closed of 800 16 9600 105.97 s 91 req/s 0 shared, 3192 live + 8 closed of 3200 32 19200 292.56 s 66 req/s 0 shared, 6382 live + 18 closed of 6400 32 19200 826.18 s 23 req/s 0 shared, 6382 live + 18 closed of 6400 (rerun 2026-10-08; slower container, same counts) -
Trust rows and personas live in the pack and reach the seat's consensus.
-
originandsource.basissay who stood behind a claim, and the pack keeps them from rising:user-declaredranks above every other origin andpersonabove every other basis. An update, or a post over a live id, may keep or lower them; only an accept raises one, and a record with no origin reads asunknown. The pack does not decide who may create. A client that posts a new atom can still sayuser-declaredandperson, and the pack stores what it was told. Who may write as the person is the seat's call (ljos), not the pack's.
The numbers, their jobs and how to regenerate them are on the explanation page. The MemoryAgentBench scorer and verdict files are private; I share them on request.
Crates
| Crate | Carries |
|---|---|
packset-core |
the atom, the prose limit, BM25+, the panel, decay, islands, the review clock |
packset-daemon |
packsetd: LMDB store, HTTP, the encoder child; a library in the workspace, its binary ships in packset. Unpublished since 0.10.0, so crates.io stops at 0.9.21 |
packset-client |
the HTTP client every tool uses |
packset-cli |
the packset crate: packset, packsetd, packset-mcp |
packset-mcp |
the read-only MCP surface, built by packset from its source tree |
packset-embed |
dense, late, sparse and cross-encoder models as one child |
The retrieval, forgetting, islands, trust, many-clients and benchmark sections that used to sit here are on the site's explanation page, with every arm that lost.
License
MIT.