.agent/skills/vscode-config/SKILL.md
Best practices for reading and reacting to VS Code settings in a Language Server Protocol (LSP) server. Use when handling vscode configuration or LSP configuration from clients
npx skillsauth add fengkx/beancount-lsp vscode-lsp-configurationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Correctly resolve VS Code settings for an LSP server, including:
"[lang]")onDidChangeConfigurationIn extension package.json, set appropriate setting scope:
resource (or language-overridable) for most LSP behavior settings.In LSP server, always read settings with scopeUri = document.uri:
getConfiguration() without scopeUri if you expect folder-level settings.Cache per-resource config:
document.uri (not workspace root).Handle config changes:
onDidChangeConfiguration: clear cache and revalidate all open docs.package.json)scope controlscontributes.configuration.properties[*].scope declares where a setting is allowed to vary and how VS Code should resolve it.
scope valuesresource
language-overridable
"[beancount]": { "yourExtension.enable": true }
scopeUri.window
Note:
machine/machine-overridableexist for Remote/machine-specific settings. Most LSPs don’t need them.
getConfiguration parametersTypical Node server call:
connection.workspace.getConfiguration({ scopeUri, section })
scopeUri (string URI)
The resource used to resolve configuration (e.g., document.uri).
Required for correct behavior in:
section (string)
"yourExtension").yourExtension.* settings.const settingsCache = new Map<string, Thenable<any>>();
let hasConfigCapability = false;
connection.onInitialize((params) => {
hasConfigCapability = !!params.capabilities.workspace?.configuration;
return { capabilities: { /* ... */ } };
});
async function getSettings(resourceUri: string) {
if (!hasConfigCapability) return defaultSettings;
let v = settingsCache.get(resourceUri);
if (!v) {
v = connection.workspace.getConfiguration({
scopeUri: resourceUri,
section: "yourExtension",
});
settingsCache.set(resourceUri, v);
}
return v;
}
onDidChangeConfiguration (Server-side)VS Code sends this notification when configuration may have changed, e.g.:
"[lang]").vscode/settings.json (git checkout, scripts, sync tools)The LSP notification typically does not include which keys changed. Treat it as “something changed”.
connection.onDidChangeConfiguration(() => {
settingsCache.clear();
for (const doc of documents.all()) {
// revalidate(doc)
}
});
VS Code setting precedence: User < Workspace < Workspace Folder
If a key is set at Workspace or Folder level, it overrides User level.
scopeUri passed → Folder settings appear “ignored”, especially multi-root.window but you expect per-folder/per-file behavior → it won’t happen.workspace/configuration returns merged final only.onDidChangeConfiguration → stale behavior after settings edits.scope: resource + read with scopeUri=document.uriscope: language-overridable + read with scopeUri=document.uriscope: windowtools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
A CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.