Use when adding, reviewing, or troubleshooting an interactive release-note Try This experience, including commands, views, editor samples, Chat drafts, guided spotlights, prerequisites, scoped targets, or Agents-window handoff.
66
83%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Feature tryouts connect release-note links to trusted product interactions. Use this skill to choose the least invasive useful experience, keep behavior feature-owned, bind guidance to the correct UI instance, fail closed, and validate the real journey.
The authoritative contributor contract is src/vs/workbench/contrib/onboarding/README.md. Read it before implementation. This skill owns the execution workflow and must not duplicate a catalogue of current tryouts.
Choose the least invasive level that provides value:
| Level | Use when |
|---|---|
| Try it | Behavior can be prepared safely with isolated data |
| Guide me | Opening and highlighting a real control is sufficient |
| Help me get ready | The user must perform a prerequisite |
| Use my context | The action must bind to an exact editor, session, or widget |
| Explain only | Interaction would be unsafe, misleading, or impossible |
A spotlight alone can be useful. A tryout does not need to reproduce the complete feature.
Before editing, answer:
Prefer feature-owned contributions and commands. Shared onboarding code should provide reusable lifecycle and presentation primitives, not feature policy.
| Need | Presentation |
|---|---|
| Run an existing product command with installed-code arguments | command |
| Open a contributed view or view container | openView |
| Show deterministic, read-only text or a comparison | editorSample |
| Prepare an exact feature-owned UI instance | Feature-owned launch presentation |
| Launch a surface and guide one or more controls | Guided presentation |
Add a feature-owned presentation only when the built-in types cannot express the required lifecycle safely.
Canonical implementations:
Release notes are fetched content. They may identify a tryout, but they never define executable behavior.
Requirements:
vscode://tryout/<id> links contain only the registered ID and always require the product confirmation. External launch defaults to allowed; set allowExternalLaunch: false when a tryout must remain in-product only.Never automatically:
Use stable, namespaced IDs. Do not repurpose an existing ID because old release notes remain available.
Use a feature-owned adapter to resolve controls through their owner's normal APIs, following the contributor guide. Existing owner-marked targets through markOnboardingTarget remain supported. Never query another component's classes or DOM structure.
Use an unscoped target only when at most one matching control can be visible in the target window.
Editors, Chat widgets, split panes, and repeated controls require a run scope:
{ kind: 'prepared', targetScope }.{ targetScope } when its command payload sets captureTargetScope: true.Scopes are opaque run identities. They are not selectors, persisted state, release-note input, or authorization tokens.
See onboardingTarget.ts, guidedTryoutPresentation.ts, and spotlightPresentation.ts.
Use:
createOnboardingClickStep when activating the real target should advance;createOnboardingContextStep when the requested user action produces a context-key state;Do not manufacture diagnostics, sessions, browser navigation, selections, or saved configuration merely to make the example look complete. Explain what the user must do and let the owning feature perform it.
Use isAI: true and include the feature's normal Chat visibility and enablement conditions.
Chat examples must:
acceptInput;For model, provider, permission, policy, or managed-setting changes, invoke the policy-and-managed-settings skill.
Use targetWindow: 'agents' when implementation belongs in the Agents window.
sessions.*.main.ts entry point.vs/sessions → vs/workbench layer direction.Invoke the sessions skill for changes under src/vs/sessions/**.
Invoke:
accessibility for every interactive tryout;design-philosophy when changing visual or spotlight behavior;integrated-browser for Integrated Browser targets;sessions for Agents-window implementation;policy-and-managed-settings for AI controls, permissions, models, providers, or managed settings;memory-leak-audit for new listeners, target registrations, repeated rendering, or asynchronous lifecycles.Reuse the existing spotlight presentation. Do not create a release-note-specific overlay.
Use Developer: Copy Feature Example Link to produce the backtick-wrapped shorthand. The first argument is a registered tryout ID; the second is literal display text, not executable behavior:
`try(myFeature.guide,Try My Feature)`Existing encoded links remain supported with their product-generated labels. See the contributor guide for the shorthand grammar and fallback behavior.
The surrounding prose should explain:
Use releaseNotesTryouts.md for manual validation, not as another source of feature contracts.
Add the smallest applicable coverage:
| Capability | Required coverage |
|---|---|
| Registration | Exact ID, metadata, payload, and availability |
| Preparation | No execution during availability or preparation |
| Cancellation | No late effects after cancellation |
| Setup | Offered but never automatically executed |
| Guided target | Owner callback and missing-target behavior |
| Scoped target | Two visible instances; prepared instance wins |
| Command | Missing command fails closed |
| Chat | No send, no draft replacement, exact widget binding |
| Agents handoff | Cancellation, acknowledgment, rejection, and supersession |
| Integrated Browser | Native view hides behind the overlay |
| Release notes | Unknown and malformed links remain inert |
Framework references:
Run:
npm run valid-layers-check when imports or ownership change.npm run typecheck-client when TypeScript scope warrants it.npm run build-fast whenever possible.Clean temporary profiles, samples, logs, and processes.
The completion report should state:
microsoft/vscode
dc811b7
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.