Runtime Instrumentation

Host-agent runtime evidence for non-Kubernetes container estates.

Note: Tetragon is an optional Linux eBPF sensor input, not the Stella Ops Linux agent.

Purpose

Runtime Instrumentation defines how Stella Ops host agents collect local runtime evidence from Linux and Windows container hosts, normalize it into platform contracts, and publish it only when the running container can be tied to an immutable image digest.

The active product model is host-agent based:

Status

AttributeValue
MaturityBeta local digest resolver; Agent.Core contracts implemented; Linux and Windows host-agent bases implemented; optional Linux Tetragon bridge implemented; optional best-effort Linux symbol resolver (/proc/<pid>/maps + ELF symbol tables, DWARF line resolution deferred) implemented; digest-gated Agent.Core evidence publication implemented
Sourcesrc/RuntimeInstrumentation/
Active deployment modelStella Ops Linux and Windows host agents
Out of scopeKubernetes support, Helm charts, Kubernetes API watches, DaemonSet deployment

Key Features

Current Live Status Boundary

The current production-capable slice is the local status resolver/worker contract (StellaOps.RuntimeInstrumentation.Worker, whose lifecycle host announces start/stop without producing evidence and binds the snapshot sources from the legacy StellaOps.RuntimeInstrumentation.Tetragon project), the shared StellaOps.Agent.Core contract boundary, the Linux host-agent base in src/RuntimeInstrumentation/StellaOps.Agent.Linux/, the optional best-effort symbol resolver in src/RuntimeInstrumentation/StellaOps.Agent.Linux.SymbolResolver/, the Windows host-agent base in src/RuntimeInstrumentation/StellaOps.Agent.Windows/, and the optional Linux Tetragon observation bridge in src/RuntimeInstrumentation/StellaOps.Agent.Tetragon/. The Linux base provides a generic-host daemon entry point, startup options validation, Linux-only platform guard, source/host identity creation, file-backed and command-backed local runtime status sources implementing Agent.Core IRuntimeStatusSource, optional observation-source intake, a digest gate, bounded local spool state, local health/status snapshot publication, and digest-gated Agent.Core evidence envelope publication. The Windows base provides the equivalent Windows Service-style generic-host lifecycle, Windows-only platform guard, file-backed and bounded command-backed runtime status sources, digest gate, bounded local spool state, local health/status snapshot publication, and digest-gated Agent.Core evidence envelope publication.

The Linux and Windows agents now build RuntimeEvidenceEnvelope records from digest-valid local snapshots and publish them through the Agent.Core IRuntimeEvidencePublisher boundary. Envelopes include deterministic event ids, source identity, host identity, agent identity, sequence, capture timestamp, runtime status freshness, digest, verification metadata, and replay metadata. If no downstream publisher is configured, the default no-op publisher returns a retry result so digest-valid entries remain in the bounded local spool instead of being silently drained.

No Signals, Scanner, Policy, EvidenceLocker, or Attestor service contract is defined inside RuntimeInstrumentation yet, and RuntimeInstrumentation registers no OAuth scopes in the canonical catalog (StellaOps.Auth.Abstractions/StellaOpsScopes.cs) because the module has no HTTP/CLI service surface — it is host-agent-local. The local boundary validates malformed and explicitly unsigned runtime evidence with AgentCoreValidation: a publishable envelope requires a positive Sequence, a valid sha256:<64-hex> digest matching the runtime status digest, an agent-id matching the observation, and VerificationMetadata recording digest.gate=passed plus a non-empty attestation.mode that is not unsigned. Downstream cryptographic signing and service-specific verification remain outside this module boundary.

The local status resolver can consume configured snapshot files and bounded local status commands, then resolve image digests without deriving identity from tags or container ids. Agent.Core now provides the OS-neutral contract surface that Linux and Windows host agents use.

Native CRI socket collection is not active yet. It requires owned CRI protobuf/gRPC contracts or an approved runtime API dependency, license review, generated types, and deterministic fixtures before it can become runtime authority.

