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

fix(tui): navigate filtered plugins

## What Allow Up and Down to navigate filtered Plugins and MCP dialogs without presenting keyboard focus as a durable current selection. ## Before / After **Before:** Plugins and MCP fed the highlighted row back into `DialogSelect.current`. Since `current` means the externally current value, this added a dot to whichever row the keyboard happened to highligh

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

feat(tui): render Mermaid timelines

## What Render Mermaid `timeline` fences as terminal-native vertical timelines in OpenCode instead of falling back to source code. ```text Product history Foundation ───┐ │ 2024 ───● Prototype │ First release ``` Bare, `TD`, and `LR` timeline headers preserve Mermaid parse semantics while sharing the vertical layout that remains readable in narrow terminal v

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

fix(tui): continue pending work after interrupt

## Summary - pass `continue: true` when the main TUI interrupts a running session - preserve explicit subagent cancellation behavior ## Testing - `bun typecheck` (`packages/tui`) - `bun test` (`packages/tui`): 688 passed, 5 skipped - pre-push monorepo typecheck: 32 packages passed

importance 0@thdxrclosedOriginal evidence ↗
pull request

feat: adopt drive and TUI catalog

## What Adopts `opencode-drive` into the V2 monorepo and gives the captured TUI state browser a first-party internal home at `dev.opencode.ai/lab/catalog`. - `packages/drive`: the published Drive library and CLI, now consuming the workspace V2 client directly. - `packages/lab/catalog`: the terminal UI catalog with complete Opencode, Tokyo Night, and Everfore

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

fix(core): continue sessions after location move

### Issue for this PR N/A ### Type of change - [x] Bug fix - [ ] New feature - [ ] Refactor / code improvement - [ ] Documentation ### What does this PR do? Defaults session moves to steer delivery and preserves an active model continuation across the Location handoff. The source runner returns the next logical step to SessionExecution, which reloads the Ses

importance 0@thdxrclosedOriginal evidence ↗
pull request

feat(tui): replace tab from session picker

## Summary - replace the active session tab when selecting normally from the Sessions picker - open a new tab for Shift-click, Shift+Enter, and iTerm2 linefeed activation - preserve existing tabs when selecting a session that is already open - rename the V2 filesystem operation and generated SDK method from `find` to `get` while retaining `/api/fs/find` ## T

importance 0@jlongsteropencontributorOriginal evidence ↗
pull request

fix(tui): improve selected spinner contrast

## What Make activity spinners readable when their session row is selected in the Open and Sessions pickers. ## Before / After **Before:** activity spinners always used the default muted spinner color. On a selected row, that color had low contrast against the focused background and made the running state difficult to see. **After:** gutter content receives

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

feat(sdk): configure external workspace providers

## What Allow SDK Next embedders to supply provider-wide workspace infrastructure at host construction time: ```ts const openCodeLayer = OpenCodeWorkerd.layer({ storage, workspaceProviders: { modal: WorkerdModalWorkspace.make({ namespace: env.WORKSPACE_DO }), }, }) ``` The typed SDK facade now exposes explicit workspace lifecycle operations: ```ts const open

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

feat(tui): refine session tab activity indicators

## What Refines session-tab activity feedback in both layouts: - vertical tabs use a compact 10-cell running sweep instead of washing the full row - selected shortcuts stay neutral, while running shortcuts turn interactive blue - start, reprompt, and completion brighten the shortcut, then settle into its durable state - vertical flashes radiate from the shor

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

refactor(core): replace project copies with worktrees

## Summary - replace the V2 ProjectCopy and ProjectDirectories domains with a global Worktree service - consolidate project roots and managed worktrees into a dedicated worktree table - expose global list, create, remove, and refresh operations through the generated Promise and Effect clients - migrate the current V2 TUI and SDK Next surfaces to Worktree ter

importance 0@jlongsteropencontributorOriginal evidence ↗
pull request

fix(opencode): make text/reasoning delta accumulation O(N) instead of O(N²)

### Issue for this PR Fixes #30067 ### Type of change - [x] Bug fix - [ ] New feature - [ ] Refactor / code improvement - [ ] Documentation ### What does this PR do? Resubmission of #30058 by meitalbensinai (auto-closed for missing PR template; commit cherry-picked unchanged, authorship preserved). Replaces `text += delta` accumulation in the `reasoning-delt

importance 0@hardes11openOriginal evidence ↗
pull request

docs: add Orshot to the MCP server examples

### Issue for this PR Closes # No issue — docs-only addition, under the "Documentation improvements" bullet in CONTRIBUTING.md. Happy to open one if you'd prefer. ### Type of change - [ ] Bug fix - [ ] New feature - [ ] Refactor / code improvement - [x] Documentation ### What does this PR do? Adds Orshot to the MCP server examples, in the same shape as the S

