Claude Code IDE for Emacs provides native integration with Claude Code CLI through the Model Context Protocol (MCP). Unlike simple terminal wrappers, this package creates a bidirectional bridge between Claude and Emacs, enabling Claude to understand and leverage Emacs’ powerful features—from LSP and project management to custom Elisp functions. This transforms Claude into a true Emacs-aware AI assistant that works within your existing workflow and can interact with your entire Emacs ecosystem.
- Automatic project detection and session management
- Terminal integration with full color support using vterm or eat
- MCP protocol implementation for IDE integration
- Tool support for file operations, editor state, and workspace info
- Extensible MCP tools server for accessing Emacs commands (xrefs, tree-sitter, project info, e.g.)
- Diagnostic integration with Flycheck and Flymake
- Advanced diff view with ediff integration
- Tab-bar support for proper context switching
- Selection and buffer tracking for better context awareness
This package enables Claude Code to leverage the full power of Emacs through MCP tools integration. Claude can directly access and utilize Emacs capabilities including:
- Language Server Protocol (LSP) integration through xref commands for intelligent code navigation (eglot, lsp-mode and others)
- Tree-sitter for syntax tree analysis and understanding code structure at the AST level
- Imenu for structured symbol listing and navigation within files
- Project integration for project-aware operations
- Any Emacs command or function can be exposed as an MCP tool, allowing Claude to:
- Perform project-wide searches and refactoring
- Access specialized modes and their features
- Execute custom Elisp functions tailored to your workflow
This deep integration means Claude Code understands your project context and can leverage Emacs’ extensive ecosystem to provide more intelligent and context-aware assistance.
Claude Code automatically knows which file you’re currently viewing in Emacs
Claude Code can access and work with selected text in your buffers
Integrated ediff view for code changes, with Claude Code able to directly access diagnostic data (errors, warnings, etc.) from opened files
Automatically mention and reference selected text in Claude conversations
Resume previous Claude Code conversations with the –resume flag
- Emacs 28.1 or higher
- Claude Code CLI installed and available in PATH
- vterm or eat package (for terminal support)
Follow the installation instructions at Claude Code Documentation.
Currently, this package is in early development. To install using use-package and straight.el:
The easiest way to interact with Claude Code IDE is through the transient menu interface, which provides visual access to all available commands. Simply run M-x claude-code-ide-menu to open the interactive menu.
| M-x claude-code-ide-menu | Open transient menu with all Claude Code commands |
| M-x claude-code-ide-emacs-tools-setup | Set up built-in MCP tools (e.g. xref, project) |
| M-x claude-code-ide | Start Claude Code for the current project |
| M-x claude-code-ide-send-prompt | Send prompt to Claude from minibuffer input |
| M-x claude-code-ide-continue | Continue most recent conversation in directory |
| M-x claude-code-ide-resume | Resume Claude Code with previous conversation |
| M-x claude-code-ide-stop | Stop Claude Code for the current project |
| M-x claude-code-ide-switch-to-buffer | Switch to project’s Claude buffer |
| M-x claude-code-ide-list-sessions | List all active Claude Code sessions and switch |
| M-x claude-code-ide-check-status | Check if Claude Code CLI is installed and working |
| M-x claude-code-ide-insert-at-mentioned | Send selected text to Claude prompt |
| M-x claude-code-ide-send-escape | Send escape key to Claude terminal |
| M-x claude-code-ide-insert-newline | Insert newline in Claude prompt (sends \ + Enter) |
| M-x claude-code-ide-toggle | Toggle visibility of Claude Code window |
| M-x claude-code-ide-show-debug | Show the debug buffer with WebSocket messages |
| M-x claude-code-ide-clear-debug | Clear the debug buffer |
Claude Code IDE automatically detects your project using Emacs’ built-in project.el. Each project gets its own Claude Code instance with a unique buffer name like *claude-code[project-name]*.
You can run multiple Claude Code instances simultaneously for different projects. Use claude-code-ide-list-sessions to see all active sessions and switch between them.
- Running claude-code-ide when a session is already active will toggle the window visibility
- The window can be closed with standard Emacs window commands (C-x 0) without stopping Claude
| claude-code-ide-cli-path | Path to Claude Code CLI | "claude" |
| claude-code-ide-buffer-name-function | Function for buffer naming | claude-code-ide--default-buffer-name |
| claude-code-ide-cli-debug | Enable CLI debug mode (-d flag) | nil |
| claude-code-ide-cli-extra-flags | Additional CLI flags (e.g. “–model”) | "" |
| claude-code-ide-debug | Enable debug logging | nil |
| claude-code-ide-terminal-backend | Terminal backend (vterm or eat) | 'vterm |
| claude-code-ide-log-with-context | Include session context in log messages | t |
| claude-code-ide-debug-buffer | Buffer name for debug output | "*claude-code-ide-debug*" |
| claude-code-ide-use-side-window | Use side window vs regular buffer | t |
| claude-code-ide-window-side | Side for Claude window | 'right |
| claude-code-ide-window-width | Width for side windows (left/right) | 90 |
| claude-code-ide-window-height | Height for side windows (top/bottom) | 20 |
| claude-code-ide-focus-on-open | Focus Claude window when opened | t |
| claude-code-ide-focus-claude-after-ediff | Focus Claude window after opening ediff | t |
| claude-code-ide-show-claude-window-in-ediff | Show Claude window during ediff | t |
| claude-code-ide-system-prompt | Custom system prompt to append | nil |
| claude-code-ide-enable-mcp-server | Enable MCP tools server | nil |
| claude-code-ide-mcp-server-port | Port for MCP tools server | nil (auto-select) |
| claude-code-ide-mcp-server-tools | Alist of exposed Emacs functions | nil |
| claude-code-ide-diagnostics-backend | Diagnostics backend (auto/flycheck/flymake) | 'auto |
| claude-code-ide-prevent-reflow-glitch | Prevent terminal reflow glitch (bug #1422) | t |
Claude Code buffers open in a side window by default. You can customize the placement:
Or, if you’d prefer to use a regular window:
Claude Code IDE supports both vterm and eat as terminal backends. By default, it uses vterm, but you can switch to eat if preferred:
The eat backend is a pure Elisp terminal emulator that may work better in some environments where vterm compilation is problematic. Both backends provide full terminal functionality including color support and special key handling.
Claude Code IDE adds custom keybindings to the terminal for easier interaction:
| M-RET | claude-code-ide-insert-newline | Insert a newline in the prompt |
| C-<escape> | claude-code-ide-send-escape | Send escape key to cancel operations |
These keybindings are automatically set up for both vterm and eat backends and only apply within Claude Code terminal buffers.
Claude Code IDE includes a temporary workaround for a known Claude Code bug (#1422) where terminal reflows during window resizes can cause uncontrollable scrolling. This workaround is enabled by default but can be disabled if needed:
The workaround will be removed once the upstream bug is fixed.
Claude Code IDE supports both Flycheck and Flymake for code diagnostics. By default, it will automatically detect which one is active:
You can customize how Claude Code buffers are named:
You can pass additional flags to the Claude Code CLI:
Note: These flags are appended to the Claude command after any built-in flags like -d (debug) or -r (resume).
You can append a custom system prompt to Claude’s default prompt, allowing you to customize Claude’s behavior for specific projects or contexts:
When set, this adds the --append-system-prompt flag to the Claude command. Set to nil to disable (default).
To enable debug mode for Claude Code CLI (passes the -d flag):
To enable debug logging within Emacs (logs WebSocket messages and JSON-RPC communication):
Then view debug logs with:
- M-x claude-code-ide-show-debug - Show the debug buffer
- M-x claude-code-ide-clear-debug - Clear the debug buffer
The debug buffer shows:
- WebSocket connection events
- All JSON-RPC messages (requests/responses)
- Error messages and diagnostics
- General debug information with session context
Using git worktrees is the recommended way for running multiple Claude Code instances on different branches of the same project. This allows you to develop features or fix bugs in parallel:
Each worktree is treated as a separate project by project.el, allowing you to have independent Claude Code sessions with their own buffers (e.g., *claude-code[myproject]* and *claude-code[myproject-worktree]*).
Claude Code IDE includes built-in MCP tools that expose Emacs functionality to Claude, enabling powerful code navigation and analysis capabilities:
- xref-find-references - Find all references to a symbol throughout the project
- xref-find-apropos - Find symbols matching a pattern across the entire project
- treesit-info - Get tree-sitter syntax tree information for deep code structure analysis
- imenu-list-symbols - List all symbols (functions, classes, variables) in a file using imenu
- project-info - Get information about the current project (directory, files, etc.)
To enable these tools, add to your configuration:
Once enabled, Claude can use these tools to navigate your codebase. For example:
- “Find the definition of function foo”
- “Show me all places where this variable is used”
- “What type of AST node is under the cursor?”
- “Analyze the parse tree of this entire file”
- “List all functions and variables in this file”
- “How many files are in this project?”
You can expose your own Emacs functions to Claude through the MCP tools system. This allows Claude to interact with specialized Emacs features, custom commands, or domain-specific functionality.
Each tool definition in claude-code-ide-mcp-server-tools follows this format:
This project is licensed under the GNU General Public License v3.0 or later. See the LICENSE file for details.
- Claude Code CLI
- Claude Code VS Code Extension
- claudecode.nvim - Neovim integration
.png)






