Skip to content

Runtime

A Runtime is the recipe.

A list saying which Provider handles each part of one specific deployment.

A Provider is a translator that knows one tool. A Runtime is the list of which translators to use together — for this deployment, on this kind of machine, in this ecosystem.

Composed ofone Provider per part of the deployment (harness / OS sandbox / interpreter / LLM gateway / MCP broker)
Authored bythe operator (picks Providers when creating a Sandbox-spec)
Used bythe host runtime to know which Providers to invoke for a given Sandbox
Examplesclaude-code-laptop, cursor-laptop, langchain-react-canonical, openai-assistants

For a deployment of Claude Code on a developer laptop, the Runtime claude-code-laptop is this list:

Part of the deploymentProvider that handles it
The Claude Code agent's tool permissionsclaude-code (writes the agent's settings.json)
The OS-level sandbox around the agent processnono (applies macOS/Linux process isolation)
Python code the agent writesmonty (constrains imports, memory, network)
LLM API callsanthropic-gateway (routes through TapPass)
Tool calls (MCP traffic)mcp-broker (routes through TapPass)

That bundle = the claude-code-laptop Runtime. Operator picks Providers; the Sandbox actually runs the recipe.

Same Policy, different ecosystems → different recipes:

RuntimeUsed forWhat's in the recipe
claude-code-laptopdev laptops running Claude Codeclaude-code + nono + monty + Anthropic gateway + MCP broker
claude-code-serverCI / build hostsclaude-code + OpenShell + monty + Anthropic gateway + MCP broker
cursor-laptopCursor on dev laptopscursor + nono + (Cursor has no codemode hook) + OpenAI gateway
langchain-react-canonicalcustom Python via tappass-agent SDKsdk-direct + OpenShell + monty + multi-provider gateway + MCP broker
openai-assistantsOpenAI Assistants API consumers(gateway only — Assistants run on OpenAI's servers)

A customer with a heterogeneous stack picks multiple Runtimes — one per surface — and applies the same Policy to all of them. The Compatibility Matrix shows what each Runtime delivers.

One Runtime → many Sandboxes (every dev's laptop running Claude Code = its own Sandbox, all under the same claude-code-laptop Runtime).

Runtime "claude-code-laptop-strict"
├── harness → claude-code provider (managed settings.json + PreToolUse hooks)
├── kernel → nono provider (sandbox-exec on macOS / Landlock on Linux)
├── interpreter → monty provider (Python codemode containment)
├── llm gateway → llm-gateway-anthropic provider (env-var redirection)
├── mcp broker → mcp-broker provider (every MCP connection through TapPass)
└── update model: per-ring (claude-code: file rewrite; nono: restart; monty: re-import; gateway: live)

Runtime IDs are operator-named (claude-code-laptop-strict, librechat-internal-server, cursor-team-eng, …). They are reusable across many sandboxes — every sandbox-spec selects a runtime.

Runtime idHarnessKernelInterpreterGatewayMCPUse case
claude-code-laptopclaude-codenono / sandbox-execmontyllm-gateway-anthropicmcp-brokerDev laptops running Claude Code
claude-code-serverclaude-codeopenshellmontyllm-gateway-anthropicmcp-brokerCI / build agents running Claude Code
cursor-laptopcursornono— (no codemode)llm-gateway-openaipartialDev laptops running Cursor
librechat-serverlibrechat pluginopenshell / k8smontyllm-gateway-multimcp-brokerSelf-hosted LibreChat
element-botelement-bot SDKopenshell / k8sllm-gateway-multimcp-brokerElement / Matrix self-hosted bot
openai-direct-no-sandboxsdk-directllm-gateway-openaiCustom code with gateway-only governance
langchain-react-canonicalsdk-directopenshellmontyllm-gateway-multimcp-brokerThe reference custom-code path; full 5-position depth
collibra-steward-laptopclaude-code OR sdk-directnonomontyllm-gateway-multimcp-brokerThe demo runtime

A customer with a heterogeneous estate (Claude Code on laptops, LibreChat on servers, custom Python in CI) defines multiple runtimes, applies the same policy to each via different runtime selections, and gets governance depth appropriate to each ecosystem.

[author] Operator picks providers per ring + gateway config
tappass runtime create --name claude-code-laptop \
--harness claude-code --kernel nono --interpreter monty \
--llm-gateway anthropic
[validate] Compiler checks provider compatibility + manifest coverage
(which Compiled Policy fields are unenforced under this runtime?)
[publish] Runtime saved to per-org runtime registry
[bind] Sandbox-spec references a runtime id
tappass sandbox-spec create --runtime claude-code-laptop --policy …
[provision] Sandbox emit-bootstrap → tappass-host init/start → providers run
↓ at sandbox start, host invokes each provider's apply path:
↓ harness provider writes its target config
↓ kernel provider creates sandbox + applies rules
↓ interpreter provider configures executor
↓ gateway provider sets env vars / endpoints
[run] Agent runs in the instantiated runtime
On manifest change: each provider re-applies via its update model
[evolve] Provider versions bump → runtime pinning lets operators control upgrade

The Compiled Policy coverage report (per runtime)

Section titled “The Compiled Policy coverage report (per runtime)”

A runtime exposes which Compiled Policy aspects it can fully / partially / not enforce:

Runtime "cursor-laptop":
Compiled Policy aspect Coverage
─────────────────────────────────────
network ✓ via cursor (limited) + llm-gateway-openai
filesystem ✗ not supported by cursor + nono not selected
tools partial (cursor harness allow/deny)
interpreter ✗ no interpreter provider selected
budget ✓ via llm-gateway-openai
compliance_tags ✓ recorded in audit

This report is the buyer-facing answer to "what governance do I get with my stack?". A buyer reading "Compiled Policy coverage: cursor-laptop covers 3/6 aspects" knows exactly what's enforceable. Switching to claude-code-laptop lifts coverage to 5/6 (everything except possibly kernel-level egress on macOS, depending on nono features).

EngineWhat it doesStatus
Runtime registryPer-org list of authored runtimesconcept
Compiler — provider routingComposes selected providers; runs each on the manifestconcept (extends policy compiler)
Compatibility checkerValidates provider combinations + reports manifest coverage gapsconcept
Runtime instantiator (host-side)At sandbox start, invokes each provider's apply pathconcept (within host-runtime-cli)
PersonaSurfaceWhat you do
Operatortappass runtime create / list / show <id>author and inspect runtimes
Operatortappass runtime coverage <id>manifest coverage report (which aspects this runtime fully enforces vs. not)
Operatortappass sandbox-spec create --runtime <id>bind a sandbox-spec to a runtime
Operator (visual)Onboarding wizardpick a runtime from a curated set or compose your own
Buyer / partnerCoverage matrix per ecosystemanswer "what governance do I get?" per ecosystem
  • composed ofProvider (one per ring + cross-cutting layers)
  • bound toSandbox (each sandbox runs in exactly one runtime)
  • referenced bySandbox-spec (each spec selects a runtime)
  • appliesCompiled Policy (Keyring) (the canonical IR each provider consumes)
TopicFile
Strategic frameTapPass Strategy Memo v3 §06 (rings & targets) + §08 (mapping agent surfaces to architecture)
Provider taxonomyprovider card
Sandbox lifecyclesandbox card
AspectStatus
Runtime as first-class conceptNEW (this card)
Runtime registryconcept (Q3 2026)
Compatibility checker + coverage reportconcept (Q3 2026)
Curated v1 runtimes (claude-code-laptop, librechat-server, …)concept (Q3-Q4 2026)
Custom runtime authoring (full provider selection)concept (after curated v1)
  • Runtime ≠ Sandbox. Runtime is the recipe; Sandbox is the running instance using that recipe. One runtime → many sandboxes.
  • Runtime ≠ Provider. Provider is one component (the Claude Code provider, the OpenShell provider). Runtime is the assembly of providers.
  • Runtime ≠ Ecosystem. "Claude Code" is a target (one harness provider). "Claude Code on laptop with nono kernel and monty interpreter" is a runtime (a specific composition). Different runtimes can use the same harness provider with different kernel + interpreter providers.
  • Runtime is operator-authored, not vendor-supplied. TapPass ships curated default runtimes for common combinations, but the operator can compose any provider combination they want (subject to compatibility checks).