Skip to content

Commit 52c0c6e

Browse files
chore(release): 0.4.0
1 parent 298a3e6 commit 52c0c6e

3 files changed

Lines changed: 51 additions & 17 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: 49 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,57 @@
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))
5+
## [0.4.0] - 2026-06-22
6+
7+
### Added
8+
9+
- `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 focus a Claude session running outside Neovim (`provider = "none"`/`"external"`), e.g. via `tmux select-pane`, which `focus_after_send` cannot do. ([#265](https://github.com/coder/claudecode.nvim/pull/265))
10+
- `:ClaudeCodeSendText {text}` command (and `require("claudecode.terminal").send_to_terminal(text, opts)`) to send text to the open Claude terminal as if typed at the prompt, submitting by default; `:ClaudeCodeSendText!` inserts without submitting. In-editor `native`/`snacks` providers only. ([#272](https://github.com/coder/claudecode.nvim/pull/272))
11+
- `diff_opts.layout = "inline"` for a VS Code-style unified inline diff in a single read-only buffer, complementing `"vertical"` (default) and `"horizontal"`. Requires Neovim >= 0.9; highlight groups `ClaudeCodeInlineDiffAdd`/`Delete`/`AddSign`/`DeleteSign` are customizable. ([#195](https://github.com/coder/claudecode.nvim/pull/195))
12+
- Per-diff terminal width via `terminal.diff_split_width_percentage`, a `diff_opts.auto_resize_terminal` opt-out, and `User ClaudeCodeDiffOpened`/`ClaudeCodeDiffClosed` autocmds. Backward-compatible; default behavior unchanged. ([#270](https://github.com/coder/claudecode.nvim/pull/270))
13+
- `:ClaudeCodeCloseAllDiffs` command to close pending Claude diffs at once (e.g. orphaned by resolving via remote control). Accepted-but-unwritten diffs are left intact. ([#261](https://github.com/coder/claudecode.nvim/pull/261))
14+
- `:checkhealth claudecode` health check verifying Neovim version, `setup()`, the Claude CLI, terminal provider, WebSocket server, lock file, and live client connection. ([#275](https://github.com/coder/claudecode.nvim/pull/275))
15+
- netrw file selection: `<leader>as` in a netrw buffer adds 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()` (filetype `snacks_picker_list`). ([#269](https://github.com/coder/claudecode.nvim/pull/269))
17+
18+
### Fixed
19+
20+
- `closeAllDiffTabs` no longer destroys diffs it does not own — it previously wiped out open diffview.nvim, fugitive, or native `:diffsplit` reviews on essentially every prompt. 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))
21+
- The Claude terminal 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 times out queued @ mentions. ([#268](https://github.com/coder/claudecode.nvim/pull/268))
22+
- `focus_after_send = true` now emits a one-time warning at setup with `provider = "none"`/`"external"`, pointing to the new `ClaudeCodeSendComplete` autocmd. ([#265](https://github.com/coder/claudecode.nvim/pull/265))
23+
- Rejecting a Claude diff with `:q` (or `:close`/`<C-w>c`/closing the tab) now resolves it as rejected via a `WinClosed` autocmd. ([#266](https://github.com/coder/claudecode.nvim/pull/266))
24+
- Quickly-made and single-line visual selections are now pushed to Claude reliably — flushed synchronously on visual-mode exit and persisting until the cursor moves. ([#267](https://github.com/coder/claudecode.nvim/pull/267))
25+
- Pending diffs are auto-closed when the client that opened them disconnects or the integration stops, instead of leaking windows. ([#261](https://github.com/coder/claudecode.nvim/pull/261))
26+
- Diffs now open when the Claude terminal is the only window; `openDiff` previously failed with "No suitable editor window found". ([#260](https://github.com/coder/claudecode.nvim/pull/260))
27+
- Fixed the Snacks "climbing cursor": hiding/re-showing the panel no longer leaves the cursor one row above the prompt. Floats are parked via `nvim_win_set_config({hide=...})` (Neovim >= 0.10); splits are recreated like the native provider. ([#271](https://github.com/coder/claudecode.nvim/pull/271))
28+
- Worked around a Neovim core bug (< 0.12.2) that fragmented large bracketed pastes, making Cmd+V appear to truncate. Added a version-gated `vim.paste` shim controlled by `terminal.fix_streamed_paste` (`"auto"` by default; no-op on >= 0.12.2). ([#252](https://github.com/coder/claudecode.nvim/pull/252))
29+
- The Snacks provider launches Claude via an argv list instead of a shell string, fixing `zsh: no matches found` when model aliases contain `[ ]` (e.g. `opus[1m]`). ([#256](https://github.com/coder/claudecode.nvim/pull/256))
30+
- IDE diagnostics tool calls now accept a bare file path (not just a `file://` URI) without erroring. ([#163](https://github.com/coder/claudecode.nvim/pull/163))
31+
- IDE tool responses return grouped URI-based diagnostics with editor-native ranges and severity names, stop advertising an unsupported resources capability, and harden background file opens. ([#274](https://github.com/coder/claudecode.nvim/pull/274))
32+
- Legacy `diff_opts` aliases `vertical_split` and `open_in_current_tab` now apply correctly; they were silently ignored due to merge order. ([#142](https://github.com/coder/claudecode.nvim/pull/142))
33+
- Detect system sleep/wake and reset client pong timestamps to prevent false keepalive timeouts after a laptop wakes. ([#141](https://github.com/coder/claudecode.nvim/pull/141))
34+
- Generate the WebSocket auth token from a CSPRNG (128-bit hex) and write the lock file atomically with mode `0600` in a `0700` directory (previously world-readable). ([#259](https://github.com/coder/claudecode.nvim/pull/259))
35+
- Malformed WebSocket frames now close the connection with the correct RFC 6455 status code instead of wedging it forever. ([#258](https://github.com/coder/claudecode.nvim/pull/258))
36+
- Retry port binding on `EADDRINUSE` so parallel Neovim instances no longer fail to start the WebSocket server. ([#284](https://github.com/coder/claudecode.nvim/pull/284))
37+
- `ClaudeCodeSend` 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))
38+
- Handle `$` in file paths for `:ClaudeCodeAdd` and the `openFile` tool. ([#286](https://github.com/coder/claudecode.nvim/pull/286))
39+
- `keep_terminal_focus` now works for floating Claude terminals (e.g. Snacks `position="float"`). ([#178](https://github.com/coder/claudecode.nvim/pull/178))
40+
- The TCP transport fires `on_disconnect` on all teardown paths (EOF, read/protocol errors, timeouts), preventing phantom clients accumulating in server state. ([#176](https://github.com/coder/claudecode.nvim/pull/176))
41+
- Plugin-created diff splits are closed deterministically on cleanup instead of being left behind. ([#175](https://github.com/coder/claudecode.nvim/pull/175))
42+
- Exclude `snacks_picker_list` and `snacks_layout_box` from main-editor-window detection so the Snacks picker/explorer is no longer corrupted when a diff opens. ([#165](https://github.com/coder/claudecode.nvim/pull/165), [#255](https://github.com/coder/claudecode.nvim/pull/255))
43+
- Close the stranded tab and refocus the original when an `open_in_new_tab` diff setup errors before registration. ([#264](https://github.com/coder/claudecode.nvim/pull/264))
44+
- Wipe the empty placeholder buffer when the terminal provider is `none`. ([#223](https://github.com/coder/claudecode.nvim/pull/223))
45+
- Also send selection context on `BufEnter`, and use a substring check in the selection fallback so third-party terminals (`provider = "none"`) are correctly skipped. ([#159](https://github.com/coder/claudecode.nvim/pull/159), [#160](https://github.com/coder/claudecode.nvim/pull/160))
46+
- Bumped the Haiku model alias to its 4.5 label. ([#146](https://github.com/coder/claudecode.nvim/pull/146))
47+
48+
### Changed
49+
50+
- Modernized the `:ClaudeCodeSelectModel` picker to version-free labels (`Claude Opus (Latest)`, `Claude Sonnet (Latest)`, `Claude Haiku (Latest)`) and added `opus[1m]`/`sonnet[1m]` 1M-context variants and a `Default (account recommended)` entry. ([#256](https://github.com/coder/claudecode.nvim/pull/256))
1051

11-
### Bug Fixes
52+
### Documentation
1253

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))
54+
- The recommended lazy.nvim spec now includes a `cmd` array so `:ClaudeCode` and friends load on demand from a cold start. ([#263](https://github.com/coder/claudecode.nvim/pull/263))
55+
- Added IDE launch instructions for `provider = "none"`. ([#157](https://github.com/coder/claudecode.nvim/pull/157))
2256

2357
## [0.3.0] - 2025-09-15
2458

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)