Skip to content

Releases: chriswritescode-dev/opencode-forge

v1.2.0

Choose a tag to compare

@chriswritescode-dev chriswritescode-dev released this 27 Sep 23:13

Highlights

  • Unified execution dialog: one dialog configures a launch end to end — the stored plan (or a pasted one), execution and auditor models and variants, the loop name, and per-loop launch settings. Restart is now a mode of the same dialog, so Execute plan opens it for the current session's plan and falls back to restart when there is no open session.
  • Per-loop launch settings: Loop settings overrides max iterations, turns the sandbox off for a single loop, and sets CPUs, memory, and the Docker and cache disk sizes. Overrides persist on the loop row and are applied when its sandbox is created, so a restarted loop keeps its resources and a loop launched without a sandbox stays off. Defaults come from the attached server, so they are correct against a remote one.
  • Remote TUI over FORGE_RPC: the TUI reads and changes Forge state — the loop list and sidebar, the stored plan, loop restarts, host-sandbox desired/applied state, the worktree list, and per-session auto-approve — through the server's RPC surface. It holds no Forge database of its own, so it works attached to a remote OpenCode server, and it updates from server-pushed events instead of polling. The TUI and server plugin must run the same Forge version; a mismatch warns.
  • Per-session auto-approve: Toggle auto-approve approves a session's requests through OpenCode's permission.evaluate hook, scoped to that session and its Task subagents, with configurable autoApprove.deny rules and a 15-day idle expiry. Explicit OpenCode ask rules and configured denies still deny; loop sessions, whose ruleset already allows everything not denied, are refused.
  • Loop sidebar: up to three loops per project, running first, each as a status-coloured row that expands to the current phase, section, and elapsed time.

