How this skill is triggered — by the user, by Claude, or both
Slash command
/lsp-refactor:lspeasyThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Use this skill for ANY work with lspeasy.** It routes to the correct package.
Use this skill for ANY work with lspeasy. It routes to the correct package.
Use this router when:
lspeasy-clientlspeasy-corelspeasy-serverlspeasy-clientUse @lspeasy/client when you need to build the consumer side of the
Language Server Protocol — an editor extension, a CLI analysis tool, a test
harness, or any process that speaks to a language server process.
LSPClient uses. Otherwise this is an internal detail.Key APIs: CapabilityGuard, ClientCapabilityGuard, ConnectionHealthTracker
lspeasy-core@lspeasy/core is the shared foundation for the lspeasy SDK. It contains
everything needed to build custom LSP integrations, and re-exports the
most-used pieces from @lspeasy/client and @lspeasy/server.
MethodNotFound when a capability was not declared, or InvalidParams when schema validation fails).Key APIs: DedicatedWorkerTransport, SharedWorkerTransport, WebSocketTransport, getCapabilityForRequestMethod, getClientCapabilityForRequestMethod
lspeasy-serverUse @lspeasy/server when you need to build the provider side of the
Language Server Protocol — a daemon that editors and language-client tooling
connect to in order to get diagnostics, completions, hover, go-to-definition,
and other language intelligence features.
partialResultToken in the request params and you want to stream intermediate results (e.g. symbols found so far) rather than waiting for the complete set.MethodNotFound when a capability was not declared, or InvalidParams when schema validation fails).Key APIs: MessageDispatcher, PartialResultSender, ResponseError
Top pitfall per package:
CapabilityGuard before the initialize handshake completes. Server capabilities are only known after the InitializeResult is received; instantiating the guard too early will treat all methods as unsupported. (client)null silently when no lsp.json is found anywhere in the search path (including the global ~/.claude/lsp.json fallback). Callers that skip the null check will silently fail to resolve a server command — for the CLI this means lsproxy exits before the proxy daemon is ever spawned. Create an lsp.json at the workspace root or at ~/.claude/lsp.json for a per-user fallback. (core)| Thought | Reality |
|---|---|
| "I'll just use client for everything" | client is for documentation site for lspeasy. The transport already provides its own keep-alive mechanism (e.g. WebSocket ping frames) — adding a heartbeat on top creates redundant round-trips and may interfere with the transport's own timeout logic. |
| "I'll just use core for everything" | core is for documentation site for lspeasy. You are building a CLI language server — StdioTransport (from @lspeasy/core/node) is the conventional choice and avoids the overhead of a network stack. For same-process workers prefer DedicatedWorkerTransport or SharedWorkerTransport. |
| "I'll just use server for everything" | server is for documentation site for lspeasy. You want to log a server-side error without sending an error to the client — throw a plain Error and handle it via server.onError() instead. |
User: "I need to documentation site for lspeasy"
→ Load lspeasy-client
User: "I need to documentation site for lspeasy"
→ Load lspeasy-core
User: "I need to documentation site for lspeasy"
→ Load lspeasy-server
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub pradeepmouli/lspeasy --plugin lsp-refactor