

Also from Kynth Studios


Also from Kynth Studios


Also from Kynth Studios
123456# AI Customization View78The AI Customization view provides a unified view for discovering and managing AI customization 'artifacts' (customizations that augment LLM prompts or behavior).910Examples of these include: Custom Agents, Skills, Instructions, and Prompts. It surfaces prompt files that are typically hidden in `.github/` folders, user data directories, workspace settings, or exposed via extensions.1112## Overview1314The view displays a hierarchical tree structure:1516```17AI Customization (View Container)18└── AI Customization (Tree View)19 ├── Custom Agents (.agent.md files)20 │ ├── Workspace21 │ │ └── agent files...22 │ ├── User23 │ │ └── agent files...24 │ └── Extensions25 │ └── agent files...26 ├── Skills (SKILL.md files)27 │ └── (same storage structure)28 ├── Instructions (.instructions.md files)29 │ └── (same storage structure)30 └── Prompts (.prompt.md files)31 └── (same storage structure)32```3334**Key Features:**35- 3-level tree hierarchy: Category → Storage Group → Files36- Auto-expands category nodes on initial load and refresh to show storage groups37- Symbol-based root element for type safety38- Double-click to open files in editor39- Context menu support with Open and Run Prompt actions40- Toolbar actions: New dropdown, Refresh, Collapse All41- Skill names parsed from frontmatter with fallback to folder name42- Responsive to IPromptsService change events4344## File Structure4546All files are located in `src/vs/workbench/contrib/chat/browser/aiCustomization/`:4748```49aiCustomization/50├── aiCustomization.ts # Constants, IDs, and MenuIds51├── aiCustomization.contribution.ts # View registration and actions52├── aiCustomizationViews.ts # Tree view pane implementation53├── aiCustomizationIcons.ts # Icon registrations54└── media/55 └── aiCustomization.css # Styling56```5758## Key Constants (aiCustomization.ts)5960- `AI_CUSTOMIZATION_VIEWLET_ID`: View container ID for sidebar61- `AI_CUSTOMIZATION_VIEW_ID`: Unified tree view ID62- `AI_CUSTOMIZATION_STORAGE_ID`: State persistence key63- `AICustomizationItemMenuId`: Context menu ID64- `AICustomizationNewMenuId`: New item submenu ID6566## View Registration (aiCustomization.contribution.ts)6768### View Container6970Register sidebar container with:71- ViewPaneContainer with `mergeViewWithContainerWhenSingleView: true`72- Keyboard shortcut: Cmd+Shift+I73- Location: Sidebar74- Visibility: `when: ChatContextKeys.enabled` (respects AI disable setting)7576### View Descriptor7778Register single unified tree view:79- Constructor: `AICustomizationViewPane`80- Toggleable and moveable81- Gated by `ChatContextKeys.enabled`8283### Welcome Content8485Shows markdown links to create new items when tree is empty.8687## Toolbar Actions8889**New Item Dropdown** - Submenu in view title:90- Add icon in navigation group91- Submenu contains: New Agent, New Skill, New Instructions, New Prompt92- Each opens PromptFilePickers to guide user through creation9394**Refresh** - ViewAction that calls `view.refresh()`9596**Collapse All** - ViewAction that calls `view.collapseAll()`9798All actions use `ViewAction<AICustomizationViewPane>` pattern and are gated by `when: view === AI_CUSTOMIZATION_VIEW_ID`.99100## Tree View Implementation (aiCustomizationViews.ts)101102### Tree Item Types103104Discriminated union with `type` field:105106**ROOT_ELEMENT** - Symbol marker for type-safe root107108**IAICustomizationTypeItem** (`type: 'category'`)109- Represents: Custom Agents, Skills, Instructions, Prompts110- Contains: label, promptType, icon111112**IAICustomizationGroupItem** (`type: 'group'`)113- Represents: Workspace, User, Extensions114- Contains: label, storage, promptType, icon115116**IAICustomizationFileItem** (`type: 'file'`)117- Represents: Individual prompt files118- Contains: uri, name, description, storage, promptType119120### Data Source121122`UnifiedAICustomizationDataSource` implements `IAsyncDataSource`:123124**getChildren logic:**125- ROOT → 4 categories (agent, skill, instructions, prompt)126- category → storage groups (workspace, user, extensions) that have items127- group → files from `promptsService.listPromptFilesForStorage()` or `findAgentSkills()`128129**Skills special handling:** Uses `findAgentSkills()` to get names from frontmatter instead of filenames130131### Tree Renderers132133Three specialized renderers for category/group/file items:134- **Category**: Icon + bold label135- **Group**: Uppercase label with descriptionForeground color136- **File**: Icon + name with tooltip137138### View Pane139140`AICustomizationViewPane extends ViewPane`:141142**Injected services:**143- IPromptsService - data source144- IEditorService - open files145- IMenuService - context menus146147**Initialization:**1481. Subscribe to `onDidChangeCustomAgents` and `onDidChangeSlashCommands` events1492. Create WorkbenchAsyncDataTree with 3 renderers and data source1503. Register handlers: `onDidOpen` (double-click) → open file, `onContextMenu` → show menu1514. Set input to ROOT_ELEMENT and auto-expand categories152153**Auto-expansion:**154- After setInput, iterate root children and expand each category155- Reveals storage groups without user interaction156- Applied on both initial load and refresh157158**Public API:**159- `refresh()` - Reload tree and re-expand categories160- `collapseAll()` - Collapse all nodes161- `expandAll()` - Expand all nodes162163## Context Menu Actions164165Menu ID: `AICustomizationItemMenuId`166167**Actions:**168- **Open** - Opens file in editor using IEditorService169- **Run Prompt** - Only for prompt files, invokes chat with prompt170171**URI handling:** Actions must handle both URI objects and serialized strings172- Check `URI.isUri(context)` first173- Parse string variants with `URI.parse()`174175**Context passing:**176- Serialize context as `{ uri: string, name: string, promptType: PromptsType }`177- Use `shouldForwardArgs: true` in getMenuActions178- Only show context menu for file items (not categories/groups)179180## Icons (aiCustomizationIcons.ts)181182Themed icons using `registerIcon(id, codicon, label)`:183184**View/Types:**185- aiCustomizationViewIcon - Codicon.sparkle186- agentIcon - Codicon.copilot187- skillIcon - Codicon.lightbulb188- instructionsIcon - Codicon.book189- promptIcon - Codicon.bookmark190191**Storage:**192- workspaceIcon - Codicon.folder193- userIcon - Codicon.account194- extensionIcon - Codicon.extensions195196## Styling (media/aiCustomization.css)197198**Layout:** Full height view and tree container199200**Tree items:** Flex layout with 16px icon + text, ellipsis overflow201202**Categories:** Bold font-weight203204**Groups:** Uppercase, small font (11px), letter-spacing, descriptionForeground color205206## Integration Points207208**IPromptsService:**209- `listPromptFilesForStorage(type, storage)` - Get files for a type/storage combo210- `findAgentSkills()` - Get skills with names parsed from frontmatter211- `onDidChangeCustomAgents` - Refresh on agent changes212- `onDidChangeSlashCommands` - Refresh on command changes213214**PromptsType enum:** `instructions | prompt | agent | skill`215216**PromptsStorage enum:** `local` (workspace) | `user` | `extension`217218**AI Feature Gating:** View gated by `ChatContextKeys.enabled` (respects `chat.disableAIFeatures` setting)219220**Registration:** Import `./aiCustomization/aiCustomization.contribution.js` in `chat.contribution.ts`221222---223224*Update this file when making architectural changes to the AI Customization view.*225
One repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| microsoft/vscode.github/instructions/best-practices.instructions.md · 189k | Copilot instructions | styleui | 60/100 | 14 days ago | |
| microsoft/vscodeextensions/copilot/src/platform/authentication/common/AGENTS.md · 189k | AGENTS.md | archsecurityagent-behaviour | 58/100 | 14 days ago | |
| microsoft/vscode.github/copilot-instructions.md · 189k | Copilot instructions | stylearchtypesui+2 | 74/100 | 13 days ago | |
| microsoft/vscode.github/instructions/accessibility.instructions.md · 189k | Copilot instructions | styledo-not | 61/100 | 14 days ago | |
| microsoft/vscode.github/instructions/agentHostTesting.instructions.md · 189k | Copilot instructions | teststyletesting-strategyagent-behaviour | 55/100 | 7 days ago | |
| microsoft/vscode.github/instructions/chat.instructions.md · 189k | Copilot instructions | no sections | 39/100 | 14 days ago | |
| microsoft/vscode.github/instructions/coding-guidelines.instructions.md · 189k | Copilot instructions | styletypesuidocs | 60/100 | 14 days ago | |
| microsoft/vscode.github/instructions/committing.instructions.md · 189k | Copilot instructions | do-not | 23/100 | 14 days ago | |
| microsoft/vscode.github/instructions/css-best-practices.instructions.md · 189k | Copilot instructions | styleui | 29/100 | 14 days ago | |
| microsoft/vscode.github/instructions/design-philosophy.instructions.md · 189k | Copilot instructions | style | 34/100 | 14 days ago | |
| microsoft/vscode.github/instructions/design-tokens.instructions.md · 189k | Copilot instructions | styledo-not | 65/100 | 14 days ago | |
| microsoft/vscode.github/instructions/interactive.instructions.md · 189k | Copilot instructions | ui | 43/100 | 14 days ago | |
| microsoft/vscode.github/instructions/notebook.instructions.md · 189k | Copilot instructions | no sections | 48/100 | 14 days ago | |
| microsoft/vscodeextensions/copilot/.github/instructions/model-prompts.instructions.md · 189k | Copilot instructions | testsecurityui | 58/100 | 14 days ago | |
| microsoft/vscodeextensions/copilot/.github/instructions/prompt-tsx.instructions.md · 189k | Copilot instructions | archuiperformance | 58/100 | 14 days ago | |
| microsoft/vscodeextensions/copilot/.github/instructions/vitest-unit-tests.instructions.md · 189k | Copilot instructions | teststyletesting-strategydo-not | 51/100 | 14 days ago | |
| microsoft/vscodesrc/vs/platform/agentHost/common/state/AGENTS.md · 189k | AGENTS.md | buildarchtypesgit+2 | 64/100 | 14 days ago | |
| microsoft/vscodesrc/vs/platform/agentHost/node/copilot/prompts/AGENTS.md · 189k | AGENTS.md | styleagent-behaviour | 58/100 | 14 days ago | |
| microsoft/vscode.github/instructions/observables.instructions.md · 189k | Copilot instructions | no sections | 40/100 | 14 days ago | |
| microsoft/vscode.github/instructions/oss-third-party-notices.instructions.md · 189k | Copilot instructions | buildgitdependenciesdeployment+1 | 65/100 | 14 days ago |
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| louislam/uptime-kuma.github/copilot-instructions.md · 90k | Copilot instructions | setupbuildtestlint-format+9 | 100/100 | 14 days ago | |
| HerringtonDarkholme/megarepo.github/copilot-instructions.md · 17 | Copilot instructions | setupbuildtestlint-format+7 | 100/100 | 14 days ago | |
| chihebnabil/lovable-boilerplate.github/instructions/global.instructions.md · 63 | Copilot instructions | buildlint-formatstylearch+4 | 100/100 | 14 days ago | |
| bagisto/bagisto.github/copilot-instructions.md · 28k | Copilot instructions | setupbuildteststyle+5 | 97/100 | 14 days ago | |
| JCodesMore/ai-website-cloner-template.github/copilot-instructions.md · 31k | Copilot instructions | buildlint-formatstylearch+3 | 97/100 | 7 days ago | |
| nerolis-lab/nerolis-lab.github/copilot-instructions.md · 32 | Copilot instructions | setupbuildtestlint-format+11 | 96/100 | 14 days ago | |
| thangaram611/second-brain.github/copilot-instructions.md · 0 | Copilot instructions | setupteststylearch+4 | 96/100 | 14 days ago | |
| darkmatter/nixmac.github/copilot-instructions.md · 25 | Copilot instructions | setupbuildtestlint-format+8 | 96/100 | 14 days ago |
A badge carrying the measured quality of the strongest agent config file in this repository, out of 100. It reads from this index every time somebody loads your page, so it changes when the measurement changes and there is nothing to keep up to date. Free, no account, and the value is not something you or we can set by hand.
[](https://rulestack.kynth.studio/configs/microsoft-vscode-github-instructions-ai-customization-instructions)Would rather not hotlink us? Every badge is also served in shields.io’s endpoint schema, so shields renders the image and your readers never talk to our domain:
Published by Toolproof, the masthead over this index and eight others. The method behind the number is at toolproof.kynth.studio/methodology, and the whole thing is readable as JSON with no key at /api.