Inspired by 99 : I, like Prime, wanted a tool to allow for me to still be in the driver seat if I am going to spawn an AI to edit my code.
The main difference between jumpy and other tools, like 99, are:
| feature | jumpy | 99 | avante / sidekick | codecompanion inline | claude code / aider |
|---|---|---|---|---|---|
| Interaction model | Inline prompt → hunks in buffer | search / visual / vibe → qfix or inline replace | Sidebar chat → apply | Inline edit → accept/reject | CLI agent → full file writes |
| Review granularity | Per-hunk accept/reject | Per-result (search) or selection replace (visual) | Per-file or per-suggestion | Per-change | Post-hoc (git diff) |
| Context switch | None: you stay in buffer | Minimal; qfix for search | Sidebar opens | Minimal | Leave editor or split terminal |
| LLM output format | Search/replace blocks | CLI provider output (opencode, claude, etc.) | Full file / patch | Full file | Full file via temp |
| Token efficiency | High (only changed lines sent back) | Mode-dependent; visual is targeted | Lower (full context) | Lower | Lower |
| Scope | Single targeted edit | Selection edit, project search, agentic work | Multi-file refactors, chat | Single edit or chat | Whole-project agentic tasks |
Some of the existing features are to be fleshed out, but the sole purpose is to know exactly what I am letting the LLM write into my code. I have no interest in letting it change everything, and only then can I go back and review every change. That being said, here are the features of jumpy:
- inline prompt: describe a change without leaving the buffer
- search/replace hunks: LLM returns only changed sections, not whole files
- in-buffer diff review: proposed edits shown inline with accept/reject before anything is written
- per-hunk control: accept, reject, or reprompt individual hunks
- hunk navigation: jump between proposed changes with
]h/[h - quickfix integration: collect pending hunks across buffers into one list
- token-efficient: sends only the targeted edit context, not full-file rewrites
- multi-provider: openrouter, openai, anthropic
@lspcontext: pull workspace symbols into the prompt when needed- zero context switch: no sidebar, no terminal agent, no leaving your file
So the philosophy here is: yes, I still want to handwrite my code AND use AI, but I prefer that I have full control over what the AI is writing. I don't want to have to wait until it finishes in order to review its changes.
Very open to PRs, issues, etc.! There is no concrete set of guidelines right now. I am quite welcoming to pretty much anything [1]!
[1]: If your PR is very clearly vibe coded slop I am just gonna close it without warning.
Some notes:
- Your PR will be run against the checks here:
.github/workflows/ci.yml - I may at times use AI to review your PRs. A human will still read your PR and have final say
-- lazy.nvim
{
"cachebag/jumpy",
config = function()
require("jumpy").setup({
provider = "anthropic", -- or "openai", "openrouter"
})
end,
}set your API key: export ANTHROPIC_API_KEY="sk-ant-..." (or OPENAI_API_KEY, JUMPY_API_KEY for openrouter).
| Keybind | Action |
|---|---|
<leader>j |
Open prompt, type your change, hit <CR> |
]h / [h |
Next / previous hunk |
<leader>a |
Accept hunk |
<leader>x |
Reject hunk |
<leader>A |
Accept all hunks |
<leader>X |
Reject all hunks |
<leader>r |
Reprompt the hunk under cursor |
MIT