Liminalis
Liminalis document-intelligence
platform
LensesNovel · Campaign · Legislation
StorageMarkdown on disk
One engine · many domains

A document workspace
with a mind.

Put your material in — characters, chapters, rules, bills, history — and Liminalis reads it, connects it, and works alongside you inside it. It doesn't answer from a general model's guesses about your world. It answers from your documents, and it can tell you exactly which ones.

Liminalis — The Cartographer's Debt · Novel lens reply · thinking L2
You
What has Wren actually been told about the compass, and when?
Retrieval · hybrid → rerank → tiered render · 7 documents · 6.1k tokens
Liminalis
Three separate occasions, and none of them told her the whole of it. Marisol mentions it obliquely in the amber hall — a warning dressed up as a favour. Later, Corvin is more direct, but leaves out who commissioned it…
What's in context6,108 tok
Project Overview found by always-include
Wren found by reverse index · named in query
14.9 — What the Map Omits0.91 found by rerank · bm25 + dense
The Amber Hall0.78 found by graph walk · entity hub
Vignette — the borrowed name0.74 found by motif · debts-unpaid
pinned recalled history free
The “what's in context” panel — every document that fed the answer, its score, and how it was found. Representative composite of the application UI.
§ 00  Measured, not asserted
3.3×recall@5
0.269 → 0.876
1.000hit@10
from 0.318
−49%context tokens
vs. the baseline
44hand-authored
bench queries

Measured on an isolated copy of a real 135-document project. Pinned scaffold documents are excluded from rank positions, so recall@5 measures retrieval rather than padding. The full ablation ladder — and the findings that were retracted — are on Engineering.

§ 01 the product thesis
Testeda third lens in an unrelated domain needed no engine change
§ 01  The lens

One document engine.
Swappable domain lenses.

A project is viewed through a lens. The same document set means different things depending on what you're doing with it — and the lens changes the vocabulary, the interface, the generation stages, the validation rules, and the retrieval barriers, over one shared corpus.

Underneath, nothing is domain-specific. Chunking, extraction, association, recall and context assembly don't know what a chapter is, or a bill. That claim was tested: after the abstraction was factored out, a third lens was built over roughly ten thousand pieces of legislation, and it required no special case in ingestion, chunking, extraction, retrieval, assembly, the access barriers, the job model, or the agent API.

§ 02 the knowledge layer
Neveron the save path — the editor never waits on a model
§ 02  What it builds while you write

The index isn't a black box.
It's a document you can correct.

Background workers read every document as it changes and derive a knowledge layer from it — incrementally, resumably, and never on the save path. What comes out is not an opaque embedding blob. It's readable, editable material that sits in your project alongside everything else.

01

Entities & relationships

A fixed ontology of around fifty categories and two hundred typed relations. Each relationship carries two directional summary sentences, so it reads back as memory prose rather than as a graph label.

02

Facts, atomic and sourced

Conservative statements about named things, each linked back to the passage it came from. Nothing floats free of its source.

03

Searchable summaries

Section-level and document-level, and themselves retrievable — so a long chapter can be recalled at the right altitude instead of all-or-nothing.

04

Motifs — retrieval by theme

Theme-language tags like debts-unpaid or made-not-born, so you can pull thematically-linked material together regardless of where it sits in the folder tree. This is the piece nothing else in the category does.

Reverse Index.md generated · deterministic
By character
Wren in Wren, 14.9 — What the Map Omits, The Compass mentioned in 31 documents
Marisol in Marisol, The Amber Hall mentioned in 18 documents
By place
The Amber Hall in The Amber Hall, 7.2 — Small Mercies mentioned in 9 documents
By motif
debts-unpaid in 14.9 — What the Map Omits, Vignette — the borrowed name, The Compass
made-not-born in 3.1 — The Guild Table, Corvin
The Reverse Index — every person, place, thing, thread and motif, showing what each is in versus merely mentioned in. Built by deterministic string matching, no model involved, so it is robust to exactly the failures a vector search has.
Why deterministic matters

A graph walk can miss an entity the extractor never found. A vector search can put a name far away in embedding space. String matching fails at neither. When a user names a thing, the reverse index guarantees its document is pinned into context — regardless of what the probabilistic layers thought.

§ 03 recall & context
Invariantnever head-slice a retrieved document — show what matched
§ 03  Retrieval, then context

A hybrid stack that was tuned against a bench, not against a vibe.

Content-defined chunking with sentence-window vectors. BM25 fused with dense retrieval by reciprocal rank, so the cross-encoder gets to see lexical-only matches too. A reranker over passages rather than whole documents. Contextual embeddings, where each chunk is embedded aware of its surrounding document — which matters enormously for prose full of pronouns and implicit referents.

Progressive disclosure

Tiered context

Background documents render as a summary plus the passages that actually matched. Four guards stop it damaging the answer — including one that refuses to summarize a document if the summary would come out larger.

