# Eve (https://docs.vitrinka.ai/pm/eve)



## One run view, four places [#surfaces]

Open Eve on the project's page at `/p/<project>/eve`, in a board's Chat island (its **eve** channel), in a task's conversation sheet, or with ⌘J anywhere else in the app. These places share the same conversation interface, but show threads for their scope: project, board or task. A thread's visibility also depends on your access.

## What you see [#run]

A run is a transcript folded from the backend's event stream: your messages, the assistant's text, and typed blocks — tool calls with their results, files, a task filed, a board composed — rendered by the same element painter the boards use. Sessions are listed per scope (project, task or board), so a task's thread is that task's history with the AI, not a global chat.

## Queue, steer, interrupt [#steer]

You do not wait for a turn to end:

* **Queue** — send while a run is busy and the message is queued for the next turn boundary; it shows as queued until the backend picks it up.
* **Steer** — interrupt a run durably, optionally with the message it should take up next; the run stops at its next safe point and continues with your instruction.
* **Per-turn model and effort** — a send can name the model and effort for that turn when the backend's catalog offers them.

Everything is live over a workspace event bus scoped to what you can see, so a run another person started updates in your view too.

## What Eve does in the PM module [#pm]

* **Coordinates a release** — when the optional coordinator is enabled, it reads bounded readiness, candidate and evidence records and explains the returned blockers. The [Overview](/pm/brief) remains deterministic; Eve cannot mark evidence verified or record a shipment.
* **Answers about a task** — ask from the task's conversation, or mention `@eve` in a comment and the answer lands as a reply.
* **Files and triages** — "make these three tasks" goes through [intake](/pm/intake) as drafts, never straight into the backlog.
* **Filters** — an available backend can turn a request into a [task filter](/pm/views#nl). Offline, the local parser handles a limited set of English phrases.
* **Writes rules** — a rule described in words becomes the same typed [rule document](/pm/rules), dry-runnable before it is enabled.
* **Enriches drafts** — optional type, priority and labels on intake, failing open.
* **Distils and summarises on a label** — `eve-distill` asks once for a digest of the task's record; `eve-summarize` keeps a running summary while the label is on.
* **Writes meeting notes** — notes, decisions and action-item drafts for a [meeting task](/pm/tasks#meetings) (`vitrinka task meeting-notes`).

## Choosing the AI [#settings]

The AI is chosen at two levels, and the automatic work on top of it is switchable at both.

* **The organization's provider** — **Settings → Organization → AI** picks the one provider every workspace uses for @mentions and review passes: **Eve — managed AI** (billed against the organization's AI credits), OpenRouter, OpenAI or Anthropic with your own key, **ChatGPT** or **Claude Code** through a one-time subscription login with no key, or any OpenAI-compatible endpoint. **test** it before you **save**; **disconnect** removes it.
* **The workspace** — **Settings → Workspace → AI** holds **use EVE AI** (off keeps existing runs readable, while new sends answer with a notice), the default model and reasoning effort for the workspace, and, for admins, the [backend override](#backend).
* **Automatic flows** — intake enrichment, the morning brief, the brief refresh, todo conditions and the todo backfill run without anyone asking; the **lookup decider**, where Eve picks among an ambiguous task lookup's candidates, stays off until someone switches it on. The organization's AI page switches each one on or off; a workspace follows that default or switches a flow off for itself, may switch the lookup decider on unless the organization switched it off, and off at either level wins. An agent's deep lookup (`deep: true`) asks the decider whatever its switch says.
* **Spend** — the workspace's AI page shows managed AI spending this month, reserved and completed calls and token activity; credits are bought under **Plan & billing**.

## The backend underneath [#backend]

Vitrinka does not ship a model. It proxies `/api/v1/eve/{path}` to an AI backend that speaks the public AI Backend Protocol — a normative wire contract, so any conforming backend plugs into any deployment unchanged. The deployment sets `AI_BACKEND_URL` and `AI_BACKEND_TOKEN`; a workspace admin can point their workspace at a different backend, and that override wins over the deployment's. A backend on a private, loopback or internal address, like an organization's own AI endpoint there, works only once deployment authority has saved it ([Outbound targets](/operator/connectors#outbound)). On the SaaS, every non-read call passes the workspace's AI credit gate first; a workspace on its own backend is not metered.

The repository also contains the optional Vitrinka-owned `apps/eve` runtime and packaged console host, deployed separately from the Go product. They consume public `@evelinka-ai/core` and `@evelinka-ai/console` packages pinned to `0.5.1`. Activation requires those packages to be published, a registry lockfile and runtime acceptance checks; a build from packed prerequisite artifacts alone does not establish registry readiness.

The release coordinator uses typed, bounded server reads. A model or tool outage produces an inconclusive explanation rather than invented readiness; the task engine, scope decisions and release authority remain on the server.

<Callout type="info">
  An air-gapped deployment with no backend configured keeps everything else: the built-in rules, the local filter parser and the whole task engine run without Eve.
</Callout>
