- TypeScript 49.2%
- Go 45.2%
- CSS 4.6%
- Shell 0.5%
- Makefile 0.4%
The edit modal only handled schedule loops (interval field). Cron loops had no editable trigger and no Trigger now button. Add a 5-field cron input, route the save to trigger_config.cron_expr, and allow Trigger now for active cron loops. |
||
|---|---|---|
| .github/workflows | ||
| .opencode | ||
| build/darwin | ||
| docs | ||
| frontend | ||
| internal | ||
| observability/grafana | ||
| scripts | ||
| spec | ||
| .air.toml | ||
| .envrc.example | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| AGENTS.md | ||
| Caddyfile | ||
| cliff.toml | ||
| docker-compose.otel.yml | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| main.go | ||
| main_test.go | ||
| Makefile | ||
| mise.toml | ||
| README.md | ||
| wails.json | ||
ocman
A web dashboard for browsing and driving your coding-agent sessions. Supports OpenCode and Claude Code.
Features
- Session browser — List, search, archive, and replay every session. Sessions are grouped by project with status indicators and a
+button to start new ones. - Live composer — Send messages, respond to permission prompts, abort, and compact a running session straight from the browser. Streaming output renders live.
- Bash mode — Prefix a message with
!to run a shell command in the session's working directory and capture the output. - Command palette — Unified ⌘K palette for jumping between sessions, settings, and actions, with in-app notifications.
- Slash commands —
/new [title]to create a session,/clearto archive the current one and start fresh, plus keyboard-driven session rename. - Tmux integration — Launch or auto-launch an OpenCode instance inside tmux directly from the UI.
- Multi-remote — Attach other ocman instances over the network and manage every machine's sessions from one dashboard, with a host badge per session and machine-aware new-session creation. See docs/multi-remote.md.
- Diff & changes view — Syntax-highlighted diffs inline in the thread, plus a Changes sidebar combining session edits with the working-tree
gitdiff. - Stats dashboard — Per-project metrics, wall-clock totals, token/pricing graphs, and system stats.
- Model picker — Per-platform favorites and a refreshable catalog so new models appear without restarting.
- Auth — Optional password gate with rate-limited logins and persistent signed cookies. Off by default for localhost.
- PWA — Installable as a Progressive Web App.
Quick start
# Run directly against the OpenCode database
./ocman
# Open http://localhost:8228
Download the latest binary from the releases page,
or build from source with make build (requires Go 1.24+ and Node.js 22+).
macOS desktop app
The releases page also ships ocman-darwin-arm64.dmg — a drag-to-Applications
installer for the native desktop build. The DMG is not signed or notarized,
so macOS Gatekeeper will refuse to open the app on first launch with a
"cannot be opened because the developer cannot be verified" warning.
To bypass:
- Open the DMG and drag
ocman.appto/Applications. - In Finder, right-click (or Control-click)
ocman.app→ Open. - Confirm Open in the dialog. macOS remembers the choice and subsequent launches work normally.
Alternative — strip the quarantine attribute from a terminal:
xattr -dr com.apple.quarantine /Applications/ocman.app
For interactive features (composer, permission replies, abort) start OpenCode with an explicit port:
opencode --port 0 # let OpenCode pick a free port
Ocman auto-discovers listening OpenCode processes and connects. Without --port, sessions are
still readable but the composer stays disabled — the UI shows a hint to re-launch with --port 0.
Configuration
./ocman # default: listens on 127.0.0.1:8228
./ocman -addr localhost:9090 # custom listen address
./ocman -db /path/to/opencode.db # custom OpenCode database path
./ocman -platforms opencode,claude-code # enable multiple platforms
See docs/configuration.md for the full flag and environment variable reference, including authentication setup.
Optional agent integration
Ocman works as a dashboard without any agent integration. It also embeds an
optional, localhost-only MCP server so an AI agent can split work into
child OpenCode sessions or isolated git worktrees and coordinate between them
(split_to_session, split_to_worktree, get_session_status,
list_child_sessions, cancel_session, and parent/child message tools).
Point your OpenCode config at http://localhost:8229/mcp (or
http://localhost:8228/mcp via the make dev proxy). See the
MCP integration guide for setup, the full tool list, and the
optional session-splitting skill.
Managing sessions across machines
Run ocman on several machines and manage them all from one hub. On each machine you want to manage remotely, start ocman with a gRPC listen address:
ocman -remote-listen 0.0.0.0:8230
Then on the hub, open Settings → Remotes → Attach a remote, paste the remote's address and its access token (revealed from the remote's own Settings → Remotes page), and its sessions join the unified list with a host badge. Opening, driving, and creating sessions all route to the owning machine automatically.
This is off by default — a plain ./ocman with no remotes is unchanged.
See the step-by-step multi-remote guide for TLS,
security notes, and troubleshooting.
Documentation
- Configuration — flags, env vars, authentication
- Multi-remote support — manage sessions across machines
- MCP integration — agent-driven session splitting
- Contributing — architecture, project structure, development workflow
License
This project is licensed under the MIT License. See LICENSE for details.
