Skip to content

Manifests & launch

A working definition is an AgentManifest held in your tenant’s AgentCatalog. This page is mode 1 in depth: the manifest’s binding surface, how a definition’s provenance survives a re-import, what the catalog validates when you save one, the per-role configuration plane, and the precedence that resolves a start request against a manifest at launch. For the two-modes overview, start at Agent configuration.

A manifest is one operator-authored record that names the whole shape of an agent. Grouped by what each axis controls:

AxisBinds
IdentityA stable manifest id, a display name, a description, tags.
PromptAn operator system/user prompt, plus versioned, revisable prompt fragments — each fragment carries a monotonic version per label and server-stamped authorship.
ToolsPer-capability tool selections, each pairing a capability with a realization preference (native substrate tool, MCP-delegate round-trip, or provider-native server-side tool) resolved at dispatch.
SkillsDefault skills composed into the agent at start, drawn from the tenant’s skill registry.
Coordination loopEither a declared skeleton (SessionKind) or an addressable strategy-configuration lock that beats the skeleton when set — see Coordination loops.
GenerationA default model, an allowed-model list, and defaults for sampling, reasoning effort, max output tokens, and response format.
Context budgetA compaction default for the agent’s working-memory runway (the context plane).
Supervision & gatingA supervisor strategy, HITL triggers, a confirm-before-dispatch flag, and the two distinct VMAO caps (replan iterations and coverage iterations).
Per-role planePer-role overrides for planner, worker, validator, and synthesizer (below).
Context bindingsMemory scope, placement, and the procedural / semantic / episodic space bindings that anchor the agent’s memory.
ProvenanceA ManifestSource recording where the definition came from (below).

Prompt fragment authorship is resolved server-side from the caller’s identity, never trusted from the request — the same rule the identity & authorization plane enforces everywhere. And no secret is ever a manifest field: credentials live only in the credential plane.

Every manifest carries a ManifestSource that records its origin, in a fixed precedence — a shipped seed the substrate provides, a config import from a declarative bundle, or an operator-authored definition. The order is load-bearing: operator intent outranks a config import, which outranks a shipped seed.

That ordering is what makes re-import safe. Re-importing a config bundle drops the tenant’s prior config-imported rows and re-applies the incoming ones — but it skips any id an operator has since authored over. An operator override is never silently clobbered by a re-import; the import writes around it. The catalog operations reflect the same principle:

  • Upsert creates or replaces a manifest.
  • Delete removes an operator-authored manifest, but refuses to delete a shipped seed.
  • Reset restores a shipped seed, discarding an operator override — the one operation that overwrites operator-authored state, and only as an explicit operator action, never as an import side effect.

Saving a manifest validates its shape and its skill references — not every downstream binding:

  • Structural — the id and display name must be non-empty, and each prompt fragment’s versions must be monotonic within its label.
  • Skill references — every default skill id must resolve in the tenant’s skill registry; an unknown id is rejected at save time.

Tool selections are not checked against a tool catalog at save time — a tool realization is resolved at dispatch with warn-and-degrade: a preference the bound provider can’t honor falls back to a lower-fidelity realization rather than failing the save or the start. This keeps a manifest portable across providers whose tool surfaces differ, and it is the deliberate contrast with a published agent, where the whole asset closure is resolved and sealed up front (Published agents).

A session’s coordination loop runs a small set of roles — a planner, workers, validators, a synthesizer. The per-role plane lets a manifest tune each role independently instead of applying one uniform configuration to all of them. A manifest carries a default role config with an optional entry per role, and each entry overrides only the axes it sets:

Role axisControls
ModelThe model that role’s dispatches use.
ToolsThe role’s tool allowlist (empty inherits; a non-empty set overrides).
SkillsThe role’s skill set — the substrate for progressive disclosure, so a validator sees a different toolset and instructions than a worker.
Memory scopeHow much of the session’s memory the role may read.
BudgetA per-role resource ceiling.
GenerationPer-role sampling, reasoning effort, output limit, and response format.
SharingEpisodic-memory sharing mode and the semantic-confer relevance floor.

The role plane is substrate-general vocabulary. Domain-specific tuning that isn’t one of these axes — for example Deep Research’s coverage-strictness or citation-strictness knobs — is not a role-config field; it rides the opaque per-session vertical-config carrier the substrate ferries but never interprets, and is owned by the vertical. See Deep Research for how a vertical reads its own config.

Starting a session against a catalog agent resolves its configuration live, folding the start request over the manifest over a substrate default. Each axis resolves independently, request-wins:

Live launch resolves each axis request → manifest → default; the resolved values are then pinned to the session's first event.
  • Model — the request’s model wins, else the manifest’s default model, else the role tier’s model. A request model must be in some catalog agent’s allowed-model list, or the start is rejected.
  • Operator prompt — the request’s operator prompt wins, else the manifest’s (blank values are filtered out at both decode and use).
  • Compaction — the request’s config wins, else the manifest’s, else the substrate’s compiled default.
  • Coordination loop — resolved by a fixed precedence: an explicit strategy-configuration reference, then the manifest’s strategy lock, then an explicit session kind, then the manifest’s declared kind. The strategy plane owns this chain — see Coordination loops.
  • Per-role config — a request’s per-role value merges over the manifest’s per-role default field by field, so a manifest role pin resolves with per-role specificity rather than being flattened by a uniform request value.

Because resolution runs at every start, editing the manifest changes what the next start composes. That live behavior is exactly what publishing removes.

The operator console’s Configure & launch surface is a direct reflection of this plane: it opens the four coordination roles as tabs and exposes each role’s model, tools, skills, and generation knobs, building the same per-role config the launch fold consumes. Editing a manifest, its prompt fragments, its tool selections, and reviewing the revision trail all happen there — see the operator console.

A live start resolves skills and generation defaults from the registry at start and then pins the resolved shape — the composed skills, the resolved coordination kind and strategy reference — into the session’s durable first event. A resume re-reads that pin instead of re-resolving, so a session recovered after a restart runs the same agent it started with, even if the working catalog changed underneath it in the meantime. The determinism mechanism is owned by the sessions plane — see Reconstruction & recovery.