Counting visitors…
Browse all docs
Start · 9Find your path through RunifoldLearn Runifold in 45 minutesUnderstand the complete Runifold platformYour first trustworthy runChoose the right execution APIChoose crates and Cargo featuresBuild common Runifold applicationsRunifold frequently asked questionsTroubleshoot Runifold applications
Execution kernel · 7Understand RunContextCoordinate external effects safelyBound work with budgets and cancellationHandle errors and retries safelyEvents, journals, and execution evidenceDesign capability-safe executionRecover safely from checkpoints
Models & providers · 7Route across models without duplicate outputChoose and configure a providerUse the provider-neutral model protocolBuild on the Provider Runtime contractUse OpenAI control-plane and Realtime APIsTest and benchmark provider adaptersSet up OpenAI, Anthropic, Gemini, and Ollama
Agents · 7Build and configure an AgentGive an Agent typed toolsAdd conversations and semantic memoryDelegate to child Agents safelyReturn structured Rust valuesStream without losing semanticsGround an Agent with retrieval
Durable workflows · 7Compose deterministic workflowsMake workflows durableOperate durable workflow workersCoordinate timers, signals, and durable waitsRun multi-tenant workflow infrastructureRun parallel branches and safe racesVersion and evolve durable workflows
Integrations · 7Connect through MCPChoose stores and persistence boundariesExpose durable work through MCP TasksBuild and evaluate retrieval pipelinesUse MCP Resources, Prompts, and SamplingCache MCP responses without crossing authorityDeploy Runifold in a Rust web service
Quality & operations · 10Test without the networkEvaluate quality and prevent regressionsObserve the complete run treeRun safely in browsers and at the edgeRead reliability claims preciselyRun reproducible evaluations in CIOperate Runifold with SLOsGovern Task retention and deletionArchive audit evidence to S3-compatible WORM storageManage compatibility and trusted releases
Docs/Quality and operations
NEW TO RUNIFOLD?Build the complete mental model in 45 minutes
Quality and operations

Operate Runifold with SLOs

Deploy OpenTelemetry instrumentation, control metric cardinality, define objectives, and diagnose latency, failures, and budget pressure.

Practical guide·12 min

Operational signals

Operate Runifold as a causal execution system, not only as an HTTP client. Measure root Run success and latency, model duration and first chunk, Agent turns, Tool and delegation failures, Workflow queue and lease behavior, MCP stages, budget exhaustion, and durable Store health.

Every terminal failure should retain a normalized kind and correlation to the Run tree. “Provider error” is too broad for an actionable objective.

Instrumentation layers

OtelModel instruments canonical model calls and routing. OtelJournal exports semantic Run evidence. OtelRuntime connects the configured OpenTelemetry boundary. Workflow budget and Task governance modules add projection, supervision, cleanup, and retention metrics.

Instrument at stable library boundaries. Avoid wrapping only the outer HTTP handler, which hides slow Tools, repeated turns, fallback attempts, and wait time.

Default objectives

The bundled runbook starts with:

SignalObjectiveWindow
Agent Run success99%30 days
Agent end-to-end P95at most 30 secondsrolling 5 minutes
MCP Sampling success99%30 days
Agent budget exhaustionbelow 2%rolling 15 minutes

These are conservative examples, not universal promises. Create separate objectives for direct model traffic, durable Workflow completion, queue delay, and Realtime sessions when those are user-visible products.

Incident workflows

For elevated failures, split by normalized error kind, follow an exemplar into the Run tree, then inspect provider, Tool, child, Store, and Effect boundaries. For latency, separate queueing, model time, first chunk, turns, and callable duration. For budget pressure, compare resource dimensions before raising caps.

Never respond to an outage by enabling broad retries. Confirm retry safety, stream commit state, idempotency, remaining deadline, and downstream capacity.

Cardinality and content

Prometheus labels should contain bounded status, error kind, stage, and route class. Run IDs, invocation IDs, Agent or Tool names, request IDs, tenants, and user extensions belong in traces or controlled logs, not labels.

OpenTelemetry capture is redacted by default. Enable prompt or output capture only with explicit purpose, access control, retention, deletion, and incident review. The observability system must not become a second ungoverned data store.

Install the bundled assets

Export the SLO assets from the exact Runifold version used by the service, so dashboard queries and emitted metric names cannot drift:

use std::fs;
 
fs::create_dir_all("artifacts/observability")?;
fs::write(
    "artifacts/observability/prometheus-rules.yaml",
    runifold::otel::slo::PROMETHEUS_RULES,
)?;
fs::write(
    "artifacts/observability/grafana-dashboard.json",
    runifold::otel::slo::GRAFANA_DASHBOARD,
)?;

Validate the Prometheus rules before deployment, import the dashboard into a staging data source, and fire one synthetic success, timeout, Tool failure, and budget exhaustion. If a panel is empty, first verify instrumentation and label names; do not weaken the alert. Record the chosen SLO targets, burn-rate action, owner, and rollback condition beside the deployed assets.