Neovim · AI Tooling

Two coding agents inside nvim · Claude Code and opencode, side by side

Claude Code coder/claudecode.nvim · the claude CLI connects to nvim as its IDE over WebSocket
🤖
opencode NickvanDyke/opencode.nvim · the opencode agent TUI embedded in a split
🔗
IDE Integration How Claude Code talks to editors — lock files, selection, native diffs
📖
Neovim Docs Official Neovim reference and user manual

Claude Code · <leader>a

<leader>acToggle the Claude panel (spawns claude in a snacks terminal, auto-connects to this nvim)
<leader>afFocus the Claude panel
<leader>ar / aCResume a past session / continue the last one
<leader>amSelect model
<leader>abAdd the current buffer to Claude's context
<leader>asSend visual selection · or add a file from the neo-tree sidebar
<leader>aa / adAccept / deny a proposed edit (shown as a native nvim diff)
:ClaudeCodeSame as <leader>ac · run /ide inside to confirm "Connected to Neovim"

opencode · <leader>o

<leader>ooToggle the opencode panel
<leader>oaAsk about cursor (normal) / selection (visual)
<leader>o+Append the current buffer to the prompt
<leader>osPick a prompt
<leader>on / oiNew session / interrupt
<leader>oeExplain selection in detail

How the Claude Code connection works

1. servernvim opens a WebSocket server and writes a lock file to ~/.claude/ide/<pid>.lock
2. spawn:ClaudeCode launches a fresh claude with CLAUDE_CODE_SSE_PORT set to that port
3. connectThat claude dials the port — one nvim window pairs with one Claude session
verifyss -tnp | grep <port> shows an ESTABLISHED socket between claude & nvim
noteA claude started in a plain terminal does not connect — it must be spawned from inside nvim

Config

claudecode.nvim~/.config/nvim/lua/plugins/claudecode.lua
opencode.nvim~/.config/nvim/lua/plugins/opencode.lua · model in ~/.config/opencode/opencode.jsonc
which-key groups~/.config/nvim/lua/plugins/which-key.lua · <leader>a = AI/Claude, <leader>o = opencode
claude CLI~/.local/bin/claude