github chriswritescode-dev/opencode-manager v0.21.0
OpenCode Manager v0.21.0

5 hours ago

Highlights

  • One-line install — curl -fsSL https://opencodemanager.app/install | sh sets up and starts OpenCode Manager with Docker. No clone and no .env required.
  • Integrated terminal and project actions — run shells, dev servers and watchers from the WebUI, including on mobile.
  • Session automation — per-session auto-accept, session goals that keep working until an objective is met, and multi-run across up to five models.
  • Expanded source control — worktrees from existing branches, merge or cherry-pick integration, stashes, conflict continue/abort, AI commit messages and git identities.
  • Docs moved to opencodemanager.app/docs.

What's Changed

Features

  • feat(docker): one-line installer and release Compose file (#384) — scripts/install.sh checks for Docker and Compose v2, installs into ~/opencode-manager (override with OCM_DIR), and asks before sharing anything from the host: importing your OpenCode config and state, mounting a repos folder, and phone/LAN sign-in. Re-running it updates to the latest release. The new docker-compose.release.yml runs the published image under the Compose project name ocm; a checkout's docker-compose.yml keeps building from source. The installer refuses to install over a source checkout or next to a running install, so it never takes over existing data.
  • feat(docker): generate AUTH_SECRET automatically — When AUTH_SECRET is unset, the container generates one on first start and stores it in the data volume at /app/data/.auth-secret (mode 0600), so it survives restarts and updates. An AUTH_SECRET you already set keeps taking priority.
  • feat(terminal): integrated terminal (#381) — Open terminals for a repository or session directory from the sidebar or the More drawer, with tabs, confirmation before closing a running shell, and exit codes. Terminals are OpenCode PTYs, so they reattach and replay output after a browser reload. A mobile key bar adds Esc, Tab, Ctrl, arrows and | ~ /. Terminals receive the repository's GitHub token, so gh works without extra setup.
  • feat(project-actions): run and stop project commands (#381) — Define dev servers, build watchers and test runners per repository, either as personal actions or in a committed .ocm/project.json, and run them from the header menu. URL templates support {worktree} and {branch}, and local dev URLs open in the Preview panel.
  • feat(ui): preview port menu and terminal auto-start — The Preview panel gains a port menu, and opening the terminal starts a shell when nothing is running in that directory.
  • feat(sessions): permission modes (#379) — Choose ask or auto per session, with a default for new sessions. Auto answers each permission request from the backend. Child sessions inherit their root's mode, forks copy it, and scheduled runs and agent-created sessions always ask.
  • feat(sessions): session goals (#379) — Arm a goal in the composer and the session keeps going until an auditor model reports it done or blocked, within continuation and token limits. Goals can be paused, resumed or cancelled, recover after a restart, and send outcome notifications.
  • feat(sessions): multi-run (#379) — Run one prompt on up to five models in parallel from the repo page, optionally each in its own OpenCode workspace, and track each run's status, then open or discard it.
  • feat(ocm): session management for the assistant (#379) — The ocm tool can list, create, follow up on, read replies from and fork sessions, with a matching assistant skill.
  • feat(ocm): let the assistant clone repositories (#382) — The assistant can add a repository from an HTTPS or SSH URL, with an optional branch and directory name. This reuses the Add Repository flow, so deduplication, SSH setup and rollback behave the same.
  • feat(git): worktrees, integrate and branch management (#380) — Create worktrees from a new branch or an existing local or remote branch. Bring a worktree branch into a target branch by merge commit or cherry-pick. When deleting a worktree, choose whether to keep its branch, delete it locally, or delete it locally and on the remote. Rename and delete branches; the current branch and branches checked out elsewhere are protected.
  • feat(git): stashes and conflict handling (#380) — A stash tab shared across a repository and its worktrees (push, apply, pop, drop). Detects an in-progress merge, rebase, cherry-pick or revert, lists the conflicted files, and lets you continue, abort, or hand the conflicts to an agent.
  • feat(git): AI commit messages and identities (#380) — Generate a commit message from staged changes. Set a default git identity and saved presets, applied per repository and shared by its worktrees.
  • feat(frontend): mobile composer tools menu and base branch select
  • feat(schedules): read aloud playback on scheduled run reports

Fixes

  • fix(git): guard remote branch deletion and skip applied cherry-picks — A remote branch is deleted only when its upstream has the same name, and without force only when it is merged, so pushed unmerged commits are not lost. Cherry-pick integration skips commits already on the target and merge commits.
  • fix(sessions): prevent duplicate goal starts and lost autosave updates
  • fix(schedules): open the repo session for finished worktree runs — Open session now finds the run's session after its worktree is cleaned up.
  • fix(terminal): larger mobile key bar keys, and the dialog stays above the keyboard
  • fix(pwa): maskable icons and corrected branding metadata
  • fix(git): detect repositories reached through symbolic links
  • fix: documentation drift and phone layouts — Source control tabs and commit rows fit on phone widths.

Refactors

  • refactor(ui): unify branch pickers into a searchable BranchCombobox — Used by the worktree, integrate, multi-run and schedule dialogs.
  • refactor(git): typed GitOperationError with one route helper for git error mapping

Docs

Upgrade Notes

  • Existing installs need no changes. A source checkout updates as before with git pull and ./scripts/docker-upgrade.sh. Your AUTH_SECRET in .env is still used, so nobody is signed out.
  • Database migrations 025–027 (permission modes, session goals, multi-runs) run on first start. Migrations only go forward, so back up the data volume before upgrading if you might need to roll back to v0.20.0.
  • New port 5004 — Compose now publishes the Preview gateway on 5004. If that port is already in use on your host, the container will not start. Remap it in docker-compose.override.yml with ports: !override, which replaces the whole list, so repeat every port you need (5003, 5100–5103). A plain ports: override adds to the list and keeps 5004:5004. When serving over HTTPS (for example, through a Cloudflare Tunnel), set PREVIEW_PUBLIC_URL, and never add it to AUTH_TRUSTED_ORIGINS.
  • Installer vs. checkout — The installer uses the Compose project name ocm, so its volumes are separate from a checkout's. Switching from a checkout to the installer starts with empty data.

Full Changelog: v0.20.0...v0.21.0

Don't miss a new opencode-manager release

NewReleases is sending notifications on new releases.