contribution/compass
anomalyco/opencode

OpenCode

602 signals · 626 observation events

Open repository ↗

The open source coding agent.

197.0K stars25.3K forksTypeScriptMITkeyword: OpenCode
PROJECT NEWS

Release, roadmap, and discussion

All news →
anomalyco/opencode

OpenCode

Coding-Agent Infrastructure
Latest stable

v1.18.18

v1.18.18
  • Core
  • Bugfixes
  • Select the Kimi system prompt correctly for official Moonshot and Kimi providers
  • Fix xhigh reasoning effort for xai models
Original release notes ↗

Publicly indicated next

  • No public prerelease or open milestone found.

Prereleases and milestones indicate public plans; they are not delivery commitments.

Observation trail

  1. discoveredinitial snapshot
  2. changedupdatedAt, metrics, assignees
  3. changedupdatedAt, metrics
  4. discoveredinitial snapshot
  5. discoveredinitial snapshot
  6. discoveredinitial snapshot
  7. discoveredinitial snapshot
  8. changedtext, updatedAt
  9. discoveredinitial snapshot
  10. discoveredinitial snapshot
  11. changedupdatedAt, metrics, state
  12. discoveredinitial snapshot
  13. changedupdatedAt
  14. discoveredinitial snapshot
  15. discoveredinitial snapshot
  16. changedtitle, text, updatedAt
  17. changedmetrics
  18. changedmetrics
  19. changedmetrics
  20. changedmetrics
  21. changedmetrics
  22. changedmetrics
  23. changedmetrics
  24. changedmetrics
  25. changedmetrics
  26. changedmetrics
  27. changedmetrics
  28. changedmetrics
  29. changedmetrics
  30. changedtext, updatedAt, state
50 shown
pull request

refactor(tui): use command IDs for v2 keybinds

## Summary - define V2 keybinds directly by canonical command ID while keeping the legacy plugin shim on V1 - migrate fresh and existing CLI config keybinds with canonical precedence, duplicate-value preservation, JSONC preservation, and serialized config access - wire app, composer, diff viewer, dialog, and mini commands through resolved V2 bindings - prese

importance 0@kommanderOriginal evidence ↗
pull request

fix(core): persist selected console organization

## Summary - consume the organization selected during Console device approval - persist the returned `org_id` instead of choosing the alphabetically first organization - fail login if the selected organization is no longer available Depends on anomalyco/opencode-console#953. Fixes #37161. ## Tests - `bun typecheck` (`packages/core`) - `bun test test/plugin/p

importance 0@opencode-agent[bot]closedcontributorOriginal evidence ↗
pull request

fix(session): edge-trigger build-switch reminder instead of scanning full session history

### Issue for this PR Closes #38066 ### Type of change - [x] Bug fix ### What does this PR do? `SessionReminders.apply` (packages/opencode/src/session/reminders.ts) decides whether to inject the "operational mode has changed from plan to build" reminder using: ```ts const wasPlan = input.messages.some((msg) => msg.info.role === "assistant" && msg.info.agent

importance 0@Duo-HuangopenOriginal evidence ↗
pull request

fix: keep prompt input inert during Safari IME composition

### Issue for this PR Closes #38674 ### Type of change - [x] Bug fix - [ ] New feature - [ ] Refactor / code improvement - [ ] Documentation ### What does this PR do? In Safari, typing CJK text in the web app prompt input misbehaves in two ways: the IME composition gets aborted mid-input, and the Enter that confirms a candidate submits the message with the r

importance 0@powoctopenOriginal evidence ↗
pull request

feat(app): add subagents tab to the session side panel

### Issue for this PR Closes #37267 ### Type of change - [ ] Bug fix - [x] New feature - [ ] Refactor / code improvement - [ ] Documentation ### What does this PR do? Adds a "Subagents" tab to the session side panel, so subagent activity can be followed without it being buried by the main agent's log stream, the problem described in #37267. The tab lists eac

importance 0@sdpfigueiredoopenOriginal evidence ↗
pull request

fix(tui): show N/A spent for models without pricing

### Issue for this PR Closes #39869. Related to #17223 (runtime cost tracking for custom providers — this PR addresses only the misleading display for unpriced models, not the runtime cost calculation or usage handling). ### Type of change - [x] Bug fix - [ ] New feature - [ ] Refactor / code improvement - [ ] Documentation ### What does this PR do? In the T