importance 0@rishimohanopenOriginal evidence ↗
pull request

fix(core): select Kimi prompt by provider

## Summary - pass the provider ID into system-prompt selection - select the Kimi prompt for models served by Kimi providers even when the model ID is bare, such as `k3` - cover provider-based Kimi prompt selection with a regression test ## Checks - `bun test test/plugin/system-prompt.test.ts` (packages/core) - `bun typecheck` (packages/core) Requested by: @r

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

fix(opencode): bridge question tool to ACP elicitation

### Issue for this PR Closes #38121 ### Type of change - [x] Bug fix ### What does this PR do? The `question` tool blocked indefinitely in ACP mode. The root cause: `question.asked` events carry a QuestionV2 request ID that must be passed to `sdk.question.reply/reject` to unblock the waiting deferred — but the event subscription never handled these events at

importance 0@pjaolopenOriginal evidence ↗
pull request

fix(catalog): serve app shell at lab route

## What Serve the catalog app shell at `https://dev.opencode.ai/lab/catalog` and its client-side deep links. ## Before / After **Before:** the Worker rewrote app routes to `/index.html`, then Cloudflare Assets applied its default HTML canonicalization and redirected that internal path to `https://dev.opencode.ai/`. The bare catalog route returned a redirect/

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

fix(xai): pass through reasoning effort

## Summary - loosen the patched xAI SDK reasoning-effort schemas from a fixed enum to a string for both Chat and Responses - preserve arbitrary effort values on the outbound provider request - cover `xhigh` pass-through for both xAI APIs ## Related issues - #32459 ## Checks - `bun test test/provider-xai-responses.test.ts` (from `packages/core`) - `bun typech

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

fix(opencode): select Kimi prompt by provider

## Summary - select the Kimi system prompt for models served by the official Kimi and Moonshot providers - handle bare model IDs such as `k3` and `k3-256k` without relying on the model ID containing `kimi` - cover provider-based prompt selection with a regression test ## Checks - `bun test test/session/system.test.ts` (packages/opencode) - `bun typecheck` (p

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

fix(mistral): pass through reasoning effort

## Summary - loosen the patched Mistral SDK reasoning-effort schema from a fixed enum to a string - preserve arbitrary effort values on the outbound provider request - add regression coverage for an unknown effort value ## Checks - `bun test test/provider-mistral.test.ts` (from `packages/core`) - `bun typecheck` (from `packages/core`) - clean forced install

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

fix(groq): pass through reasoning effort

## Summary - patch the Groq SDK reasoning-effort schema to accept arbitrary strings instead of a fixed enum - preserve unknown effort values on the outbound provider request - add regression coverage for pass-through behavior ## Checks - `bun test test/provider-groq.test.ts` (from `packages/core`) - `bun typecheck` (from `packages/core`) - clean forced insta

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

fix(core): conservative shell permission fallback when tree-sitter assets cannot load

## What Keep shell execution usable when tree-sitter parser assets cannot load, such as in workerd runtimes without filesystem-backed assets. Permission analysis falls back to one conservative command resource instead of failing the scan. ## How Capture parser loading with `Effect.exit`. On failure, return the full command as the resource, derive the reusabl

importance 0@kitlangtonopencontributorOriginal evidence ↗
pull request

fix(core): subagent sessions inherit ancestor deny rules

## What Before, permission checks used only the current session's agent ruleset, so a subagent session escaped every configured deny in its ancestry. After, denies are fences and asks are per-agent gates: | Ancestor verdict | Current agent + remembered verdict | Result | | --- | --- | --- | | deny | any | deny | | ask or allow | deny | deny | | ask or allow

importance 0@kitlangtonopencontributorOriginal evidence ↗
pull request

feat(sdk): re-export Event schema from sdk-next

## What Expose the `Event` schema namespace from `@opencode-ai/sdk-next` so embedders consuming typed session and event streams do not need to deep-import `@opencode-ai/schema`. ## How Re-export `Event` alongside the SDK entrypoint’s existing schema namespaces and extend the canonical contract test to verify its identity and public presence. ## Scope Only th

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

feat(tui): render Mermaid GitGraph diagrams

## What Render Mermaid `gitGraph` fences as terminal-native vertical commit graphs in OpenCode. ```text ○ baseline │╲ │ ○ extract-seam Extract seam │ │ │ ○ add-tests (refactor, tag: ready) │ │ ○ │ unrelated-fix │╱ ◎ land-refactor (main, tag: v2) ``` The vertical layout follows terminal Git graph conventions: branches staircase outward, remain vertical while

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

