Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,24 @@ All notable changes to this project will be documented in this file.

## [Unreleased]

- **More Cursor tools map onto opencode's native tool renderers (blocks mode).**
Following the `edit` → diff-viewer mapping, Cursor's `shell`, `read`, `write`,
`glob`, `grep`, `ls`, `updateTodos`, and `task` tool activity is now surfaced
under opencode's registered `bash`, `read`, `write`, `glob`, `grep`, `list`,
`todowrite`, and `task` tools, and Cursor's web search (which runs as an MCP
tool) maps onto opencode's `websearch` renderer — so opencode renders its
native UI (shell console, file viewer, todo checklist, subagent card, search
results, …) instead of generic `cursor_*` blocks. Cursor's arg shape is
translated to opencode's (e.g. `path` → `filePath`, `globPattern` → `pattern`,
`fileText` → `content`); calls stay provider-executed (display-only, never
re-run on disk).
- **Cleaner fallback blocks for tools without an opencode counterpart.**
`readLints` and `delete` now render as formatted `cursor_*` blocks (a
diagnostics list / a one-line confirmation) instead of raw JSON, and every MCP
tool's `content` array is flattened to readable text. Anything else — or a
result with an unexpected shape — still falls back to a safe `cursor_*` block
with the raw payload.

## [0.1.0] — 2026-06-10

> Pre-releases: `0.1.0-rc.1` and `0.1.0-rc.2` were published to the npm `next`
Expand Down
14 changes: 14 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,20 @@ that activity appears in opencode:
and outputs. opencode skips execution for provider-executed calls (they're display-only), so
Cursor's tools (`shell`, `mcp`, …) don't trigger an "unavailable tool" error. Requires a
V3-native opencode host (1.16+).

Where a Cursor tool has a natural opencode counterpart, it's surfaced under opencode's
**registered** tool name so its native renderer is used instead of a generic block: `edit` →
opencode's diff viewer (via `metadata.diff`), `shell` → `bash` console, `task` → the subagent
card, web search (which Cursor runs as an MCP tool) → the `websearch` renderer, and
`read`/`write`/`glob`/`grep`/`ls`/`updateTodos` → opencode's
`read`/`write`/`glob`/`grep`/`list`/`todowrite` renderers. Cursor's arg shape is translated to
opencode's (e.g. `path` → `filePath`); the call stays provider-executed, so it's display-only and
never re-run on disk.

Tools with no opencode counterpart still get cleaned up: `readLints` and `delete` render as
formatted `cursor_*` blocks (a diagnostics list / a one-line confirmation) rather than raw JSON,
and any MCP tool's `content` is flattened to readable text. Anything else — or a result with an
unexpected shape — falls back to a prefixed `cursor_*` block with the raw payload.
- **`"reasoning"` (fallback)** — each tool call is shown as a compact reasoning line
(`[tool] write {"path":…}`; failures as `[tool] x failed`). Robust on every host: no tool-call
parts cross into opencode, so there's no dependency on how the host treats provider-executed
Expand Down
Loading