seamless neovim integration with goose - work with a powerful AI agent without leaving your editor
This plugin provides a bridge between neovim and the goose AI agent, creating a chat interface while capturing editor context (current file, selections) to enhance your prompts. It maintains persistent sessions tied to your workspace, allowing for continuous conversations with the AI assistant similar to what tools like Cursor AI offer.
Install the plugin with your favorite package manager. See the Configuration section below for customization options.
{
"azorng/goose.nvim",
config = function()
require("goose").setup({})
end,
dependencies = {
"nvim-lua/plenary.nvim",
{
"MeanderingProgrammer/render-markdown.nvim",
opts = {
anti_conceal = { enabled = false },
},
}
},
}
-- Default configuration with all available options
require('goose').setup({
prefered_picker = nil, -- 'telescope', 'fzf', 'mini.pick', 'snacks', if nil, it will use the best available picker
default_global_keymaps = true, -- If false, disables all default global keymaps
keymap = {
global = {
toggle = '<leader>gg', -- Open goose. Close if opened
open_input = '<leader>gi', -- Opens and focuses on input window on insert mode
open_input_new_session = '<leader>gI', -- Opens and focuses on input window on insert mode. Creates a new session
open_output = '<leader>go', -- Opens and focuses on output window
toggle_focus = '<leader>gt', -- Toggle focus between goose and last window
close = '<leader>gq', -- Close UI windows
toggle_fullscreen = '<leader>gf', -- Toggle between normal and fullscreen mode
select_session = '<leader>gs', -- Select and load a goose session
goose_mode_chat = '<leader>gmc', -- Set goose mode to `chat`. (Tool calling disabled. No editor context besides selections)
goose_mode_auto = '<leader>gma', -- Set goose mode to `auto`. (Default mode with full agent capabilities)
configure_provider = '<leader>gp', -- Quick provider and model switch from predefined list
diff_open = '<leader>gd', -- Opens a diff tab of a modified file since the last goose prompt
diff_next = '<leader>g]', -- Navigate to next file diff
diff_prev = '<leader>g[', -- Navigate to previous file diff
diff_close = '<leader>gc', -- Close diff view tab and return to normal editing
diff_revert_all = '<leader>gra', -- Revert all file changes since the last goose prompt
diff_revert_this = '<leader>grt', -- Revert current file changes since the last goose prompt
},
window = {
submit = '<cr>', -- Submit prompt (normal mode)
submit_insert = '<cr>', -- Submit prompt (insert mode)
close = '<esc>', -- Close UI windows
stop = '<C-c>', -- Stop goose while it is running
next_message = ']]', -- Navigate to next message in the conversation
prev_message = '[[', -- Navigate to previous message in the conversation
mention_file = '@', -- Pick a file and add to context. See File Mentions section
toggle_pane = '<tab>', -- Toggle between input and output panes
prev_prompt_history = '<up>', -- Navigate to previous prompt in history
next_prompt_history = '<down>' -- Navigate to next prompt in history
}
},
ui = {
window_width = 0.35, -- Width as percentage of editor width
input_height = 0.15, -- Input height as percentage of window height
fullscreen = false, -- Start in fullscreen mode (default: false)
layout = "right", -- Options: "center" or "right"
floating_height = 0.8, -- Height as percentage of editor height for "center" layout
display_model = true, -- Display model name on top winbar
display_goose_mode = true -- Display mode on top winbar: auto|chat
},
providers = {
--[[
Define available providers and their models for quick model switching
anthropic|azure|bedrock|databricks|google|groq|ollama|openai|openrouter
Example:
openrouter = {
"anthropic/claude-3.5-sonnet",
"openai/gpt-4.1",
},
ollama = {
"cogito:14b"
}
--]]
}
})
The plugin provides the following actions that can be triggered via keymaps, commands, or the Lua API:
Action | Default keymap | Command | API Function |
---|---|---|---|
Open goose. Close if opened | <leader>gg |
:Goose |
require('goose.api').toggle() |
Open input window (current session) | <leader>gi |
:GooseOpenInput |
require('goose.api').open_input() |
Open input window (new session) | <leader>gI |
:GooseOpenInputNewSession |
require('goose.api').open_input_new_session() |
Open output window | <leader>go |
:GooseOpenOutput |
require('goose.api').open_output() |
Toggle focus goose / last window | <leader>gt |
:GooseToggleFocus |
require('goose.api').toggle_focus() |
Close UI windows | <leader>gq |
:GooseClose |
require('goose.api').close() |
Toggle fullscreen mode | <leader>gf |
:GooseToggleFullscreen |
require('goose.api').toggle_fullscreen() |
Select and load session | <leader>gs |
:GooseSelectSession |
require('goose.api').select_session() |
Configure provider and model | <leader>gp |
:GooseConfigureProvider |
require('goose.api').configure_provider() |
Open diff view of changes | <leader>gd |
:GooseDiff |
require('goose.api').diff_open() |
Navigate to next file diff | <leader>g] |
:GooseDiffNext |
require('goose.api').diff_next() |
Navigate to previous file diff | <leader>g[ |
:GooseDiffPrev |
require('goose.api').diff_prev() |
Close diff view tab | <leader>gc |
:GooseDiffClose |
require('goose.api').diff_close() |
Revert all file changes | <leader>gra |
:GooseRevertAll |
require('goose.api').diff_revert_all() |
Revert current file changes | <leader>grt |
:GooseRevertThis |
require('goose.api').diff_revert_this() |
Run prompt (continue session) | - | :GooseRun <prompt> |
require('goose.api').run("prompt") |
Run prompt (new session) | - | :GooseRunNewSession <prompt> |
require('goose.api').run_new_session("prompt") |
Stop goose while it is running | <C-c> |
:GooseStop |
require('goose.api').stop() |
Pick a file and add to context | @ |
- | - |
Navigate to next message | ]] |
- | - |
Navigate to previous message | [[ |
- | - |
Navigate to previous prompt in history | <up> |
- | require('goose.api').prev_history() |
Navigate to next prompt in history | <down> |
- | require('goose.api').next_history() |
Toggle input/output panes | <tab> |
- | - |
The following editor context is automatically captured and included in your conversations.
Context Type | Description |
---|---|
Current file | Path to the focused file before entering goose |
Selected text | Text and lines currently selected in visual mode |
Mentioned files | File info added through mentions |
Diagnostics | Error diagnostics from the current file (if any) |
You can reference files in your project directly in your conversations with Goose. This is useful when you want to ask about or provide context about specific files. Type @
in the input window to trigger the file picker.
Supported pickers include fzf-lua
, telescope
, mini.pick
, snacks
If you're new to goose:
What is Goose?
Installation:
goose
command is available after installationConfiguration:
goose configure
to set up your LLM provider (Claude 3.7 Sonnet is recommended)