> ## Documentation Index
> Fetch the complete documentation index at: https://docs.moda.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Analysis

> What Moda computes from ingested conversations and where each result appears in the dashboard and Data API.

After messages are ingested, Moda runs a set of analyses over each conversation and across your whole workspace. This page describes each analysis at the product level: what it produces and where to find it. For the underlying objects, see the [data model](/concepts/data-model).

## Where each result appears

| Result                              | Dashboard                                                                             | Data API                                                        |
| ----------------------------------- | ------------------------------------------------------------------------------------- | --------------------------------------------------------------- |
| Conversations, messages, tool calls | [Conversations](/dashboard/conversations), [Tool Catalog](/dashboard/users-and-tools) | [`GET /conversations`](/data-api/conversations)                 |
| Conversation summaries              | [Conversation detail](/dashboard/conversations)                                       | [`GET /overview`](/data-api/analytics) (recent activity)        |
| World state (tasks and facts)       | [Conversation detail → World State](/dashboard/conversations)                         | [`GET /conversations/:id/world-state`](/data-api/conversations) |
| User memory                         | [Conversation detail → World State](/dashboard/conversations)                         | Not available                                                   |
| Emotion signals                     | [Signals → User Emotion](/dashboard/signals)                                          | [`GET /emotions`](/data-api/signals)                            |
| Tool-failure classification         | [Signals → Tool Failures](/dashboard/signals)                                         | [`GET /tool-failures`](/data-api/signals)                       |
| Laziness signals                    | [Signals → Laziness](/dashboard/signals)                                              | Not available                                                   |
| Hallucination detection             | [Signals → Hallucinations](/dashboard/signals)                                        | [`GET /hallucinations`](/data-api/signals)                      |
| Problems                            | [Problems](/dashboard/problems)                                                       | [`GET /problems`](/data-api/problems)                           |
| Step scores                         | Problem impact panels                                                                 | [`GET /conversations/:id/step-scores`](/data-api/conversations) |
| Use cases                           | [Use Cases](/dashboard/use-cases)                                                     | [`GET /clusters`](/data-api/analytics)                          |

## Conversation summaries

Each conversation with at least two messages gets a one-paragraph summary. Summaries are regenerated as the conversation grows, feed the semantic search index, and appear on the conversation detail page and in the recent-activity section of [`GET /overview`](/data-api/analytics).

## Use-case clusters

Moda splits each conversation into segments — contiguous stretches of one user goal — and groups segments into a hierarchical taxonomy of use cases: broad user areas at the top, specific user goals underneath, each with a label, description, keywords, and conversation counts.

* The first taxonomy for a workspace is built once 50 or more analyzed segments exist; before that, the Use Cases page shows an empty state.
* New segments are assigned to the existing taxonomy as they are analyzed, so cluster volumes stay current.
* The hierarchy itself is rebuilt automatically as your traffic evolves — you never configure or trigger it. Segments that match no existing use case are held aside and grouped into new nodes at the next rebuild, so a genuinely new use case becomes visible once that rebuild has run.

Use cases appear at [Understand → Use Cases](/dashboard/use-cases), in the "What the agent handles" section of the [Home page](/dashboard/overview), and through [`GET /clusters`](/data-api/analytics), `GET /clusters/:nodeId/conversations`, and [`GET /task-clusters/search`](/data-api/analytics), which resolves a phrase like "refund requests" to a cluster `node_id` by name or meaning (CLI: `moda clusters --search`).

## Emotion signals

Moda analyzes user messages for expressed emotion using a fixed taxonomy of 6 families and 16 signals:

| Family      | Signals                                                                         |
| ----------- | ------------------------------------------------------------------------------- |
| frustration | `exasperation`, `anger`, `profanity`, `insult`, `sarcasm`, `escalation_request` |
| sadness     | `disappointment`, `resignation`, `self_blame`, `personal_distress`              |
| confusion   | `confusion`                                                                     |
| anxiety     | `urgency`                                                                       |
| trust       | `distrust`                                                                      |
| positive    | `gratitude`, `satisfaction`, `delight`                                          |

Each detection records a score, a risk score, a trajectory (`none`, `building`, `peak`, `resolved`, `sustained`), an elicitor — whether the agent (`bot`), an external factor, the user themselves (`self`), or something `ambiguous` caused the emotion — a primary cause, and verbatim user quotes as evidence. The Signals → User Emotion tab reports four KPIs: Analyzed, Negative Rate, At Risk (elevated negative-emotion risk without a confirmed detection), and Repair Rate (the share of negative detections whose trajectory ends `resolved`).

Results typically appear within minutes; conversations escalated for deeper negative-emotion analysis can take longer to finish. Read them at [Signals → User Emotion](/dashboard/signals) or via [`GET /emotions`](/data-api/signals).

## Tool-failure classification

