Skip to content

Commit 5cea151

Browse files
chore(release): 0.4.0
1 parent f64c307 commit 5cea151

3 files changed

Lines changed: 43 additions & 19 deletions

File tree

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "0.3.0"
2+
".": "0.4.0"
33
}

CHANGELOG.md

Lines changed: 41 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,47 @@
22

33
## [Unreleased]
44

5-
### Features
6-
7-
- `User ClaudeCodeSendComplete` autocmd, fired once per file when a send is accepted while Claude is connected, with `data = { file_path, start_line, end_line, context }` (lines 0-indexed). Lets you run arbitrary post-send logic — in particular, focus a Claude session running outside Neovim (`provider = "none"`/`"external"`), e.g. via `tmux select-pane`, which `focus_after_send` cannot do. ([#228](https://github.com/coder/claudecode.nvim/issues/228))
8-
- `:ClaudeCodeCloseAllDiffs` command to close pending Claude diffs at once (e.g. proposals orphaned by resolving them via Claude remote control). Diffs you have already accepted but whose file has not been written yet are left intact so saved edits are never discarded. ([#248](https://github.com/coder/claudecode.nvim/issues/248))
9-
- `:ClaudeCodeSendText {text}` command (and `require("claudecode.terminal").send_to_terminal(text, opts)` function) to send arbitrary text to the open Claude terminal as if typed at the prompt, submitting it by default. `:ClaudeCodeSendText!` inserts the text without submitting. Handy for scripting and keymaps; multi-line text is sent via bracketed paste. Works with the in-editor `native`/`snacks` providers only — `external`/`none` run Claude outside Neovim, where there is no pane to write to. ([#197](https://github.com/coder/claudecode.nvim/issues/197))
10-
11-
### Bug Fixes
12-
13-
- `closeAllDiffTabs` no longer destroys diffs it does not own. It previously closed every window with `&diff` set and force-deleted any buffer named like `*.diff`/`diff://`/`fugitive://`, so an open diffview.nvim, fugitive, or native `:diffsplit` review was wiped out — and because the Claude CLI calls this tool at the start of every turn, it happened on essentially every prompt. The tool is now scoped to claudecode's own tracked diffs (matching the official VS Code extension, which only closes the tabs it labelled). Relatedly, `openFile`/`openDiff` no longer reuse a window that is in diff mode, which previously `:edit`-ed over one side of an unrelated diff and broke its layout. ([#277](https://github.com/coder/claudecode.nvim/issues/277))
14-
- The Claude terminal now adds the loopback hosts (`localhost`, `127.0.0.1`, `::1`) to `no_proxy`/`NO_PROXY`, so a configured `http_proxy`/`all_proxy` no longer tunnels Claude's `ws://127.0.0.1` IDE connection and causes queued @ mentions to time out. Existing `no_proxy` exclusions are preserved. ([#70](https://github.com/coder/claudecode.nvim/issues/70))
15-
- `focus_after_send = true` no longer fails silently with `terminal.provider = "none"`/`"external"`: those providers run Claude outside Neovim, so focus cannot move there. A one-time warning is now emitted at setup pointing to the new `User ClaudeCodeSendComplete` autocmd, which you can hook to focus your own terminal. (`focus_after_send` still only auto-focuses the in-editor providers.) ([#228](https://github.com/coder/claudecode.nvim/issues/228))
16-
- Rejecting a Claude diff with `:q` (or `:close` / `<C-w>c` / closing the tab) now resolves it as rejected, matching the documented behavior. The proposed buffer is a scratch buffer that `:q` only hides, so the existing `BufDelete`/`BufUnload`/`BufWipeout` autocmds never fired; a `WinClosed` autocmd now handles window-close rejection. ([#238](https://github.com/coder/claudecode.nvim/issues/238))
17-
- Push quickly-made visual selections to Claude reliably. Selections made and released faster than the selection-tracking debounce were never broadcast, and any selection was wiped shortly after leaving visual mode when Claude runs in an external terminal (the `/ide` flow) — so single-line selections in particular often never reached Claude. Selections are now flushed synchronously on visual-mode exit (from the `'<`/`'>` marks) and persist until the cursor actually moves; a single-line linewise `V` made right after a charwise selection is also no longer mis-extracted to a single character. ([#246](https://github.com/coder/claudecode.nvim/issues/246))
18-
- Diffs opened via `openDiff` no longer linger forever when they are resolved outside this Neovim or their Claude session goes away. Pending diffs are now automatically closed when the client that opened them disconnects or the integration is stopped, and `closeAllDiffTabs` now also resolves/cleans the diff module's tracked state instead of only closing windows. ([#248](https://github.com/coder/claudecode.nvim/issues/248))
19-
- Show diffs when the Claude Code terminal is the only window (no other splits). Previously `openDiff` failed with "No suitable editor window found"; now a split is created to host the diff, matching the behavior of the `openFile` tool. ([#231](https://github.com/coder/claudecode.nvim/issues/231))
20-
- Fix the "climbing cursor" in the Snacks terminal: hiding and re-showing the Claude panel no longer leaves the cursor one row above the prompt (so typed text lands on the wrong line). The Snacks provider now hides/shows without destroying the window — floats are parked via `nvim_win_set_config({hide=...})` and splits are recreated like the native provider — which preserves the cursor anchor Claude re-renders against on focus-in. Splits are fixed on all supported Neovim versions; the float fix requires Neovim >= 0.10. ([#240](https://github.com/coder/claudecode.nvim/issues/240), [#183](https://github.com/coder/claudecode.nvim/issues/183))
21-
- Work around a Neovim core bug (< 0.12.2) that fragmented large bracketed pastes into the terminal across `vim.paste` phases, making Cmd+V appear to truncate content. Added a scoped, version-gated `vim.paste` shim controlled by `terminal.fix_streamed_paste` (`"auto"` by default; no-op on Neovim >= 0.12.2). ([#161](https://github.com/coder/claudecode.nvim/issues/161))
5+
## [0.4.0] - 2026-06-22
6+
7+
### Added
8+
9+
- `layout = "inline"` option for `diff_opts` rendering a VS Code-style unified inline diff in a single read-only buffer (added/deleted lines interleaved with `+`/`-` sign markers). Requires Neovim >= 0.9.0; highlight groups `ClaudeCodeInlineDiffAdd`/`Delete`/`AddSign`/`DeleteSign` are customizable ([#195](https://github.com/coder/claudecode.nvim/pull/195)).
10+
- `:ClaudeCodeSendText {text}` command and `require("claudecode.terminal").send_to_terminal(text, opts)` to type arbitrary text into the open Claude terminal as if entered at the prompt (submitted by default; `:ClaudeCodeSendText!` inserts without submitting). Multi-line text is sent via bracketed paste. In-editor providers (`native`/`snacks`) only ([#272](https://github.com/coder/claudecode.nvim/pull/272)).
11+
- `User ClaudeCodeSendComplete` autocmd, fired once per file when a send is accepted while Claude is connected, with `data = { file_path, start_line, end_line, context }` (lines 0-indexed). Lets you run post-send logic such as focusing a Claude session running outside Neovim (`provider = "none"`/`"external"`), e.g. via `tmux select-pane` ([#265](https://github.com/coder/claudecode.nvim/pull/265), [#228](https://github.com/coder/claudecode.nvim/issues/228)).
12+
- `User ClaudeCodeDiffOpened` / `ClaudeCodeDiffClosed` autocmds carrying a data payload (window handles, file path, reason), plus `diff_opts.auto_resize_terminal` (default `true`; set `false` to own terminal layout yourself) and `terminal.diff_split_width_percentage` to set a different terminal width while a diff is open ([#270](https://github.com/coder/claudecode.nvim/pull/270)).
13+
- `:ClaudeCodeCloseAllDiffs` command to close all pending Claude diffs at once; already-accepted-but-unwritten diffs are preserved so saved edits are never discarded ([#261](https://github.com/coder/claudecode.nvim/pull/261), [#248](https://github.com/coder/claudecode.nvim/issues/248)).
14+
- `:checkhealth claudecode` health check that validates Neovim version, `setup()`, the Claude CLI, terminal provider, WebSocket server, lock file, and live connection state ([#275](https://github.com/coder/claudecode.nvim/pull/275)).
15+
- netrw file selection: `<leader>as` in a netrw buffer adds the marked files (or the file under the cursor) to Claude's context ([#62](https://github.com/coder/claudecode.nvim/pull/62)).
16+
- `:ClaudeCodeTreeAdd` / `:ClaudeCodeSend` support in snacks.nvim pickers and `Snacks.explorer()` — adds the selected/highlighted file(s) to context ([#269](https://github.com/coder/claudecode.nvim/pull/269), [#192](https://github.com/coder/claudecode.nvim/issues/192)).
17+
- `terminal.fix_streamed_paste` option (`"auto"` by default) that works around a Neovim core bug (< 0.12.2) fragmenting large bracketed pastes into the terminal; no-op on Neovim >= 0.12.2 ([#252](https://github.com/coder/claudecode.nvim/pull/252)).
18+
19+
### Changed
20+
21+
- Modernized the `:ClaudeCodeSelectModel` picker: evergreen version-free labels (`Claude Opus (Latest)`, `Claude Sonnet (Latest)`, `Claude Haiku (Latest)`), added 1M-context variants (`opus[1m]`/`sonnet[1m]`) and a `Default (account recommended)` entry ([#256](https://github.com/coder/claudecode.nvim/pull/256), [#146](https://github.com/coder/claudecode.nvim/pull/146)).
22+
- IDE diagnostics now return grouped, URI-based payloads with editor-native ranges and severity names; the server no longer advertises an unsupported resources capability and serializes tool JSON compactly ([#274](https://github.com/coder/claudecode.nvim/pull/274)).
23+
- Hardened IDE auth: the WebSocket auth token is now generated from a CSPRNG (128-bit hex), the lock file is written atomically with mode `0600` in a `0700` directory, and auth comparison is constant-time ([#259](https://github.com/coder/claudecode.nvim/pull/259)).
24+
25+
### Fixed
26+
27+
- `closeAllDiffTabs` no longer destroys diffs it does not own (previously it wiped out diffview.nvim, fugitive, or native `:diffsplit` reviews on essentially every Claude turn). It is now scoped to claudecode's own tracked diffs, and `openFile`/`openDiff` no longer reuse a window in diff mode ([#290](https://github.com/coder/claudecode.nvim/pull/290), [#277](https://github.com/coder/claudecode.nvim/issues/277)).
28+
- Rejecting a Claude diff with `:q` (or `:close` / `<C-w>c` / closing the tab) now correctly resolves it as rejected via a new `WinClosed` autocmd ([#266](https://github.com/coder/claudecode.nvim/pull/266), [#238](https://github.com/coder/claudecode.nvim/issues/238)).
29+
- Pending diffs are now auto-closed when the client that opened them disconnects or the integration is stopped, so diffs resolved outside this Neovim (e.g. via Claude remote control) no longer linger ([#261](https://github.com/coder/claudecode.nvim/pull/261), [#248](https://github.com/coder/claudecode.nvim/issues/248)).
30+
- Diffs now open when the Claude terminal is the only window (a split is created instead of failing with "No suitable editor window found") ([#260](https://github.com/coder/claudecode.nvim/pull/260), [#231](https://github.com/coder/claudecode.nvim/issues/231)).
31+
- The Snacks Explorer sidebar layout box and picker list are excluded from main-editor-window detection, so diffs no longer open on top of and corrupt the explorer ([#255](https://github.com/coder/claudecode.nvim/pull/255), [#165](https://github.com/coder/claudecode.nvim/pull/165)).
32+
- Leftover diff splits are now cleaned up deterministically; plugin-created split windows are closed on diff resolution ([#175](https://github.com/coder/claudecode.nvim/pull/175)). A stranded empty tab is closed when an `open_in_new_tab` diff setup errors ([#264](https://github.com/coder/claudecode.nvim/pull/264)).
33+
- `keep_terminal_focus = true` now works for floating Claude terminals ([#178](https://github.com/coder/claudecode.nvim/pull/178)).
34+
- Legacy `diff_opts` options `vertical_split` and `open_in_current_tab` now take effect again (they were silently ignored due to merge order) ([#142](https://github.com/coder/claudecode.nvim/pull/142)).
35+
- Fixed the Snacks terminal "climbing cursor": hiding and re-showing the Claude panel no longer leaves the cursor one row above the prompt. Splits are fixed on all supported Neovim versions; the float fix requires Neovim >= 0.10 ([#271](https://github.com/coder/claudecode.nvim/pull/271), [#240](https://github.com/coder/claudecode.nvim/issues/240), [#183](https://github.com/coder/claudecode.nvim/issues/183)).
36+
- Visual selections made and released quickly (e.g. `viw`, single-line `V`) are now reliably pushed to Claude; selections are flushed synchronously on visual-mode exit and persist until the cursor moves ([#267](https://github.com/coder/claudecode.nvim/pull/267), [#246](https://github.com/coder/claudecode.nvim/issues/246)).
37+
- Selection context is now also sent on `BufEnter` ([#159](https://github.com/coder/claudecode.nvim/pull/159)), and the `provider = "none"` selection-skip fallback now uses a substring match so third-party terminals are detected ([#160](https://github.com/coder/claudecode.nvim/pull/160)).
38+
- `:ClaudeCodeSend` now classifies tree/explorer buffers by filetype only, so an ordinary file whose path contains `neo-tree`/`NvimTree` is no longer misrouted into tree extraction ([#292](https://github.com/coder/claudecode.nvim/pull/292), [#289](https://github.com/coder/claudecode.nvim/issues/289)).
39+
- IDE diagnostics tool calls without a `file://` URI scheme no longer error ([#163](https://github.com/coder/claudecode.nvim/pull/163)); file paths containing `$` are handled correctly in `ClaudeCodeAdd` and `openFile` ([#286](https://github.com/coder/claudecode.nvim/pull/286)).
40+
- The Claude terminal now adds loopback hosts (`localhost`, `127.0.0.1`, `::1`) to `no_proxy`/`NO_PROXY`, so a configured proxy no longer tunnels Claude's `ws://127.0.0.1` IDE connection and causes queued @ mentions to time out; existing exclusions are preserved ([#268](https://github.com/coder/claudecode.nvim/pull/268), [#70](https://github.com/coder/claudecode.nvim/issues/70)).
41+
- `focus_after_send = true` now emits a one-time warning with `provider = "none"`/`"external"` (where it cannot focus an out-of-editor session) pointing at the new `User ClaudeCodeSendComplete` event ([#265](https://github.com/coder/claudecode.nvim/pull/265)).
42+
- The WebSocket server now closes connections on malformed frames (with the correct RFC 6455 close code) instead of stalling ([#258](https://github.com/coder/claudecode.nvim/pull/258)), fires `on_disconnect` consistently on all teardown paths ([#176](https://github.com/coder/claudecode.nvim/pull/176)), retries port binding on `EADDRINUSE` so parallel Neovim instances start on different ports ([#284](https://github.com/coder/claudecode.nvim/pull/284), [#283](https://github.com/coder/claudecode.nvim/issues/283)), and resets keepalive timestamps after a system sleep/wake to prevent false timeouts ([#141](https://github.com/coder/claudecode.nvim/pull/141)).
43+
- Closing debounce timers safely on selection tracking, fixing leaked libuv handles and stale callbacks ([#245](https://github.com/coder/claudecode.nvim/pull/245)).
44+
- Background `openFile` opens now ignore empty text anchors, preserve focus, and return target-buffer metadata ([#274](https://github.com/coder/claudecode.nvim/pull/274)).
45+
- Documented `cmd` triggers in the lazy.nvim install spec so `:ClaudeCode` loads on demand ([#263](https://github.com/coder/claudecode.nvim/pull/263)), and added IDE launch instructions for `provider = "none"` ([#157](https://github.com/coder/claudecode.nvim/pull/157)).
2246

2347
## [0.3.0] - 2025-09-15
2448

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.3.0
1+
0.4.0

0 commit comments

Comments
 (0)