| name | vscode-config |
| description | 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. |
VS Code Workspace Configuration Skill
This skill provides VS Code settings.json template and validation logic for consistent development environment across repositories.
Purpose
Manage .vscode/settings.json configuration to:
- Configure Prettier as default formatter for all languages
- Enable format on save and auto-fix on save
- Set up ESLint auto-fix integration
- Configure pnpm as package manager
- Set up terminal environment and profiles
- Configure TypeScript workspace SDK
- Define search and file exclusions
- ENSURE only settings.json exists (DELETE unnecessary files)
Usage
This skill is invoked by the vscode-agent when:
- Creating new .vscode/settings.json files
- Auditing existing VS Code workspace settings
- Validating settings against standards
- Detecting and removing unnecessary files from .vscode directory
Template
The standard VS Code settings template is located at:
templates/settings.template.json
The 8 VS Code Standards
Rule 1: Prettier as Default Formatter
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 (
[typescript]) - TypeScript React (
[typescriptreact])
Optional but recommended:
- JavaScript (
[javascript]) - JSON (
[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"
Rule 2: Format on Save Enabled
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"
Rule 3: ESLint Auto-Fix
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"
Rule 4: pnpm Package Manager
pnpm must be configured as package manager:
{
"npm.packageManager": "pnpm"
}
Validation:
# Check package manager
jq '.npm.packageManager' .vscode/settings.json | grep -q "pnpm"
Rule 5: Terminal Configuration
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"
Rule 6: TypeScript Configuration
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"
Rule 7: Search and Files Exclusions
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.yaml
Optional patterns (project-specific):
**/dist**/.next**/build
Validation:
# 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"
Rule 8: Only settings.json Required
The .vscode folder should contain ONLY settings.json:
Required:
- ✅
.vscode/settings.json- Workspace settings
Unnecessary (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 tasks
Validation:
# 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"
Optional Settings (Recommended)
Editor Preferences
{
"editor.rulers": [80],
"editor.inlayHints.enabled": "off",
"editor.guides.indentation": false,
"editor.guides.bracketPairs": false,
"editor.wordWrap": "off",
"diffEditor.wordWrap": "off"
}
GitHub Copilot Integration
{
"github.copilot.chat.commitMessageGeneration.instructions": [
{
"file": ".copilot-commit-message-instructions.md"
}
]
}
Note: Requires .copilot-commit-message-instructions.md at root.
Validation
To validate VS Code workspace settings:
- Check that
.vscodedirectory exists - Check that
.vscode/settings.jsonexists - Check for unnecessary files (extensions.json, launch.json, tasks.json)
- Read settings.json
- Validate against 8 standards
- Report violations and unnecessary files
- Recommend deletion of extras
Validation Approach
# 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"
Repository Type Considerations
- Consumer Repos: ENFORCE all 8 standards strictly
- Library Repos: May have additional workspace settings
- All Repos: ENSURE only settings.json in .vscode (DELETE extras)
Best Practices
- CREATE only .vscode/settings.json (never create extensions.json, launch.json, tasks.json)
- USE Prettier for all language formatters
- ENABLE format on save for automatic formatting
- CONFIGURE ESLint auto-fix for automatic linting
- SET pnpm as package manager
- USE workspace TypeScript SDK
- EXCLUDE build artifacts from search
- DELETE unnecessary .vscode files and verify removal
- RE-AUDIT after making changes
File Cleanup Workflow
When unnecessary files are detected:
- IDENTIFY which files exist in .vscode
- EXPLAIN why they are unnecessary (conflict with standards)
- PROVIDE deletion command
- REQUEST user confirmation
- DELETE if approved
- RE-AUDIT to verify removal
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)
Integration
This skill integrates with:
- Repository type provided via
scopeparameter. 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