Blockless Extension E2E
FreakStudioCN/mpy-hardware-extension
Run and debug the Blockless VS Code extension release gate: CI-equivalent API and extension tests, V0 protocol smoke, live DeepSeek full-stack e2e, VSIX packaging, local reinstall, direct…
VS Code settings precedence rules and common pitfalls. An agent skill from microsoft/vscode-python-environments.
$ npx skills add microsoft/vscode-python-environments --skill settings-precedence -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install microsoft/vscode-python-environments settings-precedence --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/microsoft/vscode-python-environments.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/settings-precedence .claude/skills/settings-precedence && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "settings-precedence" agent skill from https://github.com/microsoft/vscode-python-environments/tree/main/.github/skills/settings-precedence into .claude/skills/settings-precedence/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "settings-precedence", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/microsoft/vscode-python-environments/tree/main/.github/skills/settings-precedenceType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add microsoft/vscode-python-environments --skill settings-precedence -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install microsoft/vscode-python-environments settings-precedence --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/microsoft/vscode-python-environments.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.github/skills/settings-precedence .agents/skills/settings-precedence && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "settings-precedence" agent skill from https://github.com/microsoft/vscode-python-environments/tree/main/.github/skills/settings-precedence into .agents/skills/settings-precedence/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "settings-precedence", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add microsoft/vscode-python-environments --skill settings-precedence -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install microsoft/vscode-python-environments settings-precedence --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/microsoft/vscode-python-environments.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.github/skills/settings-precedence .cursor/skills/settings-precedence && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "settings-precedence" agent skill from https://github.com/microsoft/vscode-python-environments/tree/main/.github/skills/settings-precedence into .cursor/skills/settings-precedence/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "settings-precedence", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/microsoft/vscode-python-environments.git --path .github/skills/settings-precedence--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add microsoft/vscode-python-environments --skill settings-precedence -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install microsoft/vscode-python-environments settings-precedence --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/microsoft/vscode-python-environments.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.github/skills/settings-precedence .gemini/skills/settings-precedence && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "settings-precedence" agent skill from https://github.com/microsoft/vscode-python-environments/tree/main/.github/skills/settings-precedence into .gemini/skills/settings-precedence/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "settings-precedence", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install microsoft/vscode-python-environments settings-precedenceInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add microsoft/vscode-python-environments --skill settings-precedence -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/microsoft/vscode-python-environments.git skills-src && mkdir -p .github/skills && cp -r skills-src/.github/skills/settings-precedence .github/skills/settings-precedence && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "settings-precedence" agent skill from https://github.com/microsoft/vscode-python-environments/tree/main/.github/skills/settings-precedence into .github/skills/settings-precedence/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "settings-precedence", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add microsoft/vscode-python-environments --skill settings-precedence -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install microsoft/vscode-python-environments settings-precedence --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/microsoft/vscode-python-environments.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.github/skills/settings-precedence .opencode/skills/settings-precedence && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "settings-precedence" agent skill from https://github.com/microsoft/vscode-python-environments/tree/main/.github/skills/settings-precedence into .opencode/skills/settings-precedence/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "settings-precedence", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
settings-precedenceVS Code settings precedence rules and common pitfalls. An agent skill from microsoft/vscode-python-environments.
Settings Precedence is an agent skill from microsoft/vscode-python-environments, published by the product's own GitHub organization. VS Code settings precedence rules and common pitfalls. Essential for any code that reads or writes settings. Covers getConfiguration scope, inspect() vs get(), and multi-workspace handling.
Its SKILL.md is about 2.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Testing & QA. It works with Visual Studio Code and npm. The repository describes itself as: VS Code extension for Python environment and package management. The licence is MIT.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 7c894fc. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript and json).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Settings Precedence loads about 2.2k tokens when it runs. Until then it costs about 52 tokens; SKILL.md has 202 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from microsoft/vscode-python-environments at commit 7c894fc, republished under its MIT licence (© microsoft). 202 words, ~2,171 tokens.
.claude/skills/settings-precedence/SKILL.md (or your agent's skills folder).Settings precedence bugs corrupt user configurations. This skill documents the correct patterns.
.vscode/settings.json or .code-workspacesettings.jsonpackage.json (⚠️ may come from other extensions!)// ❌ WRONG: Missing scope
const config = vscode.workspace.getConfiguration('python-envs');
const value = config.get('pythonProjects');
// workspaceFolderValue will be UNDEFINED because VS Code doesn't know which folder!
// ✅ RIGHT: Pass scope (workspace folder or document URI)
const config = vscode.workspace.getConfiguration('python-envs', workspaceFolder);
const value = config.get('pythonProjects');When to pass scope:
scope: "resource" in package.json)workspaceFolderValue from inspect()// ❌ WRONG: get() returns defaultValue even from other extensions!
const config = vscode.workspace.getConfiguration('python');
if (config.get('useEnvironmentsExtension')) {
// May return true from another extension's package.json default!
}
// ✅ RIGHT: Use inspect() and check explicit values only
const config = vscode.workspace.getConfiguration('python', scope);
const inspected = config.inspect('useEnvironmentsExtension');
const hasExplicitValue =
inspected?.globalValue !== undefined ||
inspected?.workspaceValue !== undefined ||
inspected?.workspaceFolderValue !== undefined;
if (hasExplicitValue) {
// User explicitly set this value
const effectiveValue = inspected?.workspaceFolderValue ?? inspected?.workspaceValue ?? inspected?.globalValue;
}// ❌ WRONG: Unconditionally writing to settings
await config.update('pythonPath', detectedPath, ConfigurationTarget.Workspace);
// Overwrites user's explicit choice!
// ✅ RIGHT: Check for existing explicit values first
const inspected = config.inspect('pythonPath');
const hasUserValue = inspected?.workspaceValue !== undefined;
if (!hasUserValue) {
// Only set if user hasn't explicitly chosen
await config.update('pythonPath', detectedPath, ConfigurationTarget.Workspace);
}// Configuration targets (least to most specific)
ConfigurationTarget.Global; // User settings.json
ConfigurationTarget.Workspace; // .vscode/settings.json or .code-workspace
ConfigurationTarget.WorkspaceFolder; // Per-folder in multi-root
// To remove a setting, update with undefined
await config.update('pythonPath', undefined, ConfigurationTarget.Workspace);workspace PropertyFor multi-root workspaces, pythonProjects settings need a workspace property:
{
"python-envs.pythonProjects": [
{
"path": ".",
"workspace": "/path/to/workspace-folder",
"envManager": "ms-python.python:venv"
}
]
}Without the workspace property, settings get mixed up between folders.
// ❌ WRONG: Always using first workspace folder
const workspaceFolder = vscode.workspace.workspaceFolders?.[0];
// ✅ RIGHT: Get folder for specific document/file
const workspaceFolder = vscode.workspace.getWorkspaceFolder(documentUri) ?? vscode.workspace.workspaceFolders?.[0];
// When you have a path but not a URI
const uri = vscode.Uri.file(filePath);
const workspaceFolder = vscode.workspace.getWorkspaceFolder(uri);Cause: Missing scope parameter in getConfiguration()
// This returns undefined for workspaceFolderValue!
const config = vscode.workspace.getConfiguration('python-envs');
const inspected = config.inspect('pythonProjects');
console.log(inspected?.workspaceFolderValue); // undefined!
// Fix: Pass scope
const config = vscode.workspace.getConfiguration('python-envs', workspaceFolder.uri);
const inspected = config.inspect('pythonProjects');
console.log(inspected?.workspaceFolderValue); // Now works!Cause: Using get() instead of inspect() for boolean checks
The defaultValue in inspect() may come from ANY extension's package.json, not just yours:
// Another extension might have in their package.json:
// "python.useEnvironmentsExtension": { "default": true }
// Your check will be wrong:
config.get('python.useEnvironmentsExtension') // true from other extension!
// Fix: Only check explicit values
const inspected = config.inspect('python.useEnvironmentsExtension');
if (inspected?.globalValue === true || ...) { }Cause: Not checking for existing values before writing
// During extension activation, this overwrites user's config!
await config.update('defaultEnvManager', 'venv', ConfigurationTarget.Global);
// Fix: Only write defaults if no value exists
const current = config.inspect('defaultEnvManager');
if (current?.globalValue === undefined && current?.workspaceValue === undefined) {
await config.update('defaultEnvManager', 'venv', ConfigurationTarget.Global);
}Cause: Not including workspace identifier in settings
// Without workspace identifier, can't tell which folder this belongs to
{
"python-envs.pythonProjects": [
{ "path": ".", "envManager": "venv" } // Which workspace?
]
}
// Fix: Always include workspace when saving
const project = {
path: projectPath,
workspace: workspaceFolder.uri.fsPath,
envManager: selectedManager
};import * as vscode from 'vscode';
async function getProjectConfig(projectUri: vscode.Uri): Promise<ProjectConfig | undefined> {
const workspaceFolder = vscode.workspace.getWorkspaceFolder(projectUri);
if (!workspaceFolder) {
return undefined;
}
// Always pass scope!
const config = vscode.workspace.getConfiguration('python-envs', workspaceFolder.uri);
// Use inspect() to understand where values come from
const inspected = config.inspect<ProjectConfig[]>('pythonProjects');
// Prefer most specific value
const projects = inspected?.workspaceFolderValue ?? inspected?.workspaceValue ?? inspected?.globalValue ?? []; // Don't use defaultValue!
// Find project matching the URI
return projects.find((p) => path.resolve(workspaceFolder.uri.fsPath, p.path) === projectUri.fsPath);
}
async function saveProjectConfig(projectUri: vscode.Uri, projectConfig: ProjectConfig): Promise<void> {
const workspaceFolder = vscode.workspace.getWorkspaceFolder(projectUri);
if (!workspaceFolder) {
return;
}
const config = vscode.workspace.getConfiguration('python-envs', workspaceFolder.uri);
const inspected = config.inspect<ProjectConfig[]>('pythonProjects');
// Get existing projects (not including defaults!)
const existingProjects = inspected?.workspaceFolderValue ?? inspected?.workspaceValue ?? [];
// Ensure workspace property for multi-root
const configToSave: ProjectConfig = {
...projectConfig,
workspace: workspaceFolder.uri.fsPath,
};
// Update or add
const projectIndex = existingProjects.findIndex(
(p) => path.resolve(workspaceFolder.uri.fsPath, p.path) === projectUri.fsPath,
);
const updatedProjects = [...existingProjects];
if (projectIndex >= 0) {
updatedProjects[projectIndex] = configToSave;
} else {
updatedProjects.push(configToSave);
}
// Write to workspace folder scope in multi-root
const target =
vscode.workspace.workspaceFolders?.length > 1
? vscode.ConfigurationTarget.WorkspaceFolder
: vscode.ConfigurationTarget.Workspace;
await config.update('pythonProjects', updatedProjects, target);
}© microsoft, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .github/skills/settings-precedence of microsoft/vscode-python-environments.
Open the folder on GitHubat commit 7c894fc
Settings Precedence next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Settings Precedence this skillmicrosoft/vscode-python-environments | 141 | — | ~2.2k | Automated safety check: Pass | MIT | |
| Blockless Extension E2EFreakStudioCN/mpy-hardware-extension | 146 | — | ~1.2k | Automated safety check: Notes | Custom licence | |
| Trust Vscode QualityjohannesPettersson80/trust-platform | 222 | — | ~633 | Automated safety check: Pass | Apache-2.0 | |
| Verificationforcedotcom/salesforcedx-vscode | 1k | — | ~458 | Automated safety check: Pass | BSD-3-Clause | |
| Prepare Rslint npm Releaseweb-infra-dev/rslint | 461 | — | ~1.5k | Automated safety check: Pass | MIT | |
| Releasesignageos/vscode-sops | 122 | — | ~2.2k | Automated safety check: Notes | MIT |
FreakStudioCN/mpy-hardware-extension
Run and debug the Blockless VS Code extension release gate: CI-equivalent API and extension tests, V0 protocol smoke, live DeepSeek full-stack e2e, VSIX packaging, local reinstall, direct…
johannesPettersson80/trust-platform
Implement and verify trust-platform VS Code extension quality gates.
forcedotcom/salesforcedx-vscode
Verification steps for code changes. An agent skill from forcedotcom/salesforcedx-vscode.
web-infra-dev/rslint
Prepare a stable release PR for the unified rslint npm packages by updating package versions and rule/TypeScript release metadata.
signageos/vscode-sops
Releases the vscode-sops extension end-to-end: determines the next version from the bump history, updates CHANGELOG.md and package.json/package-lock.json, builds via vscode:prepublish, publishes to…
breaking-brake/cc-wf-studio
Teaches the agent to use the ccwf command line tool to validate, preview, render, export and run cc-wf-studio workflow JSON files without opening VS Code.
microsoft/vscode-python-environments
Critical patterns for cross-platform path handling in this VS Code extension.
microsoft/vscode-python-environments
Environment manager-specific discovery patterns and known issues.
microsoft/vscode-python-environments
Run E2E tests to verify complete user workflows like environment discovery, creation, and selection.
microsoft/vscode-python-environments
Run integration tests to verify that extension components work together correctly.
microsoft/vscode-python-environments
Run smoke tests to verify extension functionality in a real VS Code environment.
microsoft/vscode-python-environments
Debug a failing test using an iterative logging approach, then clean up and document the learning.
Works with
Categories
VS Code settings precedence rules and common pitfalls. An agent skill from microsoft/vscode-python-environments. Settings Precedence is an agent skill from microsoft/vscode-python-environments, published by the product's own GitHub organization. VS Code settings precedence rules and common pitfalls.
Settings Precedence fits situations like: testing & QA work in your project.
Run `npx skills add microsoft/vscode-python-environments --skill settings-precedence -a claude-code`. Or copy the skill folder (.github/skills/settings-precedence in microsoft/vscode-python-environments) into .claude/skills/settings-precedence in your project. Claude Code loads it when a task matches its description.
Run `npx skills add microsoft/vscode-python-environments --skill settings-precedence -a codex`. Or copy the skill folder (.github/skills/settings-precedence in microsoft/vscode-python-environments) into .agents/skills/settings-precedence in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add microsoft/vscode-python-environments --skill settings-precedence -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/settings-precedence, .gemini/skills/settings-precedence, .github/skills/settings-precedence and .opencode/skills/settings-precedence in your project.
SKILL.md names no scripts, command-line tools or credentials: Settings Precedence is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Settings Precedence is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.2k tokens (SKILL.md is roughly 8.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Settings Precedence: Blockless Extension E2E (FreakStudioCN/mpy-hardware-extension, 146 stars), Trust Vscode Quality (johannesPettersson80/trust-platform, 222 stars), Verification (forcedotcom/salesforcedx-vscode, 1k stars) and Prepare Rslint npm Release (web-infra-dev/rslint, 461 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
microsoft (a GitHub organization, an official publisher) maintains it in microsoft/vscode-python-environments, which has 141 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on October 9, 2026.
Source: microsoft/vscode-python-environments on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.