From quiver
LSP-first code navigation with grep fallback. Provides agents with a reusable strategy for semantic code exploration -- goToDefinition, findReferences, documentSymbol -- with automatic fallback to grep when LSP is unavailable or returns empty results.
npx claudepluginhub yagizdo/quiver --plugin quiverThis skill uses the workspace's default tool permissions.
Reference skill for agents that search the broader codebase. Defines when to use LSP vs Grep/Glob and how to handle fallback.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Checks Next.js compilation errors using a running Turbopack dev server after code edits. Fixes actionable issues before reporting complete. Replaces `next build`.
Guides code writing, review, and refactoring with Karpathy-inspired rules to avoid overcomplication, ensure simplicity, surgical changes, and verifiable success criteria.
Share bugs, ideas, or general feedback.
Reference skill for agents that search the broader codebase. Defines when to use LSP vs Grep/Glob and how to handle fallback.
Three semantic operations where LSP outperforms grep. For everything else, use Grep/Glob/Read directly.
| Operation | Use When | Grep Fallback |
|---|---|---|
goToDefinition | Find where a function, class, or type is defined | Grep for function {name}, class {name}, def {name}, const {name} |
findReferences | Find all callers or consumers of a symbol | Grep for the symbol name (noisier -- includes comments, strings, partial matches) |
documentSymbol | Get a structural overview of a file's exports and symbols | Read the file and parse manually |
Not covered by this skill (Grep/Glob is already sufficient):
Agents that search the broader codebase should include this block in their prompt. The dispatching skill passes lsp_available: true|false as part of the agent's context.
## Code Navigation Strategy
You have been provided an `lsp_available` flag in your context.
**When `lsp_available: true`:**
- For finding where a function/class/type is defined: use LSP goToDefinition first.
- For finding all callers or consumers of a symbol: use LSP findReferences first.
- For getting a structural overview of a file: use LSP documentSymbol first.
- If LSP returns empty or unhelpful results for any operation, inform the user:
"LSP returned no results for {operation} on `{symbol}` -- falling back to grep-based search."
Then use the grep equivalent from the catalog above.
- For file discovery and pattern matching: always use Grep/Glob regardless of LSP availability.
**When `lsp_available: false`:**
- Use Grep, Glob, and Read for all code navigation.
Skills that dispatch code-exploration agents (/plan, /review) run this detection once before agent dispatch. The result is passed to all agents as context.
Check project memory for cached LSP preference.
lsp_declined found: set lsp_available=false, skip to step 4.lsp_confirmed found: set lsp_available=true, skip to step 4.Attempt an LSP probe.
documentSymbol on any source file from the project root).lsp_available=true, cache lsp_confirmed in project memory, skip to step 4.LSP not available -- prompt user.
Detect project language from manifest files (package.json, Gemfile, requirements.txt, pubspec.yaml, go.mod, Cargo.toml, Package.swift, etc.).
Use AskUserQuestion to suggest installation:
LSP is not available for this project. Installing a language server (e.g., {recommended_server} for {language}) would enable better code navigation -- go-to-definition, find-references, and symbol search. Would you like to set it up? (You can always use /plan and /review without it -- grep-based navigation works fine.)
Buttons: ["Yes, help me set it up", "No, continue with grep"]
If user accepts: provide installation instructions for the detected language server, re-probe LSP, cache result in project memory.
If user declines: set lsp_available=false, cache lsp_declined in project memory.
Pass lsp_available flag to all dispatched agents as part of their context.
| Language | Recommended Server | Install Command |
|---|---|---|
| TypeScript/JavaScript | typescript-language-server | npm install -g typescript-language-server typescript |
| Python | pyright | npm install -g pyright or pip install pyright |
| Go | gopls | go install golang.org/x/tools/gopls@latest |
| Rust | rust-analyzer | Install via rustup or IDE extension |
| Swift | sourcekit-lsp | Included with Xcode |
| Dart/Flutter | dart language-server | Included with Dart SDK |
| Ruby | solargraph | gem install solargraph |
| Java/Kotlin | jdtls | Install via IDE or manually |
LSP preference is stored in project memory:
lsp_preference.md in the project's auto-memory directoryIf your agent searches the broader codebase (beyond files it already knows about), reference this skill:
lsp_available context to your agent.Trigger: Reference skill -- not directly invoked. Used by the plan, review, and any agent skill that searches the broader codebase.
Setup:
plan or review) loads in a Claude Code session.Expected behavior:
lsp_available flag to every agent prompt that searches the codebase.goToDefinition / findReferences / documentSymbol first when lsp_available: true, falling back to grep on empty results.lsp_available: false, agents use Grep / Glob / Read for all navigation.lsp_confirmed or lsp_declined) is cached in project memory at lsp_preference.md and reused across sessions.Verification checklist:
/plan and /review both run LSP detection exactly once before agent dispatch (not per agent).lsp_available: in the agent context.lsp_preference.md after the first detection run.Known gotchas:
forget LSP preference or manual lsp_preference.md removal.