importance 0@zbcodingopenOriginal evidence ↗
pull request

feat(opencode): Allow per-MCP-server trust configuration

### Issue for this PR Closes #40111 Also partially addresses https://github.com/anomalyco/opencode/issues/23506 Rather than disabling verification globally, fingerprint pinning achieves the same goal — trusting a specific self-signed cert — without insecure: true. caFile handles private CAs cleanly without a blanket bypass. https://github.com/anomalyco/openc

importance 0@karupopenOriginal evidence ↗
pull request

feat(app): add VS Code Insiders and Antigravity to Open in options

### Issue for this PR No issue filed — small QoL addition to an existing menu. ### Type of change - [ ] Bug fix - [x] New feature - [ ] Refactor / code improvement - [ ] Documentation ### What does this PR do? The session-header "Open options" menu (the "Open in" dropdown next to the project path) is a hardcoded per-OS list of editors you can open the curren

importance 0@mradwankhalil-commitsopenOriginal evidence ↗
pull request

feat(lsp): allow per-server diagnostics wait timeouts

### Issue for this PR Closes #41218 ### Type of change - [x] Bug fix - [ ] New feature - [ ] Refactor / code improvement - [ ] Documentation ### What does this PR do? `DIAGNOSTICS_DOCUMENT_WAIT_TIMEOUT_MS` (5s) and `DIAGNOSTICS_FULL_WAIT_TIMEOUT_MS` (10s) in `lsp/client.ts` are hardcoded. If a language server takes longer than that to produce diagnostics, th

importance 0@Yagi-MichaelclosedOriginal evidence ↗
pull request

feat(tui): label worktree session tabs

## What Show a worktree session's branch on the existing project detail row in vertical tabs. - worktree tabs render as `project ⎇ branch` - main-checkout tabs retain the existing project-only label - missing location or VCS data falls back to the project-only label - long detail rows fade at the right edge without an ellipsis ## How - `session-tabs.tsx` com

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

feat(desktop): proactive RAM memory management

### Issue for this PR Closes # ### Type of change - [ ] Bug fix - [x] New feature - [ ] Refactor / code improvement - [ ] Documentation ### What does this PR do? Adds proactive RAM management to the desktop Electron app. A monitor polls `app.getAppMetrics()` every 30s and runs GC (main process, sidecar, renderers) when the peak working set crosses 1.8 GiB. `

importance 0@mo-dev-studio-egopenOriginal evidence ↗
pull request

fix(opencode): refresh task resume permissions

### Issue for this PR Closes #41681 ### Type of change - [x] Bug fix - [ ] New feature - [ ] Refactor / code improvement - [ ] Documentation ### What does this PR do? When a queued `task_id` resume starts under a different subagent, atomically refresh its stored agent and Task-owned permission rules before prompting it. Rules derived for the previous agent a

importance 0@Nath-VikkyopenOriginal evidence ↗
pull request

fix(desktop): label windows by active tab

### Issue for this PR Closes #40490 ### Type of change - [x] Bug fix - [ ] New feature - [ ] Refactor / code improvement - [ ] Documentation ### What does this PR do? Updates desktop window titles from the active tab so macOS Window menu entries are distinguishable. The title uses `<tab name> — <directory name>`, falls back to `OpenCode` when no tab is activ

importance 0@maxipesfixopenOriginal evidence ↗
pull request

refactor(tui): use command IDs for v2 keybinds

## Summary - use canonical command IDs for V2 TUI keybind configuration and migration - preserve queued-prompt and newline behavior added on the current V2 base - cover migrated bindings, component shortcuts, config persistence, and diff-viewer behavior ## Validation - `bun typecheck` in `packages/cli` - `bun typecheck` in `packages/tui` - full `packages/tui

importance 0@opencode-agent[bot]contributorOriginal evidence ↗
pull request

feat(server): workerd runtime profile and SDK workerd entrypoint

## What Adds a **workerd runtime profile** so an OpenCode server can boot inside a Cloudflare Durable Object, plus the SDK entrypoint and a CI guard that proves it in a real isolate. The destination is *one OpenCode server per Durable Object* — a Slack bot where each thread is a DO hosting a full server, with OpenCode's database being the DO's own SQLite and

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

fix(opencode): isolate workspace config state

