Skip to content

Omni

The app keeps asking itself small questions about its own work: which kind of memory a note is, for one. Omni is what answers them. It is an extra: switch it off and the app works exactly as it did before Omni, with each question answered by the model that was already handling the work.

This page explains the mechanism. The settings it ships with, its models, its budget and its questions, are on Omni’s reference page, which is generated from the configuration itself.

The switch

Omni is one role, omni, in config/roles.yaml, and its mode is the switch: active is on, inactive is off. Type /omni in the app or in any channel to see which it is and who it would ask; /omni on and /omni off change it, for the whole app at once. It is the same setting the Settings screen shows for the role, so switching it in one place switches it everywhere.

It ships off. Turn it on once you have looked at what it asks.

Who it asks

The role’s chain is the order. A model built for this kind of question, Jev, comes first: it answers in its own question format and gives a probability for every answer it was offered. Behind it are ordinary language models, which answer through one card, agents/classifier.md, that asks for one answer from the list and how sure the model is.

Each is tried in turn. One that cannot answer at all, because it has no key, gave no reply in time, or its budget is spent, passes the question to the next. One that answered but was unsure does not: that answer stands, and the app does not keep asking until somebody sounds certain.

Jev is a provider like any other, in config/providers.yaml, with its key in .env as TYPESAFE_API_KEY. Without the key it is skipped and the language models answer.

How sure is sure enough

Every question in config/decisions.yaml has a floor: how sure an answer must be, written as a fraction of certain. Below it, the answer is not acted on and the part of the app that asked does what it does with no answer: a note it cannot place is left unfiled and logged rather than filed under the wrong kind. Raise a floor and Omni gets quieter; lower it and more gets through with less behind it.

What it costs

Omni has one line in config/budgets.yaml, whichever model answers. Every call is in the cost log under it, so the spend panel shows Omni beside the chat, the sub-agents, images and voice. Past the day’s cap, questions go unanswered until the next day, and the part of the app that asked carries on without an answer.

What leaves the machine

With Omni on, the text being judged is sent to the model that answers it. It is screened for your stored credentials first, like every model call. A question that declares egress: false is never sent off the machine at all.

What it can never change

Omni has no say in what the assistant is allowed to do. Permissions, the questions the app asks you before acting, sealed folders and the rules for tools you wrote are decided by config/permissions.yaml and the checks around it, with Omni on or off. See Permissions.

Reading what it answered

Every question Omni answers leaves one row in the app’s event record: the question, which model answered, the answer, how sure it was, and the full spread of probabilities when the model gives one. The text itself is not kept there, only a fingerprint of it.

TESSERACT v1.1.3 — documentation built 9 Oct 2026