VS Code workspace settings template and validation logic with file cleanup enforcement. Includes 8 required standards (Prettier as default formatter, format on save enabled, ESLint auto-fix, pnpm package manager, terminal configuration, TypeScript workspace SDK, search exclusions, only settings.json required). Critical Rule 8 requires deletion of unnecessary files (extensions.json, launch.json, tasks.json). Use when creating or auditing .vscode/settings.json files and detecting unnecessary workspace files.
Manages VS Code workspace settings with 8 strict standards including Prettier, pnpm, and TypeScript SDK. Automatically detects and deletes unnecessary files like extensions.json, launch.json, and tasks.json from .vscode directory.
/plugin marketplace add metasaver/metasaver-marketplace/plugin install core-claude-plugin@metasaver-marketplaceThis skill inherits all available tools. When active, it can use any tool Claude has access to.
templates/settings.template.jsonThis skill provides VS Code settings.json template and validation logic for consistent development environment across repositories.
Manage .vscode/settings.json configuration to:
This skill is invoked by the vscode-agent when:
The standard VS Code settings template is located at:
templates/settings.template.json
All language-specific formatters must use Prettier:
{
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}
Required for all repos:
[typescript])[typescriptreact])Optional but recommended:
[javascript])[json])Validation:
# Check required formatters
jq '."[typescript]".editor.defaultFormatter' .vscode/settings.json | grep -q "prettier-vscode"
jq '."[typescriptreact]".editor.defaultFormatter' .vscode/settings.json | grep -q "prettier-vscode"
Auto-formatting must be enabled:
{
"editor.formatOnSave": true,
"editor.formatOnPaste": true,
"editor.trimAutoWhitespace": true
}
Exceptions (Handlebars):
{
"[handlebars]": {
"editor.formatOnSave": false,
"editor.formatOnPaste": false
}
}
Validation:
# Check format on save settings
jq '.editor.formatOnSave' .vscode/settings.json | grep -q "true"
jq '.editor.formatOnPaste' .vscode/settings.json | grep -q "true"
ESLint must auto-fix on save:
{
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
}
}
Validation:
# Check ESLint auto-fix
jq '.editor.codeActionsOnSave."source.fixAll.eslint"' .vscode/settings.json | grep -q "explicit"
pnpm must be configured as package manager:
{
"npm.packageManager": "pnpm"
}
Validation:
# Check package manager
jq '.npm.packageManager' .vscode/settings.json | grep -q "pnpm"
Bash terminal with proper environment:
{
"terminal.integrated.env.linux": {
"PATH": "${env:PATH}"
},
"npm.scriptExplorerAction": "open",
"npm.runInTerminal": true,
"terminal.integrated.defaultProfile.linux": "bash",
"terminal.integrated.profiles.linux": {
"bash": {
"path": "bash",
"args": ["-l"]
}
}
}
Validation:
# Check terminal configuration
jq '.terminal.integrated.defaultProfile.linux' .vscode/settings.json | grep -q "bash"
jq '.terminal.integrated.profiles.linux.bash.path' .vscode/settings.json | grep -q "bash"
Use workspace TypeScript SDK:
{
"typescript.tsdk": "node_modules/typescript/lib",
"typescript.enablePromptUseWorkspaceTsdk": true
}
Validation:
# Check TypeScript SDK
jq '.typescript.tsdk' .vscode/settings.json | grep -q "node_modules/typescript/lib"
jq '.typescript.enablePromptUseWorkspaceTsdk' .vscode/settings.json | grep -q "true"
Exclude build artifacts and dependencies:
{
"search.exclude": {
"**/node_modules": true,
"**/.turbo": true,
"**/coverage": true,
"**/*.tsbuildinfo": true,
"**/pnpm-lock.yaml": true,
"**/dist": true,
"**/.next": true,
"**/build": true
},
"files.exclude": {
"**/.turbo": true,
"**/*.tsbuildinfo": true
}
}
Required patterns:
**/node_modules**/.turbo**/coverage**/*.tsbuildinfo**/pnpm-lock.yamlOptional patterns (project-specific):
**/dist**/.next**/buildValidation:
# Check required exclusions
jq '.search.exclude."**/node_modules"' .vscode/settings.json | grep -q "true"
jq '.search.exclude."**/.turbo"' .vscode/settings.json | grep -q "true"
jq '.files.exclude."**/.turbo"' .vscode/settings.json | grep -q "true"
The .vscode folder should contain ONLY settings.json:
Required:
.vscode/settings.json - Workspace settingsUnnecessary (MUST be deleted):
.vscode/extensions.json - Extension recommendations (developers manage their own).vscode/launch.json - Debug configurations (developer-specific preferences).vscode/tasks.json - Task definitions (use package.json scripts instead)Rationale:
settings.json - Project-wide standards all developers must followextensions.json - Developers manage their own extensionslaunch.json - Debug configurations are developer-specifictasks.json - We use package.json scripts and Turborepo, not VS Code tasksValidation:
# Check for unnecessary files and report for deletion
ls -la .vscode/
# Verify unnecessary files for removal
[ -f ".vscode/extensions.json" ] && echo "REQUIRES DELETION: .vscode/extensions.json"
[ -f ".vscode/launch.json" ] && echo "REQUIRES DELETION: .vscode/launch.json"
[ -f ".vscode/tasks.json" ] && echo "REQUIRES DELETION: .vscode/tasks.json"
{
"editor.rulers": [80],
"editor.inlayHints.enabled": "off",
"editor.guides.indentation": false,
"editor.guides.bracketPairs": false,
"editor.wordWrap": "off",
"diffEditor.wordWrap": "off"
}
{
"github.copilot.chat.commitMessageGeneration.instructions": [
{
"file": ".copilot-commit-message-instructions.md"
}
]
}
Note: Requires .copilot-commit-message-instructions.md at root.
To validate VS Code workspace settings:
.vscode directory exists.vscode/settings.json exists# Check directory and file exist
[ -d ".vscode" ] || echo "VIOLATION: .vscode directory missing"
[ -f ".vscode/settings.json" ] || echo "VIOLATION: .vscode/settings.json missing"
# Rule 8: Check for unnecessary files and mark for deletion
if [ -f ".vscode/extensions.json" ] || [ -f ".vscode/launch.json" ] || [ -f ".vscode/tasks.json" ]; then
echo "VIOLATION: Unnecessary files found in .vscode directory"
echo "DELETE these files: rm .vscode/extensions.json .vscode/launch.json .vscode/tasks.json"
fi
# Rule 1: Prettier formatter
jq '."[typescript]".editor.defaultFormatter' .vscode/settings.json | grep -q "prettier-vscode" || echo "VIOLATION: TypeScript formatter not Prettier"
# Rule 2: Format on save
jq '.editor.formatOnSave' .vscode/settings.json | grep -q "true" || echo "VIOLATION: formatOnSave not enabled"
# Rule 3: ESLint auto-fix
jq '.editor.codeActionsOnSave."source.fixAll.eslint"' .vscode/settings.json | grep -q "explicit" || echo "VIOLATION: ESLint auto-fix not configured"
# Rule 4: pnpm
jq '.npm.packageManager' .vscode/settings.json | grep -q "pnpm" || echo "VIOLATION: Package manager not pnpm"
# Rule 5: Terminal
jq '.terminal.integrated.defaultProfile.linux' .vscode/settings.json | grep -q "bash" || echo "VIOLATION: Terminal not bash"
# Rule 6: TypeScript SDK
jq '.typescript.tsdk' .vscode/settings.json | grep -q "node_modules" || echo "VIOLATION: TypeScript SDK not configured"
# Rule 7: Exclusions
jq '.search.exclude."**/node_modules"' .vscode/settings.json | grep -q "true" || echo "VIOLATION: Missing search exclusions"
When unnecessary files are detected:
Example output:
VIOLATION: Unnecessary Files Detected
Found in .vscode/:
- extensions.json (developers manage their own extensions)
- launch.json (debug configs are developer-specific preferences)
- tasks.json (we use package.json scripts instead)
Action Required: Delete with:
rm .vscode/extensions.json .vscode/launch.json .vscode/tasks.json
Approve deletion? (y/n)
This skill integrates with:
scope parameter. If not provided, use /skill scope-check/skill audit-workflow - Bi-directional comparison workflow/skill remediation-options - Conform/Update/Ignore choicesprettier-agent - For formatter configurationeslint-agent - For auto-fix configurationtypescript-agent - For TypeScript SDK configurationpnpm-workspace-agent - For package manager setup