Runtimes
What a runtime is
A recipe defines your agent’s behavior, but it doesn’t run on its own. A runtime is what makes it deployable. It binds a recipe to Introspection’s execution harness (the managed environment where your agent actually runs) and resolves the policy and resources the agent needs at execution time.
A runtime serves one or more environment lanes (typically staging and production) so you can promote a version from test traffic to live traffic. Pointing an environment at a runtime activates it for that lane; the environment moves between sibling versions the way a git ref moves between commits.
Runtime groups: the lineage
Successive versions of one logical agent share a runtime group, a stable identity that ties every version of that agent together. Each new version is its own immutable runtime row; the group is the through-line across all of them.
The lineage is not just bookkeeping. It is what lets:
- Experiments route between versions: an experiment compares arms within a single group’s lineage, on one environment.
- Patterns accumulate across versions: behavior and failure modes observed on one version stay attached to the lineage, so you can see how a recurring issue trends as the agent evolves, not just within a single deploy.
A runtime is one immutable deployable version. A runtime group is the agent’s identity over time. You experiment and trend patterns across the group, then ship a single version into an environment lane.
Kind and LLM mode
Two properties shape how a runtime is delivered and how it talks to a model:
| Property | Options | Meaning |
|---|---|---|
| Kind | bring-your-own-recipe / bring-your-own-harness | Whether Introspection supplies the execution harness around your recipe, or you bring your own. |
| LLM mode | managed / bring-your-own-key | Whether the runtime uses Introspection-managed model access, or your own provider credentials. |
Resolution and availability
When you start a task against a runtime by name, the platform resolves that name to a concrete version. There are two modes:
- Sticky (production default): a run pins the version that was active when it started, so an in-flight task keeps using one version even if you promote a new one mid-run.
- Latest (non-production default): every run resolves the currently-active version, so new work always picks up the newest promotion.
If a version turns out to be bad, an operator can deactivate it. A deactivated runtime stops resolving as available for new work while in-flight sticky runs keep their pinned version. Reactivation is explicit and reversible. Application SDKs intentionally do not expose lifecycle mutation; use introspection runtimes deactivate / reactivate or the dashboard.
Creating and running runtimes
Runtime registration is manifest-driven. Place a canonical .introspection/<runtime-slug>.yaml file in the repository, validate it locally, then bootstrap the first runtime from that manifest:
name: support-agent
description: Customer support agent
path: apps/support-agent
runtime:
llm_mode: byok
config:
memory_mb: 2048introspection recipes validate
introspection runtimes create --manifest .introspection/support-agent.yamlThe manifest filename is the stable runtime-group slug. create reads the manifest and Git checkout, records the immutable recipe pin through the active GitHub integration, and bootstraps the first runtime. Later commits produce new recipe-backed versions through the repository integration rather than imperative SDK mutation.
Operators inspect and route versions with the CLI:
introspection runtimes list --runtime support-agent
introspection runtimes versions <runtime-id>
introspection runtimes staging track <runtime-id> --git-ref main
introspection runtimes staging pin <runtime-id>
introspection runtimes deactivate <runtime-id> --reason "tool-call regression"
introspection runtimes reactivate <runtime-id>The JavaScript, Python, and Rust SDKs expose runtime list/get, resolution, and .run() only. This keeps deployment state in the operator surface while application code focuses on execution.
A typical flow: register the manifest once, track a branch in staging while you iterate, pin staging when you need a stable candidate, and start sending it work. Each pushed version joins the same runtime group, ready to experiment against the current baseline before you promote it.
Related
- Recipes: the versioned behavior a runtime deploys.
- Environments: the lanes a runtime serves.
- Experiments: A/B tests that route between versions in a group’s lineage.
- Observations & patterns: behavior that accumulates across a runtime group.
- API Reference: the REST API and JavaScript client for runtimes and tasks.