Graceful degradation

Context budget

Over budget, it degrades in order of least damage: weakest documents first, then clipping the largest. Pins are never dropped, and every clip is marked in the text so the model knows it holds a partial document.

Five rungs

Thinking levels

From a single deterministic pass, through plan-and-fan-out, to draft → self-critique → revise. Cost scales with the rung, and the cheap scaffolding work runs on a cheap model.

The recurring lesson
The dominant bottleneck was a config default, not an algorithm. — retrieval roadmap, twice over

A conversational default of five vector results, inherited unexamined, was starving a document corpus. Widening the candidate pool moved recall@5 from 0.269 to 0.439 on its own. The reranker in isolation was worth +0.011; paired with the widened pool it took the same metric to 0.871. Neither number is interesting alone. Together they're the whole story.

§ 04 resonance
ModelACT-R activation over a Hebbian association graph
§ 04  The cognitive layer

Search is stateless.
Memory isn't.

Everything above is machinery for “what best matches this query?” — and it gives the same answer forever. That is right for a search engine and wrong for something that is meant to know your material. So underneath the retrieval stack there is a second thing: a memory model that changes as you work.

A passage, an extracted fact, an entity, a summary and a conversation turn are all the same kind of object in one graph. Every one carries an activation level computed the way the ACT-R cognitive architecture computes it — recency and frequency in a single number. Connections strengthen when both ends are used together, weaken when they aren't, and are eventually pruned. The graph learns the shape of your project, and forgets the parts of itself nobody ever travels.

A

Recall with intuition

Because reach is gated by how warm a thing already is, the system can surface something that shares no keyword and sits in no obvious embedding neighbourhood — purely because in this project, over time, those two things became connected.

B

Agreement is the signal

The query gets one pass. Every entity named in it gets its own, independently. Material reached from two or more directions at once is promoted above material that merely scored well in one — so a hub connected to everything can't win by volume.

C

It forgets on purpose

Unreinforced associations decay and are removed. Without that, years of extraction give you a dense mesh where everything is faintly connected to everything and no signal survives. Forgetting is what keeps the graph usable.

Said plainly

This is the one part of the system with no benchmark number attached, and that's structural rather than evasive: a fixed-corpus, single-shot bench scores a cold graph, and the whole point of this layer is that it is history-dependent — it is supposed to get better in a specific project as that project gets worked in. Designing an evaluation that can actually see that is open work. Until it exists, no performance claim is made for it.

The full mechanism
§ 05 the cached prefix
VerifiedcacheCreate 6384 → cacheRead 6384
§ 05  Context-window management

The prompt has a shape,
and the shape is the point.

Every turn is assembled into a deliberate order: an unchanging system block, then the stable pinned knowledge artifacts, then the volatile query-dependent recall, then history, then the question. The first two segments are marked for provider-side caching. The rest churns freely without ever invalidating them.

Staticsystem prompt · canon precedence · lens persona
Stable pinsproject overview · structure · forced docs
Volatile recallthis turn's retrieved passages
Historyrecent turns verbatim · older rolled up
Querythe question
cached prefix rebuilt each turn
A

Precomputed knowledge, always resident

The Project Overview and Project Structure documents are generated in the background and always pinned — so every reply carries the project's shape without retrieval having to go and find it. They live inside the cached half.

B

Cache-aware by construction

On-demand expansions are routed into the volatile half specifically so they cannot invalidate the prefix for every later turn in the conversation. That's a design constraint, not an accident.

C

Memory that persists between turns

A per-chat rolling context is serialized to disk: document scores, entity scores, section provenance and a hierarchical summary. Recent turns stay verbatim; older ones compress. A follow-up keeps its material without re-mentioning it.

Honest framing

Is this CAG?

Partly, and it's worth being precise. Liminalis is a cache-augmented prefix over a measured RAG stack: precomputed knowledge artifacts that live permanently in the window, inside an explicitly cached prompt segment, verified live to bill at roughly a tenth from the second turn onward.

What it is not is corpus-in-context. The whole tiering-and-budget effort exists because a real corpus does not fit in a window, and a long chat will walk itself out of one no matter how tight retrieval is. Anyone claiming otherwise at this corpus size is selling something.

The full mechanism
§ 06 the platform
MCP11 tools · zero project references
§ 06  Beyond the workspace

It is also a knowledge backend
that other applications can call.

Propose, don't write

Agents write into a draft queue as generated provenance. Direct write needs an explicit scope that is off by default, and scopes only ever narrow.

Barriers before assembly

Access control runs before context is assembled, not as an output filter. A prompt-injected agent cannot coax out material that never entered its context.

Never a silent clip

Truncation is declared both in-band and as a structured field. Retrieval that doesn't lie to you about what it showed you.

§ 07  Where to go next

Read the parts that interest you.

There is a narrative explanation, a deep technical one with the bench attached, and three lens pages showing what the same engine looks like pointed at three different problems.