### Issue for this PR Closes #41916 ### Type of change - [x] Bug fix - [ ] New feature - [ ] Refactor / code improvement - [ ] Documentation ### What does this PR do? Nested values merged from the global config cache could retain shared references. A plugin config hook mutating one workspace could therefore leak MCP configuration into workspaces loaded later

importance 0@Nath-VikkyopenOriginal evidence ↗
pull request

fix(cli): harden managed service replacement

## What Prevent managed-service restart storms when a running TUI outlives an automatic CLI update, and harden lifecycle recovery so clients never terminate a process from registration data alone. This fixes the incident where a `next-17271` TUI remained alive after the installed package became `next-17272`. The old process repeatedly treated each `17272` se

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

fix(core): return content-only Code Mode results

## Summary - promote text content into the Code Mode return value when a tool has no declared structured output - keep declared structured outputs unchanged and continue collecting file content separately - cover content-only Promise plugin and MCP tool execution through Code Mode Fixes #41949 ## Testing - `bun test test/plugin/promise.test.ts test/mcp.test.

importance 0@opencode-agent[bot]contributorOriginal evidence ↗
pull request

docs(zh-cn): sync agents page with latest English version

### Issue for this PR Closes #42220 ### Type of change - [ ] Bug fix - [ ] New feature - [ ] Refactor / code improvement - [x] Documentation ### What does this PR do? Two related zh-cn documentation improvements: 1. **Terminology unification**: The zh-cn docs used 代理 for "Agent" while the UI (zh.ts) uses 智能体. Replaced 代理 with 智能体 across 19 files (docs + i18n

importance 0@lianginxopenOriginal evidence ↗
pull request

fix(opencode): validate upgrade requests

## Summary - require `application/json` for `POST /global/upgrade`, forcing browser cross-origin calls through CORS preflight - reject upgrade targets that are not valid semantic versions - cover JSON, content-type, and semver behavior with focused HTTP API tests ## Checks - `bun test test/server/httpapi-global.test.ts` - `bun run generate` from `packages/cl

importance 0@opencode-agent[bot]contributorOriginal evidence ↗
pull request

feat(core): defer active session moves

## Summary - admit session moves durably through `session_pending` instead of interrupting active execution - apply deferred moves after execution settlement and route successor work through the new location - preserve latest-wins replacement, startup recovery, and exact admission consumption semantics - regenerate public clients and narrow TUI pending-input

importance 0@thdxrclosedOriginal evidence ↗
pull request

feat(github): allow configured bots to trigger actions

### Issue for this PR Closes #7103 ### Type of change - [ ] Bug fix - [x] New feature - [ ] Refactor / code improvement - [x] Documentation ### What does this PR do? Adds an `allowed_bots` input to the GitHub Action so trusted GitHub App bots can trigger OpenCode workflows. Bots remain denied by default; callers can allow specific comma-separated bot usernam

importance 0@dan-turneropenOriginal evidence ↗
pull request

feat(tui): add session tab context menu

## What Right-clicking a session tab now opens a borderless context menu beneath the cursor with: - New tab - Rename - Close Right-clicking the new-session control shows the valid New tab action. The menu works in both horizontal and vertical tab layouts, clamps to the terminal bounds, and keeps existing left-click selection, close, and drag behavior unchang

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

refactor(core): spawn stdio MCP servers through the location environment

## What Route local/stdio MCP server processes through each location's `Environment.spawner` instead of the MCP SDK's host-bound `StdioClientTransport`. MCP is already location-scoped, but stdio servers were host-ambient. A workspace-backed location could run Shell and Ripgrep inside its sandbox while its MCP servers still ran on the OpenCode host. After thi

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

test: stabilize Windows integration coverage

## Summary - delete the wall-clock-driven tab pulse rendering test - give the canonical-worktree snapshot test enough time for Git setup on Windows - give shell permission/progress integration tests realistic Windows CI timeouts - increase the shell command timeout assertion window so process startup cannot race the expected output ## Why Recent Windows CI r

importance 0@opencode-agent[bot]closedcontributorOriginal evidence ↗
pull request

fix: preserve trailing blank line in apply_patch

### Issue for this PR Fixes #42081 ### Type of change - [x] Bug fix - [ ] New feature - [ ] Refactor / code improvement - [ ] Documentation ### What does this PR do? `apply_patch` silently deletes the final blank line of any file ending with `\n\n`, even when the patch doesn't touch it (#42081). Both patch implementations pop the sentinel `""` that `split("\

