{
  "version": 1,
  "flags": [
    {
      "id": "in-chat-onboarding-tour",
      "scope": "client",
      "key": "in-chat-onboarding-tour",
      "label": "In-Chat Onboarding Tour",
      "description": "Multivariate experiment for the eyes-led in-chat onboarding tour. control = straight to chat after research onboarding (current behavior); tour = the extended tour auto-plays on first workspace entry. Desktop-only: phone-width viewports and the native shell get neither the tour nor its telemetry (not even the exposure event), so the funnel measures desktop sessions exclusively. Targeted via LaunchDarkly (70% tour / 30% control).",
      "defaultEnabled": "control",
      "values": ["control", "tour"]
    },
    {
      "id": "user-hosted-enabled",
      "scope": "client",
      "key": "user-hosted-enabled",
      "label": "User Hosted Enabled",
      "description": "Enable user-hosted onboarding flow",
      "defaultEnabled": false
    },
    {
      "id": "proactive-tips",
      "scope": "client",
      "key": "proactive-tips",
      "label": "Proactive Tips",
      "description": "Gates the dismissible proactive tip card in the web sidebar. String-valued so future A/B arms can be added as new values.",
      "defaultEnabled": "off",
      "values": ["off", "on"]
    },
    {
      "id": "experiment-activation-flow-2026-06-03",
      "scope": "both",
      "key": "experiment-activation-flow-2026-06-03",
      "label": "Activation Flow Experiment 2026-06-03",
      "description": "Multivariate activation-flow experiment. control = standard flow; variant-a = activation rail; personal-page = new sign-up-page variant (front-end only). Targeted via LaunchDarkly.",
      "defaultEnabled": "control",
      "values": ["control", "variant-a", "personal-page"]
    },
    {
      "id": "experiment-billing-cta-2026-07-23",
      "scope": "client",
      "key": "experiment-billing-cta-2026-07-23",
      "label": "Experiment: Billing CTA 2026-07-23",
      "description": "Credit paywall CTA experiment. control = single Add Credits CTA for everyone (opens Add Credits modal). upgrade-cta = FREE users (plan_id base) get a single Upgrade CTA (View Plans takeover) instead; PAID users still get Add Credits.",
      "defaultEnabled": "control",
      "values": ["control", "upgrade-cta"]
    },
    {
      "id": "local-docker-enabled",
      "scope": "client",
      "key": "local-docker-enabled",
      "label": "Local Docker Mode",
      "description": "When enabled, the Local hosting option uses Docker under the hood for sandboxed execution, hiding the separate Docker card",
      "defaultEnabled": false
    },
    {
      "id": "a2a-channel",
      "scope": "assistant",
      "key": "a2a-channel",
      "label": "A2A Channel",
      "description": "Enable the A2A (Agent-to-Agent) channel for inter-assistant communication via the open A2A protocol",
      "defaultEnabled": false
    },
    {
      "id": "settings-developer-nav",
      "scope": "assistant",
      "key": "settings-developer-nav",
      "label": "Settings Developer Nav",
      "description": "Control Developer nav visibility in macOS settings",
      "defaultEnabled": false
    },
    {
      "id": "developer-menu-items",
      "scope": "client",
      "key": "developer-menu-items",
      "label": "Developer Menu Items",
      "description": "Show Component Gallery and Replay Onboarding in the menu bar",
      "defaultEnabled": false
    },
    {
      "id": "settings-embedding-provider",
      "scope": "assistant",
      "key": "settings-embedding-provider",
      "label": "Embedding Provider Settings",
      "description": "Show the Embedding service card in Models & Services settings",
      "defaultEnabled": false
    },
    {
      "id": "multi-platform-assistant",
      "scope": "client",
      "key": "multi-platform-assistant",
      "label": "Multi-Platform Assistant Switcher",
      "description": "Enable the menu-bar assistant switcher for managing multiple platform-hosted assistants (new/switch/retire)",
      "defaultEnabled": false
    },
    {
      "id": "quick-input",
      "scope": "client",
      "key": "quick-input",
      "label": "Quick Input",
      "description": "Enable the Quick Input popover on right-click of the menu bar icon",
      "defaultEnabled": false
    },
    {
      "id": "expand-completed-steps",
      "scope": "client",
      "key": "expand-completed-steps",
      "label": "Expand Completed Steps",
      "description": "Auto-expand completed tool call step groups instead of showing them collapsed",
      "defaultEnabled": false
    },
    {
      "id": "backward-releases",
      "scope": "assistant",
      "key": "backward-releases",
      "label": "Backward Releases",
      "description": "Show older versions in the version picker, allowing rollback to previous releases",
      "defaultEnabled": false
    },
    {
      "id": "fast-mode",
      "scope": "assistant",
      "key": "fast-mode",
      "label": "Fast Mode",
      "description": "Enable Anthropic fast mode for Opus models (4.6, 4.7, 4.8), delivering up to 2.5x higher output tokens per second at premium pricing",
      "defaultEnabled": false
    },
    {
      "id": "teleport",
      "scope": "client",
      "key": "teleport",
      "label": "Teleport",
      "description": "Enable teleport UI in General settings for moving assistants between hosting environments",
      "defaultEnabled": false
    },
    {
      "id": "apple-container",
      "scope": "client",
      "key": "apple-container",
      "label": "Apple Container",
      "description": "Enable assistant sandboxing via Apple Containers on macOS 26+, providing a lightweight native sandbox without third-party dependencies",
      "defaultEnabled": false
    },
    {
      "id": "fork-from-message",
      "scope": "client",
      "key": "fork-from-message",
      "label": "Fork from Message",
      "description": "Show the 'Fork from here' option in message overflow menus",
      "defaultEnabled": false
    },
    {
      "id": "home-tab",
      "scope": "client",
      "key": "home-tab",
      "label": "Home Tab",
      "description": "Replace the knowledge graph top-level tab with a new Home page showing relationship progression, facts, and capability tiers",
      "defaultEnabled": false
    },
    {
      "id": "scroll-debug-overlay",
      "scope": "client",
      "key": "scroll-debug-overlay",
      "label": "Scroll Debug Overlay",
      "description": "Show a live HUD in the top-right of the conversation with scroll geometry, velocity, update rate, and anchor-preserver activity. Developer diagnostic for investigating scroll jank.",
      "defaultEnabled": false
    },
    {
      "id": "compaction-playground",
      "scope": "assistant",
      "key": "compaction-playground",
      "label": "Compaction Playground",
      "description": "Expose the developer-only Compaction Playground tab in macOS Settings and enable the /playground/* HTTP endpoints for exercising compaction conditions. Dev-only; default off.",
      "defaultEnabled": false
    },
    {
      "id": "app-control",
      "scope": "assistant",
      "key": "app-control",
      "label": "App Control",
      "description": "Enable the app-control skill (per-app screenshot + raw input bypassing AX tree)",
      "defaultEnabled": false
    },
    {
      "id": "velvet-theme",
      "scope": "client",
      "key": "velvet-theme",
      "label": "Velvet Theme",
      "description": "Show the Velvet theme option in the macOS appearance settings. Velvet is a dark-mode variant with red/pink accent colors.",
      "defaultEnabled": false
    },
    {
      "id": "queue-steering",
      "scope": "assistant",
      "key": "queue-steering",
      "label": "Queue Steering",
      "description": "Enable the 'Push to agent' button on queued messages, allowing users to steer the assistant to a specific queued message by aborting the current generation and promoting the message to the head of the queue.",
      "defaultEnabled": false
    },
    {
      "id": "chat-pull-to-refresh-enabled",
      "scope": "client",
      "key": "chat-pull-to-refresh-enabled",
      "label": "Chat Pull to Refresh",
      "description": "Enable pull-to-refresh gesture in the chat view.",
      "defaultEnabled": false
    },
    {
      "id": "platform-notifications",
      "scope": "client",
      "key": "platform-notifications",
      "label": "Platform Notifications",
      "description": "Enable the Notifications tab in settings.",
      "defaultEnabled": false
    },
    {
      "id": "centralized-assistant-status",
      "scope": "client",
      "key": "centralized-assistant-status",
      "label": "Centralized Assistant Status",
      "description": "Enable client polling of the centralized assistant operational status endpoint.",
      "defaultEnabled": false
    },
    {
      "id": "preview-channel",
      "scope": "client",
      "key": "preview-channel",
      "label": "Preview Channel",
      "description": "Enable user-facing Preview release channel controls in assistant settings.",
      "defaultEnabled": false
    },
    {
      "id": "rollback-enabled",
      "scope": "assistant",
      "key": "rollback-enabled",
      "label": "Rollback Enabled",
      "description": "Show older versions in the version picker, allowing rollback to previous releases.",
      "defaultEnabled": false
    },
    {
      "id": "self-hosted-assistant",
      "scope": "client",
      "key": "self-hosted-assistant",
      "label": "Self-Hosted Assistant",
      "description": "Enable self-hosted assistant configuration.",
      "defaultEnabled": false
    },
    {
      "id": "web-remote-ingress",
      "scope": "assistant",
      "key": "web-remote-ingress",
      "label": "Web Remote Ingress",
      "description": "Serve the web client over a public tunnel and enable browser pairing for self-hosted assistants.",
      "defaultEnabled": false
    },
    {
      "id": "settings-sleep-policy",
      "scope": "assistant",
      "key": "settings-sleep-policy",
      "label": "Settings Sleep Policy",
      "description": "Enable sleep policy settings.",
      "defaultEnabled": false
    },
    {
      "id": "velvet",
      "scope": "client",
      "key": "velvet",
      "label": "Velvet",
      "description": "Enable the Velvet design theme.",
      "defaultEnabled": false
    },
    {
      "id": "memory-router-playground",
      "scope": "client",
      "key": "memory-router-playground",
      "label": "Memory Router Playground",
      "description": "Expose the developer-only Memory Router Playground tab in macOS Settings and the /assistant/memory-router-playground web page for dry-running v4 router config overrides against the live page index. Dev-only; default off.",
      "defaultEnabled": false
    },
    {
      "id": "self-intro-greeting",
      "scope": "both",
      "key": "self-intro-greeting",
      "label": "Self-intro first message",
      "description": "On the first conversation, send a natural self-introduction (e.g. \"Hi Vela, I'm alex. Nice to meet you.\") on the user's behalf and route it through real LLM inference, instead of serving the canned first greeting. Names come from the onboarding context; falls back to the canned greeting when no name is known. Exposed to clients so pre-hatch onboarding can compute the source-of-truth initial message, and to the assistant so older clients can still be gated server-side. See assistant/src/daemon/first-greeting.ts (buildSelfIntroMessage).",
      "defaultEnabled": false
    },
    {
      "id": "channel-trust-floors",
      "scope": "assistant",
      "key": "channel-trust-floors",
      "label": "Channel Trust Floors",
      "description": "Expose the Channel Trust Floors settings card (per-channel inbound admission policy) on the Privacy settings page. When off, the card is hidden and channels fall back to their default admission floors. On by default; disable to hide the card.",
      "defaultEnabled": true
    },
    {
      "id": "mcp-add-server",
      "scope": "assistant",
      "key": "mcp-add-server",
      "label": "MCP Add Server",
      "description": "Show the Add Server action on the MCP settings page. The MCP page itself remains visible; this flag gates only creating new Model Context Protocol server connections.",
      "defaultEnabled": false
    },
    {
      "id": "os-beta",
      "scope": "assistant",
      "key": "os-beta",
      "label": "OS Beta",
      "description": "Enable the OS Beta model profile (MiniMax M3 / Together) in the assistant's model profile selection.",
      "defaultEnabled": false
    },
    {
      "id": "new-thread-suggestions",
      "scope": "client",
      "key": "new-thread-suggestions",
      "label": "New-thread suggestions library",
      "description": "Replace the empty-state conversation-starter chips with the scrollable, categorized suggestions library and detail drawer (currently mocked data).",
      "defaultEnabled": false
    },
    {
      "id": "account-mfa",
      "scope": "client",
      "key": "account-mfa",
      "label": "Account MFA",
      "description": "Surface the Security settings page where users enroll and manage TOTP two-factor authentication for their Vellum (WorkOS) account. Applies to email/password sign-in only.",
      "defaultEnabled": false
    },
    {
      "id": "chat-credential-reveal",
      "scope": "assistant",
      "key": "chat-credential-reveal",
      "label": "Chat Credential Reveal",
      "description": "Persist chat secret redactions as sentinel markers instead of the legacy HTML marker, enriched with the vault identity when the value byte-matches a credential revealed this turn. Also gates the `credentials reveal --for-chat` channel and the live-stream swap that replaces an echoed reveal plaintext with its sentinel before emission. Redaction itself is NOT gated: a route-proven reveal plaintext stays out of persisted rows in both modes. Client chip rendering is gated on daemon version, not on this flag.",
      "defaultEnabled": false
    },
    {
      "id": "composer-secret-guard",
      "scope": "assistant",
      "key": "composer-secret-guard",
      "label": "Composer Secret Guard",
      "description": "Detect API keys/secrets typed into the chat composer and offer secure credential storage before send",
      "defaultEnabled": false
    },
    {
      "id": "marketing-pricing-takeover",
      "scope": "client",
      "key": "marketing-pricing-takeover",
      "label": "Marketing Pricing Takeover",
      "description": "Gates the marketing pricing takeover page (www.vellum.ai/pricing) and the `/assistant/checkout?package=<slug>` deep link its package CTAs target. One flag covers both halves of the funnel so they can never be enabled independently and strand a CTA. When off, the checkout deep link redirects to the in-app plans takeover.",
      "defaultEnabled": false
    }
  ]
}
