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)
Current controller-status companion PRD:
/home/lucienne/workspace/reports/mission-control-recovery-prd-status-2026-05-24.mdUse 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:
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:
We have been inconsistent about where plans, docs, and reports are saved. For this initiative, use this rule:
~/workspace/reports/ = decision reports, audits, plans, progress trackers, and human-readable artifacts.~/workspace/mission-control/docs/ = canonical architecture contracts that code changes must obey.~/workspace/wiki/ = compiled/reference system knowledge intended for broader operational lookup.~/workspace/tasks/ = scheduled task definitions only.~/workspace/luci-manifest.md and ~/workspace/CAPABILITIES.md = inventory/capability manifests, updated when deployed reality changes.When a report becomes an architecture contract, create or update the matching file in mission-control/docs/ and link back to the originating report.
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:
luci-manifest.md or CAPABILITIES.md/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.mdPurpose: deployed inventory and capabilities. The control room links to these files instead of copying their contents.
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:
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.
runtime_sessions is the runtime ledger.skills.external_dirs.hermes profile list currently shows only the default Hermes profile, so specialist separation is mostly in MC rather than Hermes profiles.~/.hermes/config.yaml; govern it as a runtime/config control surface, not only as a dashboard.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.
Define every runtime profile as an adapter with declared capabilities:
Runtime profile inventory must be generated from code, not memory. In particular:
scheduler.py::PROFILE_PROVIDER is the scheduler-dispatch profile list.scheduler.py::PROFILE_META includes additional metadata and sentinel/direct categories such as direct_gemini, direct_anthropic_sdk, and direct_mixed.scheduler.py::PROFILE_DEFAULTS is a static fallback; _runtime_profile_defaults() may resolve live defaults dynamically and may read ~/.claude/env/mc-runtime-profiles.json when present.model.default; do not imply Hermes defaults control MC ticket/scheduler routing.This becomes the layer that lets MC carry on if Hermes, Claude, Gemini CLI, or any other runtime changes.
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.
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:
~/.hermes/config.yaml backup/change noteluci-manifest.mdCAPABILITIES.mdBefore 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.
Any change to Mission Control runtime architecture, PKA operating behavior, or canonical docs requires Atlas-style review/signoff.
Any code change touching runtime routing, provider selection, tmux/session lifecycle, scheduler dispatch, Telegram routing, or runtime profile enforcement requires:
Any change to Runtime Workbench, Mission Control UI, Hermes WebUI behavior, or dashboard pages requires Tessa validation with screenshot evidence.
No secrets may be copied into the control-room docs. Environment maps must be redacted and point to the authoritative secret location/SOP.
Legend: [ ] not started, [~] in progress, [x] done.
~/workspace/reports/./home/lucienne/workspace/agent-control-room/.README.md explaining that MC is the production task bus and the control room is the governance/navigation layer only.shared/commands.md with common inspection commands.docs/runtime-independence.md with the runtime-agnostic principle and links to canonical MC docs.docs/webui-governance.md with what can/cannot be changed through WebUI alone.mission-control/docs/runtime-architecture-refresh.md to agent-control-room/docs/runtime-independence.md (deferred — touches canonical contract; route via Atlas-style signoff per architecture/docs gate).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.
agent-control-room/docs/runtime-independence.md with a Runtime adapter contract section covering:runtime_sessions minimum ledger expectations: session id, ticket id or task id, runtime/profile, started/ended timestamps, status, harvest/log path, terminal summary/artifacts.~/workspace/.claude/worktrees/pool-{0,1,2}; persistent Luci must not; worker runtimes must commit/push before DONE.claude processes must use --settings ~/.claude/settings-worker.json.notify.py; no extra bot polling.runtime_profile must match what actually runs; direct SDK/API scripts need explicit direct_* metadata/description.scheduler.py::PROFILE_PROVIDER.scheduler.py::PROFILE_META, including direct_gemini, direct_anthropic_sdk, and direct_mixed.PROFILE_DEFAULTS, _runtime_profile_defaults(), and ~/.claude/env/mc-runtime-profiles.json if present.python3 scripts/audit_task_runtime_profiles.py --lint.luci-manifest.md and CAPABILITIES.md from the control room rather than duplicating them.agent-control-room/docs/runtime-profiles.md.agent-control-room/runbooks/.docs/runtime-profiles.md or agents/mission-control/runtime-profiles.md.agent-control-room/docs/runtime-portability-inventory.md.lotsoftick/hermes_client as a concrete Hermes web-cockpit reference.~/workspace/reports/lucienne-review-luci-runtime-independence-hermes-client-addendum-2026-05-22.md.~/workspace/agent-control-room/docs/hermes-client-reference.md.~/workspace/mission-control/reports/mission-control-hermes-client-source-note.md.HermesProfileRuntimeAdapter implementation brief before any code changes.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.
claude_opus_1m_medium for now; no live config change.model.default should be updated only after policy, capability inventory, and smoke tests. Decision: do not change Hermes default in Phase 4; revisit after WebUI governance and Hermes smoke tests.~/workspace/tasks/*.md; lint verification below remains the acceptance check./luci, then home-channel persistent fallback./luci or /persistent_topic.MC-123.~/workspace/reports/README.md with report categories and canonical current plans.topic-purpose-YYYY-MM-DD.md for dated reports; topic-plan.md for living plans.The initiative is healthy when:
identifier, while SQLite row ids may differ.mission-control/docs/runtime-architecture-refresh.md via Atlas-style signoff.grok-4.3 until model-routing policy, capability inventory, and smoke tests are complete.Observed on 2026-05-21:
default.grok-4.3 / xai-oauth, while this chat was switched to gpt-5.5 via OpenAI Codex.~/workspace/tasks/ and Mission Control scheduler./home/lucienne/workspace/mission-control/mc.db.~/workspace/tasks/ contains many production scheduled task definitions.~/workspace/reports/mc-orchestrator-flow-diagram.html is an example of a valuable saved report that should be indexed.~/workspace/agent-control-room/, or somewhere more prominent like ~/agent-control-room/? Current working default: keep it in ~/workspace/agent-control-room/ unless Elmar explicitly changes it.identifier). Do not rename to MC-3907; that number is the SQLite row id observed during review, not the ticket identifier.When we make progress, update this file in place:
[x]2026-05-21: Created initial plan/report and progress checklist.
2026-05-21: Incorporated Lucienne review from /Users/elmar/PKA/lucienne-review-luci-control-room-runtime-independence-report.md: added source-of-truth boundary, required gates, minimal skeleton scope, inventory-first runtime profile approach, reports-index staleness fix, and deferred model-default decision.
Luci control room and runtime independence foundation.~/workspace/agent-control-room/ — README.md, shared/commands.md, docs/runtime-independence.md, docs/webui-governance.md. Includes observed runtime-profile inventory (scheduler/worker, Larry, Hermes) sourced from scheduler.py and mc_pickup.py. No runtime routing code, Telegram routing, Hermes defaults, scheduler state, or secrets touched. Reverse link from runtime-architecture-refresh.md deferred to Atlas signoff.~/workspace/agent-control-room/docs/runtime-independence.md with the Phase 1.5 runtime adapter contract and code-derived runtime inventory; added Agent Control Room discoverability to CAPABILITIES.md and luci-manifest.md; ran python3 scripts/audit_task_runtime_profiles.py --lint successfully. No service restarts, runtime routing changes, Telegram changes, scheduler changes, or model-default changes.agent-control-room/docs/runtime-profiles.md) and class-level runbooks (agent-control-room/runbooks/). Clarified that cost/model policy is Phase 4 and must be subscription-aware: most current work may run on subscriptions, so policy should account for quota/capacity, reliability, sensitivity, and tool support, not only token cost. No runtime routing, service, Telegram, scheduler, or model-default changes.agent-control-room/docs/runtime-portability-inventory.md. Confirmed MC active runtime-profile state comes from ~/.claude/env/mc-runtime-profiles.json (claude_opus_1m_medium for persistent/ticket/default/worker and claude_glm for scheduler), separate from Hermes config. Documented Claude-specific, Hermes-specific, Codex/Gemini/Kimi, direct API, and subscription-capacity risks. No runtime routing, service, Telegram, scheduler, or model-default changes.agent-control-room/runbooks/runtime-retirement-migration.md and agent-control-room/runbooks/runtime-switch-continuity.md. These cover Gemini CLI retirement/replacement, equivalent future runtime retirement, and continuity requirements for preserving old logs/session rows during runtime switches. No runtime routing, service, Telegram, scheduler, or model-default changes.agent-control-room/docs/subscription-aware-routing-policy.md. It keeps current MC interactive/persistent defaults on claude_opus_1m_medium, defers Hermes model.default changes, defines premium/standard/cheap-subscription/direct/local bands, captures scheduled-task runtime-profile distribution as evidence, and specifies the required future cost/capacity report. No runtime routing, service, Telegram, scheduler, or model-default changes.mission-control/docs/runtime-architecture-refresh.md to agent-control-room/docs/runtime-independence.md. Atlas-style signoff returned PASS-WITH-NOTES for the scoped architecture-doc update. No runtime routing, service, Telegram, scheduler, or model-default changes.2026-05-21: Closed the minimum Phase 5 WebUI/config governance gap without opening or depending on the WebUI. Updated agent-control-room/docs/webui-governance.md to state that Hermes WebUI is optional convenience, preferably read-mostly, and must not become a shadow control plane for MC routing, scheduler behavior, worker launch settings, Telegram polling, secrets, or runtime-profile policy. Kept screen-level documentation deferred until first real WebUI use to avoid inventing claims. No runtime routing, service, Telegram, scheduler, WebUI, or model-default changes.
2026-05-22: Lucienne reviewed lotsoftick/hermes_client as a concrete Hermes web-cockpit reference. Added ~/workspace/mission-control/reports/mission-control-hermes-client-source-note.md, ~/workspace/reports/lucienne-review-luci-runtime-independence-hermes-client-addendum-2026-05-22.md, and ~/workspace/agent-control-room/docs/hermes-client-reference.md. Treated it as adapter inspiration only: no service restarts, runtime routing changes, scheduler changes, Telegram changes, WebUI changes, or Hermes default changes.
HermesProfileRuntimeAdapter implementation brief after read-only inspection of MC runtime profile code, Hermes CLI availability, and preflight behaviour. Added Phase 3.6 to this plan and linked the brief in reports/README.md. No live runtime routing, service, Telegram, scheduler, WebUI, Hermes update, or model-default changes.