config/claude/skills/shannon/SKILL.md
Interact with Neovim via RPC to annotate code, navigate files, and do walkthroughs
npx skillsauth add ahmedelgabri/dotfiles shannonInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
When a prompt arrives from Shannon (indicated by a footer like
(Shannon prompt via Neovim server <addr>)), you have the ability to interact
with the user's Neovim session via RPC.
There are two ways to obtain the Neovim server address:
From a Shannon prompt — Shannon prompts include a footer of the form:
(Shannon prompt via Neovim server /path/to/socket)
Extract the server address from this footer.
Auto-discovery — if no Shannon prompt has been received yet, run the
discovery script. Below, $SKILL_DIR is the absolute path to the directory
containing this SKILL.md file; expand it to its absolute value before
running, since the current working directory is not guaranteed to be the
skill directory.
$SKILL_DIR/scripts/shannon-find-nvim.sh
This finds the Neovim instance running in a sibling tmux pane and prints its server socket path. It exits non-zero if no Neovim is found.
Use nvim --server <addr> --remote-expr '<expr>' to execute Vimscript or Lua in
the user's Neovim. For Lua, wrap with luaeval("...").
The Shannon plugin exposes private helper functions as individual modules for use by this skill. Each returns a single function. Prefer these over raw Neovim API calls.
Open a file (with optional 1-indexed line number):
nvim --server 'luaeval("require(\"wincent.shannon.private.open\")(\"path/to/file\")")' <addr >--remote-expr
nvim --server 'luaeval("require(\"wincent.shannon.private.open\")(\"path/to/file\", 42)")' <addr >--remote-expr
Jump to a line (1-indexed) in the current buffer:
nvim --server 'luaeval("require(\"wincent.shannon.private.jump\")(42)")' <addr >--remote-expr
Add virtual text annotation below a line (1-indexed):
nvim --server 'luaeval("require(\"wincent.shannon.private.annotate\")(42, \"text here\", \"DiagnosticInfo\")")' <addr >--remote-expr
The third argument is a highlight group. Use these to convey meaning:
DiagnosticInfo — informational annotations (blue)DiagnosticWarn — warnings (yellow)DiagnosticError — errors/issues (red)DiagnosticHint — hints/suggestions (green)If omitted, defaults to DiagnosticInfo.
Clear all Shannon annotations in current buffer:
nvim --server 'luaeval("vim.cmd.ShannonClearMarks()")' <addr >--remote-expr
Show a message in Neovim's command area:
nvim --server 'luaeval("vim.api.nvim_echo({{\"message\", \"WarningMsg\"}}, true, {})")' <addr >--remote-expr
Use RPC when:
The Shannon plugin provides the following commands, which can be invoked via RPC:
:ShannonNextMark — jump to the next Shannon extmark in the current buffer
(wraps around).:ShannonPreviousMark — jump to the previous Shannon extmark (wraps around).:ShannonClearMarks — clear all Shannon extmarks in the current buffer.After adding annotations, tell the user they can navigate between marks with
:ShannonNextMark / :ShannonPreviousMark (or their configured mappings). When
you are done with an annotation session and the user has finished reviewing,
clear the marks via RPC:
nvim --server 'luaeval("vim.cmd.ShannonClearMarks()")' <addr >--remote-expr
private.open first.--remote-expr call is synchronous and blocks until Neovim processes it.tools
How to use `jj`, the Jujutsu version control system
tools
Create a commit (or draft a commit message) in a Jujutsu repository
tools
Create a commit (or draft a commit message) in a Git repository
tools
Review a GitHub pull request, examining the summary, linked resources, and diff