Runs
A run is a single end-to-end execution of your agent - from the initial prompt to the final response. A run can include multiple LLM calls, tool invocations, and reasoning steps. Every run is analyzed for silent failures. Each run is assigned a UUID automatically. To provide your own (for example, to tie user feedback to a run from your client), settcc.runId in the run’s metadata.
Steps
A step is a single LLM request and its response within a run. An agent run typically involves multiple steps as the model reasons, calls tools, and refines its answer. Steps help you pinpoint exactly where in the reasoning chain something went wrong.Tool calls
A tool call is a single invocation of a tool function - the name, the arguments passed, the result returned, and whether it succeeded or failed. When grouped under a step, it means the LLM triggered that tool as part of its reasoning.Sessions
A session groups multiple runs together, typically representing a full conversation between a user and your agent. Sessions let you see the complete user journey across multiple back-and-forth interactions. Group runs into a session by settingtcc.sessionId in the run’s metadata.
Conversational runs
By default, runs are treated as background executions (cron jobs, internal automations, etc.). Marking a run as conversational tells the platform that a real user is interacting with the agent. Only conversational runs are analyzed for user insights like frustration, confusion, and custom patterns. Mark a run as conversational by settingtcc.conversational to true in the run’s metadata.
Agents
An agent is a named workflow or assistant in your product — for examplesupport-agent, onboarding-bot, or code-reviewer. Most teams ship more than one agent from the same codebase, and a single user might interact with several of them.
Attach a run to an agent by setting tcc.agent to the agent’s name in the run’s metadata. The platform promotes this to a first-class dimension:
- Agent selector. A top-level selector lets you scope the entire dashboard — runs, sessions, patterns, recaps, insight search — to a single agent or view everything together.
- Per-agent patterns and recaps. Patterns and recaps can be configured to target specific agents, so behavioral signals and weekly summaries stay scoped to the agent that produced them.
- Native agent filter.
agentis a first-class filter on the REST API and MCP tools, separate from custom metadata.
tcc.agent whenever a run belongs to a distinct agent in your product. Runs without tcc.agent are grouped under a default unscoped view.
Agent names that collide with reserved dashboard routes (for example
runs, sessions, patterns, recaps, overview, search, failures, feedback, tools, topics, views, settings, mcp-and-api) are dropped. Pick a more specific name like support-runs if you hit a reserved name.User and organization identity
The Context Company treats the end user of your agent (and the organization / workspace / tenant they belong to in your product) as first-class entities — not just another piece of custom metadata. Attach them to a run by setting these reserved metadata keys:tcc.userId— the stable ID of the end user in your systemtcc.userName— their display name (optional, requirestcc.userId)tcc.orgId— the ID of their organization / workspace / tenant in your systemtcc.orgName— the organization’s display name (optional, requirestcc.orgId)
userId or customer_id?
- Dedicated dashboard filters. Users and orgs get their own first-class filters in the dashboard, separate from custom metadata.
- Native user and org search. Look up any user or org by ID or name from anywhere in the product to jump straight to their runs, sessions, and patterns.
- Per-user and per-org analytics. Unlock user-level views, cohort analysis, and per-org breakdowns of patterns, frustration, and confusion.
- Stable identity across runs and sessions. The same
tcc.userIdties every run, session, and piece of feedback for that user together.
TCC metadata keys
The reserved keys below are the universal contract for controlling runs and attaching first-class user and organization identity. Each framework’s page shows the exact syntax for setting them, and some SDK wrappers expose them as typed parameters that set these keys for you.| Key | Purpose |
|---|---|
tcc.runId | Assign a custom run ID (useful for tying user feedback to a run). |
tcc.sessionId | Group this run into a session. |
tcc.conversational | Set to true to mark the run as conversational. |
tcc.agent | The agent name this run belongs to. Promotes the run to a first-class agent in the dashboard. |
tcc.userId | The end user’s ID in your system. Promotes user identity to a first-class filter in the dashboard. |
tcc.userName | The end user’s display name. Requires tcc.userId to also be set — names without IDs are ignored. |
tcc.orgId | The end user’s organization / workspace / tenant ID in your system. Promotes org identity to a first-class filter. |
tcc.orgName | The organization’s display name. Requires tcc.orgId to also be set — names without IDs are ignored. |
tcc.* namespace is reserved. Any keys outside the ones above are ignored, and none of them are stored as custom metadata on the run.
Silent failures
Traditional monitoring catches errors that throw exceptions. Silent failures are the ones that don’t - the agent returns a 200 but the response is wrong:- Bad tool calls - wrong arguments, wrong timing, or unnecessary invocations
- Hallucinations - fabricated information presented as fact
- Infinite loops - repeated identical calls burning tokens
- User confusion - responses that don’t address what the user actually asked
