vscode-doctor — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited vscode-doctor (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Diagnose editor performance from the current machine state. Do not import old observations, fixed paths, fixed extension names, fixed OS bugs, or fixed generated-directory lists into the diagnosis.
Default to a non-technical user experience unless the user asks for details.
现在看起来是:<正常 / 忙 / 可疑 / 还不确定> and immediately say what you checked or will check.Technical details.systemstatusd, WindowServer, or coreaudiod as the headline. Translate them first, for example: "主要压力来自系统后台/窗口渲染/音频服务,不是编辑器本体".Diagnosis-only report shape:
现在看起来是:...
我检查了:...
建议先做:...
可选操作:
1. 只观察,不改设置
适合:...
会影响:不会
验证:...
2. 轻量降噪,只处理明显的生成/缓存目录
适合:...
会影响:这些目录仍能打开编辑,但外部变化可能需要手动刷新
撤回:删掉这几条 workspace 设置
3. 深度排查插件
适合:...
会影响:先不禁用插件,只做 profiling / bisect 建议
Technical details:
- ...After-action report shape:
我刚刚做了:
- 看了什么:...
- 改了哪里:...
- 为什么改:...
你可能会感受到:
- ...
不会发生什么:
- ...
副作用:
- ...
怎么确认有效:
- ...
怎么撤回:
- ...
Technical details:
- ...Rules for after-action reports:
Make these risks explicit before changing settings, disabling extensions, deleting caches, changing system/editor launch flags, or preparing public posts:
files.exclude, search.exclude, watcher excludes, and language-tool excludes can hide files, reduce search coverage, or suppress diagnostics. Prefer workspace-scoped settings, show the diff first, and include rollback.code --status and local process samples do not prove Remote SSH, WSL, Dev Container, or network filesystem root causes. Collect remote-side evidence before recommending remote changes.Before proposing a fix, identify which workflow the user wants:
If the user explicitly asks to optimize a large workspace, do not close it, replace it with a narrower folder, or present that as the default fix. Treat narrowing the workspace only as an optional alternative with its own tradeoff.
| Mode | User intent signal | Allowed first actions | Do not do | Verify with |
|---|---|---|---|---|
| Preserve large workspace | "keep the parent folder", "optimize big workspace", "do not close workspace" | watcher/search/language-service exclusions scoped to the workspace; extension profiling; settings proposals | close the parent workspace, open only a child folder, claim file count should shrink | --status still shows the large workspace; no new watcher storm; quieter search/language-service processes |
| File browser workspace | "use VS Code as a file browser", "I still want to see/edit files", "can it keep listening without lag" | explain workspace semantics; keep Explorer visibility by default; propose selective watcher/search exclusions for noisy paths; offer a lightweight profile when the user accepts reduced coding intelligence | hide folders with files.exclude, shrink the workspace, or silently disable coding features as the default fix | excluded paths remain openable/editable if visible; non-excluded paths still update; no new watcher storm for noisy paths |
| Narrow workspace | "open only this project", "I do not need the parent folder" | open/reuse a smaller folder after confirmation; compare workspace surface | present narrowing as the default fix for large-workspace optimization | --status shows the intended smaller folder; file/project-root count drops |
| Extension profiling | "extensions are slow", Running Extensions evidence, plugin background CPU/RSS | profile, bisect, or workspace-disable named extensions seen in evidence | use a fixed extension blocklist or global disablement without confirmation | plugin background CPU/RSS, Running Extensions output, before/after profile |
| Cache/log maintenance | large data dir, corrupt cache/log evidence, user asks cleanup | inspect sizes; propose cleanup with rollback or regeneration notes | delete caches/logs as a generic first fix | data sizes, startup behavior, error recurrence |
If the user's wording is ambiguous, ask one concise question about which mode they want. If their wording is explicit, route directly and continue.
Run the collector with values discovered for this case. Leave unknown values empty instead of inventing them.
cd <path-to-vscode-doctor-skill>
EDITOR_COMMANDS="<space-separated editor cli commands, if known>" \
EDITOR_PROCESS_QUERY="<process regex, if known>" \
EDITOR_DATA_DIRS="<colon-separated data dirs, if known>" \
EDITOR_SETTINGS_FILES="<colon-separated settings files, if known>" \
SETTINGS_QUERY="<settings regex, if known>" \
EDITOR_LOG_DIRS="<colon-separated log dirs, if known>" \
LOG_FILE_GLOB="<log file glob, if known>" \
LOG_SIGNAL_QUERY="<log regex, if known>" \
GENERATED_DIR_PATTERNS="<colon-separated generated directory names, if user/project supplied>" \
./scripts/collect_vscode_diagnostics.sh "<workspace-root>"Run the collector from the script file. Do not pipe it into bash through stdin; some editor CLIs read stdin during --status, which can truncate the collector run.
Discovery rules:
Classify each finding by evidence strength:
Common evidence types to look for, without assuming any one must exist:
When the user wants a file-browser-like workspace:
When recommending extension changes:
When recommending workspace exclusions:
files.watcherExclude, search.exclude, and supported language-tool excludes. Use files.exclude only when the user wants paths hidden from Explorer.files.watcherExclude: stops continuous file-change watching for matching paths; files can still be opened, edited, and saved, but external changes may need manual refresh or reopen.search.exclude: removes matching paths from default global search; files remain visible and editable, and users can temporarily search them by disabling exclude/ignore settings in the search UI.files.exclude: hides matching paths from Explorer; avoid this for file-browser mode unless the user explicitly wants the directory hidden.files.watcherExclude plus search.exclude, not files.exclude.code --status file counts to prove the benefit by itself.When recommending language, lint, Git, or AI-assistant settings:
python.languageServer, ruff.*, git.autorefresh, git.autoRepositoryDetection, and github.copilot.* as optional load-reduction experiments, not default fixes.Use this when the user treats VS Code or Cursor primarily as a file browser over a large folder. Present options explicitly before any write:
files.watcherExclude and search.exclude for high-churn/generated paths. This is the default when the user still edits code and wants IntelliSense, linting, Git refresh, or AI assistance.Do not require live evidence of high CPU from Ruff, Copilot, Dependi, Python, Rust, or Git before offering option 3 when the user's intent is explicitly a lightweight file-browser experience. Still do not apply it automatically. Show the proposed diff, say what capability is removed, and include rollback.
Use this when the user wants to keep a parent directory open.
--status.files.watcherExclude for paths causing watcher drops or generated directoriessearch.exclude for generated/cache directories that pollute searchfiles.exclude only for paths the user should not browse in ExplorerAvoid saying the workspace file count should drop after watcher/search excludes. code --status may still report the same workspace surface; the expected improvement is fewer watcher storms, less noisy search/index work, or quieter language-service processes.
Use these modules when baseline evidence or user wording points beyond simple watcher/search cleanup.
| Probe | Evidence to collect | Safe experiments after confirmation | Verification |
|---|---|---|---|
| Editor/Electron candidate | editor version, --status, fresh renderer/main logs, temporary profile comparison if user agrees | launch a temporary profile or stable/insiders comparison; do not mutate current profile | same workspace/action on both profiles, renderer/main log delta |
| Rendering/input candidate | GPU status from editor CLI if available, UI/render/input process CPU/RSS, timestamps of typing lag or renderer unresponsive logs | temporary GPU/input-method isolation only after explicit confirmation | typing latency observation, renderer logs, UI process CPU/RSS before/after |
| Extension internal bug | Running Extensions output, plugin background CPU/RSS, profile output, extension names from evidence | Extension Bisect or workspace-scoped disable of named extensions | profile or CPU/RSS delta, same editor action repeated |
| Extreme project/language service | language-service processes, project-root counts from --status, schema-supported language-tool excludes | workspace-scoped language-tool excludes, project root partitioning, tool-specific config changes | language-service CPU/RSS, diagnostics latency, no new watcher/search regressions |
| System pressure context | load, memory, swap, disk free, top CPU/RSS | do not fix system issues inside this skill unless user explicitly changes scope | decide whether editor evidence still explains the symptom |
| Remote/container/network filesystem | remote/container markers, remote logs, local vs remote process split, workspace path type | remote-side collector or narrower remote experiment after confirmation | remote CPU/RSS/logs, network/filesystem latency evidence |
When a probe points to an editor/Electron, OS, extension, or remote upstream issue, report it as a diagnosis with a workaround or next experiment. Do not claim the skill can directly fix upstream bugs.
Use the simple report shape by default. Use this technical structure only when the user asks for a detailed report or the situation is complex:
## Editor Performance Diagnosis
### Evidence
| Signal | Current value | Source | Confidence |
|----|----|----|----|
| ... | ... | ... | high/medium/low |
### Priority
#### High
1. ...
#### Medium
1. ...
#### Low
1. ...
### Options
| Option | When to use | Expected impact | Cost | Verify | Roll back |
|----|----|----|----|----|----|
| ... | ... | Cannot quantify without baseline / based on observed delta | ... | ... | ... |
### Next Step
Ask the user which option to run first. Do not apply changes until they confirm.If the user wants a social-media record, add a compact section:
### Shareable Summary
- Goal: ...
- Baseline evidence: ...
- One change: ...
- After evidence: ...
- Caveat: ...
- Redaction: local paths/project names/process command lines reviewed before sharing.Only include measured deltas. If the after window is short, say it is an immediate check rather than proof of long-term improvement.
Before claiming improvement, collect a fresh after-snapshot with the same collector inputs used for the baseline. Compare only observed values:
## Before / After
| Metric | Before | After | Result |
|----|----:|----:|----|
| ... | ... | ... | improved / unchanged / worse / unknown |
Conclusion:
- Experiment result: ...
- Remaining evidence: ...
- Next step: ...
- Rollback: ...If the before snapshot is missing, write: 缺少调整前 baseline,无法可靠量化收益.
Regression prompts and expected behaviors are documented in evals/README.md and evals/evals.json; use them when changing the collector or diagnosis workflow.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.