feat(catalog): click-to-annotate captures with GitHub issue handoff

## What Adds click-to-annotate feedback to the lab catalog viewer. Open any capture, press `A` (or the Annotate button), click a terminal cell, type a note in a composer anchored at that point, and press Enter. Each capture's annotations become one prefilled GitHub issue with readable notes plus machine-readable JSON, so design feedback lands in the tracker

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

fix(client): prevent stale service replacement

## What Prevent an older CLI or Desktop client from replacing a newer managed background service. ## Before / After **Before** A client required its exact installed version. After an update, an older client saw the newer service as incompatible and replaced it with the older binary. A newer client could then replace that service again. **After** CLI and Desk

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

fix(client): require authenticated service stop

## What Require the managed service to authenticate and accept an exact-instance stop request before a client starts a replacement. ## Before / After **Before** If health or stop requests timed out, the client could fall back to `SIGTERM` and `SIGKILL` using the PID from registration. Rejected stops could also be ignored while replacement continued. **After*

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

fix(client): validate promise service discovery

## What Validate managed-service registration and health data before the Promise client uses it for discovery. ## Before / After **Before** The Promise client cast `JSON.parse` and health response bodies to trusted types. Primitive, partial, or incorrectly typed data could reach lifecycle logic. **After** Discovery accepts only registrations with a string UR

importance 0@kitlangtonopencontributorOriginal evidence ↗
pull request

fix(tui): retry migration status transport errors

## What Keep the migration status overlay polling through temporary server transport loss. ## Before / After **Before** A transient disconnect while the background service restarted ended migration polling and displayed a migration failure toast. **After** Transport errors retry after one second. Actual API or migration errors still surface, and unmount abor

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

fix(cli): inset update footer

## What Add one cell of left padding to the update preflight footer so its monogram no longer touches the terminal edge. ## Before / After **Before:** The update monogram began in terminal column zero and appeared flush against the left edge. **After:** The footer content starts one cell in, matching the intended visual inset while preserving the existing sp

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

refactor(desktop): run local server from source

## Summary - run the local Desktop server with the CLI package dev script - remove the native production CLI build from local Desktop startup - keep downloaded and packaged CLI behavior unchanged ## Verification - bun typecheck from packages/desktop - bun run build from packages/desktop

importance 0@HonaclosedOriginal evidence ↗
pull request

refactor(desktop): run local server from source

## Summary - run the local Desktop server with the CLI package dev script - remove the native production CLI build from local Desktop startup - keep downloaded and packaged CLI behavior unchanged ## Verification - bun typecheck from packages/desktop - bun run build from packages/desktop

importance 0@HonaclosedOriginal evidence ↗
pull request

fix(tui): truncate queued prompt preview

**What** Keep the queued-prompt dock to one terminal row when the next queued prompt contains multiple lines. **Before / After** **Before:** Queuing a multiline prompt preserved its newline characters in the dock preview. Although the text renderer used `wrapMode="none"` and `truncate`, explicit newlines expanded the dock and could consume much of the sessio

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

fix(stats): keep tablet chart tooltips above bars

## Summary - raise the active top-model chart bar within the tablet breakpoint - keep its static tooltip above later chart bars without changing desktop or mobile stacking ## Validation - `bun typecheck` (`packages/stats/app`) - `bun --bun run build` (`packages/stats/app`) - Playwright visual check at 767, 768, 927, and 929 px; the tooltip layering changes o

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

fix(tui): repair baseline unit failures

## What Repair the deterministic Linux unit failures introduced by the current OpenTUI and Drive configuration baselines. ## Before / After **Before** - Monochrome fenced code could render Unicode source such as `Café → …` after a `CodeRenderable` was reused across Markdown block types. - Drive tests parsed generated `.jsonc` files with strict JSON APIs and

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

feat(deskltop): use opencode2 in WSL

## Summary - migrate Desktop WSL servers from opencode to opencode2 - require the WSL CLI version to match the Desktop server version exactly - use the official V2 installer with --version for releases - build the Linux CLI only when a local WSL install is requested, then install it with --binary - simplify the WSL controller around the normal user flow ## V

importance 0@HonaclosedOriginal evidence ↗
pull request

test(drive): parse generated JSONC config

## What Repair Drive tests so generated `opencode.jsonc` and `tui.jsonc` files are parsed as JSONC. ## Before / After **Before** Instance and CLI integration tests called `Bun.file(...).json()` on JSONC files. Once the default configuration included comments, Linux unit jobs failed with `SyntaxError: Failed to parse JSON` before checking the generated config

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

feat(catalog): auto-generated Open Graph cards per capture

