What Otis records
Intent
How Otis describes what a user was trying to do, for each task, each document and each user.
An intent is a short description of what someone was trying to do. Otis writes one for each task, one for each document, and one for each user. On a task, the intent has two parts: a summary of the goal, and a category that names the kind of work.
This page explains how each intent is produced and how a task's category relates to intent clusters, so that you know what the text you see was based on.
Purpose of intent
Telemetry records what happened: which calls ran, which events fired, and how long each took. It doesn't record what the user wanted. Intent supplies that, so that you can group work by goal and see which goals go well.
Task intent
The summary
How Otis writes the summary depends on the kind of task.
- Conversation tasks. An AI model writes the summary from the user's messages in the task. The summary is one short phrase that states what the user wanted done, such as "Add pagination to the search results".
- Activity tasks. No model is involved. The summary lists the actions in order, with the duration and the outcome, such as
3× prospect.view, template.select, then share.link_opened over 4m12s → success:share. - Tool tasks. The summary is the statement the agent gave, word for word. If the agent gave none, the summary is
Tool calls:followed by the names of tools it called.
The category
A category is a short label for the kind of work, such as "code debugging". Categories aren't a fixed list. They come from the tasks in your own project.
For a conversation task or a tool task, Otis compares the task with the intent clusters it has found in your project. An intent cluster is a group of tasks with similar goals, and each cluster has a name. When the task is a good match for a cluster, the category is that cluster's name. Otherwise a conversation task takes a short label that the model suggested when it wrote the summary. If neither applies, the category is general.
For an activity task, the category is the name of the action that occurs most often in the task, or mixed_activity.
Categories and clusters
Otis assigns the category when it records the task, and the category stays as written. Clusters change. About once a day, Otis fits clusters again and assigns your project's tasks to them. Intent clusters describes the fit.
A task's category and its current cluster can therefore have different names. The category shows how Otis read the task at the time. The cluster shows where the task sits among your project's tasks today.
Starter categories
A new project has no clusters to compare against. Until it does, Otis uses starter categories. It generates them from what it knows about your product, and it falls back to a built-in set of general categories when it knows nothing yet.
Starter categories only supply names. Once the project has enough recent tasks, the daily run fits clusters from your own tasks, and their names take over for new tasks.
Document intent
For each document, Otis writes one sentence that states the document's purpose, and gives it a confidence between 0 and 1. It also records the document's kind. Documents describes where the kind comes from.
Otis writes a document's intent once the document has been idle for 30 minutes and contains at least one user message. It writes the intent again when the document is renamed or its declared type changes. New messages alone don't cause a rewrite.
User intent
For each user, Otis writes two or three sentences that describe what the user is trying to accomplish with your product, with a confidence between 0 and 1. The description is based on the user's activity over the last 30 days and on the mix of their tasks and documents.
A user gets an intent once Otis has seen enough of their activity. Otis refreshes it from time to time for users who are still active.
Sessions
Otis doesn't write a separate intent for a session. A session shows a goal that is composed from the summaries of its tasks.
Reading intent
- An activity summary describes what happened. It lists actions, and no model has inferred a goal from them.
generalmeans no match. The task was not close to any known name, and no label was suggested.- Category names change over time. Tasks recorded before your project had clusters keep their starter categories, so one kind of work can appear under an older name and a newer one.
Intent in Otis
In the data browser, the task list has an Intent column and a Category column, and opening a task shows both. Opening a user shows that user's description, and opening a session shows its goal.
Related
- Tasks covers how Otis divides a session into the tasks that each intent describes.
- Intent clusters covers how tasks are grouped across your project, and how those groups change.
- The
_otisinput block covers how an agent states its intent when it calls your MCP server. setDocumentPropertiescovers how your app declares a document's type and properties.