| Crates.io | sidekick |
| lib.rs | sidekick |
| version | 0.2.0 |
| created_at | 2025-10-10 21:10:27.356404+00 |
| updated_at | 2026-01-21 06:22:59.629092+00 |
| description | Seamless integration between Claude Code and Neovim. Protects your workflow by safely coordinating AI edits with your unsaved work. |
| homepage | https://github.com/NishantJoshi00/sidekick |
| repository | https://github.com/NishantJoshi00/sidekick |
| max_upload_size | |
| id | 1877565 |
| size | 81,731 |
Protects your unsaved Neovim work from Claude Code.
How it works:
Demo: Skip to 1:20 to see Sidekick block an edit
curl -sSL https://raw.githubusercontent.com/NishantJoshi00/sidekick/main/scripts/install.sh | bash
This script will:
1. Install Sidekick
cargo install sidekick
Don't have Rust? Install it first:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
2. Configure Claude Code Integration
# In Claude Code
/plugin marketplace add NishantJoshi00/claude-plugins
/plugin install sidekick@nishant-plugins
The plugin automatically configures the necessary hooks for Claude Code integration.
3. Set up shell alias
Add this to your shell configuration (~/.bashrc, ~/.zshrc, etc.):
alias nvim='sidekick neovim'
Then reload your shell:
source ~/.bashrc # or ~/.zshrc
That's it! Now nvim launches with Sidekick integration automatically.
cargo install sidekick
Don't have Rust? Install it first:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Alternative: Install from source
git clone https://github.com/NishantJoshi00/sidekick
cd sidekick
cargo install --path .
Note: If you used the one-line installer above, you can skip this section!
Add this to your shell configuration (~/.bashrc, ~/.zshrc, etc.):
alias nvim='sidekick neovim'
Now every time you run nvim, you'll automatically get the Claude Code integration without thinking about it.
Add to your Claude Code configuration (~/.claude/settings.json or .claude/settings.json):
{
"hooks": {
"PreToolUse": [
{
"matcher": "MultiEdit|Edit|Write",
"hooks": [
{
"type": "command",
"command": "sidekick hook"
}
]
}
],
"PostToolUse": [
{
"matcher": "MultiEdit|Edit|Write",
"hooks": [
{
"type": "command",
"command": "sidekick hook"
}
]
}
]
}
}
That's it! Now when Claude Code attempts to edit a file:
Want Claude Code to see what you've selected in Neovim? Add this hook:
{
"hooks": {
"UserPromptSubmit": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "sidekick hook"
}
]
}
]
}
}
Now when you submit a prompt to Claude Code, any visual selection in Neovim is automatically injected as context:
No selection? Nothing happens — the hook is a no-op.
Just use Neovim like you always do:
nvim <file>
That's it. Seriously.
Because of the shell alias, nvim now launches with Sidekick integration automatically. You won't notice anything different—until Claude Code tries to overwrite your unsaved work, and Sidekick quietly blocks it. Work the way you want. Sidekick stays out of your way.
Socket Path: Both the neovim launcher and hook handler compute the same socket path using blake3(cwd), ensuring they connect to the same Neovim instance
Hook Interception: When Claude Code calls Edit/Write tools, Sidekick intercepts the call via stdin/stdout JSON protocol
Buffer Check: Connects to Neovim via RPC to check if the target file:
modified flag)Decision: Returns Allow or Deny permission to Claude Code, with a message displayed in Neovim when blocked
# Terminal 1: Launch Neovim with integration
cd ~/my-project
sidekick neovim src/main.rs
# Make some edits in Neovim, don't save yet
# Terminal 2: Use Claude Code in the same directory
cd ~/my-project
claude "refactor main.rs to use async/await"
# Result: Claude Code is blocked from modifying main.rs
# You see a message in Neovim: "Claude Code blocked: File src/main.rs has unsaved changes"
# Save your changes, then Claude Code can proceed
Issues and pull requests welcome!
Interested in extending Sidekick to other editors or AI tools? See PHILOSOPHY.md for the roadmap and vision.