---
title: "Claude Desktop — Feature Flags"
description: "Documentation: Claude Desktop — Feature Flags"
type: reference
tags: [claude-desktop, feature-flags, growthbook, reverse-engineering]
timestamp: 2026-06-24
---

# 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

```json
{
  "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

- [[claude-desktop-bundles]] — Bundle architecture (ASAR, Vite, remote vs local)
- [[claude-desktop-analysis-workflow]] — Analysis tools (LSP, ast-grep, CDP)
- [[claude-desktop-infra-stack]] — Proposed infrastructure stack
- [[claude-desktop-voice-protocol]] — STT/TTS WebSocket protocol
