:purple_heart: Sponsors
Thank you to the following people:
:sparkles: Features
- :speech_balloon: Copilot Chat meets Zed AI, in Neovim
- :electric_plug: Support for LLMs from Anthropic, Copilot, GitHub Models, DeepSeek, Gemini, Mistral AI, Novita, Ollama, OpenAI, Azure OpenAI, HuggingFace and xAI (or bring your own)
- :robot: Support for Agent Client Protocol, enabling coding with agents like Augment Code, Cagent from Docker, Claude Code, Codex, Gemini CLI, Goose, Kimi CLI and OpenCode
- :heart_hands: User contributed and supported adapters
- :rocket: Inline transformations, code creation and refactoring
- :art: Variables, Slash Commands, Tools and Workflows to improve LLM output
- :brain: Support for rules files like
CLAUDE.md, .cursor/rules and your own custom ones
- :crystal_ball: Native Super Diff for tracking agent edits
- :sparkles: Built-in prompt library for common tasks like advice on LSP errors and code explanations
- :building_construction: Create your own custom prompts, Variables and Slash Commands
- :books: Have multiple chats open at the same time
- :art: Support for vision and images as input
- :muscle: Async execution for fast performance
:camera_flash: In Action
:rocket: Getting Started
Everything you need to know about CodeCompanion (installation, configuration and usage) is within the docs.
:toolbox: 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.
:gift: 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.
:clap: 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 Super Diff, amazing
insert_edit_into_file tool (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