ADR-033: Harness Shaping — One OpenCode Runner
Architecture decision: one SRE Investigator runner shaped by SME catalog playbooks (Remuda slice, first tools, scout brief) — not a fleet of per-alert agents.
| Field | Value |
|---|---|
| Status | Accepted |
| Date | 2026-09-20 |
| Author | Federal Frontier AI |
| Deciders | Federal Frontier Architecture |
| Related | ADR-005 (Agent Harness), ADR-030 (Open Harness / Agent Lab), ADR-032 (OpenCode Runner local-first), Runner Interface Spec |
Context
Unknown SRE alerts currently land on a single replaceable Job engine (RUNNER_RUNTIME=opencode|claude|grok). A tempting fork is to spawn per-use-case agents (one CrashLoop agent, one PVC agent, etc.). That multiplies images, prompts, RBAC, and lab ops without improving the hot path.
What actually varies per alert class is the harness shape: which Remuda namespace/tool slice to expose, which tools to force first, how short the local scout brief is, and the quality gate before Bedrock escalate.
Name collision: FFP posse Scout (posse role / product surface) is not this runner mode. This ADR’s “LOCAL SCOUT” is an opencode-runner prompt/MCP budget (OPENCODE_LOCAL_SCOUT) shaped by alert-class playbooks.
Decision
-
ONE opencode-runner for unknown alerts. Do not spawn per-use-case agents or new runner binaries per alert class.
- Harness shapes (config, not forks):
- Remuda namespace/tool slice - playbook selects Remuda path (e.g.
/ns-9/mcpfor k8s pod/crash;/public/mcpor ns-0 for unknown/wide). - Alert-class playbook - forced first tools + one-line scout brief (
HARNESS_PLAYBOOK,HARNESS_FIRST_TOOLS). - Local scout prompt budget - keep scout <=~2500 chars (ADR-032 LOCAL SCOUT).
- Quality gate before Bedrock escalate - local-first; escalate only when local miss / weak root_cause; pass local transcript to Opus.
- Remuda namespace/tool slice - playbook selects Remuda path (e.g.
- Inference paths:
- Local model = hot path (Gemma / OpenAI-compat).
- Opus (Bedrock) = cold path with local transcript attached.
- Do not default
OPENCODE_LOCAL_ONLY/LOCAL_ONLYon in lab or prod stubs (local-first + gate, not local-forever).
-
Playbooks grow as YAML/JSON (or Python registry today), not new Harbor images. New alert classes = new playbook entries (id, remuda_path, first_tools, scout_brief, local_force_seconds).
- Dispatch wiring:
sre-dispatchclassifies the SRE event -> Playbook, composesREMUDA_MCP_BASE+ path into Job MCP ConfigMap URL (overrides staticREMUDA_MCP_URLwhen playbook selects), and passes harness env into the opencode Job.
SME catalog
An SME is a named playbook entry (id, display_name, domain, remuda_path, first_tools, scout_brief, status) - not a separate runner binary or Harbor image. This is the productization of FFP posse roles (Scout / Sage / Wrangler / Marshal) onto Remuda tool slices.
- Investigator = ONE
opencode-runner(local scout Gemma -> quality gate -> Opus escalate). - Catalog = living inventory of platform specialists the Investigator routes to.
- status:
ga/labare auto-routed byclassify_playbook_id();plannedentries remain visible roadmap depth until Remuda tools and classifiers are wired. - Source of truth:
dispatch-controller/app/playbooks.py(export viapython -m app.playbooksorGET /sme-catalog).
Consequences
Positive
- One image to build/pin (
opencode-runner); alert diversity is data. - Remuda slice + first-tools hints make local Gemma useful on CrashLoop/OOM/PVC without prompt bloat.
- Clear separation from FFP posse Scout naming.
- Aligns with ADR-032 local-first + quality gate (no Bedrock LOCAL_ONLY default).
Negative
- Classifiers must stay conservative (unknown ->
generic/ public Remuda). - Wrong Remuda path yields empty tools - ops must keep
REMUDA_MCP_BASEand namespace routes in sync with Wanaku. - Playbook IDs become a contract between dispatch and runner docs/tests.
Non-goals
- Per-alert-class Docker images or GitLab cloud agents.
- Renaming FFP posse Scout.
- Flipping production default runtime away from Claude without lab trial.
Sequencing
- Shipped: ADR-033 + playbooks + Job env/MCP URL wiring + scout hints.
- Docs / harness surfacing: publish SME catalog inventory + operator harness-shaping guides; bump
sre-dispatchv1.3.6 /opencode-runnerv1.4.3 (SME display_name; MCP-only scout gate). - Lab: enable
OPENCODE_LOCAL_SCOUT=1,RUNNER_RUNTIME=opencode, setREMUDA_MCP_BASE; fire CrashLoop vs PVC alerts; confirm playbook id in Job env and scout prompt. - Follow-up: externalize playbooks to ConfigMap YAML/JSON without code change.
Eupraxia Labs Confidential · 2026-09-20