1
0
Fork 0
forked from dries/ocman
Multi session/project opencode manager
  • TypeScript 49.2%
  • Go 45.2%
  • CSS 4.6%
  • Shell 0.5%
  • Makefile 0.4%
Find a file
Dries De Peuter 0b5019eea3 feat(loops): edit cron schedule in the loop edit modal
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.
2026-06-24 23:28:28 +02:00
.github/workflows ci: ratchet test coverage via gh-pages baseline 2026-06-11 08:56:33 +02:00
.opencode feat: add agent loops 2026-06-24 11:41:58 +02:00
build/darwin chore: add Wails macOS Info.plist template 2026-05-16 09:56:17 +02:00
docs docs: slim AGENTS.md, move user-facing reference into docs/ 2026-06-22 00:05:15 +02:00
frontend feat(loops): edit cron schedule in the loop edit modal 2026-06-24 23:28:28 +02:00
internal feat(loops): add cron trigger for time-of-day scheduling 2026-06-24 23:28:06 +02:00
observability/grafana feat: instrument in-memory caches with hit/size telemetry 2026-05-06 09:16:39 +02:00
scripts fix(ci): exclude generated *.pb.go from Go coverage; cover remote handlers 2026-06-21 23:29:19 +02:00
spec feat: add agent loops 2026-06-24 11:41:58 +02:00
.air.toml chore: Kill orphaned dev-server processes on make start 2026-04-24 20:19:48 +02:00
.envrc.example chore: Ignore direnv files and add .envrc.example 2026-04-21 20:46:57 +02:00
.gitignore chore: ignore local build artifacts 2026-06-24 00:26:50 +02:00
.pre-commit-config.yaml ci: ratchet test coverage via gh-pages baseline 2026-06-11 08:56:33 +02:00
AGENTS.md feat: add agent loops 2026-06-24 11:41:58 +02:00
Caddyfile feat: replace dictation overlay with Speech API + Caddy/Tailscale HTTPS 2026-05-16 11:12:05 +02:00
cliff.toml ci: generate release changelog from conventional commits 2026-05-05 23:49:51 +02:00
docker-compose.otel.yml feat: Add OpenTelemetry traces and metrics behind --otel flag 2026-04-30 07:54:31 +02:00
go.mod feat(remote): gRPC contract + remote-side server 2026-06-21 15:19:20 +02:00
go.sum feat: in-app terminal with tabbed tmux windows 2026-06-05 20:24:20 +02:00
LICENSE fix: More 2026-04-16 00:33:45 +02:00
main.go fix(opencode): warm the sessions cache so polls don't block on cold DB I/O 2026-06-22 10:22:54 +02:00
main_test.go feat: Require auth for every client by default, incl. localhost 2026-04-21 20:23:26 +02:00
Makefile feat(remote): gRPC contract + remote-side server 2026-06-21 15:19:20 +02:00
mise.toml chore: switch frontend tooling from npm to pnpm 2026-05-16 23:59:12 +02:00
README.md docs: slim AGENTS.md, move user-facing reference into docs/ 2026-06-22 00:05:15 +02:00
wails.json chore: switch frontend tooling from npm to pnpm 2026-05-16 23:59:12 +02:00

ocman

CI Release License: MIT

A web dashboard for browsing and driving your coding-agent sessions. Supports OpenCode and Claude Code.

ocman dashboard

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, /clear to 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 git diff.
  • 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:

  1. Open the DMG and drag ocman.app to /Applications.
  2. In Finder, right-click (or Control-click) ocman.appOpen.
  3. 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

License

This project is licensed under the MIT License. See LICENSE for details.