⌂ Home ☷ Board

Luci Control Room and Runtime Independence Plan

Status: active plan / progress tracker Owner: Luci Created: 2026-05-21 Last reviewed: 2026-05-21 Lucienne review: /Users/elmar/PKA/lucienne-review-luci-control-room-runtime-independence-report.md on Lucienne Claude Code review: /home/lucienne/workspace/reports/claude-code-review-luci-control-room-runtime-independence.md Hermes GLM review: /home/lucienne/workspace/reports/luci-control-room-runtime-independence-plan-review.md Source prompt: review Shann Holmberg's Hermes Agent Control Room recommendations and compare them with the current Luci / Mission Control setup. Related report: /home/lucienne/workspace/reports/mc-orchestrator-flow-diagram.html Canonical progress file for this initiative: this document. Mission Control tracking ticket: MC-3898 (identifier, not SQLite row id; title: Luci control room and runtime independence foundation)

2026-05-24 Lucienne status / PRD addendum

Current controller-status companion PRD:

Use that PRD/status ledger for the live MC-4000 recovery state: what is completed, tested, reviewed, browser/Tessa-verified, signed off, and still outstanding.

This original plan remains the historical architecture and runtime-independence plan. Do not use the checklist below as the only live tracker; it now needs the PRD/status ledger as the current source for completion gates.

Summary as of 2026-05-24:

Why this exists

Elmar wants to get the most out of Hermes, but not become dependent on Hermes, Claude, Gemini, Codex, or any single runtime. Mission Control should remain the durable operating layer: tickets, history, workbench, runtime ledger, routing, reports, task status, and recovery should survive model/runtime churn.

2026-05-22 clarification from Elmar: this work is not a Hermes project. Mission Control must stay harness-independent: Hermes can be a preferred and capable open-source adapter layer, especially because it is multi-provider and inspectable, but MC must not depend on Hermes-specific behavior for its core workflow. If Hermes, Claude Code, Codex CLI, Gemini CLI, or any provider stops working tomorrow, MC should still preserve the work ledger, routing contract, evidence trail, and user-facing operating model.

This document is both:

  1. A report on how our current setup compares to the Hermes Agent Control Room pattern.
  2. A todo/progress tracker we can revisit and update.

Storage rule going forward

We have been inconsistent about where plans, docs, and reports are saved. For this initiative, use this rule:

When a report becomes an architecture contract, create or update the matching file in mission-control/docs/ and link back to the originating report.

Source-of-truth boundary

Lucienne reviewed this plan on 2026-05-21 and approved the direction with one required boundary: the control room must be a governance/navigation layer, not a second source of truth.

/home/lucienne/workspace/agent-control-room/

Purpose: governance, navigation, operational index, and cross-system runbook entrypoint.

Allowed contents:

Not allowed:

/home/lucienne/workspace/mission-control/docs/

Purpose: canonical architecture contracts that code must obey.

The existing canonical runtime architecture contract remains:

/home/lucienne/workspace/mission-control/docs/runtime-architecture-refresh.md

If runtime independence becomes a governing principle, create a focused supporting doc such as:

/home/lucienne/workspace/mission-control/docs/runtime-independence.md

and link it both ways with runtime-architecture-refresh.md.

/home/lucienne/workspace/reports/

Purpose: human-readable reports, plans, audits, diagrams, and progress trackers. The living plan belongs here. If a plan becomes an architecture contract, mirror or move the contract into mission-control/docs/.

/home/lucienne/workspace/luci-manifest.md and /home/lucienne/workspace/CAPABILITIES.md

Purpose: deployed inventory and capabilities. The control room links to these files instead of copying their contents.

Executive summary

We are not far off the article's recommended architecture. In capability terms, Luci + Mission Control is already beyond the article's Level 4 pattern: we have an orchestrator, ticket board, scheduler, workers, runtime workbench, gateway, skills, memory, health checks, and recurring automation.

The gaps are mostly about packaging and resilience:

Design principle

Mission Control must be runtime-agnostic.

Hermes, Claude Code, Codex, Gemini CLI, Kimi, GLM, browser agents, direct APIs, and future runtimes should all be swappable adapters under MC. The durable state must live in MC and Luci's control room, not inside any one runtime transcript.

Terminology for this initiative:

Claude Code must be named explicitly as a first-class runtime. claude_anthropic, claude_glm, claude_kimi, and similar entries are profiles using the Claude Code/Claude CLI runtime with different provider bindings, not separate runtimes by themselves.

Core invariant:

human intent -> MC ticket/workstream -> runtime_sessions ledger -> runtime adapter -> harvested MC history -> review/close

If a runtime disappears, changes licensing, gets retired, or loses tool support, MC should only need a profile/adapter update, not a redesign.

Current-state assessment

Already strong

Main weaknesses

Target architecture

1. Control Room wrapper

Create an explicit Luci control room layer without moving production systems prematurely.

Proposed location:

/home/lucienne/workspace/agent-control-room/

Start with the smallest useful structure, not a large aspirational tree:

agent-control-room/
  README.md
  shared/
    commands.md
  docs/
    runtime-independence.md
    webui-governance.md

This is a governance/navigation layer. It points to MC as the real work system and must not duplicate live state. Add more folders only when real content needs to live there.

2. Runtime abstraction