## What Sharing a catalog link now unfurls with a real preview. Every captured screen/theme pair gets an auto-generated 1200x630 Open Graph card showing the actual rendered terminal frame, and the worker injects per-URL meta tags so scrapers (which never run JS) see the right card for deep links. ## How - `scripts/generate-og.ts` — runs after the production

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

feat(opencode): add per-session budget limit

### Issue for this PR No linked issue — new feature. ### Type of change - [x] New feature ### What does this PR do? Adds an optional per-session budget that stops the assistant when the session cost reaches it, plus a small widget in the TUI sidebar Context panel to view and set it. - `budget` field on the session schema (v1 + current), a nullable `budget` c

importance 0@HHrddtuopenOriginal evidence ↗
pull request

fix(core): skip shell parsing when permissions allow all

## What Skip shell command parsing when the effective agent configuration provably allows every shell command and every external directory. This lets sandboxed runtimes with an unconditional shell policy execute without loading tree-sitter. Runtimes with granular asks or denies retain the existing parser-backed permission decomposition. ## Before / After **B

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

test(core): reuse permission service stub

## What Replace repeated ad-hoc `Permission.Service` test implementations with one small core test helper. Tests keep their local permission assertion capture, denial behavior, post-approval hooks, and `allowsAll` customization without repeating unused service methods. ## How - Add `packages/core/test/lib/permission.ts`, following existing `Layer.mock` test

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

fix(tui): omit implicit cd autocomplete prefix

## Summary - show current-directory `/cd` autocomplete entries without an implicit `./` prefix - preserve explicit `../`, `~/`, and absolute prefixes ## Tests - `bun test test/prompt/autocomplete.test.ts` - `bun run typecheck`

importance 0@jlongsterclosedcontributorOriginal evidence ↗
pull request

chore: move drive and catalog ownership

## What Removes OpenCode Drive and the terminal catalog from this monorepo after transferring catalog ownership and all current state coverage to anomalyco/opencode-drive#57. The standalone PR contains the complete current catalog, including annotations, faceted filtering, per-capture Open Graph cards, deployment routing, all 76 screens across three themes,

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

test(core): reuse project service stub

## What Replace repeated complete `Project.Service` test layers with one small global-project test stub. The affected session tests all need the same behavior: no listed projects or directories, and every directory resolves to the global project unchanged. ## How - Add `packages/core/test/lib/project.ts` with `globalProjectLayer`. - Migrate six exact duplica

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

fix(client): cancel SSE readers after handshake

## What Reduce native memory growth when long-lived Promise SSE subscriptions reconnect or are cancelled. ## Before / After **Before** The caller AbortSignal remained attached to the native fetch for the entire SSE lifetime. Cancelling a connected stream aborted Bun HTTP directly, and repeated reconnects increased RSS by about 29 MB across 40 tiny-event stre

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

docs(desktop): add Solid best practices guidance

## Summary - direct desktop contributors to follow Solid best practices - require comments when code intentionally violates the linked guidance ## Testing - Not run (documentation-only change) Requested by: @Hona (Hona via Slack)

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

feat(tui): highlight Bash commands

## What Highlight Bash syntax wherever commands are shown or edited in the TUI: - `!` Shell-mode prompt input while the user types - agent shell tool commands in inline and expanded tool views Keywords, strings, variables, comments, and punctuation use the active TUI syntax theme. ## How - `packages/tui/src/component/prompt/index.tsx` parses Shell-mode input

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

fix(core): refresh fallback file search

## Summary - invalidate the ripgrep fallback file index when the project filesystem changes - rebuild the snapshot on the next file search instead of requiring a daemon restart - cover newly created files appearing in subsequent searches ## Tests - `bun test test/filesystem/search.test.ts` - `bun typecheck` Requested by: @Hona (Luke Parker via Slack)

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

fix(tui): highlight queued prompts on hover

## What Adds a subtle raised background when the queued-prompts dock is hovered, making its existing click behavior discoverable. ## Before / After **Before:** The queued-prompts dock looked identical at rest and under the pointer, so it did not read as interactive. **After:** Hovering raises the dock background using the existing elevated theme treatment. C

importance 0@kitlangtonclosedcontributorOriginal evidence ↗
pull request

refactor(util): replace xdg-basedir

## What Replace `@opencode-ai/util`'s single `xdg-basedir` use with a behavior-compatible local implementation, removing one direct runtime dependency (6,813 unpacked bytes across 5 files). ## How - Preserve import-time XDG environment overrides and home-directory defaults in `global-roots.ts`. - Preserve empty-value fallback behavior and platform-specific h

importance 0@kitlangtonopencontributorOriginal evidence ↗