importance 0@codeAnqiang-maopenOriginal evidence ↗
pull request

docs(go): clarify DeepSeek ZDR coverage

## Summary - mark the zero-day retention entries for both DeepSeek V4 models with an asterisk - clarify that the monthly ZDR agreement applies to DeepSeek generally, not only DeepSeek V4 Flash ## Checks - `git diff --check` - Web build not run: this worktree does not have the Astro executable installed Requested by: @thdxr (Dax Raad via Slack)

importance 0@opencode-agent[bot]closedcontributorOriginal evidence ↗
pull request

fix(tui): stabilize repeated open menu

## What Keep the populated Control-O session/project picker stable when it opens, reopens, or receives the shortcut repeatedly. ## Before / After **Before:** Opening reset the shared dialog to medium width, mounted a partial picker from local state, then resized it and inserted projects and cross-project recents as two asynchronous requests completed. This p

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

fix(desktop): restrict application launches

## Summary - allow only the applications exposed by the Open in menu to cross the desktop IPC boundary - resolve Windows executable paths in the main process after validating the requested application - fall back to the system file opener for unsupported or unavailable applications - add platform-specific allowlist coverage ## Why The renderer previously sup

importance 0@opencode-agent[bot]opencontributorOriginal evidence ↗
pull request

fix(tui): consolidate developer tools controls

## What Use **Developer tools** as the user-facing command name and keep turn token usage controls inside the developer tools bar instead of exposing them as a separate command. Clickable sections in the developer tools bar now use the theme's brighter hover background so they read as interactive before selection. ## Before / After **Before:** The command pa

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

fix(tui): restore tab marquee hover

## What Restore session tab marquee behavior when hover reveals the close control, and prevent a previous tab's marquee from remaining active after the pointer moves to a title that fits. ## Before / After **Before** A title could fit the resting tab width but become clipped when hover reserved cells for the close control. Overflow eligibility still used the

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

fix(tui): keep interrupt confirmation visible

## What Keep the full V2 TUI's armed interrupt confirmation visible after the first Escape. ## Before / After **Before:** A running session showed `esc interrupt`. The first Escape correctly armed the two-press confirmation without calling the interrupt API, but the footer used `theme.background.action.primary.default` as a foreground color. In the reproduce

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

fix(tui): move debug overlay into developer tools

## What Move the OpenTUI renderer debug overlay behind the TUI's Developer Tools surface. The Developer Tools **UI** pane now exposes a `Debug overlay` checkbox that stays synchronized with the renderer. The existing `app.debug` command remains available to explicit keybindings, but is no longer globally discoverable in the command palette. ## Before / After

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

fix(core): preserve Copilot fallback provider

## Summary - rewrite models.dev GitHub Copilot fallback models to use the bundled Copilot provider package - keep the rewrite inside the GitHub Copilot catalog transform - preserve account-specific base URL overrides when live model synchronization is unavailable - cover fallback package rewriting with a provider plugin test ## Verification - `bun test test/

importance 0@opencode-agent[bot]closedcontributorOriginal evidence ↗
pull request

fix(core): adopt pre-project sessions on directory resolution

## What Keep sessions created before Git initialization visible after their directory acquires a stable project identity. ## Before / After **Before:** A session created in a non-Git directory belonged to the `global` project. After `git init`, project resolution assigned the directory a real project ID, but the session row kept its stale `global` ownership,

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

fix(console): add cors to zen responses

### Issue for this PR Closes #41224 ### Type of change - [x] Bug fix - [ ] New feature - [ ] Refactor / code improvement - [ ] Documentation ### What does this PR do? Adds CORS headers to actual Zen model-list responses, not only OPTIONS preflight responses. The shared helper is also used by the main Zen chat handler response headers so normal GET/POST respo

importance 0@zcxGGmuopenOriginal evidence ↗
pull request

fix(tui): render Mermaid rich labels compactly

## What Fixes terminal Mermaid flowcharts that use quoted multiline labels and inline italics. Valid labels now keep their punctuation, split on `<br/>`, render `<i>` / `<em>` as terminal italics, and reserve horizontal room only where that label is routed. ## Before / After **Before:** the flowchart parser measured edge operators against a masked statement

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

chore: add neriousy to team members

