v0.8.0: enumerate MCP tools explicitly in tools:/allowed-tools: (#1)

A trailing mcp__…__* wildcard in an agent's tools: / a skill's
allowed-tools: does not expand — verified by spawning the companion
agent, which saw zero mcp__ tools despite the parent session having
all 19 connected. Working plugins (cluster) enumerate every MCP tool
by full name; do the same here.

- agents/companion.md, skills/*: tools:/allowed-tools: now list all 19
  mcp__plugin_nvim-agentic-companion_neovim__vim_* tools explicitly
- companion.md: drop the stale nvim-mcp-repin.path/.service reference
  (re-pin is now the bridge's ExecStartPost); spell out the launch-race
  (issue #2) in the unavailability runbook

Fixes #1. Refs #2.
This commit is contained in:
oleks
2026-05-21 14:41:21 +03:00
parent 9a9d477d5c
commit f18c8410ad
5 changed files with 14 additions and 11 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "nvim-agentic-companion",
"version": "0.7.0",
"version": "0.8.0",
"description": "Neovim companion that pairs the running editor (via mcp-neovim-server) with the official Claude Code IDE plugin (coder/claudecode.nvim). Provides an opinionated agent and skills for introspecting your live nvim state (buffers, keymaps, diagnostics, plugins), driving it on your behalf (open files, run keymaps, execute lua), and handing work cleanly to the in-editor Claude Code session for buffer edits.",
"author": {
"name": "oleks",
+10 -7
View File
@@ -2,7 +2,7 @@
name: companion
description: Neovim companion — answers questions about the user's *running* nvim instance and acts inside it on their behalf. Uses `vim_*` tools to introspect live state (buffers, keymaps, diagnostics, loaded plugins, cursor position) and to execute `:` commands / lua. Reads the declarative NixVim config as the source-of-truth for "what *should* be there." For buffer-editing work, hands off to the in-editor `coder/claudecode.nvim` session instead of duplicating it. Trigger on <!-- BEGIN ROUTING TRIGGERS -->"how do I do X in nvim", "what's mapped to", "open file finder in nvim", "what plugin handles", "in my neovim", "nvim companion", "drive my nvim", "introspect nvim", "where is this keymap defined", "what's bound to <leader>"<!-- END ROUTING TRIGGERS -->.
color: green
tools: Bash, Read, Edit, Write, Glob, Grep, Skill, AskUserQuestion, WebFetch, WebSearch, TodoWrite, mcp__plugin_nvim-agentic-companion_neovim__*
tools: Bash, Read, Edit, Write, Glob, Grep, Skill, AskUserQuestion, WebFetch, WebSearch, TodoWrite, mcp__plugin_nvim-agentic-companion_neovim__vim_buffer, mcp__plugin_nvim-agentic-companion_neovim__vim_buffer_save, mcp__plugin_nvim-agentic-companion_neovim__vim_buffer_switch, mcp__plugin_nvim-agentic-companion_neovim__vim_command, mcp__plugin_nvim-agentic-companion_neovim__vim_edit, mcp__plugin_nvim-agentic-companion_neovim__vim_file_open, mcp__plugin_nvim-agentic-companion_neovim__vim_fold, mcp__plugin_nvim-agentic-companion_neovim__vim_grep, mcp__plugin_nvim-agentic-companion_neovim__vim_health, mcp__plugin_nvim-agentic-companion_neovim__vim_jump, mcp__plugin_nvim-agentic-companion_neovim__vim_macro, mcp__plugin_nvim-agentic-companion_neovim__vim_mark, mcp__plugin_nvim-agentic-companion_neovim__vim_register, mcp__plugin_nvim-agentic-companion_neovim__vim_search, mcp__plugin_nvim-agentic-companion_neovim__vim_search_replace, mcp__plugin_nvim-agentic-companion_neovim__vim_status, mcp__plugin_nvim-agentic-companion_neovim__vim_tab, mcp__plugin_nvim-agentic-companion_neovim__vim_visual, mcp__plugin_nvim-agentic-companion_neovim__vim_window
---
# nvim companion
@@ -192,14 +192,17 @@ alone. The path has three links that can each break — walk them in
order when telling the user what to check:
1. **nvim** — is it running, and did it create the socket at
`{{nvim_socket}}`? (`ls` it.) No socket ⇒ restart nvim. On a nvim
restart the socket-appearance inotify event re-pins the pool
automatically (`nvim-mcp-repin.path``.service`).
`{{nvim_socket}}`? (`ls` it.) No socket ⇒ restart nvim. The socket's
appearance is what starts the bridge (`nvim-mcp-bridge.path`, an
inotify watch); the bridge's own `ExecStartPost` then re-pins the
pool. No separate repin unit.
2. **bridge / pool** — if the socket exists but tools are absent,
`systemctl status nvim-mcp-bridge` and the pool status at
`http://127.0.0.1:12010/pools/neovim` are the next suspects.
3. **This session** — MCP servers attach at `claude` launch. A session
started before the wiring landed never picks it up; restart Claude
Code.
3. **This session** — MCP servers attach **once, at `claude` launch**,
and a failed handshake is not retried. A session started while the
bridge upstream was still coming up (e.g. seconds after a nvim
restart) never registers the `vim_*` tools — restart Claude Code
once the bridge reads `active`.
Do not pretend to introspect when you can't.
+1 -1
View File
@@ -12,7 +12,7 @@ description: |
buffer", "have Claude edit my file", "send this to Claude in nvim",
"let Claude in the editor handle it".
disable-model-invocation: false
allowed-tools: Bash, Read, Skill, AskUserQuestion, mcp__plugin_nvim-agentic-companion_neovim__*
allowed-tools: Bash, Read, Skill, AskUserQuestion, mcp__plugin_nvim-agentic-companion_neovim__vim_buffer, mcp__plugin_nvim-agentic-companion_neovim__vim_buffer_save, mcp__plugin_nvim-agentic-companion_neovim__vim_buffer_switch, mcp__plugin_nvim-agentic-companion_neovim__vim_command, mcp__plugin_nvim-agentic-companion_neovim__vim_edit, mcp__plugin_nvim-agentic-companion_neovim__vim_file_open, mcp__plugin_nvim-agentic-companion_neovim__vim_fold, mcp__plugin_nvim-agentic-companion_neovim__vim_grep, mcp__plugin_nvim-agentic-companion_neovim__vim_health, mcp__plugin_nvim-agentic-companion_neovim__vim_jump, mcp__plugin_nvim-agentic-companion_neovim__vim_macro, mcp__plugin_nvim-agentic-companion_neovim__vim_mark, mcp__plugin_nvim-agentic-companion_neovim__vim_register, mcp__plugin_nvim-agentic-companion_neovim__vim_search, mcp__plugin_nvim-agentic-companion_neovim__vim_search_replace, mcp__plugin_nvim-agentic-companion_neovim__vim_status, mcp__plugin_nvim-agentic-companion_neovim__vim_tab, mcp__plugin_nvim-agentic-companion_neovim__vim_visual, mcp__plugin_nvim-agentic-companion_neovim__vim_window
---
# claude-code-handoff — let the in-editor Claude do the editing
+1 -1
View File
@@ -13,7 +13,7 @@ description: |
neo-tree", "run this command in my nvim", "go to next diagnostic",
"save my buffer".
disable-model-invocation: false
allowed-tools: Bash, Read, Skill, AskUserQuestion, mcp__plugin_nvim-agentic-companion_neovim__*
allowed-tools: Bash, Read, Skill, AskUserQuestion, mcp__plugin_nvim-agentic-companion_neovim__vim_buffer, mcp__plugin_nvim-agentic-companion_neovim__vim_buffer_save, mcp__plugin_nvim-agentic-companion_neovim__vim_buffer_switch, mcp__plugin_nvim-agentic-companion_neovim__vim_command, mcp__plugin_nvim-agentic-companion_neovim__vim_edit, mcp__plugin_nvim-agentic-companion_neovim__vim_file_open, mcp__plugin_nvim-agentic-companion_neovim__vim_fold, mcp__plugin_nvim-agentic-companion_neovim__vim_grep, mcp__plugin_nvim-agentic-companion_neovim__vim_health, mcp__plugin_nvim-agentic-companion_neovim__vim_jump, mcp__plugin_nvim-agentic-companion_neovim__vim_macro, mcp__plugin_nvim-agentic-companion_neovim__vim_mark, mcp__plugin_nvim-agentic-companion_neovim__vim_register, mcp__plugin_nvim-agentic-companion_neovim__vim_search, mcp__plugin_nvim-agentic-companion_neovim__vim_search_replace, mcp__plugin_nvim-agentic-companion_neovim__vim_status, mcp__plugin_nvim-agentic-companion_neovim__vim_tab, mcp__plugin_nvim-agentic-companion_neovim__vim_visual, mcp__plugin_nvim-agentic-companion_neovim__vim_window
---
# editor-act — do things in the user's nvim
+1 -1
View File
@@ -12,7 +12,7 @@ description: |
"current selection", "what's the cursor on", "any diagnostics",
"lualine theme actually applied".
disable-model-invocation: false
allowed-tools: Bash, Read, Glob, Grep, mcp__plugin_nvim-agentic-companion_neovim__*
allowed-tools: Bash, Read, Glob, Grep, mcp__plugin_nvim-agentic-companion_neovim__vim_buffer, mcp__plugin_nvim-agentic-companion_neovim__vim_buffer_save, mcp__plugin_nvim-agentic-companion_neovim__vim_buffer_switch, mcp__plugin_nvim-agentic-companion_neovim__vim_command, mcp__plugin_nvim-agentic-companion_neovim__vim_edit, mcp__plugin_nvim-agentic-companion_neovim__vim_file_open, mcp__plugin_nvim-agentic-companion_neovim__vim_fold, mcp__plugin_nvim-agentic-companion_neovim__vim_grep, mcp__plugin_nvim-agentic-companion_neovim__vim_health, mcp__plugin_nvim-agentic-companion_neovim__vim_jump, mcp__plugin_nvim-agentic-companion_neovim__vim_macro, mcp__plugin_nvim-agentic-companion_neovim__vim_mark, mcp__plugin_nvim-agentic-companion_neovim__vim_register, mcp__plugin_nvim-agentic-companion_neovim__vim_search, mcp__plugin_nvim-agentic-companion_neovim__vim_search_replace, mcp__plugin_nvim-agentic-companion_neovim__vim_status, mcp__plugin_nvim-agentic-companion_neovim__vim_tab, mcp__plugin_nvim-agentic-companion_neovim__vim_visual, mcp__plugin_nvim-agentic-companion_neovim__vim_window
---
# editor-introspect — read the live nvim instance