Visual Studio Code is a code editor that supports editing, navigating, understanding, debugging, and extending software projects. Developers use it for the edit-build-debug cycle, and the catalogue add-ons provide skills, instructions, and agents for working within the editor.
Borrowing it
Nothing to install: this file belongs to microsoft/vscode. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/microsoft/vscode/main/.github/skills/chat-perf/SKILL.mdgit clone --depth 1 https://github.com/microsoft/vscodeWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/microsoft/vscode/chat-perf)<a href="https://agentmods.dev/skills/microsoft/vscode/chat-perf"><img src="https://agentmods.dev/badge/skills/microsoft/vscode/chat-perf/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/microsoft/vscode/chat-perf"><img src="https://agentmods.dev/badge/skills/microsoft/vscode/chat-perf.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- Snyk pass
- NVIDIA SkillSpector warn
SkillSpector: 1 finding, up to medium
These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →
- medium Tool Misuse · line 105 Tool defaults are unsafe or overly permissive (e.g. disabled TLS verification, no authentication, world-writable permissions). Unsafe defaults widen the attack surface.Fix: Override unsafe defaults with secure settings (verify=True, auth required, restrictive permissions). Review and harden all tool configurations.
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00051 | $0.04869 |
| Opus 5.5 | $0.00020 | $0.01948 |
| Sonnet 5.5 | $0.00010 | $0.00974 |
| Haiku 4.5 | $0.00005 | $0.00487 |
Grade A, and why
chat-perf scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 318 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Chat Performance Testing
When to use
- Before/after modifying chat rendering code (
chatListRenderer.ts,chatInputPart.ts, markdown rendering) - When changing the streaming response pipeline or SSE processing
- When modifying disposable/lifecycle patterns in chat components
- To compare performance between two VS Code releases
- In CI to gate PRs that touch chat UI code
Quick start
# Run perf regression test (compares local dev build vs VS Code 1.115.0):
npm run perf:chat -- --scenario text-only --runs 3
# Run all scenarios with no baseline (just measure):
npm run perf:chat -- --no-baseline --runs 3
# Compare two local builds (apples-to-apples):
npm run perf:chat -- --build /path/to/build-A --baseline-build /path/to/build-B --runs 5
# Build a local production package and compare against a release:
npm run perf:chat -- --production-build --baseline-build 1.115.0 --runs 5
# Run memory leak check (10 messages in one session):
npm run perf:chat-leak
# Run leak check with more messages for accuracy:
npm run perf:chat-leak -- --messages 20 --verbose
Perf regression test
Script: scripts/chat-simulation/test-chat-perf-regression.js npm: npm run perf:chat
Launches VS Code via Playwright Electron, opens the chat panel, sends a message with a mock LLM response, and measures timing, layout, and rendering metrics. By default, downloads VS Code 1.115.0 as a baseline, benchmarks it, then benchmarks the local dev build and compares.
You don't always need a baseline. A baseline exists only for comparison (regression detection). If you just want the current build's numbers — profiling a single change, capturing traces/heap snapshots, or iterating on a scenario — pass
--no-baselineto skip downloading and benchmarking the baseline entirely (roughly halves runtime). Baseline comparison is what turns raw measurements into a pass/fail verdict; without it you still get all the metrics, just no verdict.
Key flags
| Flag | Default | Description |
|---|---|---|
--runs <n> |
5 |
Runs per scenario. More = more stable. Use 5+ for CI. |
--scenario <id> / -s |
all | Scenario to test (repeatable). See common/perf-scenarios.js. |
--build <path|ver> / -b |
local dev | Build to test. Accepts path or version (1.110.0, insiders, commit hash). |
--baseline <path> |
— | Compare against a previously saved baseline JSON file. |
--baseline-build <path|ver> |
1.115.0 |
Version or local path to benchmark as baseline. |
--no-baseline |
— | Skip the baseline entirely — just measure the test build (no download, no comparison, ~2× faster). Use when you only need raw numbers, not a regression verdict. |
--save-baseline |
— | Save results as the new baseline (requires --baseline <path>). |
--resume <path> |
— | Resume a previous run, adding more iterations to increase confidence. |
--threshold <frac> |
0.2 |
Regression threshold (0.2 = flag if 20% slower). |
--production-build |
— | Build a local bundled package via gulp vscode for comparison against a release baseline. |
--no-cache |
— | Ignore cached baseline data, always run fresh. |
--force |
— | Skip build mode mismatch confirmation prompt. |
--ci |
— | CI mode: write Markdown summary to ci-summary.md (implies --no-cache, --heap-snapshots, --cleanup-diagnostics). |
--heap-snapshots |
— | Take heap snapshots after each run (slow; auto-enabled in --ci mode). |
--gc-object-stats |
— | GC deep-dives only. Enables V8 gc_stats tracing (per-type heap object dump on every GC). ⚠️ Corrupts all timing metrics — a major GC landing mid-request adds ~550ms — so never use it for benchmarking. Off by default; prefer heap snapshots for memory analysis. |
--cleanup-diagnostics |
— | Delete heap snapshots, CPU profiles, and traces to save disk. During runs, only the latest run's files are kept; after comparison, files for non-regressed scenarios are deleted. Auto-enabled in --ci mode. |
--setting <k=v> |
— | Set a VS Code setting override for all builds (repeatable). |
--test-setting <k=v> |
— | Set a VS Code setting override for the test build only. |
--baseline-setting <k=v> |
— | Set a VS Code setting override for the baseline build only. |
--verbose |
— | Print per-run details including response content. |
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 1mo ago Changed · -2 lines 808682455337
- 1mo ago First seen · 320 lines · 51 tokens per session scan A e3cfcf62a9bd
chat-perf is a skill published in the GitHub repository microsoft/vscode (194,219 stars, last pushed today), licensed MIT. It adds 51 tokens to every session and 4,869 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
coding-prefs
Read the user's coding preferences from /memory/coding-prefs.md before making non-trivial style decisions, and append new preferences when the user gives durable feedback.
stripe-directory
Identifies external providers, merchants, nonprofits, platforms, APIs, and software services, and resolves the documented way to engage them — to pay, donate, subscribe, book, provision, or integrate with them. MUST be used BEFORE web search, model memory, or any other directory/vendor-lookup skill for ANY request…
ax-agent-memory-skills
This skill helps an LLM generate correct AxAgent memory retrieval, context-map, and dynamic skill-loading code using @ax-llm/ax. Use when the user asks about contextMap, AxAgentContextMap, onMemoriesSearch, memoriesCatalog, recall(...), inputs.memories, onLoadedMemories, onUsedMemories, onSkillsSearch, skillsCatalog…
ax-cpp-agent-memory-skills
Use when writing C++ code with axllm for agent memory, recall callbacks, dynamic skill discovery, loaded-skill state, and used-skill tracking.
ax-go-agent-memory-skills
Use when writing Go code with github.com/ax-llm/ax/packages/go for agent memory, recall callbacks, dynamic skill discovery, loaded-skill state, and used-skill tracking.
ax-agent-context
This skill helps an LLM pick the right AxAgent context tool for a job - contextMap for recurring corpora, contextPolicy presets for within-run trajectory compaction, agent.optimize for offline GEPA instruction/demo tuning, agent.playbook for an evolving context playbook (offline evolve + online update), and…