olimorris/codecompanion.nvim
β¨ AI Coding, Vim Style
README
Code with LLMs and Agents via the in-built adapters, the community adapters or by building your own
New features are always announced here
π Sponsors
Thank you to the following people:
If you love CodeCompanion and use it in your workflow, please consider sponsoring me
β¨ Features
- π¬ Copilot Chat meets Zed AI, in Neovim
- π Support for LLMs from Anthropic, Copilot, GitHub Models, DeepSeek, Gemini, Mistral AI, Novita, Ollama, OpenAI, Azure OpenAI, HuggingFace and xAI (or bring your own)
- π€ Support for Agent Client Protocol, enabling coding with agents like Augment Code, Cagent from Docker, Claude Code, Codex, Gemini CLI, Goose, Kimi CLI, Kiro, Mistral Vibe and OpenCode
- π«Ά User contributed and supported adapters
- π Support for Model Context Protocol (MCP)
- π Inline transformations, code creation and refactoring
- π¨ Editor Context, Slash Commands, Agents/Tools and Workflows to improve LLM output
- π§ Support for rules files like
CLAUDE.md,.cursor/rulesand your own custom ones - β¨ Built-in prompt library for common tasks like advice on LSP errors and code explanations
- ποΈ Create your own custom prompts, Editor Context and Slash Commands
- π Have multiple chats open at the same time
- π¨ Support for vision and images as input
- πͺ Async execution for fast performance
πΈ In Action
The Chat Buffer
WelcomeToCodeCompanion.mp4
Tools + Agentic Workflows
ToolsAndAgenticWorkflows.mp4
Inline Assistant
InlineAssistant.mp4
π Getting Started
Everything you need to know about CodeCompanion (installation, configuration and usage) is within the docs.
π§° Troubleshooting
Before raising an issue, there are a number of steps you can take to troubleshoot a problem:
Checkhealth
Run :checkhealth codecompanion and check all dependencies are installed correctly. Also take note of the log file path.
Turn on logging
Update your config and turn debug logging on:
-- lazy.nvim
{
"olimorris/codecompanion.nvim",
dependencies = {
"nvim-lua/plenary.nvim",
"nvim-treesitter/nvim-treesitter",
},
opts = {
-- NOTE: The log_level is in `opts.opts`
opts = {
log_level = "DEBUG", -- or "TRACE"
},
},
},
-- Other package managers
require("codecompanion").setup({
opts = {
log_level = "DEBUG", -- or "TRACE"
}
})and inspect the log file as per the location from the checkhealth command.
Try with a minimal.lua file
A large proportion of issues which are raised in Neovim plugins are to do with a user's own config. That's why I always ask users to fill in a minimal.lua file when they raise an issue. We can rule out their config being an issue and it allows me to recreate the problem.
For this purpose, I have included a minimal.lua file in the repository for you to test out if you're facing issues. Simply copy the file, edit it and run neovim with nvim --clean -u minimal.lua.
π Contributing
I am open to contributions but they will be implemented at my discretion. Feel free to open up a discussion before embarking on a PR and please read the CONTRIBUTING.md guide.
π Acknowledgements
- Steven Arcangeli for his genius creation of the chat buffer and his feedback early on
- Wtf.nvim for the LSP assistant action
- CopilotChat.nvim for the rendering and usability of the chat
buffer - Aerial.nvim for the Tree-sitter parsing which inspired the symbols Slash
Command - Saghen for the fantastic docs inspiration from blink.cmp and continued PRs to the project
- Catwell for the queue inspiration that I use to stack agents and tools
- bassamsdata for the amazing
insert_edit_into_filetool (the list is endless) and ongoing contributions to this project - ravitemer for the fantastic extensions API
- Davidyz for his continued, excellent contributions that keep CodeCompanion going
- Conrad Irwin, Agus Zubiaga and Morgan Krey from Zed Industries for their support in implementing ACP











