Memory, not just retrieval
Any tool can find similar code. Letapis remembers what your team decided and why — an episodic chronicle that survives between agent sessions, so the same question is never re-investigated twice.
Chronicle layer for AI coding agents
Built for knowledge. Letapis indexes your code, docs and decisions into a living chronicle your agents consult — and remember between sessions.
> Why did we move from Neo4j to Qdrant? ⏺ letapis · ena_get_context("Neo4j Qdrant migration decision") [decision] — 4 months ago · project: core Qdrant replaces Neo4j as the only storage engine. Why: vector search + payload filtering in one engine, simpler ops. source: IMPL_Qdrant_Migration.md ⏺ The team decided this in March: one engine for both vectors and payload filtering, and simpler ops. I'll follow that — details are in the migration doc. >
> Where do we split embedding batches when the token budget overflows? ⏺ letapis · search("embedding batcher token budget overflow flush") 1. core/embedding/batcher.py · score 0.91 def flush(self): # splits the batch once the token budget is hit 2. core/embedding/gateway.py · score 0.84 …retry the oversized tail as its own batch… ⏺ Found it — batcher.py flushes on token budget, the oversized tail is retried by the gateway. No exact keyword needed: the query matched by meaning. >
> Same topic — but I want the design doc, not the code. ⏺ letapis · search("embedding batcher token budget", instruction="Find documentation explaining this concept") 1. docs/embedding_pipeline.md · score 0.93 "Batches flush on timeout or token budget, whichever first…" 2. IMPL_Batcher_Rework.md · score 0.88 rationale for the two-level flush + measured throughput ⏺ Same query, different intent: the instruction steers results toward docs that explain the design instead of the code that implements it. >
Three questions agents actually ask: a past decision from episodic memory, code found by meaning, and the same search steered toward documentation with an instruction.
Why a chronicle, not a search box
Any tool can find similar code. Letapis remembers what your team decided and why — an episodic chronicle that survives between agent sessions, so the same question is never re-investigated twice.
Code answers to three different questions, and one search bar can’t ask them all:
semantic — where is this, by meaningstructural — what breaks if I change itcross-tier — which server handler answers this frontend callEmbeddings, reranking, vision — the whole pipeline runs where you decide: a laptop, a server, a private cloud. Your code stays yours.
Built by using it
What it covers

| You have | Letapis does |
|---|---|
| Markdown docs, Obsidian vaults | indexes and watches them — docs are first-class, not an afterthought |
| Code in 24+ languages | tree-sitter chunking into semantic atoms, searched by meaning |
| PDFs, books, long specs | research scopes: chapter structure, figures described, tables extracted |
| “Find it by meaning” | hybrid vector + BM25 search with a cross-encoder reranker |
| “Find the exact string” | full-text search over the same index |
| “What breaks if I change this?” | blast radius over a reference graph — exact callers, file and line |
| “Which handler answers this call?” | cross-tier bridge from a frontend call to its server handler |
| “Why did we decide this?” | episodic memory: decisions with rationale and timeline, across sessions |
Letapis — a chronicle: the written memory of generations.
Velis, the spirit of memory, writes it. Your agents read it.
Notes