Define every runtime profile as an adapter with declared capabilities:

Runtime profile inventory must be generated from code, not memory. In particular:

This becomes the layer that lets MC carry on if Hermes, Claude, Gemini CLI, or any other runtime changes.

3. MC remains the durable source of truth

Do not move production orchestration into Hermes cron/kanban just because Hermes has those features.

Use Hermes features where useful, but keep MC as the durable surface for:

Hermes should be a powerful runtime and gateway, not the only place where workflow state lives.

4. WebUI governance

WebUI is allowed for:

WebUI should not be the only source of truth for:

Any meaningful WebUI/config change should be reflected in one of:

Before and after any meaningful Hermes WebUI/config change, capture a config snapshot or diff (~/.hermes/config.yaml backup plus hermes config/dashboard-visible setting summary) so WebUI drift is reviewable later.

Required gates

Architecture/docs gate

Any change to Mission Control runtime architecture, PKA operating behavior, or canonical docs requires Atlas-style review/signoff.

Code/runtime gate

Any code change touching runtime routing, provider selection, tmux/session lifecycle, scheduler dispatch, Telegram routing, or runtime profile enforcement requires:

UI gate

Any change to Runtime Workbench, Mission Control UI, Hermes WebUI behavior, or dashboard pages requires Tessa validation with screenshot evidence.

Secrets/security gate

No secrets may be copied into the control-room docs. Environment maps must be redacted and point to the authoritative secret location/SOP.

Progress checklist

Legend: [ ] not started, [~] in progress, [x] done.

Phase 0: Preserve this plan

Phase 1: Minimal control-room skeleton

Phase 1.5: Runtime adapter contract amendments

Purpose: make the implicit Luci/MC runtime contracts explicit before expanding the registry or changing any runtime/model defaults. This is the first safe implementation step because it is docs/inventory only: no service restarts, no model changes, no Telegram routing changes, no scheduler behavior changes.

Phase 2: Registry and runbooks

Phase 3: Runtime profile portability

Phase 3.5: Hermes adapter reference hardening

Phase 3.6: HermesProfileRuntimeAdapter implementation slice

Status: ready for coder lane; no live runtime changes made by this planning step.

Reference brief: - ~/workspace/reports/hermes-profile-runtime-adapter-implementation-brief-2026-05-22.md - ~/workspace/agent-control-room/docs/hermes-profile-runtime-adapter-implementation-brief.md - ~/workspace/mission-control/reports/hermes-profile-runtime-adapter-implementation-brief-2026-05-22.md

Evidence gathered read-only: - MC already has Hermes runtime profiles: hermes_grok, hermes_codex, hermes_glm, hermes_kimi, hermes_minimax. - persistent_luci.py::_command_for_profile() already has a cli == "hermes" command branch. - Hermes is installed on Luci at /home/lucienne/.local/bin/hermes and /home/lucienne/.hermes/hermes-agent/venv/bin/hermes. - Hermes CLI help confirms the required launch flags: --provider, --model, --source, --pass-session-id, --accept-hooks, --yolo. - models.preflight_runtime_profile() currently reports Hermes profiles as available.

Implementation intent: - Make Hermes runtime launch honest and inspectable before relying on it for production work. - Resolve the Hermes executable explicitly and use the same resolver for preflight and launch. - Record adapter metadata in runtime_sessions: adapter name, command contract version, resolved executable, redacted argv, MC runtime profile, Hermes profile/isolation mode, provider/model, cwd, source tag, pane log path, and reconciliation status. - Label current Hermes profiles as provider/model overrides on the default Hermes profile unless/until dedicated Hermes profiles such as luci-codex, luci-kimi, or luci-glm are created. - Define SessionFileReconciler as a future import path only; MC remains the source of truth.

Non-goals: - No Hermes update. - No default-runtime switch. - No Telegram poller change. - No service restart. - No scheduler authority change. - No wholesale copy of lotsoftick/hermes_client.

Phase 4: Model and cost routing policy

Phase 5: WebUI and config workflow

Phase 5A: Telegram home-channel and topic routing

Phase 6: Report/index hygiene

Phase 7: Acceptance tests

The initiative is healthy when:

Immediate next actions

  1. Use MC-3898 as the tracking ticket/project for this initiative; this is the MC identifier, while SQLite row ids may differ.
  2. Complete Phase 1.5 before expanding Phase 2/3: patch the governance docs with the runtime adapter contract and rebuild runtime inventory from code.
  3. Keep this first step docs/inventory-only: no service restarts, no model/default changes, no Telegram routing changes, no scheduler behavior changes.
  4. Link any governing runtime-independence doc both ways with mission-control/docs/runtime-architecture-refresh.md via Atlas-style signoff.
  5. Inventory runtime profiles and current provider/model defaults before proposing runtime-routing code changes.
  6. Continue Phase 3 as portability/capability evidence. Keep Phase 4 policy separate and subscription-aware: most current work may be on subscriptions, but routing still needs capacity, reliability, sensitivity, and tool-support evidence.
  7. Defer changing Hermes persistent default from grok-4.3 until model-routing policy, capability inventory, and smoke tests are complete.

Notes from initial review

Observed on 2026-05-21:

Open decisions for Elmar

Update protocol

When we make progress, update this file in place:

Progress notes