nvim-plugin-audit
SkillDev toolsAudit the Neovim plugins in this dotfiles repo one by one. Researches what current Neovim already covers and each plugin's maintenance status and news, asks the user to keep, replace or remove each one with AskUserQuestion, then applies the decisions (keymaps rerouted, :Lazy clean, README), verifies with headless Neovim and commits. Use for "audit my Neovim plugins", "棚卸しして", "Neovim のプラグインを整理したい".
Available today. Use it from your connected AI after setup.
No other account needed.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
Then ask your AI: use the nvim-plugin-audit skill
What this skill tells your AI
The instructions your AI receives, as published by babarot/dotfiles in .claude/skills/nvim-plugin-audit/SKILL.md and read by ahel’s review.
Audit the Neovim plugins in this repository together with the user: build the facts for every plugin, let the user decide one by one, then apply and verify the decisions. Claude Code only (it relies on AskUserQuestion).
Where things are
- Neovim config:
home/.config/nvim/in this repo (~/.configlinks tohome/.config)- Plugin specs:
lua/plugins/*.lua(lazy.nvim, one file per area) - Lockfile:
lazy-lock.json; plugin list with sections and counts:lua/plugins/README.md - Options, keymaps, autocmds:
lua/config/{options,keymaps,autocmds}.lua
- Plugin specs:
- Neovim itself, LSP servers and treesitter parsers come from Nix:
nix/home/tools/neovim.nix. Never install servers or parsers from inside Neovim (no mason, no:TSInstall). - The work Mac applies changes made here after pulling; see AGENTS.md.
Step 1: Establish the baseline
- Get the Neovim version (
nvim --version) and read the bundled release notes:$(dirname $(dirname $(readlink -f $(command -v nvim))))/share/nvim/runtime/doc/news*.txt. List what the core now covers (commands, default keymaps, options, built-in plugins underruntime/pack/dist/opt). - Search the web for recent changes in the plugin ecosystem that affect this config: archived or rewritten plugins, deprecated setup styles, new de facto choices. Keep the source URLs.
Step 2: Build the inventory
For every plugin in lazy-lock.json (and every spec in lua/plugins/, including disabled ones):
- Role, in one line, and the keymaps and commands this config gives it (grep the spec)
- Maintenance: last push and archived flag via
gh api repos/<owner>/<repo> --jq '{pushed_at, archived}' - What replaces it, if anything: a core feature (Step 1), another plugin already in the config (e.g. snacks.nvim), or a successor
- Recent news from the web when it matters (archival, breaking rewrite, deprecation)
- Dependents: other specs that list it in
dependenciesor callrequire('<it>')
Classify each as keep, replace, remove or ask. Judge by how the user works now: agents write most of the code, and Neovim is mainly for reading files and pointing Claude Code at them (claudecode.nvim), so reading and navigation matter more than writing aids. When the user wants to go conservatively, handle "replaced by core or a duplicate" first and leave writing aids for later.
Show the user a short summary (counts, the notable findings such as archived plugins or config that silently does nothing) before asking.
Step 3: Ask plugin by plugin
Use AskUserQuestion, at most 4 questions per call, one plugin (or one tight group, e.g. a plugin and its only dependency) per question:
- The question says what the plugin does in this config, its keymaps, and the last update date (plus "archived" when true)
- Options are concrete actions, not yes/no: "Keep", "Remove", "Replace with ". Put the recommended one first with "(Recommended)"
- Each option's description gives the reason and what takes over (the core feature, the other plugin, or nothing), including news found on the web
- Do not ask about plugins whose fate is obvious and already agreed (e.g. disabled specs); list them as done instead
If the user rejects the question to clarify, stop and ask what they want to know before continuing.
Step 4: Apply
For each removal or replacement:
- Delete the spec (or the block inside a shared file) and any
dependenciesentries pointing at it - Reroute keymaps the user relies on to the replacement (usually in
lua/config/keymaps.lua), keeping the same keys when possible - Update
lua/plugins/README.md: remove the entry, fix the section counts, and note replacements under "Replaced by Neovim itself" - Run
nvim --headless '+Lazy! clean' +qaso the plugin is removed andlazy-lock.jsonis updated - If the change needs something outside Neovim (a server, a parser), add it to
nix/home/tools/neovim.nix, build both hosts as AGENTS.md describes, and ask the user to run darwin-rebuild
Step 5: Verify
With headless Neovim (nvim --headless -c 'lua ...'), check:
- No messages after startup (
vim.api.nvim_exec2('messages', { output = true })) with a real file open - Every rerouted keymap exists (
vim.fn.maparg(...)) and does what it should (e.g. feed the keys and inspect the buffer) - For LSP or treesitter changes:
vim.lsp.get_clients({ bufnr = buf })andvim.treesitter.highlighter.active[buf]on a file of each affected language
Say plainly what could not be checked headless (rendering, popups) and ask the user to look.
Step 6: Commit and report
- Other sessions work in this repo at the same time:
git pull --ff-only, thengit statusandgit diff --cached, and stage only the files this audit changed - Commit in English: an imperative summary, then a short body with the reasons (see AGENTS.md; no session links or attribution trailers)
- Report: a table of decisions, keymaps that changed, what was verified and what the user should check by eye, and the steps for the work Mac (pull,
nvim --headless '+Lazy! restore' '+Lazy! clean' +qa, and darwin-rebuild when Nix changed)
Signals
- GitHub stars
- 779
- Forks
- 92
- Last commit
- Sep 2026
Advanced
- Item type
- skill
- Key
nvim-plugin-audit- Source
- github.com/babarot/dotfiles