A cockpit web UI for the oh-my-pi
(omp) coding agent. Multi-session chat with full tool-call rendering, a
kanban backed by SQLite, cron routines, an inbox with one-click promote, a
plugin marketplace, themable settings, and a Telegram bridge — all in a single
Bun process, designed to run loopback-only behind Tailscale or an SSH tunnel.
Status: v0.2 release — KB Cockpit + Maintenance Gate. See CHANGELOG.md for the full feature inventory.
More screenshots
The omp TUI is excellent at what it does, but a terminal isn't always where you want to drive an agent — you might want a kanban to track its work, a phone bridge to ask it things from the couch, a marketplace to install plugins without hand-editing JSON, or just a calmer surface for long sessions. omp-deck gives you all of that while reusing the SDK in-process so the chat itself stays at parity with the TUI.
omp-deck is not a replacement for omp. It embeds the same SDK and
shares its session + auth store. Run both; they coexist.
- Chat with multi-session sidebar, per-tool renderers (
read/write/edit/bash/search/lsp/task/eval/web_search/todo_write/generate_image/browser), thinking blocks, hashline diff coloring, cost rollup, image paste/drop/attach, compaction + auto-retry indicators. - Slash commands with four scopes (
deck/builtin/user/project) and in-process dispatch —/task add,/context,/compact,/usagerun instantly with no model round-trip. - Knowledge base —
/kbview over your local Karpathy-style llm-wiki at~/kb(override viaOMP_DECK_KB_ROOT). Lazy tree, markdown viewer with[[wikilink]]resolution + create-on-click, in-pane editor, Obsidian- style force-directed graph view (?view=graph) with click-to-isolate per source directory, full-text search + Ctrl-P quick-open palette, inspector with outbound links + backlinks + tag chips + orphan badge. Empty kb surfaces a one-click setup flow. Hide subtrees withOMP_DECK_KB_EXCLUDE_DIRS=<csv>. - Skills —
/skillssurfaces every skill omp loads across all providers (native,claude-plugins,claude,codex, …), not just marketplace plugins. Native (~/.omp/agent/skills/) sorts first. Ships an omp-nativecreate-skillstarter — first-party authoring loop with no Claude-Code dependencies. - Maintenance gate — bundled omp SDK extension (installed to
~/.omp/agent/extensions/on boot) that nudges the agent at turn-end (~every 10 turns) to capture reusable output into the canonical org folders (inbox/,tasks/,knowledge/,queries/,context/, …) or state "No maintenance needed" to release. Structural org-root sniff only activates for cwds with the canonical layout. Universal across deck, omp TUI, and ACP sessions (the deck wiresExtensionRunnerintoInProcessAgentBridge). - Kanban with Jira-style display IDs (
T-1,T-2, ...), drag-and-drop, configurable columns, and live WebSocket broadcasts — agent or external scripts mutating tasks refresh every open kanban without polling. - Routines — cron scheduler for
bash/prompt/scriptactions with run history. - Inbox — quick capture surface with promote-to-task.
- Settings — masked secret store with atomic
.envwrites + audit log, hot-applied env updates where possible, a one-click server restart for the rest. Paper / Slate / Horizon themes with FOUC-free pre-paint. - Marketplace — browse and install plugins/skills/MCPs over the SDK's
MarketplaceManager. Empty state seeds withanthropics/claude-plugins-official. - Model picker — chat-header modal listing every model the SDK knows about, default-filtered to ones with configured auth, provider-grouped.
- Telegram bridge — standalone Bun process supervised by the deck; DM the
agent from your phone with allowlist gating and streaming
editMessageTextreplies.
omp-deck only makes sense as a pair with the
omp coding agent — omp is the agent
loop, omp-deck is the cockpit you drive it from. Compared against the closest
neighbors in the agentic-coding space:
| omp + omp-deck | Claude Code | Hermes Agent | OpenClaw | |
|---|---|---|---|---|
| Form factor | Terminal TUI (omp) + web cockpit (omp-deck) | Terminal CLI / IDE plugin | Terminal TUI + multi-channel gateway | Daemon + multi-channel gateway |
| Underlying agent | omp, in-process via @oh-my-pi/pi-coding-agent SDK |
Anthropic-built CLI | Hermes core (Nous Research) | OpenClaw Gateway |
| Model support | Anthropic, OpenAI, Google AI / Vertex, OpenRouter, Ollama, llama.cpp, LM Studio, any OpenAI-compatible | Anthropic Claude only | Model-agnostic (Nous Portal, OpenRouter, NIM, …) | Model-agnostic (profiles in openclaw.json, w/ fallback chain) |
| Hosting | Self-hosted Bun process, loopback-only by default | Anthropic-hosted CLI | Local / Docker / SSH / Modal / Daytona / Vercel Sandbox | Self-hosted on owned host (Mac mini, VPS) |
| Auth | OAuth, API key, or provider key — shared with the omp CLI | Anthropic OAuth / API key | Per-provider keys | Per-provider keys + profile rotation |
| Multi-session chat | First-class sidebar in the deck | Single session at a time | Single agent across channels | Per-channel sessions |
| Kanban / task board | Built-in, WS-synced, T-N display IDs |
— | — | — |
| Scheduled routines | Cron via croner (bash / prompt / script) |
— | — | Heartbeat scheduler (~30 min) |
| Inbox + promote-to-task | Built-in | — | — | — |
| Plugins / skills | SDK loader + in-app marketplace (Anthropic plugin format) | claude plugins registry |
Skills with autonomous creation + refinement | Skills installed from ClawHub; skills can write skills |
| Self-improving over time | — (skills are user/marketplace-authored) | — | ✅ learning loop, deepening user model | Skills can self-install |
| Messenger bridges | Telegram (Slack / Discord / Matrix on the roadmap) | — | Telegram, Discord, Slack, WhatsApp, Signal | 20+ (WhatsApp, Telegram, Slack, Discord, iMessage, Matrix, Teams, …) |
| License | MIT | Proprietary (Anthropic Commercial Terms) | Open source (Nous Research) | Open source |
The short version: Claude Code is the polished, vendor-supported terminal experience for Claude. Hermes is the self-improving agent that compounds skills over time and supports serverless backends. OpenClaw is the multi-channel personal assistant that lives wherever you message from. omp + omp-deck is the cockpit shape — a model-agnostic coding agent in your terminal plus a kanban / routines / inbox / marketplace / Telegram-bridge web surface to drive it.
git clone https://github.com/bjb2/omp-deck.git
cd omp-deck
bun install
bun run devOpen http://127.0.0.1:5173. Your existing ~/.omp/agent is picked up
automatically — no re-auth.
See docs/install.md. The short version:
# 1. Install Bun (https://bun.sh)
# 2. Install the omp CLI globally so you can authenticate
bun add -g @oh-my-pi/pi-coding-agent
omp # interactive auth (browser OAuth or API key)
# 3. Clone and run the deck
git clone https://github.com/bjb2/omp-deck.git
cd omp-deck
bun install
bun run devOr skip the CLI entirely and paste your provider API key into Settings → Env after the deck is up.
A Bun + Hono backend embeds @oh-my-pi/pi-coding-agent. The Vite + React
frontend is a pure consumer of a WebSocket event stream. The contract layer
(packages/protocol) is dep-free shared types.
Browser (Vite :5173 or built bundle on :8787)
│ WS frames + REST control plane
▼
Bun server (apps/server)
├─ AgentBridge → InProcessAgentBridge → omp SDK
├─ Hono routes /api/{sessions, tasks, routines, inbox, settings,
│ models, marketplace, bridges, slash-commands, fs}
├─ WebSocket hub /ws (session events + tasks_changed broadcasts)
├─ Routines runner (croner)
├─ BridgeSupervisor (telegram bridge, future Slack/Discord)
└─ MarketplaceService (SDK MarketplaceManager wrapper)
Full diagram in docs/architecture.md.
- Install — fresh vs existing-omp install paths.
- Configuration — full env reference + restart semantics.
- Deployment — Tailscale, Docker, SSH-tunnel, hardening checklist.
- Slash commands — deck
/taskfamily, SDK builtins, user/project markdown commands. - Marketplaces — catalog seeding, install semantics, capability badges.
- Skills —
/skillsview, plugin→skill hierarchy, scope semantics, live refresh, REST surface. - Telegram bridge — DM-driven agent from your phone.
- Themes — Paper / Slate / Horizon / adding more.
- Start command template — define
/startfor an auto-orientation greeting. - Architecture — workspace layout, frame model, synthetic events, theming.
- TUI parity — feature matrix vs the omp TUI.
- Contributing — dev loop, code quality, style.
The deck ships without an auth layer. Bind it loopback-only (the default) and front it with Tailscale Serve / SSH tunnel / a reverse proxy. The hardening checklist in docs/deployment.md covers what to verify before exposing the deck to a network anyone else can reach.
Provider API keys live in env vars (your shell, or the deck-managed .env).
The Settings UI masks them by default; revealing a secret requires a loopback
request. The deck never logs values, only redacted forms.
v0.2 shipped:
- KB Cockpit (tree / viewer / editor / graph / search / inspector) over
~/kbwith live updates. - Skills cockpit pivoted to omp-native (
loadCapabilityover all providers). - Bundled
create-skillandmaintenance-gatestarters; deck installs them on boot andInProcessAgentBridgenow wiresExtensionRunnerso extensions actually fire in deck sessions. - Horizon theme (ported from opus-extensions/omp-themes/horizon.json).
- External links open in a new tab across every markdown surface.
- CRLF-tolerant frontmatter parsing fixes Windows-saved YAML.
Still deferred:
- Permission prompts (
asktool) via bidirectional WS UI bridge. - Plan-mode UI (banner + plan file viewer).
- File browser in the inspector.
- Subprocess-per-session bridge impl for crash isolation.
- Slack / Discord / Matrix bridges (same supervisor pattern as Telegram).
bunx omp-deckinstall path / Docker image build verified.
MIT. See LICENSE.




