Panini
The Keeper — remembers it for next time.
The memory. It keeps what was learned about your project as durable facts, pulls the few that matter back in on every single turn, and closes the loop at the end of a session by writing down what changed.
What it can reach
- Durable fact store, on your machine
- Project memory and personal memory
- Merges duplicate facts automatically
- Recalls the relevant few, every turn
- Reads your project’s instructions file
- Writes down corrections at session end
It keeps “this supplier changed their invoice reference format in March” as a fact against the project. Next month you do not explain it again — the reconciliation starts with it already in hand.
How it works
Facts are kept as plain files on your machine, in two scopes: one inside the project you are in, one for you across all of them. A new fact that says the same thing as an existing one in different words is merged rather than added, so the store stays small enough to stay useful. Retrieval is a ranking function over that store — ordinary information retrieval, not a second model — and it is written so a neural retriever can be dropped in later without anything else changing.
On every turn, the handful of facts that bear on what you just asked are pulled in — a hard cap of eight, under a fixed size ceiling — along with your project’s own instructions file. At the end of a session, one summarising pass decides whether anything is worth keeping: a correction you made, a durable fact about the project, or something true about how you work in general. Most sessions produce nothing, which is the correct outcome, because every line kept is re-read on later turns and noise is a tax on every request after it.
That is the loop back to the beginning: what this agent keeps is what the orchestrator reads first next time.
What runs it
The store is ordinary code and never involves a model. Only the summary written at the end of a session uses one, and it uses the fast tier — Bala — because summarising a transcript does not need the strong model that produced it.
The desktop app can run your own API keys or a local model instead. The same tiering then applies to whatever you pointed it at.
Why the name
c. 6th – 4th century BCE
Pāṇini composed the Aṣṭādhyāyī, a description of Sanskrit in roughly 3,959 ordered rules. It is not a list of observations about a language; it is a generative system — a compact set of rules that, applied in order, produce the well-formed sentences of the language and no others, with exceptions handled explicitly rather than waved away.
That is a formal grammar, written more than two thousand years before the term existed. The resemblance to modern notation is close enough that Backus–Naur form is sometimes called the Pāṇini–Backus form, and the Aṣṭādhyāyī is routinely taught as the earliest surviving work of its kind anywhere.
Compress what you have learned into the smallest set of facts you can retrieve and apply again — and handle the exception explicitly instead of letting it quietly break the rule.
- Write down what was learned, in a form you can find later.
- Do not store the same fact twice in different words.
- Recall the few that bear on this request, not everything you have.
engine/src/panini — memory & knowledge: session store, project memory, skills index
This agent is not Pāṇini and implements nothing of his grammar. It is a memory store named after the thing he demonstrated: that a very large amount of knowledge can be compressed into a small set of things you can look up and apply again.