What's Changed

  • feat(tui): per-loop launch settings and unified execution dialog (#107)
  • feat(tui): per-session auto-approve and remote TUI over FORGE_RPC (#106)
  • docs: update README for the unified TUI and new screenshots

v1.1.1

Choose a tag to compare

@chriswritescode-dev chriswritescode-dev released this 25 Sep 02:37

Highlights

  • Sandbox mounts are the file-tool boundary: host file tools (read, edit, write, patch) are fenced to the sandbox mounts, and the external_directory permission rules are dropped from the loop and audit rulesets. A single boundary now governs both in-container and host file access.

What's Changed

  • refactor(sandbox): make sandbox mounts the file-tool boundary (#103)

v1.1.0

Choose a tag to compare

@chriswritescode-dev chriswritescode-dev released this 24 Sep 14:52

Requirements

  • OpenCode 2.x is required. Forge now targets OpenCode 2.x only (engines.opencode is >=2.0.14). OpenCode 1.x is no longer supported: the V1-only plugin surfaces were removed. Upgrade OpenCode before installing this release.

Highlights

  • OpenCode 2.x support on a shared host-neutral core: createForgeCore holds the handler bodies both hosts drive, so loop runtime, storage, sandbox, and tool logic stay single-sourced. src/index.ts and src/tui.tsx are thin adapters, and V2 differences are absorbed at the ForgeClient port, event normalization, and the hook adapters.
  • Native worktrees and locations replace warp: loop sessions are created directly at location.directory = <worktree>, and session.move replaces warp. Loop metadata moves from the V1 workspace extra to <worktree>/.forge/workspace.json — git-excluded and deleted with the worktree, so no new table or migration is needed.
  • V2 TUI: the execution dialog, loop restart, loop sidebar (capped at three loops), and loop-session deletion run on OpenCode 2.x, sharing the dashboard launcher and keybinds with the existing TUI surface.
  • Installer: --link and --vendor write the cli.json plugins entry alongside the existing tui.json plugin entry, through one shared jsonc-edit implementation.
  • Docs: README and docs/ cover the V2 entries, the worktree/location model, shell routing, and the install layout.

What's Changed

  • feat(host): add OpenCode 2.x support on a shared host-neutral core (#102)
  • refactor(v2): require OpenCode 2.x and remove 1.x-only surfaces
  • feat(v2): add the execution dialog and loop controls to the V2 TUI
  • feat(v2): restyle the loop sidebar and cap it at three loops
  • feat(v2): delete retired loop sessions through the TUI
  • fix(v2): align event mapping, toasts, and session usage with OpenCode 2.x
  • fix(install): write the server plugin shim for --link and --vendor
  • feat(sandbox): auto-approve permissions in sandboxed sessions

v1.0.3

Choose a tag to compare

@chriswritescode-dev chriswritescode-dev released this 19 Sep 20:15

Highlights

  • Sandbox create fixed on msb 0.7.x: the sandbox cache disk moved from /opt/forge/.cache to /opt/forge/cache. msb >= 0.7.0 derives a named disk's device id from its guest mount path and rejects ids that are not [A-Za-z0-9_-]; the dot in the old path made every sandbox create fail with managed additional disk has an invalid or reserved device id. Rebuild the sandbox image after upgrading so the image env matches the new path.

What's Changed

  • fix(sandbox): keep the cache disk guest path free of dots

v1.0.2

Choose a tag to compare

@chriswritescode-dev chriswritescode-dev released this 19 Sep 18:02

Highlights

  • Sandbox cache disk: package and tool caches — including uv tool installs — now live on a dedicated disk mounted at /opt/forge/.cache; forge-cache-prune reclaims space without losing installed toolchains
  • Unexecuted plans in the dashboard: projects holding only unexecuted plans appear in a collapsed Unofficial projects section with their plans inline; an unscoped /api/data payload ships those rows so they can be viewed and deleted, and the Plans section splits into Executed and Unexecuted blocks
  • Restart with new models: the TUI loop restart dialog can change the execution (code) model and variant alongside the auditor settings; overrides persist on the loops row so continuation prompts use the new model
  • Sandbox-accurate plan requirements: architect prompts now describe the real sandbox boundary and ban requirements that authenticate to or mutate systems outside it; auditor addenda treat such requirements as plan defects to amend via plan-adjust instead of findings the coder can never satisfy
  • Focused docs: the README is condensed into focused docs with a refreshed loop diagram

What's Changed

  • feat(dashboard): view and clean up unexecuted plans (#101)
  • feat(loop): override execution model and variant on restart
  • docs: condense README into focused docs and refresh loop diagram
  • fix(prompts): forbid sandbox-unsatisfiable plan requirements
  • feat(sandbox): mount tool caches on a dedicated block device (#100)

v1.0.0

Choose a tag to compare

@chriswritescode-dev chriswritescode-dev released this 10 Sep 16:19
238a813

First stable release of opencode-forge.

Highlights

  • Durable audit handoffs: loop audit attempts are persisted with full audit snapshots, so a restart resumes the audit with the exact findings, evidence, and code state it started from instead of re-auditing from scratch; restarts from a stalled final audit rebuild their prompts from the persisted attempt snapshot
  • Obscura replaces Chromium in the sandbox image: the image ships the Obscura headless browser (Rust, CDP-compatible with Puppeteer and Playwright) instead of the Playwright Chromium build, and the sandbox context note announces it with a pointer to obscura --help
  • Tighter audit/fix convergence: verification evidence is reused only when command, outcome, environment, and code state all align; remediation is reproduction-first with shared root-cause ordering; delegated auditor subtasks are narrowly scoped and non-overlapping; coder decisions count as evidence, never an automatic waiver

What's Changed

  • feat(sandbox): replace chromium with obscura in the sandbox image (#99)
  • feat(loop): ship durable audit handoffs in 1.0.0
  • feat(agents): restrict architect planning to the current repository boundary
  • fix(storage): repair audit table after migration ID collision
  • fix(loop): strengthen audit remediation and verification evidence rules (#98)

v0.9.4

Choose a tag to compare

@chriswritescode-dev chriswritescode-dev released this 04 Sep 15:05

Highlights

  • Restart loops from the TUI: a new forge.loop.restart palette command restarts a running or stopped loop from persisted progress, with an auditor model and variant override chosen in the execution dialog; restartability is surfaced per loop so blocked restarts explain themselves
  • Chromium ships in the sandbox image: the current Playwright Chromium build is installed unconditionally as chromium (Google publishes no linux/arm64 Chrome build, so Chromium is the arm64 equivalent of current Chrome), replacing the opt-in Browser Control payload, which is removed along with its sandbox.imageFeatures.browserControl option
  • Usage-limit detection through wrapper errors: provider error extraction now prefers the message that matches the usage-limit pattern, so limits hidden behind a generic SDK wrapper message (with the real message in data.message) classify correctly

What's Changed

  • feat(tui): restart loops from persisted progress with auditor model override
  • feat(sandbox): ship Chromium in the image and drop browser control

v0.9.3

Choose a tag to compare

@chriswritescode-dev chriswritescode-dev released this 01 Sep 15:59

Highlights

  • No autoscaling ceilings: sandbox.resources.memory and sandbox.resources.cpus now pin the sandbox for its whole life; msb's --max-memory/--max-cpus ceilings are deliberately not exposed, because agents run inside the sandbox and cannot call msb modify from the host, so a ceiling never rescues a failing in-sandbox build
  • Sandbox environment probing: the loop probes host and container environments and leads sandbox notes with concrete transitions

What's Changed

  • feat(sandbox): probe host and container environments to lead sandbox notes with concrete transitions
  • refactor(sandbox): drop maxMemory/maxCpus boot ceilings

v0.9.2

Choose a tag to compare

@chriswritescode-dev chriswritescode-dev released this 27 Aug 16:36

Highlights

  • Persisted findings are now the sole auditor-to-coder channel: coder prompts inline each finding's full detail (description, scenario, verification) directly, and auditor response prose is never replayed to the coder — the loop runner only parses the section-summary block
  • review-read shares one finding renderer with coder prompts (formatFindingDetails), so findings read identically on every surface
  • Auditor output economy: the loop addendum now requires a single verdict line on dirty audits instead of restating findings; audit prompts direct the auditor to review-read for existing findings rather than inlining them

What's Changed

  • refactor(loop): inline persisted findings in coder prompts instead of auditor prose
  • chore: bump version to 0.9.2

v0.9.1

Choose a tag to compare

@chriswritescode-dev chriswritescode-dev released this 20 Aug 14:00
0c8bb88

Highlights

  • Live session view in the dashboard: loop sessions stream in real time over SSE, with the live model summary rendered at primary text strength
  • Change loop models from the dashboard: pick the execution and auditor models (and variants) per loop and apply them; changes persist to the loop configuration
  • Plan amendment diffs: amendments are diffed and rendered in the dashboard
  • Sandbox image pins the pnpm store via PNPM_CONFIG_STORE_DIR (pnpm 11 ignores npm_config_*), so the store no longer lands inside the project directory and gets committed by loop teardown
  • Dashboard hardening: guarded loop POST routes, released SSE streams, stricter loopback host checks

What's Changed

  • feat(dashboard): live session view and plan amendment diffs (#96)
  • fix(dashboard): guard loop POST routes and release SSE streams
  • fix(sandbox): pin pnpm store via PNPM_CONFIG_STORE_DIR
  • fix(dashboard): harden loopback host checks and live view interactions
  • chore: bump version to 0.9.1
  • fix(dashboard): render live model summary at primary text strength