Every tool call is recorded as it is ingested — name, success or failure, error text, and an effect classification (read, write, send, spawn, compute) — which powers the [Tool Catalog](/dashboard/users-and-tools) within seconds. Failed calls are then classified into failure categories specific to your workspace. Each category carries:

* a **label** — a short human-readable name for the failure
* a **failure family** — the broader class the failure belongs to
* a **likely cause** — what most plausibly produced the error
* an **action hint** — what to try first when fixing it

Classified failures appear within minutes at [Signals → Tool Failures](/dashboard/signals) (with per-tool drill-downs and time series) and via [`GET /tool-failures`](/data-api/signals) and `GET /tool-failures/:toolName`.

## Laziness signals

Laziness detection flags agent effort shortfalls: replies that omit code they promised ("… rest of code …"), stubbed implementations, deflection to the user, promised actions with no tool call following, claimed inability to do things the tool catalog says the agent can do, and similar patterns. Each detection carries a pattern family and a confidence:

* Detections at or above 0.5 confidence count as laziness on their own.
* Weaker detections count only when two or more pattern families co-occur in the same conversation.
* Truncated-data patterns are treated as ingestion artifacts, not agent behavior, and are excluded from headline counts.

Laziness results appear within minutes at [Signals → Laziness](/dashboard/signals). There is no Data API endpoint for laziness detections.

## Hallucination detection

Moda checks claims made in agent messages against the conversation's recorded execution state — tool results and task status. Checks include: claiming success when the tool call errored, claiming completion while a recorded check was failing, stating counts that contradict tool results, claiming something is absent when records show it exists, contradicting the recorded status of a task, and — on the positive side — claims corroborated by tool results, which are marked **verified**.

Per-message results show only contradictions (with an evidence quote and the offending text) and verified claims. Unverified claims are counted only in aggregate rates: the Unverified Rate KPI on the Hallucinations tab and the Ungrounded output rate on the [Home page](/dashboard/overview).

Results appear within minutes at [Signals → Hallucinations](/dashboard/signals) and via [`GET /hallucinations`](/data-api/signals).

## Problems

Problems group negative signals across conversations by root cause, so one underlying defect shows up as one ranked item instead of hundreds of scattered detections.

* **Attribution** — as each conversation is analyzed, its negative signals are attributed to an existing problem or held in the unexplained remainder.
* **Discovery** — problem definitions are created and updated from the attributed evidence, and the list is re-ranked as evidence accumulates.
* **Verification** — attributions are audited and stamped with a verification status, and each problem maintains a dossier: executive summary, causal chain, impact, evidence, and investigation reports.
* **Lifecycle** — problems move through Open, Reopened, Fixed, and Resolved.
* **Feedback loop** — you can mark a problem fixed, dismiss it, flag a wrong attribution, or rename it. Feedback is incorporated automatically; marking a problem fixed arms automatic reopening if the same root cause recurs.

Problems live at [Observe → Problems](/dashboard/problems) and in the [Data API problems endpoints](/data-api/problems), including `POST /problems/:id/feedback`.

## Step scores

Each analyzed segment gets a per-step outcome curve: a progress score per unit, the probability that a step was the first bad one, and a weighted rollup across segments. These are the reward signals behind `prm_dip` problem attributions and the trajectory evidence cited by Problems and `moda ask`. Read them via [`GET /conversations/:id/step-scores`](/data-api/conversations) or `moda step-scores <conversation_id>` in the CLI.

## World state

For each conversation, Moda builds a world state: the tasks the agent worked on and the facts established along the way.

* **Tasks** — open threads with a status (open, resolved, cancelled), nested subgoals, and a timeline of progress.
* **Facts** — key–value slots with provenance, including facts carried in from earlier context.
* **State events** — per-message changes to tasks and facts, plus a frame-by-frame replay view.

World state builds within minutes of ingest; the conversation detail page shows a banner while it is still building. Several other analyses — summaries, hallucination checks, problem attribution — are computed on top of it. View it in the World State view of the [conversation detail page](/dashboard/conversations) or via [`GET /conversations/:id/world-state`](/data-api/conversations) (plus `/replay` and `/snapshot`).

## User memory

Alongside world state, Moda distills each conversation's user messages into a compact memory document: the user's voice, decision style, and constraints, updated incrementally as new messages arrive. It appears in the User memory panel of the conversation detail World State view within minutes of ingest. There is no Data API endpoint for user memory.

## Next steps

* [Data model](/concepts/data-model) — the objects these analyses are computed over.
* [Dashboard: Signals](/dashboard/signals) — browse emotion, tool-failure, laziness, and hallucination detections.
* [Dashboard: Problems](/dashboard/problems) — work the ranked problem list and feedback loop.
* [Data API overview](/data-api/overview) — read every analysis programmatically.
