colibri/docs/CLAWDIE-STUDIO.md
Sam & Claude b8d499e85c
Some checks are pending
CI / rust (pull_request) Waiting to run
CI / markdown (pull_request) Waiting to run
CI / port (pull_request) Waiting to run
CI / agent-jail-pkgs (pull_request) Waiting to run
docs: rename PLAN/PROPOSAL/HANDOFF/ENHANCEMENT → implementation names
7 renames (no plan/proposal/handoff/enhancement in filenames):

    CLAWDIE-INSTALLER-HANDOFF.md → CLAWDIE-INSTALLER-VALIDATION.md
    CLAWDIE-STUDIO-PROPOSAL.md   → CLAWDIE-STUDIO.md
    COLIBRI-SKILLS-PLAN.md       → COLIBRI-SKILLS.md
    FREEBSD-BUILD-LANE-HANDOFF.md→ FREEBSD-BUILD-LANE.md
    GLASSPANE-TUI-ENHANCEMENTS.md→ GLASSPANE-TUI-DESIGN.md
    MULTI-AGENT-HOST-PLAN.md     → MULTI-AGENT-HOST.md
    PLAN-WIKI-CLAWDIE-SI.md      → WIKI-CLAWDIE-SI.md

  16 cross-references updated across 10 files.
  wiki-lint --strict: PASS (146 refs, 0 failures).
2026-06-26 17:32:39 +02:00

10 KiB

Clawdie Studio — Integrated Editor + Control Plane Proposal

Date: 27.maj.2026 Status: PROPOSAL — for discussion, not committed to roadmap yet Author: Sam (operator), structured by Claude (domedog)

The Idea

A single "Clawdie Studio" experience where the operator can edit docs/code while simultaneously running and observing Colibri — agents, tasks, scheduler, sessions — all from one visual surface.

The studio provides a unified surface so the user operates the control plane entirely within the editor, without terminal context-switching.

Why Rust Makes This Feasible

Colibri is already Rust. Zed is already Rust. The shared language removes the FFI/integration friction that would exist with a TypeScript control plane. Specifically:

  • Unix socket protocol is already JSON-over-newline — any Rust client can consume it trivially.
  • colibri-client crate is a typed Rust client — a Zed extension or MCP bridge can depend on it directly.
  • colibri-glasspane-tui (TUI) already proves "visual dashboard over socket" works end-to-end.
  • colibri CLI already covers task/agent/status operations.

The gap between "what we have" and "Clawdie Studio" is smaller than it looks because the socket API is the integration point.

Architecture: Decoupled Components, Unified Experience

clawdie-studio (the user experience)
  │
  ├── colibri-daemon     rc.d service, always-on, headless-safe
  ├── colibri-mcp        MCP bridge for Zed assistant integration
  ├── colibri            CLI operator tool
  ├── colibri-tui          TUI fallback / SSH dashboard
  └── Zed                editor + task panel via extension

The user sees one product. The system remains robust: if Zed crashes or isn't installed, colibri-daemon still runs agents and processes tasks.

Integration Levels

Level 1 — Near-term: "One App Experience" (not one binary)

Use Zed as the visual shell. Colibri stays the rc.d service.

Zed
  ├── edit docs/code
  ├── Colibri task panel (sidebar extension)
  ├── terminal: colibri status / list-tasks / intake-task
  └── talks to /var/run/colibri/colibri.sock

colibri-daemon
  └── boot service, owns agents/scheduler/SQLite

This gives the all-in-one feel without making the editor responsible for supervision. The daemon runs even when the editor is closed.

Implementation: start with Zed tasks/terminal commands and MCP. A native Zed sidebar can come later, but the exact extension API/socket constraints must be verified on the target Zed build before assuming an extension can link colibri-client or open the Unix socket directly.

Level 2 — Mid-term: MCP Integration (highest leverage)

Build colibri-mcp — an MCP (Model Context Protocol) server that wraps colibri-client.

Zed Assistant → MCP protocol → colibri-mcp → colibri-client → Unix socket → colibri-daemon

Zed already supports MCP natively. An MCP server is just a stdin/stdout JSON-RPC process — trivial to implement in Rust.

Capabilities this unlocks:

  • Check agent state from the assistant
  • Create intake tasks from current file/docs context
  • Query queued tasks and blocked panes
  • Summarize active sessions
  • Trigger startup checks or scheduler runs
  • Ask "what's the system doing right now?" and get a real answer

Why highest leverage:

  • No forking, no vendoring, no embedding
  • Reuses existing colibri-client crate directly
  • Works with any MCP-capable editor (Zed, Cursor, Windsurf, etc.)
  • The assistant can act on Colibri state, not just display it

Level 3 — Long-term: True Single Binary

Technically possible but not recommended as the ISO target.

Options:

  • Fork/vendor Zed and embed Colibri service code
  • Build a custom Rust GUI around Colibri instead of Zed
  • Build a launcher binary that starts/checks Colibri and opens Zed

Why not now: A true Zed+Colibri single binary would carry significant maintenance burden and blur the critical boundary — Colibri must run headless at boot even when no editor is open.

