一键导入
shannon
Interact with Neovim via RPC to annotate code, navigate files, and do walkthroughs
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Interact with Neovim via RPC to annotate code, navigate files, and do walkthroughs
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Create a commit (or draft a commit message) in a Git repository
Create a commit (or draft a commit message) in a Jujutsu repository
How to use `jj`, the Jujutsu version control system
Create a GitHub pull request as a draft, auto-generating title and body from commits
Review a GitHub pull request, examining the summary, linked resources, and diff
| name | shannon |
| description | Interact with Neovim via RPC to annotate code, navigate files, and do walkthroughs |
| allowed-tools | ["Bash","Read","Glob","Grep"] |
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.