skills/ide-setup/SKILL.md
IDE configuration and extension management for VS Code, Cursor, and Claude Code. Use when: setting up a development environment, installing extensions, configuring Pylance for Python type checking, setting up Prettier and ESLint, integrating test runners, configuring Python environments with uv, auditing IDE settings for missing or inconsistent configuration, or ensuring consistent editor behavior across tools.
npx skillsauth add michaelsvanbeek/personal-agent-skills ide-setupInstall 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.
Install the following extensions in VS Code and Cursor. You can install these manually from the extensions marketplace or through the editor CLI.
| Extension | ID | Purpose |
|-----------|----|---------|
| Python | ms-python.python | Language support, debugging, test runner |
| Pylance | ms-python.vscode-pylance | Type checking, IntelliSense, auto-imports |
| Ruff | charliermarsh.ruff | Linting and formatting (replaces Black, isort, Flake8) |
| Extension | ID | Purpose |
|-----------|----|---------|
| Prettier | esbenp.prettier-vscode | Code formatting for TS, JS, CSS, JSON, YAML, HTML, MD |
| ESLint | dbaeumer.vscode-eslint | TypeScript/JavaScript linting |
| Vitest | vitest.explorer | Vitest test runner integration |
| Tailwind CSS IntelliSense | bradlc.vscode-tailwindcss | Tailwind class autocomplete and hover preview |
| Extension | ID | Purpose |
|-----------|----|---------|
| EditorConfig | EditorConfig.EditorConfig | Cross-editor indent/whitespace consistency |
| Error Lens | usernamehw.errorlens | Inline error and warning display |
| GitLens | eamodio.gitlens | Git blame, history, and diff |
| Docker | ms-azuretools.vscode-docker | Dockerfile editing, container management |
| GitHub Actions | github.vscode-github-actions | Workflow YAML validation, run status |
Create .vscode/settings.json in every project workspace. Commit it to version control so all contributors share the same IDE behavior.
{
// Type checking
"python.analysis.typeCheckingMode": "standard",
"python.analysis.autoImportCompletions": true,
"python.analysis.diagnosticMode": "workspace",
// Environment — uv creates .venv at project root
"python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
// Testing
"python.testing.pytestEnabled": true,
"python.testing.unittestEnabled": false,
// Formatter + linter — Ruff handles both
"[python]": {
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.ruff": "explicit",
"source.organizeImports.ruff": "explicit"
}
}
}
Pylance type checking modes:
| Mode | Use when |
|------|----------|
| off | Never — defeats the purpose of Pylance |
| basic | Legacy codebases with few type hints |
| standard | Default for new and active projects |
| strict | Fully typed codebases, library development |
{
"[typescript][typescriptreact][javascript][javascriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
}
},
"[json][jsonc][yaml][html][css][scss][markdown]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
}
}
{
"editor.rulers": [100],
"editor.tabSize": 2,
"editor.insertSpaces": true,
"editor.bracketPairColorization.enabled": true,
"editor.guides.bracketPairs": true,
"editor.stickyScroll.enabled": true,
"editor.renderWhitespace": "trailing",
"files.trimTrailingWhitespace": true,
"files.insertFinalNewline": true,
"files.trimFinalNewlines": true,
"files.exclude": {
"**/__pycache__": true,
"**/.pytest_cache": true,
"**/.mypy_cache": true,
"**/.ruff_cache": true
},
"search.exclude": {
"**/node_modules": true,
"**/dist": true,
"**/build": true,
"**/.serverless": true,
"**/coverage": true,
"**/.venv": true,
"**/uv.lock": true
}
}
A full composite reference can be kept in a shared team settings file or in your repository docs.
Every project should include these configuration files. Keep canonical templates in your repo so contributors can reuse them.
Cross-editor consistency for indentation, line endings, and whitespace. Works in VS Code (with extension), Cursor, JetBrains, vim, and most editors.
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.py]
indent_size = 4
[*.md]
trim_trailing_whitespace = false
[Makefile]
indent_style = tab
Must match the conventions in the linting-web instruction:
{
"semi": true,
"singleQuote": false,
"trailingComma": "all",
"printWidth": 100,
"tabWidth": 2,
"useTabs": false,
"bracketSpacing": true,
"arrowParens": "always"
}
node_modules/
dist/
build/
.serverless/
coverage/
*.min.js
Commit to each project so VS Code prompts contributors to install required extensions:
{
"recommendations": [
"ms-python.python",
"ms-python.vscode-pylance",
"charliermarsh.ruff",
"esbenp.prettier-vscode",
"dbaeumer.vscode-eslint",
"EditorConfig.EditorConfig",
"usernamehw.errorlens"
]
}
Tailor per project — Python-only projects don't need Prettier/ESLint; web-only projects don't need Pylance/Ruff.
uv manages virtual environments, dependencies, and Python versions. VS Code needs to know where the virtual environment lives.
# Create project (creates .venv automatically)
uv init my-project && cd my-project
# Or add venv to existing project
uv venv
# Install dependencies from lockfile
uv sync
uv creates the virtual environment at .venv/ in the project root. VS Code's Python extension discovers this automatically.
.venv/bin/python. If it doesn't, set python.defaultInterpreterPath to ${workspaceFolder}/.venv/bin/python.which python — it should point to .venv/bin/python.uv sync, Pylance resolves all imports.python.testing.pytestEnabled to true and the test explorer discovers tests.| Problem | Fix |
|---------|-----|
| Pylance can't find imports | Run uv sync, then reload the VS Code window |
| Wrong Python version | Run uv python pin 3.12 and restart VS Code |
| Tests not discovered | Verify python.testing.pytestEnabled is true and files match test_*.py |
| Terminal uses system Python | Check python.terminal.activateEnvironment is true |
{
"python.testing.pytestEnabled": true,
"python.testing.unittestEnabled": false,
"python.testing.pytestArgs": ["--tb=short", "-q"]
}
Tests appear in the Test Explorer sidebar. Run, debug, and view results inline.
Install the Vitest extension (vitest.explorer). It auto-discovers vitest.config.ts and shows tests in the Test Explorer. No additional VS Code settings required.
Add to .vscode/launch.json for debugging tests:
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug Python Tests",
"type": "debugpy",
"request": "launch",
"module": "pytest",
"args": ["--tb=short", "-q"],
"justMyCode": false
},
{
"name": "Debug Vitest",
"type": "node",
"request": "launch",
"autoAttachChildProcesses": true,
"skipFiles": ["<node_internals>/**", "**/node_modules/**"],
"program": "${workspaceFolder}/node_modules/vitest/vitest.mjs",
"args": ["run", "${relativeFile}"],
"smartStep": true,
"console": "integratedTerminal"
}
]
}
The GitHub Actions extension (github.vscode-github-actions) provides:
Define .vscode/tasks.json for common CI-like commands:
{
"version": "2.0.0",
"tasks": [
{
"label": "lint",
"type": "shell",
"command": "ruff check . && ruff format --check .",
"group": "test",
"problemMatcher": []
},
{
"label": "test",
"type": "shell",
"command": "uv run pytest --tb=short -q",
"group": { "kind": "test", "isDefault": true },
"problemMatcher": []
},
{
"label": "type-check",
"type": "shell",
"command": "uv run mypy .",
"group": "test",
"problemMatcher": []
}
]
}
Run via Cmd+Shift+P → Run Task or bind to keyboard shortcuts.
Cursor is built on VS Code and supports the same extensions and settings:
cursor --install-extension <id> or through the UI..vscode/settings.json and .vscode/extensions.json work identically..cursor/rules/ — separate from IDE settings.~/.cursor/skills/ by your skill installation workflow.Claude Code is a CLI tool with no extension system. Integration is through:
~/.claude/skills/ by your skill installation workflow..editorconfig, .prettierrc, and other config files when generating code.When auditing an existing project's IDE setup, verify:
.editorconfig exists with correct indent sizes (4 for Python, 2 for everything else).vscode/settings.json configures format-on-save with the correct formatter per language.vscode/extensions.json lists required extensions for the project's languagesstandard or strict.venv exists and is managed by uv.prettierrc exists and matches team conventions.prettierignore excludes build artifacts.vscode/launch.json includes debug configurations for testsdevelopment
TypeScript coding standards and type safety conventions. Use when: creating TypeScript files, defining interfaces and types, writing type-safe code, reviewing TypeScript for type correctness, auditing a codebase for type safety gaps, eliminating any or ts-ignore usage, or improving strict-mode compliance. Covers strict typing, avoiding any and ts-ignore, discriminated unions, Zod runtime validation, immutability patterns, and proper type definitions.
testing
Writing clear, actionable tickets in any issue tracker (Jira, Linear, GitHub Issues, ServiceNow, etc.). Use when: creating epics, stories, tasks, bugs, or spikes; writing acceptance criteria; decomposing work for a sprint; linking dependencies between tickets; auditing backlog items for clarity; or coaching a team on ticket quality. Covers title conventions, description templates, acceptance criteria, decomposition rules, dependency linking, and org-specific pluggable configuration.
development
Testing strategy, patterns, and evaluation for software and LLM/AI systems. Use when: writing tests, choosing test boundaries, designing test data, structuring test suites, evaluating LLM outputs, building evaluation pipelines, setting coverage thresholds, auditing test coverage gaps in existing projects, or improving test quality and structure.
development
Writing effective status updates for different audiences and cadences. Use when: writing a weekly status update, preparing a monthly summary, drafting a quarterly review, sending updates to leadership, sharing progress with stakeholders, or improving the clarity and impact of team communications. Covers weekly, monthly, and quarterly formats tailored for upward, lateral, and downward communication.