Product Shape

clawdie-studio (the package)
  │
  ├── /usr/local/bin/colibri-daemon     (the service)
  ├── /usr/local/bin/colibri            (the CLI)
  ├── /usr/local/bin/colibri-mcp        (the MCP bridge)
  ├── /usr/local/bin/colibri-tui          (the TUI)
  ├── /usr/local/bin/colibri-studio     (the launcher)
  └── Zed extension: colibri-sidebar    (the visual panel)

colibri-studio launcher does:

  1. Check if colibri-daemon service is running
  2. If not, offer to start it (or start it automatically)
  3. Open Zed with the correct workspace and extension settings
  4. Optionally display a system tray indicator

ISO integration:

  • clawdie-iso bundles all binaries
  • Zed is either pre-installed or the extension works without it (CLI/TUI fallback)
  • Firstboot wizard asks: "Enable Clawdie Studio?" and configures the service

colibri-mcp Scope

Phase 1 MCP tools (minimal viable set):

Tool Description Default
colibri_status Daemon status (agents, sessions, host, paths, cost mode) read-only
colibri_snapshot Glasspane snapshot (all pane states) read-only
colibri_list_tasks Tasks by status (queued/claimed/done/failed) read-only
colibri_agent_state Current agent state for a pane read-only
colibri_create_task Create a task from current context write-gated
colibri_intake_task Submit intake task with capabilities write-gated
colibri_set_cost_mode Acknowledge requested mode; runtime-only/status-intent until live config exists write-gated

Default ISO posture should be read-only. Mutating tools require:

COLIBRI_MCP_WRITE=1

Agent spawn/stop tools are stronger than normal writes and should require a separate guard plus allowlist:

COLIBRI_MCP_SPAWN=1
COLIBRI_MCP_SPAWN_ALLOWLIST=/usr/local/bin/pi,/usr/local/bin/colibri-test-agent

Phase 2 MCP tools (after basics proven):

Tool Description
colibri_spawn_agent Spawn an agent with provider/model config
colibri_stop_agent Stop a running agent
colibri_session_summary Summarize an active session
colibri_schedule_job Add a cron/interval/one-shot job
colibri_search_skills Search built-in knowledge (via colibri-skills)

Relationship to Existing Colibri Crates

colibri-daemon     ← already exists, socket API serves all clients
colibri-client     ← already exists, typed Rust client
colibri-contracts  ← already exists, shared wire types
colibri-glasspane  ← already exists, agent supervision state
colibri-glasspane-tui ← already exists, TUI dashboard
colibri-mcp        ← already exists, MCP bridge + external MCP host (PR #36)
colibri-studio     ← NEW: launcher binary (thin wrapper)

No existing crates need architectural changes. Two new thin binaries wrap existing infrastructure. The MCP binary should default its socket path from COLIBRI_DAEMON_SOCKET, then /var/run/colibri/colibri.sock.

Zed task fallback

Before MCP/native UI exists, Zed can still be Colibri-aware through project tasks or terminal commands:

colibri status
colibri snapshot
colibri list-tasks --status queued
colibri intake-task --title "review current project" --capability freebsd

This is sufficient for the next ISO if Zed is present but the integration bridge is not yet packaged.

Implementation guardrails

  • Colibri always remains service-owned and headless-safe; boot and supervision function independently of any editor.
  • MCP is the first editor bridge: it serves any MCP-capable client and keeps Zed unforked.
  • The standard editor bridge (MCP) is the foundation; a custom Zed panel is an optional nicer face we may add later, never the part everything depends on.
  • Tools that change things are off by default and must be turned on on purpose; tools that launch agents are locked down further and only approved ones run.
  • set-cost-mode only applies to the current session for now and isn't saved — permanent settings wait until we build a proper editable-config system.
  • No arbitrary shell command tool in MCP.

Decision Points

  1. MCP server vs Zed extension vs both? Recommendation: start with MCP (editor-agnostic), add Zed-specific UI panel later.

  2. colibri-studio launcher or just documentation? Recommendation: build a minimal launcher. It's ~200 lines of Rust and dramatically improves the first-run experience.

  3. Include in ISO? Recommendation: include colibri-mcp and colibri-studio in the ISO artifact. Zed stays optional (pre-installed or user-added).

  4. Timeline? Recommendation: colibri-mcp Phase 1 tools can be built in 1-2 focused sessions. colibri-studio launcher is another session. Total: ~1 week of focused agent time.

Non-goals

  • Not embedding Zed into Colibri
  • Not replacing the TUI (it stays the SSH/headless fallback)
  • Not making the editor required for Colibri operation
  • Not changing the socket API (MCP wraps it, doesn't replace it)
  • Not building a custom GUI framework (use what exists)

Prior Art

  • colibri-glasspane-tui already does "visual dashboard over socket" for TUI
  • Zed + MCP is a proven integration path (Zed's assistant is MCP-native)
  • VS Code + Language Server Protocol proved the "thin bridge over socket" pattern works at scale