Historical Kubernetes list/watch source code and docs were created before the product scope was corrected — the RuntimeContainerImageStatusKubernetesApiSource and RuntimeContainerImageStatusKubernetesWatchSource types still live in the older StellaOps.RuntimeInstrumentation.Tetragon project alongside the command/snapshot sources and ContainerImageDigestResolver. Those Kubernetes paths are not active product direction. New RuntimeInstrumentation work must not add Kubernetes deployment support, Helm charts, Kubernetes API informers, Kubernetes watches, or Kubernetes-first agent behavior.

src/RuntimeInstrumentation/StellaOps.Agent.Tetragon/ now contains the optional Linux Tetragon bridge. It is disabled unless RuntimeInstrumentation:LinuxAgent:TetragonBridge:Enabled=true is configured. TetragonExportClient reads local Tetragon export health, policies, and raw NDJSON event lines through bounded HTTP reads; TetragonRuntimeObservationSource normalizes supported local Tetragon events into Agent.Core RuntimeObservation records for the Linux agent snapshot surface. The bridge never publishes downstream runtime evidence and is not the Linux host agent.

Configuration

Agent options bind from layered JSON files plus environment variables (see the Linux/Windows host-agent dossiers for the full schema).

SectionOwnerNotes
RuntimeInstrumentation:LinuxAgentLinuxHostAgentOptionsIdentity, CollectionInterval (default 30s), MaxRuntimeStatusAge (default 5m), MaxObservationsPerCycle (default 256), Spool (capacity 1024 / 3 retries), and RuntimeStatus.Files/RuntimeStatus.Commands (≥1 required). Config files: /etc/stellaops/linux-agent.json, linux-agent.json; env prefix STELLAOPS_LINUX_AGENT_ (__:); optional PolicyFile overlay.
RuntimeInstrumentation:WindowsAgentWindowsHostAgentOptionsEquivalent Windows schema. Config files: C:\ProgramData\StellaOps\windows-agent.json, windows-agent.json; env prefix STELLAOPS_WINDOWS_AGENT_.
RuntimeInstrumentation:LinuxAgent:TetragonBridgeTetragonBridgeOptionsEnabled (default false), SourceId (default linux.tetragon), MaxEventBytes (default 1 MiB, max 4 MiB).
Tetragon:ExportClientTetragonExportClientOptionsAddress (default http://localhost:54321), HealthPath/EventsPath/PoliciesPath (/v1/...), connection/request timeouts, MaxResponseBytes/MaxEventBytes.
RuntimeInstrumentation:LinuxAgent:SymbolResolverProcessSymbolResolverOptionsPerFrameTimeout (100 ms), MaxFramesPerStack (256), MaxCachedElfFiles (64), MaxCachedBytes (10 MB), MaxCachedProcessMaps (256), ProcRoot (/proc).

Command-backed runtime status sources require typed arguments, a fully qualified executable path, an explicit timeout, and an output byte cap (MaxOutputBytes, default 1 MiB, hard ceiling 16 MiB).

Dependencies

Upstream

Downstream

CI And Release Boundary

.gitea/workflows/runtime-instrumentation-host-agents.yml has a single agent-core-and-linux job (runs-on ubuntu-latest) that runs the Agent.Core contract tests, the Linux host-agent tests, and builds plus tests the optional Tetragon bridge. The Windows host-agent unit lane and the pinned host integration lanes (windows-host-agent, linux-host-integration, windows-host-integration) were deleted on 2026-05-14 because no Gitea runner advertises windows-latest or the runtime-instrumentation self-hosted label set; they must be re-added once a Windows or labelled self-hosted runner exists. The workflow triggers on pull_request/push to src/RuntimeInstrumentation/**, docs/modules/runtime-instrumentation/**, the workflow file itself, and on workflow_dispatch.

The release guide records that RuntimeInstrumentation ships as Linux/Windows host agents, not Kubernetes or Helm packaging. Optional sensor and local-model pin changes must be called out in release notes before publication.