Claude Desktop — Feature Flags
Claude Desktop feature flag system, extracted via ASAR bundle analysis + runtime introspection (CDP).
System Architecture
claude.ai /api/desktop/features ──→ GrowthBook (custom wrapper)
│
▼
ct("ID") checks in code
│
┌───────────────┼───────────────┐
▼ ▼ ▼
desktopBootFeatures $3i (dynamic) V3i (hardcoded)
(39 capabilities) (model-based) (1p-only, 9 flags)
Feature Sources
| Source | Description | Count |
|---|
| fcache (disk) | Local cache at ~/Library/Application Support/Claude/fcache | 189 features |
| V3i | Hardcoded 1p — returned by hardcodedMainGrowthBookFeatures() | 9 features |
| $3i | Dynamic — generated from buildConfig() and supports1mContextModels() | 29 features |
| desktopBootFeatures | Named capabilities passed to renderer | 39 features |
Feature Format
{
"2976814254": {
"value": true,
"on": true,
"off": false,
"source": "force",
"experiment": null,
"experimentResult": null
}
}
source: "force" — hardcoded in code (1p)
source: "defaultValue" — $3i default
source: "server" — came from /api/desktop/features endpoint
3p Flow
hardcodedMainGrowthBookFeatures() → null
→ fetch GET /api/desktop/features (from configured server)
→ cache in fcache (gzip, 24h TTL)
→ ct() checks
1p Flow
hardcodedMainGrowthBookFeatures() → V3i (9 hardcoded features)
→ fetch GET /api/desktop/features (from claude.ai)
→ merge with V3i
→ ct() checks
Identified 3p Stubs
| Stub | Function | Impact |
|---|
_vt() | return Promise.resolve({}) | Voice skill never loads |
y4n | Object.freeze({__proto__:null}) | Empty Echo MCP server |
hardcodedMainGrowthBookFeatures() | return null | No 1p features |
Named Features
⭐ V3i — Hardcoded 1p (forces on:true)
| ID | Name | Function |
|---|
2976814254 | ccd-builtin-tools | Built-in MCP tools + preview server |
3246569822 | can-save-skill | Enables "Save Skill" button in UI |
1143815894 | force-disable-host-loop | Forcefully disables host loop |
123929380 | memory-reflect-skill | Memory reflection skill |
1696890383 | cowork-memory-guidelines | Cowork memory path + guidelines |
2307090146 | plugin-oauth-storage | OAuth credential storage for plugins |
2940196192 | louder-panda-beta | Louder Panda beta feature |
3732274605 | chilling-sloth-beta | Chilling Sloth beta feature |
1978029737 | cowork-native-file-preview | Native file preview in Cowork |
🧠 Voice (1985784543)
- Name:
voice:setup-voice-skill
- 1p: Active (confirmed by protocol captures)
- 3p: BLOCKED — feature not in cache +
_vt() is a stub
- Module:
getSetupVoiceSkill() via await _vt() — returns undefined in 3p
- To activate: Replace stub
_vt + return feature on:true
🖥️ Computer Use (4116586025)
- Name:
computer-use-availability
- 1p:
supported
- 3p: NOT in cache
- Dependency: Purely local (
ct() + platform check)
🛠️ Skills
| ID | Name | 1p | 3p |
|---|
123929380 | memory-reflect-skill | on (V3i) | off |
1824824999 | skill-custom-description | ? | off |
1004628546 | memory-reflect-config | on | on |
4066504968 | cowork-setup-config | on | on |
2800354941 | skill-sort-alpha | ? | on |
🔌 Plugins
| ID | Name | 1p | 3p |
|---|
4274871493 | plugin-sync-v2 | on (force) | on (force) |
3633961296 | plugin-backfill-migration | on (force) | on (force) |
1609612026 | plugin-account-enabled | on (force) | on (force) |
720735283 | plugin-stale-check | on (force) | on (force) |
3758515526 | plugin-marketplace-config | on | on |
🖥️ VM & Cowork
| ID | Name | 1p | 3p |
|---|
4160352601 | vm-heartbeat-restart | on | off |
2339084909 | vm-heartbeat-simple | on (force) | on (force) |
4141490266 | cowork-additional-tools | ? | off |
3371831021 | cowork-cu-only-mode | ? | off |
⏰ Scheduler
| ID | Name | 1p | 3p |
|---|
3516166472 | wake-scheduler-feature | unavailable | on |
3300773012 | scheduler-offline-gate | ? | off |
2893011886 | scheduler-battery-interval | ? | on |
🔐 OAuth / Auth
| ID | Name | 1p | 3p |
|---|
2438134137 | oauth-design-scope | ? | off |
2392971184 | oauth-sessions-scope | on (force) | on (force) |
desktopBootFeatures — 39 Named Capabilities
Extracted from 1p webview via window.desktopBootFeatures:
Supported (24)
nativeQuickEntry, quickEntryDictation, quickEntryGlobalShortcut, customQuickEntryDictationShortcut, chillingSlothFeat, chillingSlothEnterprise, chillingSlothLocal, yukonSilver, yukonSilverGems, yukonSilverGemsCache, desktopTopBar, ccdPlugins, computerUse, tearOffHalo, coworkArtifactPopout, claudeDesignWindow, coworkRemoteSessionSpaces, coworkBranchSession, bootstrapConfig, chatIn3p, builtinMcpPresets, chatTab [beta]
Unavailable (15)
artifactsPane, plushRaccoon, quietPenguin, chillingSlothPool, wakeScheduler, coworkKappa, coworkArtifacts, markTaskComplete, framebufferPreview, iosSimulator, androidEmulator, iosSimulatorH264, grandPrix, grandPrixRequest, surfaceTogglesPreview, chatCodeExecution, epitaxyMcpApps
Name → Numeric ID Mapping
| Named Feature | Numeric ID | Resolver |
|---|
chillingSlothFeat | 1928275548 | DHr() → ct("1928275548") |
chillingSlothLocal | 2115990222 | SHr() → ct("2115990222") |
chillingSlothPool | 1992087837 | ct("1992087837") |
wakeScheduler | 3516166472 | ER(xHr) → ct("3516166472") + platform |
computerUse | 4116586025 | LHr() → ct("4116586025") + platform |
framebufferPreview | 1928275548 | GHr() → same as chillingSlothFeat |
Multiple features are hardcoded Md = {status: "supported"}: ccdPlugins, tearOffHalo, coworkArtifactPopout, claudeDesignWindow, coworkRemoteSessionSpaces, coworkBranchSession, bootstrapConfig, chatIn3p, builtinMcpPresets
Complete Analysis
CSV with 226 features, names, 1p/3p state, and compliance: ~/.bezetacil/workdir/claude-desktop/feature-flags.csv
References