Runtime Instrumentation

Verified against commit 942a18727c (2026-09-26). Re-verify with: dotnet build src/RuntimeInstrumentation/StellaOps.RuntimeInstrumentation.sln -v minimal -m:1 -p:UseSharedCompilation=false && grep -rn "SectionName = " src/RuntimeInstrumentation --include=*.cs

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 product model is host-agent based:

Status

AttributeValue
Sourcesrc/RuntimeInstrumentation/ (solution StellaOps.RuntimeInstrumentation.sln)
ImplementedAgent.Core contracts; Linux and Windows host-agent bases with digest gate, bounded spool and envelope publication; optional Linux Tetragon bridge; best-effort Linux symbol resolver (/proc/<pid>/maps, ELF symbol tables, uncompressed DWARF .debug_line); Linux runtime-facts publisher to Signals; local status resolver worker
Deployable in the release bundle / composeNone. No devops/compose/ service, release-bundle service, or Dockerfile builds a RuntimeInstrumentation project. The Linux agent, Windows agent, and worker are executable projects intended for host installation; no installer or package is produced in this repository.
Name collisionThe agent-core service in devops/release/bundle/docker-compose.yml and devops/docker/Dockerfile.agent-core is the Release Orchestrator deployment agent (src/ReleaseOrchestrator/__Agents/StellaOps.Agent.Host), not StellaOps.Agent.Core from this module.
Database / HTTP surface / scopesNone. The module owns no database, maps no HTTP endpoints, and registers no OAuth scopes.
Out of scopeKubernetes support, Helm charts, Kubernetes API watches, DaemonSet deployment

Projects

ProjectKindRole
StellaOps.Agent.CoreLibraryOS-neutral contracts: identity, capabilities, runtime status, observations, evidence envelope, publisher, validation, deterministic ids
StellaOps.Agent.LinuxExecutableLinux host agent (generic-host daemon)
StellaOps.Agent.Linux.SymbolResolverLibraryBest-effort stack-frame symbolization for the Linux agent
StellaOps.Agent.TetragonLibraryOptional Linux Tetragon export client and observation bridge
StellaOps.Agent.WindowsExecutableWindows host agent (Windows Service lifetime)
StellaOps.RuntimeInstrumentation.RuntimeFactsLibraryProjection of evidence envelopes to Signals runtime facts, NDJSON serializer, HTTP publisher

Key Features

Evidence Delivery

The Linux agent delivers runtime facts to the Signals ingest endpoint POST /signals/runtime-facts/ndjson (mapped in src/Signals/StellaOps.Signals/Program.cs) through StellaOps.RuntimeInstrumentation.RuntimeFacts:

The Windows agent has no downstream publisher; it always uses NoopRuntimeEvidencePublisher.

Local Status Worker (withdrawn)

The local status worker is withdrawn. On 2026-09-27 PCD-73 moved StellaOps.RuntimeInstrumentation.Worker, the csproj-less StellaOps.RuntimeInstrumentation.Tetragon/ folder of container-image status snapshot sources and digest resolver that only it compiled, and their tests to src/__Obsoleted/RuntimeInstrumentation/ (owner ruling, CoC 15.4). The worker produced no evidence and nothing consumed its snapshots. Those sources included historical Kubernetes API and watch sources; new work must not add Kubernetes deployment support, Helm charts, Kubernetes API informers, Kubernetes watches, or Kubernetes-first agent behavior.

Configuration

Agent options bind from layered JSON files plus environment variables (see the Linux/Windows host-agent documents 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 (at least one required). Config files: /etc/stellaops/linux-agent.json, linux-agent.json; env prefix STELLAOPS_LINUX_AGENT_ (__ maps to :); optional PolicyFile overlay.
RuntimeInstrumentation:WindowsAgentWindowsHostAgentOptionsEquivalent Windows schema. Config files: C:\ProgramData\StellaOps\windows-agent.json, windows-agent.json; env prefix STELLAOPS_WINDOWS_AGENT_.
RuntimeInstrumentation:RuntimeFactsRuntimeFactsPublisherOptionsLinux only. BaseAddress (Signals base address; empty disables the publisher), CallgraphId, CallgraphIdByImageDigest, CompressPayload, and Authority (Url, optional TokenEndpoint, ClientId, ClientSecret, optional Tenant; required when BaseAddress is set).
RuntimeInstrumentation:LinuxAgent:TetragonBridgeTetragonBridgeOptionsEnabled (default false), SourceId (default linux.tetragon), AgentId, HostId, 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, MaxCachedProcessMaps (256), ProcRoot (/proc).
RuntimeInstrumentation:ContainerImageStatusSnapshotsRuntimeContainerImageStatusSnapshotOptionsWorker only. EnableBackgroundRefresh, RefreshInterval (default 30s), Files, Commands.

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

Build-time

CI And Release Boundary

.gitea/workflows/runtime-instrumentation-host-agents.yml has a single agent-core-and-linux job (ubuntu-latest) that builds the module solution and runs the Agent.Core contract tests, the runtime-facts projection tests, the Linux host-agent tests, and the optional Tetragon bridge build and tests. The Windows host-agent tests are not run in CI because no runner advertises windows-latest. The workflow runs on pull_request/push to the paths it lists (including src/RuntimeInstrumentation/** and docs/modules/runtime-instrumentation/**) and on workflow_dispatch.

RuntimeInstrumentation ships no image or package in the release bundle. Any future packaging is host packaging (service manager / Windows Service), never Kubernetes or Helm packaging.