## Summary - Add `neriousy` to `.github/TEAM_MEMBERS`. - Add `neriousy` to the core team assignment pool used by the GitHub issue triage agent. - Let GitHub automations recognize him as a core team member and assign matching issues to him. ## Verification - Confirmed the login appears exactly once in the shared roster. - Confirmed the core triage pool contai

importance 0@opencode-agent[bot]closedcontributorOriginal evidence ↗
pull request

chore: add neriousy to team members

## Summary - Add `neriousy` to `.github/TEAM_MEMBERS`. - Add `neriousy` to the core team assignment pool used by the GitHub issue triage agent. - Let GitHub automations recognize him as a core team member and assign matching issues to him. ## Verification - Confirmed the login appears exactly once in the shared roster. - Confirmed the core triage pool contai

importance 0@opencode-agent[bot]closedcontributorOriginal evidence ↗
pull request

fix(tui): show worktree names in session list

## Summary - fix worktree names in the TUI session list dialog - remove the session subpath before deriving the worktree name - show linked worktree names instead of the nested session directory or project fallback - truncate worktree labels to 25 terminal cells ## Verification - reproduced with OpenCode Drive using two linked worktrees with sessions under `

importance 0@jlongsterclosedcontributorOriginal evidence ↗
pull request

feat(core): add generic session inbox

## Summary - replace the input-specific pending model with a generic per-session inbox for user, synthetic, compaction, and move items - add durable inbox lifecycle events, generic steer/queue scheduling, and atomic delivery batches for compaction and move - add the pending-only session_inbox table and expose inbox list, cancel, steer, and queue APIs across

importance 0@thdxrclosedOriginal evidence ↗
pull request

feat(tui): show token throughput

## Summary - record the first visible text timestamp and provider generation completion timestamp for each V2 assistant step - calculate per-request output speed as `(visible output tokens - 1) / (last token - first token)` - show `tok/s` for completed `stop` and `length` responses in assistant footers and turn-token diagnostics - reject tool-call, error, bu

importance 0@opencode-agent[bot]opencontributorOriginal evidence ↗
pull request

feat(server): typed no-execution-plane environment for workerd profile

## What Complete the workerd profile's capability story after #41918 and #42076: a bare location now has a typed no-execution-plane process spawner instead of profile-level process stubs. Shell and stdio MCP route through the location `Environment`. Bare locations fail each operation with a clear location-specific error; attaching a workspace driver automati

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

fix(session): show interrupt progress immediately

## What Make interrupt actions acknowledge immediately in the app and TUI while OpenCode finishes server-side cancellation and durable settlement. The stop control now enters a pending state as soon as the user interrupts, disables duplicate requests, and resets when the session becomes idle or the interrupt request fails. The TUI footer similarly changes fr

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

fix(core): validate tool definitions on registration

## Summary - validate model-facing tool definitions before mutating the Location registry - return a `Tool.RegistrationError` that names the malformed tool and includes the schema failure - preserve atomic registration batches so one invalid plugin tool cannot poison subsequent model requests Fixes #42026 ## Tests - `cd packages/core && bun test ./test/sessi

importance 0@opencode-agent[bot]closedcontributorOriginal evidence ↗
pull request

refactor(codemode): route transpilation through a #transpile conditional import

## What / Why Runtimes bundled with the `workerd` condition cannot carry the TypeScript transpiler dependency: the compiler is large and probes Node internals during module initialization. Route interpreter transpilation through a `#transpile` conditional import. Node and Bun resolve the extracted TypeScript implementation, preserving the existing path byte-

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

fix(core): resolve watcher binding require lazily

## What / Why Bundles using the `workerd` condition crash at import time because `import.meta.url` is undefined there and `createRequire(import.meta.url)` currently runs at module scope. The watcher is never loaded on that runtime, so resolving the require eagerly turns unreachable functionality into a bundle-wide startup failure. Before, importing the bundl

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

fix(tui): harden Mermaid rendering limits

## What Keep terminal Mermaid rendering responsive and readable for oversized or malformed diagrams, and fold wide horizontal Markdown flowcharts before they are silently clipped. ## Before / After **Before:** a long malformed flowchart statement could spend seconds backtracking in edge parsing; near-million-cell canvases could allocate hundreds of megabytes

importance 0@kitlangtonclosedcontributorOriginal evidence ↗