The first Neovim IDE integration for Claude Code β bringing Anthropic's AI coding assistant to your favorite editor with a pure Lua implementation.
π― TL;DR: When Anthropic released Claude Code with VS Code and JetBrains support, I reverse-engineered their extension and built this Neovim plugin. This plugin implements the same WebSocket-based MCP protocol, giving Neovim users the same AI-powered coding experience.
claudecode-nvim.mp4
When Anthropic released Claude Code, they only supported VS Code and JetBrains. As a Neovim user, I wanted the same experience β so I reverse-engineered their extension and built this.
- π Pure Lua, Zero Dependencies β Built entirely with
vim.loop
and Neovim built-ins - π 100% Protocol Compatible β Same WebSocket MCP implementation as official extensions
- π Fully Documented Protocol β Learn how to build your own integrations (see PROTOCOL.md)
- β‘ First to Market β Beat Anthropic to releasing Neovim support
- π οΈ Built with AI β Used Claude to reverse-engineer Claude's own protocol
" Launch Claude Code in a split
:ClaudeCode
" Claude now sees your current file and selections in real-time!
" Send visual selection as context
:'<,'>ClaudeCodeSend
" Claude can open files, show diffs, and more
- Neovim >= 0.8.0
- Claude Code CLI installed
- Optional: folke/snacks.nvim for enhanced terminal support
Using lazy.nvim:
{
"coder/claudecode.nvim",
config = true,
keys = {
{ "<leader>ac", "<cmd>ClaudeCode<cr>", desc = "Toggle Claude" },
{ "<leader>as", "<cmd>ClaudeCodeSend<cr>", mode = "v", desc = "Send to Claude" },
},
}
That's it! For more configuration options, see Advanced Setup.
- Launch Claude: Run
:ClaudeCode
to open Claude in a split terminal - Send context: Select text and run
:'<,'>ClaudeCodeSend
to send it to Claude - Let Claude work: Claude can now:
- See your current file and selections in real-time
- Open files in your editor
- Show diffs with proposed changes
- Access diagnostics and workspace info
This plugin creates a WebSocket server that Claude Code CLI connects to, implementing the same protocol as the official VS Code extension. When you launch Claude, it automatically detects Neovim and gains full access to your editor.
The extensions use a WebSocket-based variant of the Model Context Protocol (MCP) that only Claude Code supports. The plugin:
- Creates a WebSocket server on a random port
- Writes a lock file to
~/.claude/ide/[port].lock
with connection info - Sets environment variables that tell Claude where to connect
- Implements MCP tools that Claude can call
For the full technical details and protocol documentation, see PROTOCOL.md.
π Read the full reverse-engineering story β
Built with pure Lua and zero external dependencies:
- WebSocket Server - RFC 6455 compliant implementation using
vim.loop
- MCP Protocol - Full JSON-RPC 2.0 message handling
- Lock File System - Enables Claude CLI discovery
- Selection Tracking - Real-time context updates
- Native Diff Support - Seamless file comparison
For deep technical details, see ARCHITECTURE.md.
See DEVELOPMENT.md for build instructions and development guidelines. Tests can be run with make test
.
Full configuration with all options
{
"coder/claudecode.nvim",
dependencies = {
"folke/snacks.nvim", -- Optional for enhanced terminal
},
opts = {
-- Server options
port_range = { min = 10000, max = 65535 },
auto_start = true,
log_level = "info",
-- Terminal options
terminal = {
split_side = "right",
split_width_percentage = 0.3,
provider = "snacks", -- or "native"
},
-- Diff options
diff_opts = {
auto_close_on_accept = true,
vertical_split = true,
},
},
config = true,
keys = {
{ "<leader>ac", "<cmd>ClaudeCode<cr>", desc = "Toggle Claude" },
{ "<leader>as", "<cmd>ClaudeCodeSend<cr>", mode = "v", desc = "Send to Claude" },
{ "<leader>ao", "<cmd>ClaudeCodeOpen<cr>", desc = "Open Claude" },
{ "<leader>ax", "<cmd>ClaudeCodeClose<cr>", desc = "Close Claude" },
},
}
- Claude not connecting? Check
:ClaudeCodeStatus
and verify lock file exists in~/.claude/ide/
- Need debug logs? Set
log_level = "debug"
in setup - Terminal issues? Try
provider = "native"
if using snacks.nvim
- Claude Code CLI by Anthropic
- Inspired by analyzing the official VS Code extension
- Built with assistance from AI (how meta!)