<!-- Legacy copy for app versions up to 1.22.1, which fetch this file for their update notes. Generated from changelog/*.md while it exists; delete it after 2026-09-19 and nothing will recreate it. -->
- **Git:** Stage, unstage, or discard individual blocks of changes with controls beside each block in the web and desktop Changes view (thanks to @LABCAT).
- **Turn stats:** The work status panel now shows response speed, model and tool time, tokens, and reported cost after a turn finishes. It's enabled by default (thanks to @alvins82).
- **Projects:** Move project actions, worktree setup commands, and draft starters into the repository for teammates to use. Repository commands ask for trust before running, and ask again when they change.
- Plans: Move plans into the repository, or point the Plans tab at an existing folder of Markdown files in your project.
- Git: Choose a recent commit to review in Changes or Walkthrough, with the same selection shared between both panels.
- Mobile: Compare branches and review individual commits from the Changes panel (thanks to @gaojunran).
- Mobile: Manage snippets, agents, commands, plugins, and skills from Settings on your phone.
- Mobile: Start a session in a project's root folder with the + beside its name in the sessions drawer.
- Sessions: Search projects by name or path in the new-session project picker on web and desktop (thanks to @maximtop).
- Sessions: Paste a full session ID into sidebar or archive search to find an exact match on web and desktop (thanks to @yulia-ivashko).
- Chat: Open and close collapsible Markdown sections in replies, including while the answer is still arriving.
- Usage: ClinePass shows five-hour, weekly, and monthly limits in Usage settings, with an option to show them in work status (thanks to @NemeZZiZZ).
- Usage: Charm Hyper now shows your remaining Hypercredits and their dollar value (thanks to @airtaxi).
- Settings: "Always show scrollbars" keeps scrollbars visible on this device when you move the pointer away.
### Improvements
- Chat: Completed live Activity can collapse into a summary of tools used and files changed, keeping the final answer visible. It follows your Activity Default setting.
- Chat: `/btw` now opens a separate composer with its own draft, model, and effort. Select message text and choose "By the way…" to ask about it, or use `/btw <question>` to send immediately (thanks to @ChangeHow).
- Files: Returning to a file restores your place in its code or Markdown preview, including the cursor position in the editor.
- Settings: Theme, fonts, and chat layout can differ between web, desktop, mobile, and VS Code. Panel sizes and other device choices stay on the device.
- Desktop: Zoom controls act on the focused browser, terminal, or file editor, and adjust interface scale when you're in chat or Mini Chat (thanks to @khafaji-ahmed).
- Mobile: Back steps through Settings from an item to its list, then to the settings menu.
- Mobile: Choose project sorting from the sessions drawer header. The drawer follows the same project order as desktop.
- Mobile: Close either drawer with the reverse edge swipe. Swipe session, project, and worktree rows right to reveal their actions.
- Comments: Enter attaches a code comment on desktop; Shift+Enter adds a newline.
- Terminal: Text renders consistently across tabs, borders and block graphics join cleanly, and touch users get a copy button beside the tabs.
- Chat: Ctrl+N/P navigation works across model lists, menus, and autocomplete. Reopening the model picker brings the selected model into view (thanks to @ChangeHow).
- Settings/Chat: Send-shortcut choices and large-text paste behavior have clearer descriptions (thanks to @ChangeHow).
- Chat: Tighter text and Activity spacing, stronger headings, and a softer divider make final answers easier to read. Message action buttons are smaller, with touch actions grouped in a menu.
- Chat: Selected text uses the same visible highlight in messages, file previews, and comments across themes.
### Fixes
- Chat: Queued messages already sent by the server disappear from the queue after reconnecting (thanks to @IbrahimKhan12).
- Sessions: Creating a session or opening a worktree session no longer shows a false history-loading error.
- Remote access: Large streamed replies no longer hold up other requests on slow tunnel connections, and broken connections stop leaving new requests hanging.
- Chat: Forking a user message restores its text and attachments in the new composer's draft and preserves the source draft (thanks to @karimodm).
- Chat: Interrupted tools stop showing an endless running timer after a reload (thanks to @alvins82).
- Chat: Attached images no longer appear twice just after sending.
- Chat: Opening panels or resizing the window keeps you at the end when following the latest reply. Sending or collapsing Activity no longer leaves a large blank area below it.
- Chat: Message details fit narrow columns without leaving gaps, keeping the model name readable as less important details disappear.
- Chat: Streaming Thinking stays inside its scroll box. Scrolling or dragging upward pauses its automatic scrolling so you can read earlier reasoning (thanks to @alvins82).
- Chat: Enter adds a newline in the expanded composer; Ctrl/Cmd+Enter sends. Keyboard selection of a project or worktree returns focus to the input (thanks to @ChangeHow).
- Chat: Narrow Markdown tables fit their columns, removing the empty bordered space on the right (thanks to @ChangeHow).
- Sessions: Opening or restoring a session whose worktree was deleted leaves moving it to another directory up to you.
- Mobile: The uncommitted-changes warning no longer flashes over the chat when starting a session.
- Mobile/Android: Settings, drawers, and chat controls stay clear of the system navigation bar.
- Terminal: Switching projects or tabs keeps each terminal's output separate. Reopening or resizing the panel no longer leaves stray prompt fragments.
- Terminal: Exiting Node-based commands on macOS and Linux no longer prints an empty IPC-channel warning.
- Updates: Updating a desktop host from the browser uses its native updater, confirms the installed version, and reports restart failures with a retry option (thanks to @ChangeHow).
- Git: Switching to a token-based identity no longer fails with a credential-helper permission error (thanks to @ICEY16360).
- Git: Branch comparisons include local edits and follow the selected base branch when you switch comparisons.
- Git: New-file diffs and walkthroughs still load when Git prints line-ending warnings (thanks to @jakoss).
- Usage: A failed refresh keeps the last known usage visible and shows the error without clearing other providers.
- Usage: OpenCode Go shows the correct reset countdowns for its usage limits.
- Usage: OpenRouter shows per-key spending and limits, or monthly spending for unlimited keys, fixing misleading zero balances (thanks to @leducmaxime).
- Usage: Ollama Cloud's dollar-based plans show monthly spending and extra credits, fixing missing usage and rejected credentials (thanks to @kydorn).
- Usage: NeuralWatt allowance rows show usage percentages and respond to the used/remaining toggle (thanks to @kydorn).
- Usage: Slow connections to providers such as z.ai no longer fail because the connection attempt ends too early (thanks to @ouyangjian28).
- Model tools: Summaries, titles, and walkthroughs use the selected model's connection details, fixing failures with providers whose models use different addresses (thanks to @mcowger).
- Desktop: Reachable instances no longer appear offline just because their connection check takes longer to respond (thanks to @jibanez-staticduo).
- Layout: Interface scaling keeps panels and controls usable, with room for macOS window buttons at smaller scales (thanks to @khafaji-ahmed).
- Sidebar: Closing and reopening the sidebar preserves the width you chose.
- Desktop/Linux: "Open in" no longer lists unrelated editors or launches the wrong app when an installed app has a non-Latin name (thanks to @ouyangjian28).
- Scrollbars: Hovering over a scrollable area reveals its scrollbar, including in Settings and dialogs, without shifting the content (thanks to @sergiofspedro).
- Language/Turkish: Agent and prompt labels use consistent terminology in Activity, turn stats, and input-history settings (thanks to @fitzgpt).
### Misc
- Server: `OPENCHAMBER_DATA_DIR` also covers project settings, themes, speech models, and new managed chats. Existing managed chats stay in their current location.
- **VS Code: comments on code.** Select lines, click the `+` in the gutter or right-click → OpenChamber → Add Comment, and write your note. It stays pinned to the code and goes out with your next message as a context card. Works in diffs too (thanks to @felipegenef).
- Chat: prompt history. Arrow up and down in the composer bring back your earlier prompts, attachments included, and the history survives a reload. It covers the current session; Settings → Chat can widen it to every project on this server and set how many prompts to keep, 40 by default (thanks to @mattv8).
- Chat: an "Enter sends" switch in Settings → Chat. On, Enter sends and Shift+Enter adds a line; off, the other way round. Ctrl/Cmd+Enter always sends. Nothing changes until you flip it (thanks to @claymor333).
- Server: `OPENCHAMBER_CHATS_DIR` moves the folder that holds chats without a project, for setups where OpenCode runs as a different user (thanks to @steffenmaechtel).
- CLI: on Linux, `openchamber startup enable` warns when the service would stop at logout and shows the `loginctl` command that keeps it running (thanks to @IbrahimKhan12).
- Project actions in worktrees: a session in a worktree can use the parent project's saved actions (thanks to @mattv8).
- VS Code: the extension is available in Turkish (thanks to @fitzgpt).
### Improvements
- **Project actions:** the running state of a saved action is reliable now. It shows as running only while the command is really running, every device sees the same state, and the sidebar shows which project has something running (thanks to @mattv8).
- Chat: Markdown tables are readable again, columns take the width their content needs (thanks to @ChangeHow).
- Chat: the Summary, Tree, or Raw view you pick for a JSON tool result is remembered for every JSON card and after a reload (thanks to @karimodm).
- Mobile: with a draft typed, the collapsed composer always has a send button. While the agent is working, that button queues the message (thanks to @ChangeHow).
- Server: OpenCode config paths respect `XDG_CONFIG_HOME` (thanks to @travisdoherty).
- VS Code: a fresh install uses VS Code's language until you choose one in Settings.
- Updates: the update dialog shows each new release with its title and its New, Improvements, and Fixes groups.
### Fixes
- **Settings/Providers:** editing a custom provider keeps all of its model settings, and VS Code saves the protocol you chose (thanks to @hehuaiyu).
- Sessions: opening a session from a deleted worktree moves it back to the project (thanks to @yulia-ivashko).
- Sessions: restoring an archived session from a deleted worktree moves it back to the project (thanks to @mattv8 and @yulia-ivashko).
- Sidebar: a missing worktree stays visible with a warning until you remove it (thanks to @yulia-ivashko).
- Sessions: forks, side threads, and subagents keep working after their original chat is deleted (thanks to @yulia-ivashko).
- Chat: huge patches in tool cards open without freezing the page (thanks to @karimodm).
- Files: an open file stops flickering through reloads when nothing changed, and an edit made in another app shows up in place while your unsaved changes stay (thanks to @IbrahimKhan12).
- Chat: pressing Enter to confirm text on a Japanese, Chinese, or Korean keyboard no longer sends a comment by accident (thanks to @ChangeHow).
- Chat: a queued slash command with attached context is delivered correctly, and the "Queued messages" card disappears after the last message goes out.
- Goal Mode: when a reply is cut off by the length limit, the goal continues, and Resume gives it another try (thanks to @bashrusakh).
- Sessions: subagent sessions are found in projects with more than 200 sessions (thanks to @bashrusakh).
- Server: the terminal works in the Docker image, and non-Latin text renders correctly there (thanks to @yulia-ivashko).
- CLI: on Windows, `openchamber` starts the server under Bun when Bun is installed.
- VS Code: on Windows, the status command and adding a folder to the workspace handle drive-letter case correctly (thanks to @pttydou).
- VS Code: permission auto-accept works again with the stable OpenCode (thanks to @bashrusakh).
- **Message queue:** messages you queue while a session is busy are now sent by the OpenChamber server. They go out even if you close the tab that queued them, and every device shows the same queue.
- **Git:** switching branches with uncommitted changes now stops at a dialog to commit or revert first, with an optional push. A failed push cancels the switch (thanks to @yulia-ivashko).
- Chat: the plus button inside a chat opens a new chat draft (thanks to @yulia-ivashko).
- Git: the mobile Changes view has a branch picker (thanks to @yulia-ivashko).
- Settings: Fixel Text is available as an interface font.
- Usage: exe.dev usage windows are tracked.
- Desktop: dev server previews work over the private relay.
- **OpenCode Go:** every request OpenChamber sends on its own, such as commit messages, pull request text, recaps and follow-ups, walkthroughs, Goal Mode checks, notes, and usage, now carries the `x-opencode-session` header OpenCode Go requires from 6 September. Chat traffic already had it. Update before that date if you use OpenCode Go.
- Chat: a queued message keeps its attached context, file mentions, and skill, and editing it brings them back to the composer.
- Worktrees: archiving a worktree's sessions is much faster, about a second for 121 sessions instead of fifteen. Archiving several sessions picked in the sidebar is just as fast (thanks to @yulia-ivashko).
- MCP: a server that failed to start or lost its connection reconnects on its own, waiting up to thirty seconds between tries. Disabled servers and ones waiting for a login are left alone. Web and Desktop only.
- Git: the branch picker lists recent branches and marks the ones with unpushed commits (thanks to @yulia-ivashko).
- Git: a draft over a directory with uncommitted changes shows a warning on its branch selector (thanks to @yulia-ivashko).
- Git: status refreshes after a tool finishes a change or a worktree changes (thanks to @yulia-ivashko).
- Chat: a new session opens on the Chat or Project side you used last (thanks to @yulia-ivashko).
- Settings: new installs start on the OpenChamber light and dark themes. An existing Flexoki choice is kept.
- Desktop: the instance switcher keeps its statuses between opens, never shows the connected instance as checking, waits up to fifteen seconds for a relay instance before calling it unreachable, and shows the full instance name.
- Worktrees: removing a worktree no longer freezes the interface. It runs in the background with a progress toast (thanks to @yulia-ivashko).
- Worktrees: a worktree created from a branch behind its upstream now fetches first and branches from the remote (thanks to @jtatum).
- Worktrees: the New Worktree dialog keeps what you typed when the worktree list changes while it is open (thanks to @yulia-ivashko).
- Worktrees: a removed worktree leaves the sidebar under every project it was listed in (thanks to @yulia-ivashko).
- Git: status no longer flashes half-finished changes while a new worktree runs its setup commands (thanks to @yulia-ivashko).
- Chat: starting an isolated-worktree session from an answer picks the right project when the open session already lives in a worktree (thanks to @yulia-ivashko).
- Thinking effort: picking Default sticks after a send and across agent or session switches, and a reopened session restores the effort its last message used (thanks to @yulia-ivashko).
- Settings: the theme no longer flips when you switch sessions across directories, and missing theme fields keep your current preference (thanks to @kydorn).
- Terminal: text no longer renders wrong until you resize the terminal, and terminals connect on servers running under Bun.
- **Linear:** connect a workspace in Settings → Integrations, browse and filter issues, and start a session or worktree from an issue. OpenChamber reports session progress back to Linear and can attach an issue to your next message (thanks to @AlexKutas).
- **Git:** a project with several repositories can switch between them from the Git tab. The diff, pull request, walkthrough, mobile Changes, and work status all follow the repository you pick (thanks to @jaygupta17).
- **Chat:** a session you open from the sidebar lands at the latest message and stays there. Switching sessions no longer jumps, renders half a conversation, crossfades, or shifts the tab title.
- Voice: local text-to-speech and macOS say pick a voice that matches the language of the reply. More local models download the first time you need them, and the voice picker lists voices from every installed model.
- Settings: each OpenChamber instance remembers its own theme, so windows connected to different instances keep the look you gave them (thanks to @kydorn).
- Settings: your GitHub account now lives in Settings → Integrations. The pull-request panel has account controls, and its rail icon appears only once you are connected.
- Chat: command, skill, and file autocomplete in a chat without a project no longer uses the project you had selected before.
- Chat: reverting to a message or forking from one brings its attached context back to the composer. Review comments, chat and file quotes, terminal selections, and browser annotations are kept.
- Chat: a stopped or unanswered turn now says what happened. The status report lists recent session, send, and managed OpenCode errors, and where to find the logs.
- Scheduled tasks: Goal, Auto-accept, and the other task settings survive when an older OpenChamber build shares the same project config.
- **Turkish interface:** OpenChamber can be used in Turkish (thanks to @fitzgpt).
- **Worktrees:** a session menu can move an idle session and its sub-sessions into an existing worktree. OpenChamber finds worktrees created elsewhere, asks before carrying uncommitted changes over, and keeps those changes safe if the move fails partway (thanks to @mattv8).
- Composer: pasting a big block of text, about 2,000 characters or 25 lines, offers to attach it as a `pasted-context-N.txt` file and leaves a `[pasted-context-N.txt]` reference at the caret. Settings → Chat can make it always attach or always paste inline (thanks to @makeittech).
- Work status: a session's cost includes what its subagents spent, split under the context meter and shown per subagent (thanks to @igorvelho).
- Multi-Run: a group can hold more than five models, including isolated runs that make one worktree per model (thanks to @tomzx).
- Chat: the text the model writes before it asks a question appears right away instead of waiting in the Activity group until the turn ends (thanks to @makeittech).
- Usage: GitHub Copilot shows a single AI Credits window matching Copilot's token-based quota, in place of the Chat Requests and Completions windows (thanks to @jakoss).
- Files: files up to 20,000 lines open in the full-file preview, up from 5,000 (thanks to @gaojunran).
- Mobile: Chats, the sessions that belong to no project, appear in the sessions sheet above the project list.
- Projects: the folder picker can step into a directory that is already a project and browse from there (thanks to @weixiang1862).
- Web/PWA: the installed app uses the shorter name "OpenChamber" (thanks to @bketelsen and @greghaynes).
- Sidebar: Recent rows show a compact timestamp on web and desktop.
- **Chat:** a very large tool result is capped before it renders, so it no longer freezes the page (thanks to @JSap0914).
- Chat: a code block with JavaScript template strings no longer sends the syntax highlighter into endless backtracking (thanks to @makeittech).
- Chat: a diff with a truncated header no longer crashes the conversation (thanks to @pascalandr).
- Chat: a draft or recalled message with Windows line endings no longer throws "Selection points outside of document" every time you open it (thanks to @yulia-ivashko).
- Chat: a session no longer looks frozen after a page reload or a late second client. Pending permission and question cards come back (thanks to @yangyaofei).
- Chat: a session no longer looks frozen after you dismiss the agent's questions and send a new task (thanks to @bashrusakh).
- Chat: when the turn-ending signal from OpenCode is lost, the working spinner clears within about a second instead of up to ten (thanks to @makeittech).
-`/btw` side questions: a btw session answers the side question instead of carrying on with the parent's plan, and it forks at the last completed turn, so it never inherits a reply that is still streaming (thanks to @pocharlies).
- Composer: typing three backticks leaves the caret inside the finished code fence, an empty input keeps a visible caret, and platform autocorrect behaves as it should (thanks to @franzudev, @TTTPOB, and @IbrahimKhan12).
- Chat scrolling: with "Follow new content while streaming" off, sending from the middle of a conversation no longer jumps to the new message.
- Chat scrolling: a middle-button pan or Shift+Space stops auto-follow the way the wheel does, and an upward wheel inside a tool output box scrolls that box instead of the chat (thanks to @pascalandr).
- Chat scrolling: PageUp/PageDown in the prompt box no longer shifts the whole window up and hides the title bar.
- Chat: question prompts render Markdown (thanks to @pascalandr).
- Chat: a bare link next to CJK or full-width punctuation no longer swallows it (thanks to @gaojunran).
- Chat: inline code and chips are readable in every theme (thanks to @difagume).
- Chat: a finished reasoning block shows in full instead of replaying as if it were still thinking, the text-selection menu stays inside the window, and the sticky user-message header no longer fades over the first lines of the reply (thanks to @makeittech).
- Chat: sending without a selected model says what is missing (thanks to @rvaldemar).
- Chat: `/init` stays in slash-command autocomplete after the conversation starts (thanks to @Dawnfz-Lenfeng).
- Chat: copying a message keeps Markdown paragraph, list, and code-block spacing (thanks to @ChangeHow).
- Chat: Ctrl/Cmd+digit is ignored while you type in a field, and a model you picked by hand survives switching between Build and Plan (thanks to @makeittech).
- Chat: a message made only of quoted context fragments appears in the prompt navigator.
- Chat: opening or closing the context panel no longer leaves a blank tail under the last message.
- Files: a file reached through a symlink inside the workspace, or under a project root that is itself a symlink, opens again instead of failing with an access error (thanks to @herjarsa).
- Files: clicking a folder or file in the sidebar tree opens it reliably on macOS trackpads, where a tiny pointer move used to swallow the click (thanks to @makeittech).
- Browser: when the agent captures a page while the browser panel is hidden, the panel is revealed first instead of the capture failing.
- Work status: undoing or redoing a parent session keeps its subagents at the same point in history (thanks to @alexandrereyes).
- Mobile: opening an agent that is already open switches to its editor instead of duplicating it (thanks to @bashrusakh).
- Sidebar: searching sessions also finds Chats, the sessions that belong to no project, which used to vanish as soon as you typed (thanks to @yulia-ivashko).
- Sidebar: pending permission and question badges are no longer covered by the hover actions (thanks to @makeittech).
- Projects: sending, forking, and image attachments work in projects whose path has non-ASCII characters, such as `Masaüstü` (thanks to @fitzgpt).
- Web/PWA: a notification click focuses an existing window (thanks to @bketelsen and @greghaynes).
- Themes: custom themes loaded through symlinks work (thanks to @divyam234).
- Plans: a saved plan opens with its content again for chats, worktrees outside the project path, and tabs restored after a reload, and an edit made right before closing is no longer lost.
- Settings: the editor font size survives a restart (thanks to @pascalandr).
- Settings: a change made right before you close the window is saved (thanks to @makeittech).
- Settings: number fields and selects no longer clip at large font sizes (thanks to @makeittech).
- Settings: refreshing GitHub account state no longer interrupts the page (thanks to @floze-the-genius).
- Settings: the Cloudflare Tunnel download link works (thanks to @AyoubAchour).
- Settings: Windows skill paths are classified correctly, so disabled and duplicate skills are hidden as intended (thanks to @Ttungx).
- Settings/Providers: after you save an API key or sign in, the provider no longer shows "Credentials missing" with its models hidden until you switch away and back (thanks to @herjarsa).
- Small model: requests send the provider's configured headers, such as an API-gateway subscription key (thanks to @dmitrii-galantsev).
- Small model: a configured Anthropic endpoint is used without a doubled `/v1`, and Google models without reasoning no longer get a thinking option (thanks to @mpeter and @IngTian).
- Git: the status panel refreshes from the real repository after checkout, branch, stash, merge, rebase, or reset, and remote branches that were never fetched appear in branch lists (thanks to @makeittech).
- Git: the Branch diff scope compares against the right base for branches created from the current branch (thanks to @gaojunran).
- Git: picking `origin/main` in the branch selector checks out the local branch instead of a detached `HEAD` (thanks to @yulia-ivashko).
- Git: branch search hides branches that do not match (thanks to @bashrusakh).
- Updates: "Update OpenCode" no longer fails with a bare "Bad Request". OpenChamber names the release it will install and shows OpenCode's reason when it refuses (thanks to @mdatsev and @yulia-ivashko).
- Updates: the desktop "Restart to Update" button says why an install failed, including an unsigned local build, and stays available to retry (thanks to @mdatsev and @yulia-ivashko).
- Desktop: a crashed window recovers on its own, and repeated crashes end in a visible failure page instead of a reload loop (thanks to @wqpan).
- Desktop: a slow or interactive shell startup file no longer stalls startup while OpenChamber looks for OpenCode. Each probe gives up after five seconds, which is what left a Homebrew OpenCode looking undetected from a Dock launch (thanks to @mskadu).
- Windows: restarting managed OpenCode cleans up orphaned listeners and process trees, closing the app stops OpenCode, and scheduled startup no longer fails on Task Scheduler's command length limit (thanks to @sergiofspedro, @a0000001, and @HAHH9527).
- Windows: startup cleanup of leftover processes no longer blocks the server (thanks to @bashrusakh).
- Server: an `OPENCODE_BINARY` from the environment is kept when `settings.json` clears its own override (thanks to @bashrusakh).
- Server: recovery through `OPENCODE_HOST` keeps the configured host and port (thanks to @colinmollenhour).
- Server: `openchamber connect-url` no longer risks tearing `settings.json` while the desktop app runs, which could unpair every device (thanks to @shijie152).
- Sessions: switching quickly no longer saves the wrong scroll position, and the log no longer fills with worktree warnings for folders that are not Git repositories (thanks to @herjarsa).
- **Chat: comment on a reply.** Select text in a chat message, or in a rendered Markdown preview in Files, and choose Comment to attach that quote with your note. The selection stays highlighted while you type, and a source line range comes along when it can be found.
- Diff: hovering a line shows a plus in the gutter. Click or drag across lines to open the comment editor for that range, styled like the chat's comments.
- Chat: context attachments. Diff comments, terminal selections, browser annotations, linked issues and pull requests now appear in the conversation as compact context cards.
- Session tabs: the web and desktop header can show open sessions as browser-style tabs (Settings → General → Navigation). A tab switches the whole workspace, and closing one leaves the session alone.
- Chat: "Follow new content while streaming" (Settings → Chat → Streaming, on by default) turns automatic following off entirely.
- Composer: hovering or tapping a context chip opens a stacked preview of everything attached, where you can edit a comment in place or remove an item before sending.
- Permission cards answer to the keyboard. Alt+Enter allows once, Alt+Shift+Enter allows always, Alt+Backspace denies, and the keys are printed on the buttons. Auto-accept has Cmd/Ctrl+K, A.
- Sessions: Cmd/Ctrl+Alt+Left/Right steps back and forward through the sessions you opened in this window. With session tabs on it moves between neighbouring tabs.
- Git: Cmd/Ctrl+Enter in the commit message box commits, and Alt+Down/Up moves between changed files in a diff review, expanding a collapsed file on arrival.
- Panels: the context rail has a configure button that chooses which panels it shows. Hidden panels keep their data, stay reachable from the command palette, and leave the digit switcher, so digits always match the icons you see.
- Mobile: the chat comment input sits exactly over the composer and rides the keyboard. Enter makes a new line there, and attach moved to the button.
- Mobile: narrowing a browser window past phone size switches to the mobile layout, and widening it switches back.
- **Chat scrolling is rebuilt around your message.** Sending parks your message near the top and the reply streams in below it, a paragraph at a time. Scrolling up hands you the wheel at once, and the scroll-to-bottom pill carries the model's working status while you are away.
- **Keyboard shortcuts are redesigned.** Single chords for everyday actions, a Cmd/Ctrl+K leader for two-step open and go actions, held Cmd/Ctrl+digit for session tabs, Cmd/Ctrl+Option+digit for panels. They work on non-English layouts, tooltips show the binding you have set, old custom bindings reset once, and the full map is in Settings → Shortcuts (registry contributed by @ChangeHow).
- Sessions: switching is much faster in large workspaces. The sidebar no longer rebuilds on every switch and recently viewed sessions come back already rendered, roughly halving switch time with thousands of loaded sessions (thanks to @c-w-xiaohei).
- Chat: Cmd/Ctrl+Shift+T cycles through every thinking level the selected model offers instead of stopping at the end (thanks to @nimobeeren).
- Chat: with following off, the scroll-to-bottom pill appears as soon as the reply grows past the visible area.
- Search: every searchable picker uses one matcher. Best matches first, multi-word queries in any order, punctuation ignored, so "gpt4o" finds "gpt-4o". Ctrl/Cmd+P matches whole file paths.
- Chat: @ file mentions rank files and directories together by match quality, and a long path keeps the folder next to the file name visible.
- Command palette: rarely used commands, such as pin session, copy session ID, the multi-run launcher, archived sessions, notes, todos, status, and theme, are found by typing but stay off the first screen.
- Devices: re-pairing a phone keeps the name you gave it instead of resetting it to "OpenChamber Mobile".
- Files: the editor toolbar is always docked under the file tabs.
- Terminal: terminals no longer vanish behind your back. Every tab and device shows the ones already running on the server, and background tabs survive the idle cleanup.
- Browser: an agent opening a page with the browser tool no longer pops the browser panel open or switches the surface you are on. The page loads in the background.
- Auth: an expired OpenChamber login is announced within seconds by a banner with a Log in button. Sending pauses until you log in, and a conversation that failed to load reloads itself afterwards.
- Chat: a failed send returns your typed prompt to the input instead of losing it to an error toast, and a session switch mid-send lands it in that session's draft.
- Chat: prompt-rail and message jumps land exactly on the target once the layout finishes measuring, and clicking the last rail item always works.
- Chat: opening a session or resizing panels no longer strands the view in a large empty space below the last message, and a width change keeps a reader who was at the bottom at the bottom.
- Chat: streamed code blocks are highlighted while they stream, and a finished message no longer jumps when line numbers fill in.
- Chat: finished replies no longer flicker. Tool cards stopped replaying their reveal animation on completion, and resizing the window no longer throws the conversation around at the bottom.
- Chat: file links in messages are no longer checked twice, and the first check no longer uses the wrong project directory.
- Mobile: scrolling during a streaming reply works again. A drag takes over at once, the pill shows up, and loading older messages no longer throws you to the bottom.
- Mobile: on Android browsers the composer stays above the keyboard in the chat, which used to cover it with no way to scroll it into view. The draft screen's viewport pinning now covers the chat screen too.
- Desktop: two windows on different projects no longer hijack each other. One window's session switch could make the other adopt its project while you were typing.
- Desktop: notification clicks and openchamber:// links open in one window instead of all of them.
- Desktop: a relay-paired default host no longer greets every restart with the "Remote Server Unreachable" screen. The app boots and connects over the relay, and picks the direct route back up when it answers again.
- Relay: paired devices are no longer logged out when the app restarts while another local OpenChamber process is running.
- Git: the branch's pull-request badge no longer picks up a stranger's pull request. With contributor forks added as remotes, a fork's closed pull request sharing only the branch name could show on your local branch.
- Sessions: a session list left on "loading sessions" forever after a half-open connection to OpenCode now times out and retries (thanks to @herjarsa).
- Sessions: headers find archived sessions, so an archived session's title is no longer missing.
- Settings: the selected project or session no longer jumps back to a previous choice when settings responses arrive out of order.
- Files: a preview above the editable size cap shows the whole file, and huge files no longer freeze the app (thanks to @gaojunran).
- Usage: the Command Code tile is gone, because their API exposes no usage data and the tile could only fail.
- VS Code: the chat view no longer sticks on its loading screen on slow or remote connections (thanks to @VinciYan).
- UI: the chat's scroll fades are back, the first uncached session open fades in, draft target menus stay inside the chat area, sidebar tooltips no longer appear on a passing hover, and the btw panel's shadow matches the composer.
- UI: OpenCode notices share one style, and Linear and Cloudflare tools show their own icons.
- UI: the timeline dialog fits small screens (thanks to @gaojunran).
### Misc
- Files: the floating hover toolbar and its setting were removed.
- Mobile: the setting that chose between the old and new mobile layout is gone.
- **Session: /btw side questions.** Type `/btw` and your question to ask something off-topic in a temporary session forked from the current one, so it has the full context and leaves the chat untouched. The answer streams into a panel above the composer, which you can collapse to a slim bar, keep as a full session, or discard. The temporary session stays out of the sidebar and session lists until you keep it (thanks to @jaygupta17).
- **Chats:** start a chat without choosing a project. Chats live in their own section and carry no repository or worktree context.
- Skills catalog: browse curated GitHub skill collections in a card catalog with search across sources, skill counts, stars, recent updates, and a link to each skill's repository.
- Diff: the context-panel diff can show every change on the current branch against its base branch. OpenChamber detects the base when Git knows it, and asks you once when it does not.
- Settings/Projects: a project can pin a thinking level next to its model, for models that offer levels. Both sit in one Defaults for new chats group.
- Desktop/Remote instances: a managed remote server can also be published to the remote machine's own network, so other devices there reach it without the SSH tunnel. It needs a UI password, and stays private to the tunnel otherwise.
- Chat: an app link such as `spotify://` asks for confirmation before opening another app. You can trust a link type on one device and manage trusted links in Settings.
- Sidebar: switch between the full project list and a focused view of one project.
- Providers: more custom providers are supported.
- Small model: summaries, goal audits, commit messages, and walkthroughs work with more providers.
- **Desktop/Remote instances:** adding an SSH connection starts from the hosts in your SSH config instead of a blank command field. Ports, install method, and passwords moved behind Advanced settings, and each connection shows Connected, Connecting, or Needs attention with the failure text and a button that fixes it.
- Chat: in the expanded composer, Enter starts a new line and Cmd/Ctrl+Enter sends, so a long prompt is harder to send by accident.
- Settings: the project selector on Providers, Agents, MCP, Commands, and Skills only changes what those pages show. It used to switch the whole app, carrying your chat, session list, and file tree to the other project.
- Git: a generated commit message matches the style and language of the repository's recent commits.
- Git: a generated pull request description follows the repository's own template when it has one, so the draft comes back in your sections and checklists instead of the built-in Summary, Why, Testing layout.
- Diff: creating an inline comment opens the chat and focuses the composer for your follow-up.
- Dictation: speech is transcribed after you stop recording. The composer shows a live waveform and timer, and a long recording splits at pauses instead of cutting words.
- Chat: while a reply streams, the model status line under the last message turns into the finished message's info row in place.
- Usage: Z.ai credit limits appear alongside its other quota windows.
- Desktop/Remote instances: connecting to a remote machine works when bun, OpenChamber, or the opencode CLI live in your home directory rather than on the system path. Installing no longer fails with a permission error, and a missing opencode CLI is reported before the connection starts instead of as a stack trace.
- Desktop/Remote instances: disconnecting from a connection set not to keep the server running actually stops that remote server.
- Settings/General: changing the default model, variant, or agent no longer repoints an open chat that already carries a model you picked for it. Chats following the default still switch right away.
- Settings/Providers: the provider you select no longer jumps to another one on its own. Changing the chat's model or agent, and background provider refreshes, used to move the selection with them.
- Chat: if OpenCode restarts while a response is running, the chat stops with an interrupted state and a notification to continue instead of hanging silently (thanks to @sum117).
- Chat: newly sent messages and highlighted code blocks no longer flicker, and Bash output grows with its content instead of being cut off.
- Chat: file paths in messages open from the session's project, even if you last browsed files in another project (thanks to @tomzx).
- Chat: in a chat without a project, the work status card steps aside when the context panel is open instead of sitting next to it.
- Chat: a long user message can be expanded even when its final layout finishes after it first appears.
- Sidebar: sessions created outside OpenChamber appear in the sidebar and Recent list without a page refresh (thanks to @tomzx).
- Files/Desktop: a file opened from outside the workspace stays readable after its temporary access expires, instead of failing until you reopen it (thanks to @pascalandr).
- Session assist: recaps and suggested follow-ups work when the Anthropic provider uses a custom endpoint. They used to fail every time.
- Desktop/Windows: the close button lines up with the rest of the window chrome.
### Misc
- Settings/Integrations: the experimental page lists only integrations you can install. Unavailable and Coming soon entries are gone.
- **Settings/Integrations:** a new Integrations page lists the Claude Code, Command Code and Cursor plugins with install, update, setup and remove actions. Discord and Telegram are marked coming soon.
- Files: drag files onto the Files sidebar to upload them into the project or into a chosen folder. Replacing a file that already exists asks first (thanks to @makeittech, @alanzchen).
- Usage/Claude: Claude plan limits work when you are signed in through Claude Code on macOS, Linux or WSL, with no second Anthropic login in OpenCode.
- Usage/Claude: the Usage page names your plan and adds per-model weekly limits and extra usage spending.
- Usage/Command Code: Command Code plan limits appear in the Usage page and the work status panel.
- **Project knowledge:** the Project notes panel is now Project knowledge, with notes, todos, plans and their search in a resizable sidebar. Click anywhere on a note card to expand it. Plans open and edit in the panel, and notes and plans can be pinned as context.
- Git: the pull request panel follows the branch's current open PR, and an open PR wins over an older merged or closed one (thanks to @makeittech).
- Git: after a PR is merged or closed the panel keeps showing it as the branch's last PR and offers to create the next one right below it (thanks to @makeittech).
- Chat: opening a busy subagent in the context panel shows its history while it works, not only the working-status line (thanks to @makeittech).
- Chat/Attachments: text pulled out of Office and OpenDocument files is capped and shown more compactly, so a large document and its images no longer crowd out the rest of the message.
- Files: a preview you already have open refreshes after you upload a new copy of that file (thanks to @makeittech, @alanzchen).
- Mobile/iOS: the chat composer uses native selection handles for picking text.
- **Settings:** saving settings no longer wipes an OpenCode config written with unquoted JSON5 keys down to an empty `$schema` stub. Plugins, MCP servers and providers stay, and the change reports a failure (thanks to @makeittech).
- Stability/Proxy: sustained API traffic no longer uses up every outgoing network port on the machine, which left nothing on the computer able to connect until the traffic stopped (thanks to @alohaninja).
- Chat: an open conversation no longer keeps re-coloring the same code blocks in the background, which pinned a CPU core and spun up the fans while you browsed files (thanks to @makeittech).
- Chat: the context meter no longer climbs past 100%, with readouts as high as 330%, after turns with many tool calls, and no longer jumps when you reopen an older session. The header, context sidebar, work status panel, mini chat and mobile all show the same value (thanks to @pocharlies).
- Chat: a new chat no longer saves its first message and then never starts when the last worktree directory was deleted; it falls back to the active project.
- Chat: typing with Chinese, Japanese or Korean input methods no longer breaks composition or throws the cursor to the end of the composer (thanks to @makeittech).
- Chat: saved chats in the context panel no longer open blank.
- Chat: dismissing an agent's clarifying questions no longer leaves the session stuck on the question screen; the next task shows its thinking and its final response.
- Projects: project names match the folder name exactly, so `.ssh` and `opencode-claude` no longer read as `.Ssh` and `Opencode Claude` in the sidebar, window title, settings and notifications. Names you set yourself are kept.
- Git/Worktrees: creating a worktree from a pull request works when the source fork was deleted or unreachable; it falls back to GitHub's pull-request reference (thanks to @makeittech).
- Files: a file reached through a symlink inside the workspace opens instead of being rejected as outside the workspace.
- Settings: the session retention action you pick is saved (thanks to @Gautam0507).
- Settings: an `OPENCODE_BINARY` environment variable you set is no longer discarded when settings hold an empty opencodeBinary value, so the managed OpenCode server still uses your binary.
- Usage/Claude: your session and weekly limits stay on screen while Anthropic blocks refreshes for a while.
- Mobile: connecting through an ngrok address works; its browser warning page no longer fails the server check.
- Desktop: browser pages served from a self-signed loopback HTTPS address load instead of being blocked by the certificate warning.
- UI: the model menu no longer paints white text on a white highlight in a high-contrast theme, so the hovered or selected model stays readable (thanks to @bashrusakh).
- Skills Catalog: the misspelled source name ClawdHub now reads ClawHub (thanks to @makeittech).
- VSCode: Add Project adds the chosen folder to the workspace instead of showing a "Failed to add project" toast.
- **Stability:** a single internal error no longer takes the local server down and leaves the instance unreachable until you restart it. The error is logged and the server keeps running.
- **Chat:** new messages no longer jump above older ones once the message ID sequence rolls over. Loading history, reverting and redoing follow the same order as the conversation.
- Mobile: connecting to a server that has authentication turned off survives closing and reopening the app. Auto-reconnect and the return-to-app check no longer read the missing password token as a lost connection and send you back to the connect screen.
- Browser: opening or restoring a dev server preview while you are connected over a relay or another non-standard address no longer crashes the app; the preview says the tunnel is unavailable.
- **Agent browser control:** agents can open a page and work with it. They read what is on screen, click, type, scroll, look at how an element renders, switch between mobile, tablet and desktop layouts, and save a screenshot into the project, so they can check their own work. Turn it on or off in Settings → General → OpenChamber Tools.
- Browser: dev servers are listed from what is actually listening, so one is offered however you started it, and a server that is still starting is waited for.
- Browser: the panel holds several pages at once, shows each page's own icon, and suggests addresses you already visited in this project.
- Browser: new controls for hard reload, page zoom, device sizes, a light or dark page, and clearing cookies or cached data for the panel alone.
- Mobile: long-press the logo on the connect screen or the instances list to open a connection log with a copy button, for reporting connection problems.
- **Browser panel:** the preview and browser panels are one panel now, backed by a real browser view in the desktop app. Pages that used to refuse to load open normally, logins stay, and developer tools are there. Point at an element or drag a region, write a comment, and it goes to chat with a screenshot of what you marked.
- Chat images: a finished assistant reply collects its Markdown images into a compact gallery with thumbnails and full-screen previews, including images from the workspace. On mobile the gallery scrolls sideways (thanks to @ChangeHow).
- Browser: when OpenChamber runs on another machine, the desktop app opens its dev servers through a local port, so pages load with working hot reload and developer tools, and links to another local port stay on that machine. In a web browser tab you can open only dev servers on your own machine.
- Remote access: a pairing QR code made while the app is reached through a public domain, for example behind a reverse proxy, includes that domain, so a paired phone can connect over it.
- Usage: quota limits you chose to display refresh every three minutes on desktop, mobile and VS Code, and you can refresh them by hand at any time.
- Usage: OpenCode Go quota tracking uses your existing OpenCode API key. No browser cookies or workspace ID needed.
- Desktop/Windows/Linux: minimizing the window always keeps it in the taskbar. The tray setting, now called "Close to the system tray", applies when you close the window.
- Desktop/Linux: frameless main and Mini Chat windows use native rounded corners (thanks to @kydorn).
- Remote access: a message sent through the private relay no longer fails with a 400 error when a connection drop loses part of the request; the request is retried (thanks to @claymor333).
- Mobile: a brief network hiccup when you open or return to the app no longer bounces a working connection back to the connect screen. The app retries and reconnects on its own, and a server that is really unreachable shows the connect screen within a few seconds.
- Scheduled Tasks: when two OpenChamber servers share a project configuration, a scheduled occurrence runs once; both servers no longer start duplicate sessions (thanks to @makeittech).
- Performance: a closed context panel no longer keeps its embedded chats running, and an open panel loads only the chat tab you are looking at (thanks to @karimodm).
- Sessions: switching projects selects a session that belongs to the new project (thanks to @makeittech).
- Chat: a message you already submitted stays with its session; a later project switch no longer sends it somewhere else (thanks to @makeittech).
- Chat: opening a subagent or code-review session in the context panel no longer steals focus from the main composer, and subagent prompting is available right away when it is enabled.
- Chat: code-review sessions are no longer treated as read-only subagent sessions.
- Chat: typing `!` for shell mode no longer leaves the `!` in the command or puts the caret on the wrong side of it (thanks to @RyderAsKing).
- Work status: a new-session draft shows project, MCP and usage details before the session exists, a long subagent list stays inside the panel, and hiding every section still leaves the controls to bring them back (thanks to @alohaninja).
- **Observability panel:** a new panel beside the chat brings the active goal, tasks, subagents, pinned context, MCP servers and context usage into one live view. The session list also shows how long an agent has been working.
- **Scheduled Tasks:** a project can define recurring tasks as Markdown files in `.agents/loops`. Opening the task list picks up file changes without a restart, and you can edit, enable, disable, delete or run a task from the app (thanks to @makeittech).
- Projects: you can create a new project directory outside the current workspace.
- Projects: adding, creating or cloning a project opens a new-session draft aimed at that project.
- Usage: xAI quota reporting (thanks to @iamhenry).
- Performance: the first web download is about 58% smaller and startup memory use about 22% lower. Heavy Settings and syntax-highlighting code loads only when you open it (thanks to @makeittech).
- Chat: shell command output is expanded by default, and adding a message to context puts focus back in the composer (thanks to @pascalandr, @makeittech).
- Chat: the composer caret is easier to see.
- Terminal: default tab names stay unique after you close tabs, Escape reaches terminal applications and no longer closes the context panel, and background connections send fewer keepalives (thanks to @makeittech).
- Walkthrough: branch comparisons use the repository's actual default branch on the remote (thanks to @RyderAsKing).
- VSCode: notebook links open in the notebook editor when a compatible extension is installed (thanks to @TTTPOB).
- UI: dialogs, dropdowns, popovers and tooltips share the same glass styling.
- **Settings:** OpenCode configuration changes gather behind a single Apply & Restart action, so OpenCode no longer restarts after every edit. The confirmation warns you when active chats will be stopped (thanks to @makeittech).
- Git/Worktrees: a prompt waits for a new worktree to finish checkout before it is sent, and a session runs against the worktree that owns it; it no longer opens or sends against the parent repository (thanks to @ftzi).
- Git/Worktrees: setup runs the repository's `post-checkout` hook after creating a worktree, and a deeply nested worktree no longer fails with "Filename too long" on Windows (thanks to @ftzi, @makeittech).
- Remote access: a paired device using the private relay keeps relay access when no browser client is connected or device state fails to load for a moment.
- Chat: a queued message no longer sends into a response that is still streaming, and tool cards left running by an interrupted response settle instead of staying stuck (thanks to @makeittech).
- Chat: a message you submitted before switching sessions stays with the session and workspace you sent it from. If you switch away it is cancelled, never delivered to another instance (thanks to @Wsyjq).
- Chat: a fresh message no longer replays its entry animation after it has been shown, and Shift+Enter inserts a newline again on iOS (thanks to @makeittech).
- MCP: authorization handles browser callbacks more reliably, settings show clearly which servers are available, and a failed connection offers a retry action.
- Settings: quick edits to notification templates no longer overwrite one another, and the collapsed-user-message preference sticks (thanks to @AmanTahiliani, @pascalandr).
- Files: removing an attached Office or OpenDocument file also removes the images taken out of that document, and a failed reveal on Linux shows an error instead of failing silently (thanks to @chiamsun, @pascalandr).
- Desktop/macOS: choosing a folder after you denied filesystem access works again; the app is no longer left unable to open the directory (thanks to @deatheros).
- Desktop/Windows: minimizing from the taskbar stays a native minimize, while the app's own minimize action can still hide to the tray (thanks to @pascalandr).
- Desktop: overlay scrollbars hide again after you scroll instead of staying visible.
- Mobile/Android: pairing QR codes work in older WebViews that misread `openchamber://` links (thanks to @CMBill).
- Mobile: a pending agent question reappears after a cold start, so the session no longer waits with no answer prompt.
- Server: a foreground install managed by a user systemd service updates through a separate transient service, so the server restart no longer interrupts it (thanks to @SYU8384).
- Security: archive extraction updated for GHSA-xcpc-8h2w-3j85 (thanks to @mel0nyrame).
### Misc
- Desktop/macOS: the vibrancy option is gone; it cost too much rendering work.
- **Sessions:** an archived session can be restored to the active list, from the sidebar context menu, the archived-sessions page or the bulk-selection bar. Permanent deletion is no longer the only option (thanks to @makeittech).
- Chat: Ctrl/Cmd+L adds the selected text to the chat input, or focuses the input when nothing is selected. The toggle-sidebar shortcut moved to Ctrl/Cmd+Alt+L.
- **Providers:** signing in to an OAuth-only provider completes. The browser login is stored and the provider list updates, so you are no longer left signed out.
- Providers: the copy button for device codes works.
- Chat: a model you chose by hand stays selected after a delegated subtask finishes; it no longer reverts to the agent's default model.
- Walkthrough: models without a working provider login are gone from the walkthrough picker, and Generate stays disabled until you pick a usable model, so it no longer fails with a raw provider error.
- Walkthrough: connecting to a server older than the app says the server needs updating instead of showing a raw HTML parsing error. The "Critical" tag is now "Key change" with a tooltip, so it no longer reads as a problem found in your code.
- Agents/CLI: a prompt that never reaches its session is reported as failed, and an unavailable model, agent or variant is rejected with a clear error before anything is created.
- **Walkthrough:** a guided tour of a diff. The model groups related changes into stops, explains each one, and puts them in an order where each builds on the last. Start one from Changes or the pull-request view for uncommitted work, a branch against its base, or a pull request. It writes in your interface language, and the panel can redo it in another supported one.
- **Providers:** add and edit custom OpenAI-compatible providers in Settings, with their endpoint, models, credentials, headers, and configuration scope (thanks to @makeittech).
- Localization: the interface and the documentation are available in German (thanks to @SGD-DEV).
- Mobile/Android: pairing QR codes scan on devices without Google Play Services. The camera closes the moment it reads a code and a connecting screen takes over.
- Settings/Skills: skills kept in the project's own `.agents/skills` folder show up for the active project (thanks to @makeittech).
- Usage: DeepSeek quota is tracked (thanks to @airtaxi).
- **Mobile/Tablet:** the tablet and foldable layout follows the phone navigation now. A resizable sessions sidebar sits on the left, the workspace (Changes, Files, Terminal, Notes, MCP) on the right, and pages like settings and instances open as centered dialogs. An open diff, edited file, or attached terminal survives rotation.
- Mobile/Android: the left and right drawer swipes start farther from the screen edge, clear of Android's Back gesture.
- Performance: the web app starts faster. The 18.5 MB bundle it used to download is gone, and syntax highlighting, screenshots, diagrams, the editor, and image conversion load only when you need them (thanks to @makeittech).
- Performance: expanding a project with many worktrees stops reloading its sessions over and over.
- Git/Diff: opening a changed file puts its header at the top, and live updates refresh only the files that changed, keeping your place in the review. Saving from the built-in editor updates the diff too.
- Terminal: a terminal opens without waiting for the view to finish loading, and output that arrives first is still there when it appears (thanks to @makeittech).
- Files: in a browser, exporting a file is labelled as a download and the desktop-only reveal action is gone (thanks to @makeittech).
- Chat/Tools: Bash output reads as it did in the terminal instead of showing raw escape codes for progress bars and rewritten lines (thanks to @catan271).
- Chat: queued messages retry after a failed send or an interrupted turn instead of sitting stuck until the next session update.
- Chat: a prompt sent over the private relay no longer produces a duplicate reply when the connection drops after OpenCode took the message. A queued message that is already being sent is not sent a second time.
- Chat: assistant messages no longer run HTML.
- Sessions: sessions in a worktree you just created show up without restarting or refreshing the app.
- Sessions: archiving and unarchiving stays inside the current instance and workspace (thanks to @alexandrereyes).
- Sessions: starting OpenChamber from a folder that is not your project, your home folder for instance, no longer floods you with "not a git repository" errors that could stop sessions and projects from loading (thanks to @makeittech).
- Settings/Skills: renaming a skill keeps its instructions and supporting files. The rename action only shows for skills OpenChamber can safely move (thanks to @makeittech).
- Usage: Kimi for Coding counts usage correctly whether the provider reports what you used or what is left (thanks to @makeittech).
- Sidebar: a worktree shared by two projects appears once (thanks to @makeittech).
- **Sessions:** move a root session and all its sub-sessions into a new worktree from the session header menu.
- Desktop: the active session header has a menu with rename, share, export, archive, delete, and copy ID. A share link lands on your clipboard as soon as it is created.
- UI: OpenChamber, in dark and light, is the new default theme.
- Files: Settings → General has an Auto-save switch. Binary, PDF, and Office files are left out of it (thanks to @makeittech).
- Desktop/Linux: a Window Controls Style setting switches between classic rectangular buttons and macOS-style traffic lights (thanks to @kydorn).
- **Mobile:** the app navigates by two swipe drawers now. The left one lists sessions across projects and lets you rename, archive, or delete with a swipe; the right one holds Changes, Files, Terminal, Notes, and MCP. Tapping the title in the header opens recents with live status, and a cold launch reopens your last session or shows a connect screen when it cannot.
- Performance: the first session after startup opens faster, because background requests no longer get in front of the message load (thanks to @yulia-ivashko).
- Terminal: switching terminal tabs keeps the connection instead of building it again on every open (thanks to @makeittech).
- Chat: a tool description shows the glob pattern when the tool was given one.
- Sidebar: a session with an agent working shows a live activity dot even while the sidebar is collapsed (thanks to @pascalandr).
- Behavior: an optional setting trims about 40% off OpenCode's built-in system prompt for the build and plan agents. It takes effect after OpenCode restarts, and it is not meant for custom build or plan definitions.
- **Chat tools:** a Bash card shows output while the command is still running, in a pane of fixed height that follows new lines until you scroll away. The timer keeps counting to the real end instead of stopping at 300 seconds.
- Chat: a slash-command starter picks up whatever you already typed in the draft and passes it as the command's arguments.
- Usage: an OpenAI business account shows the spend limit you configured for Codex (thanks to @jrandiny).
- Desktop: bundled OpenCode updates together with OpenChamber, with no separate update to accept (thanks to @yulia-ivashko).
- Desktop/Linux: the AppImage tray menu has Show, Hide, and Close, and "Open in" shows the icons of the apps it found (thanks to @makeittech).
- **Agents:** through the OpenChamber tool, an agent on a managed local instance can create, send to, fork, inspect, and wait for sessions, make an isolated worktree, and manage scheduled tasks. A new Schedule a Task starter walks you through setting one up from chat.
- **Context panel:** Changes, pull requests, files, terminal, notes, plans, previews, and side chats live in one resizable panel with a rail to switch between them. The pull-request view shows checks and comments as they land, and a failed check or a comment can go straight into a chat draft.
- CLI: new `session`, `schedule`, `projects`, and `models` commands.
- Chat: text selected from a Markdown code block keeps its fences, language, and block structure when you add it to the composer or start a session with it (thanks to @ChangeHow).
- Settings: an option hides starter suggestions on the new-session screen.
- Usage: Crof and NeuralWatt quotas are tracked, with subscription kWh, separate key-allowance windows, and a credits balance to fall back on (thanks to @kydorn).
- Desktop/Linux: official AppImage builds for x64 and arm64, with in-app updates, frameless window controls, minimize to the system tray, launch at login, several windows at once, and "Open in" for the apps it finds installed (thanks to @BestSithInEU, @jibanez-staticduo, @makeittech).
- **Sidebar:** sessions sit in Recent and per-project zones, grouped by worktree or flat. Scheduled tasks, archived sessions, multi-run, and worktree management open as full pages from the sidebar.
- Chat composer: what you type renders as you type it, with Markdown emphasis, attention lines, file and agent mentions, slash commands, snippets, attachment citations, and `~path` references. A file mention can be edited in place, and the mobile composer grows with its content.
- Chat/Permissions: sending a message while a permission prompt is open denies what is pending in the session and its subagents, then queues your message for the next turn (thanks to @tomzx).
- Chat/Subagents: a subagent chat can be prompted while direct subagent prompting is on, even before the parent session has loaded.
- Mobile/iOS: push notifications go through Apple's production service by default (thanks to @natheihei).
- Chat: jumping to a message in a long conversation lands on the right one even when the rows above it have not been drawn yet.
- Chat: code blocks stop shifting lines and merging into nearby text while they render, and copied code keeps its original text (thanks to @ChangeHow).
- Small Model: GitHub Copilot models use the API they support, so summaries, goal audits, commit messages, and other Small Model actions work with models that have no Chat Completions (thanks to @jakoss).
- Desktop/Linux: the app no longer freezes or crashes now and then while a chat streams with the system tray on (thanks to @kydorn).
- Desktop/Linux: a missing update manifest counts as "no update" instead of failing, and updater errors show in About and the sidebar (thanks to @BestSithInEU, @jibanez-staticduo, @makeittech).
- Mobile/iOS: notifications reach development builds installed from Xcode. The app works out which Apple push environment it is in, so sandbox and TestFlight or App Store installs both get them.
- Mobile/Android: tapping the terminal opens the keyboard, typing and backspace work with Android keyboards, and closing a focused terminal leaves the app responsive.
- Shortcuts: double-Escape can no longer be primed while the current session is not the active one.
- **Chat attachments:** attach Office and OpenDocument files (`.docx`, `.pptx`, `.xlsx`, `.odt`, `.odp`, `.ods`). Their text and the embedded images OpenChamber can read are pulled out before the message goes off.
- **Sessions/Worktrees:** move an idle root session, its sub-sessions, and your uncommitted changes into a new worktree.
- Chat attachments: more source-code formats, notebooks, HAR files with credentials and cookies stripped, SVG and Draw.io drawings, and HEIC/HEIF images. The composer warns you when the chosen model may ignore an attachment type.
- Desktop: start straight into a saved remote instance, a URL, or a pairing link, with no local OpenCode and no local server.
- Scheduled Tasks: a task can start with permission auto-accept on. Its permission and Run as goal controls are the same compact toggles as in the chat composer.
- Desktop/macOS: a setting hides the menu bar item.
- **Performance:** opening and switching sessions in a big workspace puts the selected and visible chats first.
- Chat: an assistant turn shows model, agent, thinking level, duration, and time together in its footer, and replies split by a hidden system or subagent prompt read as one turn.
- Sidebar: projects are ordered by hand by default. A sorting choice you made yourself stays as it is.
- Desktop/Windows: SSH remote instances connect through native Windows OpenSSH. Password login and port forwarding run in hidden background processes, and a failed connection shows the SSH error itself.
- Mobile/Terminal: opening the terminal in a mobile browser or PWA focuses the input and raises the keyboard with no second tap (thanks to @bashrusakh).
- Performance: a failed refresh keeps the session list you had, a parent session no longer vanishes when its sub-sessions load first, and session data stays inside its own instance, project, and worktree.
- Chat: the working indicator names the model actually writing the reply, streaming at the bottom no longer jitters, and a new user message finishes its entry animation instead of snapping into place.
- Chat/Tools: attachments returned by plugin and custom tools stay visible after streaming and refreshes, with the same image previews and file chips as your own attachments (thanks to @FrostiDrinks).
- Sessions/Worktrees: creating a worktree recovers when an earlier Git operation left the repository locked.
- VS Code and Cursor: opening a chat no longer crashes when the editor webview lacks its usual messaging APIs, and a closed editor tab stops receiving late streaming messages (thanks to @makeittech).
- VS Code: the active workspace is worked out before saved state is restored, so a project outside the editor workspace cannot replace it.
- Context Panel: a slow file-open request no longer yanks the panel back to that file after you picked another tab.
- **Terminal:** terminal sessions are rebuilt on Web, Desktop, and Mobile. They draw faster, keep their scrollback after a reconnect, and get Unicode and full-screen programs right.
- **Pinned messages:** pin a user or assistant message and its text comes back to the agent after the conversation is compacted.
- Terminal: pick the shell and whether it starts as a login shell, restart a session, and attach the selected output to the chat.
- Terminal: a theme change applies to open terminals right away.
- Mobile: a full-screen terminal workspace with touch scrolling and selection, quick keys, and Ctrl and Alt input.
- Sessions: a new draft or session stays with the project selected in the sidebar, including workspaces with nested or sibling projects (thanks to @bashrusakh).
- Session goals: goal details show which model ran the latest successful evaluation.
- Chat: when creating a session fails, the new-session draft stays open with the prompt you submitted.
- Session goals: an audit waits while direct subagents are still working.
- Small Model: provider API keys given through environment variables or files work for summaries, goal audits, and the rest of the Small Model features.
- Small Model: Gemini 3 Flash models use the thinking setting they support.
- VS Code: per-session permission auto-accept works again, survives an extension restart, and covers subagent sessions while an OpenChamber view is open.
- Mobile/Android: an update download picks the APK when the release also ships an Android App Bundle.
- **Prompt Navigator:** an optional marker rail beside desktop chats. Hover a marker to preview that prompt, click to jump to it, or give it a shortcut in Keyboard Shortcuts settings (thanks to @makeittech).
- Chat/Subagents: "Open subtask" works for nested subagents in the side-panel chat, and a Parent action takes you back to the previous subagent (thanks to @ameshkov).
- **Performance:** a large session sidebar stays responsive while chats stream, including setups with many projects, worktrees, and sessions.
- Chat: opening a long chat after an empty or aborted agent turn no longer reloads bigger and bigger parts of its history.
- Chat/Subagents: a task card follows its own subagent when several run at once, so its activity and "Open subtask" no longer point at another session.
- Sessions: a temporary project lookup failure no longer drops worktree groups from the sidebar.
- **Session goals:** arm the target button in the composer and your next prompt becomes a [goal](https://docs.openchamber.dev/session-goals/). The session keeps working on it by itself, and a small model audits every finished turn, until the goal is done, blocked, or past its optional token budget.
- Session goals: the loop runs on the server, so a goal keeps going with the app closed and survives a restart.
- Session goals: a strip above the composer shows progress, with pause and resume.
- Session goals: a goal can also start from the plan-implement dialog, from a scheduled task with "Run as goal", or from the "Craft a Goal" starter and the `/craft-goal` command.
- Session goals: while a goal runs, one notification when it settles replaces the per-turn "ready" notifications.
- Chat: you can prompt a subagent session directly. Open a subagent from the context panel and send it follow-up messages. Turn it on in settings.
- Settings: an editor font size setting for the code editor (thanks to @bashrusakh).
- Usage: OpenCode Go usage is tracked.
- Files: the file viewer has a markdown preview toggle (thanks to @greghaynes).
- Sidebar: projects can be sorted several ways, with a direction toggle (thanks to @bashrusakh).
- Permissions: per-session auto-accept lives on the server, so a session keeps auto-accepting tool calls with the app closed and after a server restart, and subagent sessions inherit it.
- Permissions: auto-accept can be turned on for a draft before the first message (thanks to @bashrusakh).
- Settings: chat visual settings are grouped into labeled sections (thanks to @bashrusakh).
- Command palette: fuzzy search covers projects alongside sessions and files (thanks to @bashrusakh).
- Editor: "Open in" recognizes VS Code Insiders.
- Remote access: the phone's launch screen names the device it is connecting to.
- **Remote access:** connecting over the relay is much faster, with no wait on a stale local address that could take around 20 seconds on a phone away from home. When your computer gets a new local IP, paired devices learn it over the relay and return to the local network on their own, with no re-pairing.
- Remote access: running several OpenChamber instances on one machine no longer lands paired devices on a random one, which was behind the intermittent "Unable to reach server" errors on paired phones.
- Chat: a queued message sends when the session is already idle instead of waiting forever (thanks to @bashrusakh).
- Chat: a pending agent question stays answerable after a server restart (thanks to @bashrusakh).
- Chat: a renamed session keeps its new title instead of flickering back to the old one (thanks to @bashrusakh).
- Sidebar: pinned sessions survive a refresh, and the file tree stays expanded while it refreshes (thanks to @bashrusakh).
- Usage: Codex quota windows show the right reset times.
- GitHub: PR and issue context resolves against the source repository when you work in a fork (thanks to @bashrusakh).
- Notifications: session errors and subagent completions arrive on desktop, web, and mobile.
- Agents: saving agent settings from the UI keeps custom YAML frontmatter fields (thanks to @bashrusakh).
- Windows: a difference in drive letter casing no longer splits one project into duplicates (thanks to @bashrusakh).
- Mobile: the sessions sidebar opens right away instead of taking many seconds on some devices (thanks to @tomzx).
- Mobile: renaming a saved instance keeps its connection working. The stored access token was being lost on edit.
- **Remote access:** the new [private relay](https://docs.openchamber.dev/private-relay/) reaches your instance from anywhere over an end-to-end-encrypted tunnel, with no open ports and no third-party tunnel. It switches on when you pair a device over it and switches off when no paired device uses it (thanks to @yulia-ivashko).
- **Mobile:** the iOS and Android apps are open for testing. Join the [iOS beta on TestFlight](https://testflight.apple.com/join/5ek6GU1E) or take the Android APK from the [latest release](https://github.com/openchamber/openchamber/releases/latest). Scan the QR code from "Add a device" on your server to connect.
- Mobile: the app moves between your home Wi-Fi and the private relay on its own, carrying the open session with it, with no re-pairing.
- **Pairing:** the redesigned ["Add a device"](https://docs.openchamber.dev/connect-devices/) dialog asks where the device will be used, Anywhere, Home network only, or This computer only, then shows a big QR code with a copyable link and closes itself once the device connects (thanks to @yulia-ivashko).
- Pairing: a link is a single-use code that expires and is redeemed when the device connects (thanks to @yulia-ivashko).
- Chat/Tools: every tool call expands to show its input, result, and errors, including MCP, plugin, and custom tools. Read and Skill stay compact links to their files.
- Chat/Tools: a JSON result opens in a navigable summary view with linked URLs and expandable nested data, next to the tree and raw JSON views.
- Mobile: iPad gets a split layout with a sessions sidebar that stays open and a resizable Changes/Files sidebar.
- Mobile: the app checks for OpenChamber updates itself, and Android shows a download toast.
- Mobile: a saved instance shows a live Connected status with the connection it is using.
- Desktop: a saved server keeps every connection its pairing link carried, going direct on your network and falling back to the relay away from it, including in a new window and after a restart.
- Desktop: Windows builds can start at login and minimize to the system tray (thanks to @achcyano).
- Projects: each project can set its own default model (thanks to @makeittech).
- Diff: a Last turn mode shows only what the latest turn changed.
- Chat: changed-file chips from the latest turn open that snapshot; chips from older turns stay read-only.
- Chat: code blocks can show line numbers that stay aligned while text streams in.
- Settings: a Wrap Code Block Lines setting in Settings → Chat controls how long lines wrap.
- Devices: the "Connect to this server" list shows each paired device with a live status, Connected · Local network or Relay, and a platform badge for iOS, Android, macOS, Windows, or Linux.
- Desktop: the servers list in Settings shows whether each server is reachable right now, and importing a pairing link is the main way to add one.
- Desktop: the header dropdown for instance, usage, and MCP is now built from cards, with usage grouped per provider, a colored status line and ping per host, and MCP servers together in one card.
- Desktop: switching to a host that was already checked happens straight away.
- Devices: a paired phone or desktop is named after the server's hostname, and the name you type when creating the link labels the device in the server's list.
- Chat: Mermaid diagrams have zoom controls (thanks to @c-w-xiaohei).
- Chat/Tools: an expanded file-edit or patch result has a button per file to open the diff or jump to the first changed line in the editor.
- Context Panel: raw message rows keep their token and time columns aligned and no longer show shortened message IDs.
- Desktop: host statuses stay put between openings and no longer flash "Unknown".
- Devices: re-pairing a device or re-entering its password updates the entry it already has instead of adding a duplicate.
- Chat/Thinking: reasoning parts stay separate and in the order they happened, and a collapsed preview no longer ends with empty HTML comments.
- Chat: with Sticky User Header on, a user message no longer floats over earlier messages in a long conversation.
- Chat: a message that timed out or lost the connection after OpenCode accepted it stays in the conversation instead of being marked failed.
- Mobile: files picked from the composer are attached even when the composer switches between its compact and expanded layouts while the picker is open.
- Browser: a link clicked inside an embedded browser tab keeps the tab on the page it navigated to.
- Server: remote clients with non-ASCII characters in a project path can connect again (thanks to @FanFan4204).
- UI: closing the right sidebar after resizing no longer leaves its old width behind.
- **Voice: dictate straight into the composer.** The mic shows a live transcript with a volume meter and timer while you speak. When you stop, you can cancel it, insert the text, or insert and send.
- **Mobile: a compact composer.** While the keyboard is closed the composer shrinks to a single bar, with a round new-session button beside it. Tap the bar to expand it and open the keyboard, or tap the mic to dictate.
- Voice: speech-to-text runs on your machine. Pick a model in Settings → Voice and it downloads on demand: Parakeet for English and 25 European languages, or Whisper for a lighter multilingual option.
- Voice: dictation can use any OpenAI-compatible Whisper endpoint instead of a local model.
- Voice: a shortcut turns dictation on and off, mod+alt+v by default, and you can change it.
- Voice: read-aloud can speak with a local Kokoro voice, in any of 11 English voices.
- Voice: a new "Enable voice input" toggle in Settings → Voice hides the composer mic.
- Mobile: drag the handle above the composer to write in a fullscreen editor. Swipe down to shrink it back or to dismiss the keyboard.
- Mobile: the attachment menu and the new-session project and branch pickers open as bottom sheets with search.
- Mobile: a button at the top of a long conversation loads older history, and it goes away once everything is loaded.
- Voice: read-aloud starts speaking a long reply after about a sentence.
- Voice: the Voice settings page is simpler. One read-aloud toggle owns all the playback options.
- Mobile: the model and agent selectors sit in a row above the message text.
- Mobile: the slash-command, file, agent, skill and snippet autocompletes are sized for touch. They can grow up to the top of the chat, row icons line up, and picking a command keeps the keyboard open.
- Mobile: loading older messages keeps your scroll position steady, on every platform.
- UI: long lists across the app scroll more consistently.
- Desktop: the app uses your own OpenCode install when you have one. The bundled CLI runs only when no OpenCode is installed anywhere on the machine.
- **Desktop: a local instance with a UI password and LAN access opens again.** It no longer gets stuck on "Auth required" and an unreachable-server screen, including when the server is bound to 0.0.0.0.
- Chat: the stop button aborts a session running in a different project or worktree. Those aborts used to do nothing at all.
- Windows: OpenCode installed via npm launches from paths with spaces such as C:\Program Files\nodejs, a binary path pasted with quotes around it works, and the app also looks in the system-wide npm prefix and Scoop's shims.
- Voice: a failed transcription keeps its audio, so you can retry it or accept the partial text.
- Mobile: a phone browser on a password-protected instance shows the password unlock page again, after 1.13.9 broke it.
- Mobile: the branch and worktree picker on the new-session screen lists every worktree right after a cold start.
- Mobile: the GitHub connection is recognized without re-running the connect flow.
- Mobile: returning to the app no longer flickers the session list.
- Mobile: the chat and composer ride the keyboard in one smooth motion, long conversations included.
- Mobile: bottom sheets slide in cleanly while the keyboard dismisses.
- Mobile: the text cursor stays where you left it when the keyboard opens.
- Mobile: starter suggestions on the new-session screen step aside while the keyboard is up.
- Mobile: switching instances clears the previous instance's sessions from the list.
- Mobile: scrolling an autocomplete list no longer bounces the page behind it.
- Mobile: in a phone browser the composer stays above the keyboard on the new-session screen and in the fullscreen editor.
- Mobile: opening the app shows the logo while it connects, with no flash of an unreachable-server error.
- **Mobile: the native iOS and Android apps are in the repo**, ahead of the mobile release. This round polished saved connections, password unlock, QR-code connection scanning, push notifications, iOS widgets, app resume, and native layout details.
- Desktop: the app ships with an OpenCode CLI, and you can point it at your own CLI path in settings instead.
- Desktop: a remote OpenChamber instance can carry custom headers, which is what Cloudflare Access-style setups need. Settings and environment variables still win over them.
- Desktop: a Keep awake setting stops the computer from sleeping while the app is running.
- Desktop: an SSH remote instance with a saved UI password opens straight after the tunnel connects, with no second trip through the unlock screen.
- Chat: late-loading tool content, subagent content and streaming Thinking blocks no longer pull the conversation away from the latest message or fight your scrolling.
- Chat: an embedded JSON example in a message stays text and no longer renders as a generated-result card.
- Sync: a chat wakes up properly after an idle reconnect, instead of leaving sessions stuck as busy.
- VS Code: clearing an optional agent field removes it from the agent config, where it used to save a `null`.
- VS Code: the extension looks past OpenCode desktop app installs when it hunts for the standalone OpenCode CLI.
- **Chat: choose what Enter does mid-reply.** A Follow-up behavior setting in Settings → Chat either steers your message into the agent's current turn or queues it until the turn finishes. It takes over from the old queue-mode toggle (thanks to @bashrusakh).
- Sessions: deleting a worktree group from the sidebar, or permanently deleting an archived session, now takes its subagent sessions with it (thanks to @bashrusakh).
- **Startup: the app is usable right away.** Launching it no longer hangs for around 20 seconds before you can open a session, load a diff, or send a message. GitHub pull request status checks were holding the connection to the server.
- **OpenCode: your own OpenCode is left alone.** When one is already running, whether the TUI, `opencode serve`, or a daemon on port 4096, the app starts its own server. This clears the "OpenChamber could not finish initialization" error and stops the app from opening or closing your OpenCode as it starts and quits.
- OpenCode: to connect to an external OpenCode on purpose, set `OPENCODE_HOST`, `OPENCODE_PORT`, or `OPENCODE_SKIP_START`.
- Sessions: clicking a session inside a worktree group keeps it selected, with no jump to the project's first session while the sidebar catches up (thanks to @bashrusakh).
- Sync: a connected but quiet session, say an agent running a long tool call, stops kicking off a background refresh every 15 seconds (thanks to @tomzx).
- Mobile: the model and agent buttons in the composer are borderless and cleaner, show the provider logo beside the model name, and cut long names with an ellipsis.
- Mobile: in the model picker the thinking-variant control is plain text with a chevron, and each row's controls line up.
- **CLI: `openchamber update` works again.** A missing helper had broken the command.
- Providers: the Add provider form stays open while provider data refreshes or you pick a model in the background. It used to snap back to an existing provider.
- Chat: with tool calls such as Bash and Edit expanded by default, scrolling no longer twitches, and slow scrolling no longer jumps past several messages.
- Mobile: in a long conversation, older messages load before you reach the very top, and fast scrolling no longer leaves blank gaps where messages vanish until you scroll back.
- Mobile: interface labels, including the model and agent selectors, are back to their old size after 1.13.6 shrank them too much.
- Chat: picking a skill you installed from the slash command menu runs the skill and pulls in its content. It used to drop the skill name in as plain text.
- Context Panel: the Browser and Preview tabs stop piling up duplicate auth tokens in their URLs after reloads or navigation.
- CLI: a global web install starts again instead of crashing as soon as a tunnel command loads ngrok.
- CLI: `openchamber update` works again.
- CLI: starting a tunnel works again with managed-local setup prompts, with a port picked for a second instance, and with a server the CLI started for you.
- GitHub: OpenChamber finds the upstream of a forked repository again.
- Models: the model picker keeps your provider groups open and in the order you put them, and Shift+Delete drops a model from recents (thanks to @makeittech).
- Git: a commit message or pull request written from a draft session now comes from the real chat session (thanks to @bashrusakh).
- CLI: startup and status commands check the port before treating a running process as your OpenChamber server.
- **Scheduled Tasks:** the task editor takes Cron expressions. It checks the expression as you type, offers example chips, and shows the next four runs (thanks to @tomzx).
- Chat: click a Mermaid diagram in a message to open it fullscreen and pan or zoom around it.
- Security: a self-hosted instance keeps search engines out with noindex headers and a robots.txt.
- Files: added an optional docked files editor toolbar (thanks to @robertoberto).
- Git/Diff: individual diff hunks can now be staged, unstaged, or discarded directly from the Changes view via `git apply`.
- Git/Diff: added a review flow for starting a review from current changes.
- GitHub: GitHub settings can now use credentials from the `gh` CLI when available (thanks to @tomzx).
- Desktop: you can now open developer tools from the Help menu.
- Sessions: new draft sessions now start from the default model and agent instead of inheriting the previous session's selection, and fall back to OpenCode's own `default_agent` (and its model) when no OpenChamber default is set.
- Startup: the model and agent now appear faster on the initial draft — config loads under the project key up front (no reload when the draft opens) and the agent list is fetched once instead of per consumer.
- Chat/Input: tab-completing a mention no longer changes the selected agent (thanks to @Quat3rnion).
- Chat/Mobile: collapsed tool cards now keep their tool icon visible, and reasoning/tool text no longer clips descenders.
- Sessions: deleting a parent session no longer brings deleted child sessions back into the sidebar (thanks to @panzeyu2013).
- Sessions: switching sessions no longer leaves the chat area blank in some cases (thanks to @panzeyu2013).
- Sessions: fixed a bug where a running session would briefly flicker as idle (in the sidebar, the send/stop button, and the status row) when the app is protected by a password.
- Chat: added `/handoff-review` to open a linked review session for the current workspace changes, with actions to send review feedback and implementation replies between the sessions.
- Sessions: session, folder, project, and worktree rows now have right-click menus for their available actions.
- Settings/Agents: agent prompt and permission edits now stay saved after changes.
- Files: writes are now safer when saving through temporary files (thanks to @nerdosaurus).
- Git: changed-file folders now have a revert action (thanks to @kostazol).
- GitHub: issue and pull-request pickers now use server-side search for larger repositories (thanks to @tomzx).
- Voice: Plan and file preview markdown now include text-to-speech buttons, with a setting for reading selected text or the full document (thanks to @yangyaofei).
- Windows/Startup: WSL OpenCode installs are no longer detected or launched; install OpenCode natively on Windows and configure `opencode.cmd` or `opencode.exe` instead.
- Files: file trees now show directory loading errors with a retry action instead of leaving the folder empty, and slow Git ignore checks no longer block directory listings indefinitely.
- Sessions: recent sessions now stay visible inside project groups, and new or worktree sessions stay in the correct project/worktree group on desktop, mobile, and VS Code.
- Chat: LSP tool calls now show the operation, file, and cursor position more clearly, and JSON tool output can be toggled between formatted and raw views or copied.
- Chat: streaming messages now appear correctly after startup, and activity/status rows show for the active session.
- Chat/UI: sticky user-message headers are now off by default.
- Sessions: session titles update from live session events, and the app now consistently loads all existing OpenCode sessions.
- Settings/OpenCode: OpenCode CLI path, update-notification preference, keyboard shortcuts, and protected-session settings now stay saved after changes.
- UI/Time: the 12-hour/24-hour time preference now applies to chat timestamps, usage reset times, scheduled tasks, tunnels, passkeys, Git history, and pull-request dates.
- Settings/Files: the default file preview setting now lives with the Chat appearance settings and applies immediately to open file tabs.
- Mobile: added a new mobile UI as the default, with an option in Settings to switch back to the previous layout; this is the foundation for the upcoming mobile app and is available to try now.
- Chat: added customizable draft welcome starters from commands and skills, including guided commands for planning, catch-up, debugging, and exploration.
- Chat: assistant answers now have a dialog for starting a new session from that answer.
- Web/Browser: added a Browser feature for opening websites in the web app and sharing annotations with screenshots to agents.
- Web/Remote Instances: added a headless web app mode, and remote instance switching now changes the OpenChamber API endpoint without loading the full remote UI.
- UI/Themes: added JetBrains Light and JetBrains Dark themes, and VS Code chat colors now map more closely to the active editor theme.
- Chat/UI: markdown-rendered user messages now preserve line breaks.
### Fixes
- Chat/Input: queued messages no longer auto-send before the active session is ready, and thinking-variant choices are preserved for generated messages.
- Usage: added a setting to hide prediction rows on usage cards (thanks to @ermanhavuc).
### Improvements
- Notes/Todos: completed todos stay at the end of the list, and the send-to-session dialog has a cleaner model picker (thanks to @kostazol, @rghamilton3).
- Chat/Input: selecting an agent now switches to that agent's configured model, and malformed tool diffs no longer break chat rendering (thanks to @Adrian-Eckardt).
- Sessions: inline session renaming no longer exits immediately after focus changes (thanks to @youfch).
- VSCode: restored live streaming in the extension.
- Settings/Plugins: added a Plugins page for managing opencode plugins, with npm update checks and user/project scopes (thanks to @Quat3rnion).
- Tunnels: added Ngrok as a quick tunnel provider in the CLI and Desktop tunnel settings, with readiness checks (requires Ngrok cli and auth).
- Desktop: added optional password setting in OpenChamber sessions settings for the local Desktop server.
- Multi-Run: new multi-run sessions now appear in the session list immediately, and slash-command prompts are sent to the created run sessions correctly.
- Sessions: session titles can now be renamed inline with a double-click (thanks to @robertoberto).
- Files: file search now shows the number of matches in the editor panel, and directory rows include a quick-add button (thanks to @attackonryan, @tomzx).
- Voice: OpenAI-compatible custom speech providers can now use API keys (thanks to @yangyaofei).
- Chat/Input: pending image attachments now show previews, sent image attachments can be cited from assistant messages, and markdown source mode highlights formatting while you type.
- Chat: queued messages now send to the session they were queued from, even if you switch sessions before they are sent.
- Git: changed files are split into staged and unstaged sections, and Git operations work correctly from repository subdirectories (thanks to @ShogunPanda, @kostazol).
- Settings/Skills: installed skills are discovered more accurately, skill files opened from tool messages now load correctly, and snippet names keep their canonical casing (thanks to @jkker, @isanchez404).
- Mobile/PWA: long-press tooltips work on touch screens, fullscreen panels keep the right header state, deleted or long-named files behave better in file lists, and Android PWA dialogs stay visible (thanks to @kostazol, @lilyzhaun).
- Chat/UI: chats keep following the latest response after final task summaries, activity reasoning no longer flashes before settling, and assistant timestamps stay visible on narrow layouts.
- Chat: added reusable snippets with `#` autocomplete in the composer and a Snippets settings page for global and project snippets with [opencode-snippets](https://github.com/JosXa/opencode-snippets) plugin compatibility.
- Multi-Run: runs can now be split into separate prompt/model groups, and Multi-Run prompts support command, file, agent, and snippet autocomplete (thanks to @tomzx).
- Chat: slash, file, skill, and agent autocomplete selection now stays steadier when using the keyboard or mouse.
- Chat: external links in messages now show favicons with better contrast, and skill links render correctly in user message rendered as markdown.
- Chat: multi-file tool diffs now render safely, including files with mixed line endings.
- Sessions: archived session lists handle large archives better, and sub-session expansion is kept separate between Recent and project sections (thanks to @vhqtvn).
- Sessions: deleting or archiving a parent session now shows a descendant count that matches what will actually be removed (thanks to @vhqtvn).
- Git: reverting a chat message now refreshes the Git changes view afterward.
- Terminal/Mobile: the terminal viewport now stays above the mobile keyboard more consistently (thanks to @Dav1dch).
- Preview: improved embedded preview proxying for absolute same-origin requests and WebSocket URLs, and avoided launching unrelated project actions when no dev-server action is detected.
- Chat/Input: queued messages now auto-send one at a time in FIFO order, and model/agent selections persist across reloads (thanks to @lyxxx708, @chutastic).
- Chat/Performance: virtualized more timeline content, deferred heavy tool output, and improved scroll-to-bottom behavior.
- Git: generalized repository provider handling beyond GitHub and made commit/PR generation more tolerant of JSON wrapped in assistant text.
- Terminal: rejected file paths as terminal working directories, preserved UTF-8 replay chunks, and cleaned up WebSocket/SSE listeners reliably during shutdown and reconnects (thanks to @isanchez404).
- Usage/Reliability: guarded quota percentages and reset timestamps defensively.
- Voice: synced speech recognition settings across devices and let server transcription finish processing audio when voice input stops (thanks to @kostazol).
- Chat/Permissions: restored `@agent` mentions in sent messages and parent-session auto-accept for child-session permissions.
- Desktop/Mini Chat: improved Mini Chat session controls with current context usage in the compact header and a single header action that opens either the active session or current draft in Mini Chat.
- Git: deduplicated lightweight and full status refreshes separately, preventing stale or mismatched Git updates during background polling (thanks to @isanchez404).
- Files: ignored stale file loads, guarded pending navigation, and stopped switching files when save fails.
- Desktop/Electron: added Mini Chat windows for focused conversations without the full workspace shell, including session/draft handoff back to the main window, always-on-top pinning, and quick access from the header, session list, command palette, and keyboard shortcuts.
- Reliability/Sync: reduced stale and duplicate live-state updates across request arrays, retry metadata, streaming indicators, and session status events, cutting unnecessary rerenders and stuck activity states during long-running chats (thanks to @isanchez404).
- Git/Terminal/Desktop: fixed sandbox database loading in ESM, forwarded lightweight Git status mode across runtimes, preserved Electron SSH desktop hosts when saving instances, and made terminal UTF-8 locale fallbacks platform-aware (thanks to @isanchez404, @liyiopener).
- UI/Reliability: added smaller polish fixes for mobile Settings Escape handling, Multirun model limits, text-selection cleanup, and upstream event-stream cancellation (thanks to @isanchez404).
- Terminal: improved Android tablet keyboard handling, including control-key shortcuts, and kept app shortcuts from stealing focus while typing in the terminal (thanks to @Dav1dch).
- Git: improved sync safety and feedback with latest remote refs, clearer progress banners, less flicker during refresh, cleaner header controls, and better unavailable pull-request states.
- Terminal: restored focus back to terminal input after Ghostty element blur events.
- Startup/Reliability: configured OpenCode CLI paths are now validated before managed startup, with clearer errors for missing, non-executable, or app-bundle paths.
- Preview: added an embedded dev-server Preview pane for loopback apps, with authenticated proxying, Vite/HMR support, same-origin API request handling, and safer local dev-server shutdown (thanks to @wpbiggs).
- Preview: added preview console capture, DOM element inspection, annotation context, and Electron screenshot attachments.
- Projects/Terminal: added Auto-discover for local dev servers, background terminal startup, action-linked Preview reopen controls, and cleaner terminal tab styling (thanks to @wpbiggs).
- Settings/Behavior: added a dedicated Behavior page with global `AGENTS.md` configuration and response style presets.
- VSCode/Chat: added the currently open editor file to chat context (thanks to @daveotero).
- Onboarding/Updates/Mobile: added OpenCode CLI auto-detection during onboarding, cross-checks update prompts against npm, and improved iPad/tablet controls for fewer false update notices and smooth touch use (thanks to @IslamNofl).
- UI/Settings: improved settings scrolling, empty states, and button/overlay polish (thanks to @Yabuku-xD).
- GitHub/Git: improved fork-aware issue and pull-request listing, PR status handling, startup loading feedback, remote MCP headers, and long model ID handling (thanks to @corrm, @ricautomation, @yart).
- Chat/UI: added a wide layout option, steady scroll position across sessions and generated prompts, less flicker during streaming, and safer rendering for malformed message parts (thanks to @jwcrystal, @pasta-paul).
- Reliability/Streaming: reconnects now recover immediately after OS wake-from-sleep, long agent sessions avoid streaming hangs, concurrent sessions sharing the same provider are throttled more safely, and model metadata refreshes after OpenCode restarts (thanks to @jwcrystal, @pasta-paul, @Yabuku-xD).
- Sessions/Sidebar: fixed stale session, folder, project, and worktree state after mutations, and polished pinned-session indicators (thanks to @corrm, @Yabuku-xD).
- Reliability/Startup: hardened managed OpenCode startup, preserved shell PATH reliably, ignored stale downgrade update prompts, and improved stream/proxy recovery with heartbeat support.
- UI/Localization: added a localization foundation with translated interface strings for Spanish, Brazilian Portuguese, Ukrainian, and Simplified Chinese.
- Settings/Appearance: added selectable interface and code fonts with 10 choices each.
- Files/Editor: added an "Open files in preview mode" setting and improved multi-file edit/diff safety (thanks to @daveotero).
- Desktop/Web/Mobile: improved Electron update restart behavior, PWA service-worker notifications, mobile keyboard handling, and the Add Project panel flow (thanks to @Jovines, @vhqtvn).
- Chat/Mobile: improved mention and autocomplete behavior with complete results, clearer active-tab scoping, and less context-switching while drafting prompts.
- Chat/Tasks: todo list progress now updates live as task status changes, and task/model status hints are steady during active runs (thanks to @Yabuku-xD).
- Chat/Commands: added `/summary` slash command for a non-destructive session summary - optional topic hint after the command focuses the output, and the prompt is customizable under Settings: Magic Prompts.
- Reliability/Desktop: improved live event-stream recovery after transient stalls, wait briefly before failing chat actions during reconnects, and persist Electron server logs for easier disconnect debugging.
- Desktop/macOS: System color mode now tracks OS theme changes, traffic-light controls stay visible after dock restore, and update restart/changelog handling is more reliable.
- Desktop: added an Electron desktop runtime in parallel with the current Tauri app, with Electron planned to become the default path in an upcoming release.
- Plans/Notes/Todos: added editable project plans from assistant messages, external plan upload, configurable planning magic prompts, and quicker note/todo handoff into new sessions or worktrees.
- Settings/MCP: improved MCP auth flow with better remote-config support and clearer diagnostics, and aligned config resolution with OpenCode behavior (thanks to @daveotero, @cyan).
- Reliability/Chat: hardened bootstrap and stream-connection recovery, preserved session/connect state, and reduced streaming UI churn.
- Web/PWA: added install orientation controls and fixed loopback-origin handling for web push notifications in local setups (thanks to @vhqtvn, @yart).
- Reliability/Streaming: switched live message events to a WebSocket-first transport with SSE fallback, added response compression, and hardened proxy/compression handling (thanks to @geekifan, @jwcrystal).
- Sessions/Scheduled Tasks: added scheduled task creation and management with locale-aware scheduling.
- Files: added a full Go to Line workflow (toolbar + shortcut + dialog) and a new Copy Relative Path action (thanks to @coldbrow).
- Chat/Export: added export session as Markdown and improved empty-state/export behavior (thanks to @coldbrow).
- Desktop: added quick open and a LAN access toggle, plus safer quit behavior around scheduled tasks (thanks to @An-jinu).
- Chat/Requests: restored blocking request visibility in sub-sessions, scoped auto-approve to the active session tree, and reduced noisy auto-approved notifications during multi-session work.
- Voice: added OpenAI-compatible custom server support for both text-to-speech and speech-to-text, including configurable TTS model/pitch/volume and stricter custom URL validation for safer setup (thanks to @ablepharus).
- Sync/Performance: optimized multi-session streaming with per-directory queues, event coalescing, and parts-gap recovery to keep live updates smooth under heavy activity (thanks to @jwcrystal).
- Sessions/UI: kept active sessions visible in Recent, auto-expanded parent groups when opening subagent sessions, and hid empty archived/folder sections (thanks to @jwcrystal).
- Desktop/Startup: delivered a more guided first-launch and smart recovery flow, plus startup and remote-window interaction fixes to reduce early-session friction (thanks to @jwcrystal).
- Usage: added Zhipu AI Coding Plan tracking and restored model-variant compatibility with older OpenCode runtimes (thanks to @cainiao1992, @Chi-square-test).
- Chat/Tool Output: LSP diagnostics now render directly in tool output (thanks to @yulia-ivashko).
- Usage: refreshed MiniMax CN coding-plan quota data (thanks to @nzlov).
### Fixes
- Settings/Magic Prompts: added a dedicated Magic Prompts page with editable templates for commit/PR generation, PR and issue reviews, failed-check/comment analysis, and merge/cherry-pick conflict resolution.
- Reliability/Streaming: improved reconnect, retry, and directory-aware event routing to reduce stuck session/subagent states after transient disconnects (thanks to @jwcrystal, @daveotero).
- Chat/JSON: added an interactive JSON tree viewer with collapse/expand controls and richer color cues for easier inspection of large structured outputs (thanks to @nguyenngothuong).
### Improvements
- Security/Chat: user messages now escape raw HTML by default (thanks to @kalac2232).
- Desktop/Performance: reduced Tauri shell CPU/GPU overhead during longer sessions.
- Sessions/Drafts: draft chat config now stays synced with the selected draft target directory.
- Desktop/Settings: window vibrancy now correctly controls macOS window transparency, and settings copy now clarifies when full transparency changes take effect.
- Worktrees/Multi-Run: added instant draft-first worktree creation and redesigned the multi-run launcher with a cleaner, faster flow for parallel runs.
- CLI/Server: added `--foreground` for process-manager deployments, made managed server hostname configurable, and added an explicit `--host` option with safer localhost defaults (thanks to @colinmollenhour, @rapidrabbit76, @yulia-ivashko).
### Improvements
- Chat/Performance: rebuilt live session sync and streaming updates to cut render churn, reduce CPU spikes, and keep long-running chats smooth and more stable across runtimes.
- VSCode/UI: polished the extension chat and sidebar with improved spacing, tooltips, a resizable sessions pane, and file-to-chat mention flows from Explorer.
- Models/Providers: improved custom provider model metadata loading and caching (thanks to @ZeppLu).
- Docker/Deployments: improved container defaults, including UID 1000 user behavior, non-fatal SSH key generation, and better localhost detection in container networking (thanks to @yulia-ivashko).
- Settings/MCP: adding MCP servers now consistently respects user vs project scope, preventing user-scope entries from being written into project config files.
- UI/Navigation: delivered a major sidebar redesign with clearer hierarchy, unified action patterns, and improved session organization (thanks to @yulia-ivashko).
- Chat: reduced streaming CPU usage and background churn with steady turn rendering, debounced updates, and less storage thrash during long runs.
- Panels/UI: softened panel resize affordances and tightened service dropdown/layout spacing for a cleaner, less distracting workspace.
- CLI: hardened entrypoint detection across direct, symlinked, and shim-based launches to keep startup behavior consistent across package managers (thanks to @shekohex).
- CLI: fixed a startup regression in global npm/bun installs where wrapper or symlinked `openchamber` entrypoints could exit without output on commands like `--version` or `status`.
- Windows/Web: daemon startup and Git operations no longer flash extra console windows (thanks to @SergioChan).
- Chat/Settings: added richer chat render controls, including sorted/live behavior, compact live Activity previews, and options to keep Bash/Edit outputs open by default.
- Tunnel/CLI: rebuilt tunnel workflows around clearer managed modes and provider-aware lifecycle commands, with safer startup checks, improved diagnostics, and cleaner CLI output for everyday remote access (thanks to @yulia-ivashko).
- Chat: completed a turn-based rendering pipeline that keeps streaming, activity rows, and tool progress more stable in long runs, with smooth auto-follow and fewer jumpy updates.
- Projects/Desktop: project action inputs now submit with Enter, and Desktop settings now include a spell-check toggle for writing comfort (thanks to @DocterZed).
- Chat: in-progress tools now appear immediately and stay live in collapsed activity view (thanks to @nelsonPires5).
- Chat: improved long user-message behavior in sticky mode with bounded height, internal scrolling, and cleaner action hit targets.
- Chat/Files: improved `@` file discovery and mention behavior with project-scoped search and more consistent matching.
- Worktrees/GitHub: streamlined worktree creation with a unified flow for branches, issues, and PR-linked sessions, including cleaner validation and faster branch loading.
- Files/Desktop: improved `Open In` actions from file views/editors, including app selection behavior and tighter integration for opening focused files (thanks to @yulia-ivashko).
- Chat: improved message readability with cleaner tool/reasoning rendering and less noisy activity timing in busy conversations (thanks to @nelsonPires5).
- Web/Auth: fixed an issue where non-tunnel browser sessions could incorrectly show a tunnel-only lock screen; normal auth flow now appears unless a tunnel is actually active.
- UI: added an expandable project rail with project names, a settings toggle, and saved expansion state for easier navigation in multi-project setups (thanks to @nguyenngothuong).
- Files: markdown preview now handles frontmatter more cleanly.
- Chat: improved long-session performance with virtualized message rendering, smooth scrolling, and more stable behavior in large histories (thanks to @shekohex).
- Notifications: improved child-session notification detection to reduce missed or misclassified subtask updates (thanks to @Jovines).
- Reliability: improved Windows compatibility across git status checks, OpenCode startup, path normalization, and session merge behavior (thanks to @mmereu).
- Chat Activity: improved Structured Output tool rendering with dedicated title/icon, clearer result descriptions, and more reliable detailed expansion defaults.
- Notifications/Voice: moved utility model controls into AI Summarization as a Zen-only Summarization Model setting.
- Sessions: added custom folders to group chat sessions, with move/rename/delete flows and persisted collapse state per project (thanks to @nguyenngothuong).
- Notifications: improved agent progress notifications and permission handling to reduce noisy prompts during active runs (thanks to @nguyenngothuong).
- Reliability: refactored OpenCode config/auth integration into domain modules for steady provider auth and command loading flows (thanks to @nelsonPires5).
- Skills: upgraded editing/install UX with better code editing, syntax-aware related files, and clearer location targeting across user/project .opencode and .agents scopes.
- Maintenance: removed deprecated GitHub Actions cloud runtime assets and docs to reduce setup confusion (thanks to @yulia-ivashko).
- Usage: when using remaining-quota mode, usage markers now invert direction to better match how remaining capacity is interpreted (thanks to @gsxdsm).
- Sessions: fixed a sidebar issue where draft input could carry over when switching projects.
- Chat: improved quick navigation from the sessions list by adding double-click to jump into chat and auto-focus the draft input; also fixed mobile session return behavior (thanks to @gsxdsm).
- Notifications: stopped firing completion notifications for comment draft edits to reduce noisy alerts during review-heavy sessions (thanks to @nelsonPires5).
- Settings: added confirmation dialogs for destructive delete/reset actions to prevent accidental data loss.
- Reliability: fixed message loading edge cases, stabilized voice-mode persistence across restarts, and improved update flow behavior across platforms.
- Desktop: added an `Open In` button to open the current workspace in Finder, Terminal, and supported editors with remembered app preference (thanks to @yulia-ivashko).
- Git: added push/pull with remote selection, plus in-app rebase/merge flows with improved remote inference and clearer conflict handling (thanks to @gsxdsm).
- Files: improved editing with breadcrumbs, better draft handling, smooth editor interactions, and more reliable directory navigation from file context (thanks to @nelsonPires5).
- Sessions: improved status behavior, faster mobile session switching with running/unread indicators, and clearer worktree labels when branch name differs (thanks to @Jovines, @gsxdsm).
- Sessions: you can now rename projects directly from the sidebar, and issue/PR pickers are easier to scan when starting from GitHub context (thanks to @shekohex, @gsxdsm).
- Git: improved macOS SSH agent support for smooth private-repo auth (thanks to @shekohex).
### Improvements
- Desktop: switch between local and remote OpenChamber instances, plus a thinner runtime.
- Mobile: split Agent/Model controls and a quick commands button with autocomplete (Commands/Agents/Files) for easier input (thanks to @Jovines, @gsxdsm).
- Navigation: URLs now sync the active session, tab, settings, and diff state for shareable links and reliable back/forward (thanks to @TaylorBeeston).
- Settings: agent and command overrides now prefer plural directories while still honoring legacy singular folders.
- Skills: installs now target plural directories while still recognizing legacy singular folders.
- VS Code extension: added Agent Manager panel to run the same prompt across up to 5 models in parallel (thanks to @wienans).
- Added permission prompt UI for tools configured with "ask" in opencode.json, showing requested patterns and "Always Allow" options (thanks to @aptdnfapt).
- Added "Open subAgent session" button on task tool outputs to quickly navigate to child sessions (thanks to @aptdnfapt).
- Added timeline dialog (`/timeline` command or Cmd/Ctrl+T) for navigating, reverting, and forking from any point in the conversation (thanks to @aptdnfapt).
- Added `/undo` and `/redo` commands for reverting and restoring messages in a session (thanks to @aptdnfapt).
- Added fork button on user messages to create a new session from any point (thanks to @aptdnfapt).
- Terminal: improved terminal performance and stability by switching to the Ghostty-based terminal renderer, while keeping the existing terminal UX and per-directory sessions.
- Terminal: fixed several issues with terminal session restore and rendering under heavy output, including switching directories and long-running TUI apps.
- Git view: improved branch publishing by detecting unpublished commits and automatically setting the upstream on first push.
- VS Code extension: default location is now the right secondary sidebar in VS Code, and the left activity bar in Cursor/Windsurf; navigation moved into the title bar (thanks to @wienans).
- Sidebar: improved readability for sticky headers with a dynamic background.
- Mobile: improved keyboard/input bar behavior (including Android fixes and better keyboard avoidance) and added an offset setting for curved-screen devices (thanks to @auroraflux).
- Chat: now shows clearer error messages when agent messages fail.
- Added skills management to settings with the ability to create, edit, and delete skills (make sure you have the latest OpenCode version for skills support).