Control Plane Expansion Plan
Synthesizes gap analysis, tool landscape research, and concrete Phase 0.5 implementation steps for expanding the current agent setup toward a full Agentic Engineering Control Plane. Source concept: 4-layer control plane architecture (execution/coordination/quality/experience layers)Current Setup Inventory
What already exists:Phase 1 Gap Analysis
Gaps cluster into two areas:
- Visibility: kanban board, registry, event log
- Control: approval workflow, council quality gate
Tool Landscape — Buy vs Build
Buy
Build
Phase 0.5 — Implementation Steps
Step 1: Event Log
Create.agents/events.jsonl — append-only, one JSON object per line:
session_end event with files changed, exit status.
Step 2: Agent Registry
Create.agents/registry.json:
Step 3: /kanban-status Skill
Skill reads .agents/inbox/, claimed/, done/, registry.json and renders:
Step 4: Approval Workflow Skill
Invoked before any agent auto-commit. Renders diff, blocks on stdin approval:.agents/approvals/<task>.approved. Agent’s commit hook checks for token before proceeding.
Step 5: Stop Hook Quality Summary
Append to Stop hook: emit structured summary to stdout and to.agents/events.jsonl:
Phase 2 Preview — Multi-Machine Coordination
POSIXmv for atomic claim only works on single machine (same filesystem).
Multi-machine atomic claim: git branch creation race on refs/tasks/*:
refs/tasks/*, picks unclaimed (no corresponding refs/tasks-claimed/*), races to claim.
Phase 3 Preview — Council Quality Gate
Already have:CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 as council engine primitive.
Pattern: spawn 3 Haiku evaluators in parallel (acceptance criteria, code quality, style), collect PASS/FAIL + reasoning, majority vote, write signal file.
See Council Pattern for full 3-stage structure and cost model (~15K tokens vs ~1K single-model).
Critical Path
Phase 0 → 0.5: 5 concrete deliverables, no new infra — all implemented as SKILL.md files and JSON files. Phase 0.5 → 1: Buy Langfuse + GitHub Projects. Build approval UI. Schema validation layer. Phase 1 → 2: Git-based inbox migration. Multi-machine agent orchestrator. Phase 2 → 3: Wire council evaluators into Stop hook quality check.2026-06 Update: Bootstrap Path
New source synthesis sharpens the next build order:- Cockpit action registry — borrow Agent-Native’s shared action/state philosophy. Define a local action vocabulary for tasks, sessions, approvals, artifacts, evidence, review packages, runners, and machines. Do not replace Commandr with Agent-Native’s shared SQL runtime.
- agent-control skills — adapt Builder.io’s SKILL.md packaging pattern for reusable workflows: commandr-task, evidence-package, review-package, pentest-finding, runner-adapter, approval-policy, bus-debugger.
- commandr-omp-runner — integrate omp (oh-my-pi) as the first serious L2 worker after local shell/Claude/OpenCode. Start with a wrapper, then add omp custom tools for bus-native progress and approvals.
Layer placement remains unchanged: skills are L1/L4, omp is L2, Commandr is L3, DiffViewer/Tauri is L5.
commandr-omp-runner — Scaffold/Smoke Status
Created scaffold:commandr-omp-runner/setup.sh + runner.sh + README.md
- Bootstrap (
setup.sh): installs omp, copies hooks/tools to agent dirs - Runner (
runner.sh): runner-agnostic interface — task packet in, NDJSON out, progress events to file/stderr - Interface:
--task <json> --workspace <dir> [--progress <file>] [--model <id>] - Exit: 0 = success, 1 = failure
- Plugin: pi-headroom documented as opt-in (not auto-installed)
RPC Mode Discovery
Research onomp --mode rpc reveals a better path than custom TypeScript plugins for bus integration:
RPC host tools let Commandr register
commandr_progress, commandr_request_approval, etc. as host-side tools. The agent calls them via standard tool calling; the host (our runner) handles the bus side effects. No TypeScript required — the host can be Python, Rust, Go, or bash.
Recommended evolution:
- Phase 1 (current):
--mode json, one-shot scaffold/smoke path - Phase 2:
--mode rpc, register host tools for bus-native progress/approvals/artifacts - Phase 3:
--mode rpc-ui, handleextension_ui_requestfor approval flows
snapcompact vs pi-headroom
snapcompact (omp’s native compaction) already truncates tool results to 2000 chars with head/tail preservation during archival compression. This is conversation-level (old turns → PNG frames). pi-headroom is turn-level (current turn tool outputs). They are complementary, not redundant.
pi-headroom status: Keep as opt-in stopgap. Document that it handles bash output, search results, and eval kernel output — things not already truncated by omp’s native read tool.
Next: Level 2 via RPC host tools. Schema designed in commandr-omp-runner/HOST-TOOLS.md:
commandr_progress— milestone logging to events.jsonlcommandr_emit_artifact— artifact declaration (workspace + events.jsonl)commandr_request_approval— policy-enforced approval (log-only at Level 1, blocking at Level 2)commandr_complete/commandr_fail— task finalization- Policy table: bash rm/sudo/docker, write to .env/ssh, git push
- Runner-agnostic: any L2 runner can implement the same schema
Related Pages
- Shared Task Queue (Cross-Worktree) — current coordination primitive
- Worktree Isolation — agent filesystem isolation
- Council Pattern — quality deliberation layer
- Agent Teams — team coordination mechanics
- Rules vs. Hooks — static rules vs dynamic hook injection
- Agentic CI/CD — CI as external watchdog pattern