Install
openclaw skills install lspMulti-language code navigation via persistent LSP daemons. Supports Python (pyright), TypeScript/JS, Rust, Go, C/C++, Bash, Java, CSS, HTML, JSON. Auto-detec...
openclaw skills install lspMulti-language LSP client that manages per-language background daemons. Auto-detects the language from file extension and routes queries to the correct server. Each server lazy-starts on first use and idles out after 5 minutes of inactivity.
Use this instead of grep/read when you need to:
| Language | Server | Extensions | Install |
|---|---|---|---|
| Python | pyright-langserver | .py, .pyi, .pyx | npm install -g pyright |
| TypeScript/JS | typescript-language-server | .ts, .tsx, .js, .jsx, .mjs, .cjs | npm install -g typescript-language-server typescript |
| Rust | rust-analyzer | .rs | rustup component add rust-analyzer |
| Go | gopls | .go | go install golang.org/x/tools/gopls@latest |
| C/C++ | clangd | .c, .h, .cpp, .cc, .hpp | apt install clangd or brew install llvm |
| Bash | bash-language-server | .sh, .bash, .zsh | npm install -g bash-language-server |
| Java | jdtls | .java | eclipse.jdt.ls |
| CSS | vscode-css-language-server | .css, .scss, .less | npm install -g vscode-langservers-extracted |
| HTML | vscode-html-language-server | .html, .htm | npm install -g vscode-langservers-extracted |
| JSON | vscode-json-language-server | .json, .jsonc | npm install -g vscode-langservers-extracted |
Only install the servers you need. The skill auto-detects which are available and reports helpful install commands for missing ones.
The skill includes a Python script at {baseDir}/scripts/lsp-query.py. This is the LSP client -- it manages background daemons and handles all queries.
To make it callable as lsp-query from anywhere, symlink it into your PATH:
ln -sf {baseDir}/scripts/lsp-query.py /usr/local/bin/lsp-query
# or:
ln -sf {baseDir}/scripts/lsp-query.py ~/.npm-global/bin/lsp-query
Alternatively, invoke it directly:
{baseDir}/scripts/lsp-query.py <command> [args...]
Set LSP_WORKSPACE to the repo root before querying. If unset, defaults to the git root or cwd.
All line and column numbers are 1-indexed (human-friendly, matching editor display).
lsp-query definition /path/to/file.py <line> <col>
lsp-query references /path/to/file.py <line> <col>
lsp-query hover /path/to/file.py <line> <col>
lsp-query symbols /path/to/file.py
lsp-query workspace-symbols "ClassName"
lsp-query diagnostics /path/to/file.py
lsp-query completions /path/to/file.py <line> <col>
lsp-query signature /path/to/file.py <line> <col>
lsp-query rename /path/to/file.py <line> <col> new_name
lsp-query languages # Show all supported languages + install status
lsp-query servers # List running language daemons
lsp-query shutdown # Stop all daemons
lsp-query shutdown python # Stop just the Python daemon
{baseDir}/
├── SKILL.md # This file
└── scripts/
└── lsp-query.py # Python script -- multi-language LSP client + daemon manager
lsp-query.py is a self-contained Python script (~850 lines, stdlib only, no pip dependencies). It:
~/.cache/lsp-query/daemon.sock)| Variable | Default | Description |
|---|---|---|
LSP_WORKSPACE | git root or cwd | Workspace root for LSP servers |
LSP_SERVER | auto per language | Override server command for ALL languages |
LSP_LANG | auto from extension | Force a specific language (bypass detection) |
LSP_TIMEOUT | 300 | Server idle timeout in seconds |
LSP_SOCK | ~/.cache/lsp-query/daemon.sock | Unix socket path |
export LSP_WORKSPACE=/path/to/repo
# Python
lsp-query symbols src/model.py
lsp-query hover src/model.py 42 10
lsp-query references src/model.py 42 10
# TypeScript (auto-detected from .ts extension)
lsp-query symbols src/index.ts
lsp-query definition src/app.tsx 15 8
# Rust
lsp-query symbols src/main.rs
lsp-query diagnostics src/lib.rs
# Check what's available
lsp-query languages
lsp-query servers
lsp-query shutdown to restart all servers fresh.LSP_LANG=rust lsp-query symbols myfile to force.