OpenCode 2 v2.2.4: publishable artifacts, persistent desktop terminals#

Published by

Part of the OpenCode 2 Version Tracker series. | OpenCode on GitHub | OpenCode 2 docs

OpenCode 2 v2.2.4 builds on v2.2.3. Set experimental.artifacts to true and agents can publish, update, and serve HTML or static files through four artifact tools and a built-in local provider (#60351). Desktop terminals now belong to the session and survive server restarts with their scrollback (#60346), and the provider picker can walk you through Claude Agent setup (#60603).

Interactive artifacts#

Turn on artifacts with "experimental": { "artifacts": true } in opencode.json. Agents then get four tools, artifact_create, artifact_read, artifact_update, and artifact_delete, backed by a built-in local static-file provider (#60351). artifact_create takes a title and a file map keyed by relative path (for example index.html and assets/app.js); the entry file defaults to index.html, index.md, or the sole file, and a request can name a provider to override the default. Each artifact gets an art_... ID.

Plugins register their own storage through ctx.experimental.artifact.transform(...), which sets providers, capabilities, prompts, and the default provider. The SDK exposes client.experimental.artifacts with providers, list, create, get, update, delete, and view (#60351).

SurfaceWhat It Does
experimental.artifactsOpt-in flag in opencode.json; set to true to enable the artifact tools (#60351)
artifact_create / _read / _update / _deleteAgent tools to publish, read, update, and delete artifacts; create takes a title and a relative-path file map, with an optional entry file and provider (#60351)
ctx.experimental.artifact.transform(...)Plugin hook that registers artifact providers, capabilities, prompts, and the default provider (#60351)
client.experimental.artifactsSDK namespace with providers, list, create, get, update, delete, and view (#60351)

Persistent desktop terminals#

Desktop terminals moved to persistent session PTYs shared with the TUI and other windows (#60346). They restore scrollback, keep renamed titles across restarts, and stay synchronized across windows. On the SDK side, client.experimental.persistentPty.update renames a terminal or clears a user title, userTitle is exposed, and a persistent-pty.updated event fires on change (#60329).

Claude Agent setup and a base-branch shortcut#

Select Claude Agent from the provider picker and the desktop app copies claude auth login, installs Claude Code, and checks the connection before model selection (#60603). The Claude Code sign-in prompt now reads claude auth login (#60592). While creating a worktree, ⌘⌥. on macOS or Ctrl+Alt+. on Windows and Linux opens Choose base branch, also reachable from the command palette and Settings › Shortcuts (#60579).

Schedules, config, and fixes#

Enabled schedules run under opencode serve, and multiple server processes coordinate so a schedule fires only once; schedules stay opt-in through experimental.schedules (#60478). User, project, and remote configuration can override Console-supplied provider names, limits, variants, settings, and headers (#60597), and local OpenCode service requests skip environment-configured proxies (#60441). The desktop app cut repeated work while streaming Markdown in long sessions (#60549, #60562, #60577), and the TUI restored right padding on edit and patch diffs (#60614).

Server-owned terminals, artifacts, and schedules#

The three headline changes all put session state behind the server. Artifacts live with a provider the server hosts, terminals are session PTYs the server owns, and schedules run inside opencode serve.

One consequence is that a single opencode serve can back several windows reading the same state. A terminal opened in one window shows up with its scrollback in another, and a schedule fires once no matter how many server processes watch it. That state also outlives a restart, so a terminal's history and an artifact an agent published are still there after the server comes back.

All trademarks and software referenced belong to their respective owners.

Previous OpenCode 2 analysis: v2.2.3 (November 3, 2026)

All 25 OpenCode 2 analyses: OpenCode 2 Version Tracker · Official OpenCode 2 changelog