# Feature Flags Audit Audit date: 2026-03-31 This repository currently references 88 `feature('FLAG')` compile-time flags. I re-checked them by bundling the CLI once per flag on top of the current external-build defines and externals. Result: - 54 flags bundle cleanly in this snapshot - 34 flags still fail to bundle Important: "bundle cleanly" does not always mean "runtime-safe". Some flags still depend on optional native modules, claude.ai OAuth, GrowthBook gates, or externalized `@ant/*` packages. ## Build Variants - `bun run build` Builds the regular external binary at `./cli`. - `bun run compile` Builds the regular external binary at `./dist/cli`. - `bun run build:dev` Builds `./cli-dev` with a dev-stamped version and experimental GrowthBook key. - `bun run build:dev:full` Builds `./cli-dev` with the entire current "Working Experimental Features" bundle from this document, minus `CHICAGO_MCP`. That flag still compiles, but the external binary does not boot cleanly with it because startup reaches the missing `@ant/computer-use-mcp` runtime package. ## Default Build Flags - `VOICE_MODE` This is now included in the default build pipeline, not just the dev build. It enables `/voice`, push-to-talk UI, voice notices, and dictation plumbing. Runtime still depends on claude.ai OAuth plus either the native audio module or a fallback recorder such as SoX. ## Working Experimental Features These are the user-facing or behavior-changing flags that currently bundle cleanly and should still be treated as experimental in this snapshot unless explicitly called out as default-on. ### Interaction and UI Experiments - `AWAY_SUMMARY` Adds away-from-keyboard summary behavior in the REPL. - `HISTORY_PICKER` Enables the interactive prompt history picker. - `HOOK_PROMPTS` Passes the prompt/request text into hook execution flows. - `KAIROS_BRIEF` Enables brief-only transcript layout and BriefTool-oriented UX without the full assistant stack. - `KAIROS_CHANNELS` Enables channel notices and channel callback plumbing around MCP/channel messaging. - `LODESTONE` Enables deep-link / protocol-registration related flows and settings wiring. - `MESSAGE_ACTIONS` Enables message action entrypoints in the interactive UI. - `NEW_INIT` Enables the newer `/init` decision path. - `QUICK_SEARCH` Enables prompt quick-search behavior. - `SHOT_STATS` Enables additional shot-distribution stats views. - `TOKEN_BUDGET` Enables token budget tracking, prompt triggers, and token warning UI. - `ULTRAPLAN` Enables `/ultraplan`, prompt triggers, and exit-plan affordances. - `ULTRATHINK` Enables the extra thinking-depth mode switch. - `VOICE_MODE` Enables voice toggling, dictation keybindings, voice notices, and voice UI. ### Agent, Memory, and Planning Experiments - `AGENT_MEMORY_SNAPSHOT` Stores extra custom-agent memory snapshot state in the app. - `AGENT_TRIGGERS` Enables local cron/trigger tools and bundled trigger-related skills. - `AGENT_TRIGGERS_REMOTE` Enables the remote trigger tool path. - `BUILTIN_EXPLORE_PLAN_AGENTS` Enables built-in explore/plan agent presets. - `CACHED_MICROCOMPACT` Enables cached microcompact state through query and API flows. - `COMPACTION_REMINDERS` Enables reminder copy around compaction and attachment flows. - `EXTRACT_MEMORIES` Enables post-query memory extraction hooks. - `PROMPT_CACHE_BREAK_DETECTION` Enables cache-break detection around compaction/query/API flow. - `TEAMMEM` Enables team-memory files, watcher hooks, and related UI messages. - `VERIFICATION_AGENT` Enables verification-agent guidance in prompts and task/todo tooling. ### Tools, Permissions, and Remote Experiments - `BASH_CLASSIFIER` Enables classifier-assisted bash permission decisions. - `BRIDGE_MODE` Enables Remote Control / REPL bridge command and entitlement paths. - `CCR_AUTO_CONNECT` Enables the CCR auto-connect default path. - `CCR_MIRROR` Enables outbound-only CCR mirror sessions. - `CCR_REMOTE_SETUP` Enables the remote setup command path. - `CHICAGO_MCP` Enables computer-use MCP integration paths and wrapper loading. - `CONNECTOR_TEXT` Enables connector-text block handling in API/logging/UI paths. - `MCP_RICH_OUTPUT` Enables richer MCP UI rendering. - `NATIVE_CLIPBOARD_IMAGE` Enables the native macOS clipboard image fast path. - `POWERSHELL_AUTO_MODE` Enables PowerShell-specific auto-mode permission handling. - `TREE_SITTER_BASH` Enables the tree-sitter bash parser backend. - `TREE_SITTER_BASH_SHADOW` Enables the tree-sitter bash shadow rollout path. - `UNATTENDED_RETRY` Enables unattended retry behavior in API retry flows. ## Bundle-Clean Support Flags These also bundle cleanly, but they are mostly rollout, platform, telemetry, or plumbing toggles rather than user-facing experimental features. - `ABLATION_BASELINE` CLI ablation/baseline entrypoint toggle. - `ALLOW_TEST_VERSIONS` Allows test versions in native installer flows. - `ANTI_DISTILLATION_CC` Adds anti-distillation request metadata. - `BREAK_CACHE_COMMAND` Injects the break-cache command path. - `COWORKER_TYPE_TELEMETRY` Adds coworker-type telemetry fields. - `DOWNLOAD_USER_SETTINGS` Enables settings-sync pull paths. - `DUMP_SYSTEM_PROMPT` Enables the system-prompt dump path. - `FILE_PERSISTENCE` Enables file persistence plumbing. - `HARD_FAIL` Enables stricter failure/logging behavior. - `IS_LIBC_GLIBC` Forces glibc environment detection. - `IS_LIBC_MUSL` Forces musl environment detection. - `NATIVE_CLIENT_ATTESTATION` Adds native attestation marker text in the system header. - `PERFETTO_TRACING` Enables perfetto tracing hooks. - `SKILL_IMPROVEMENT` Enables skill-improvement hooks. - `SKIP_DETECTION_WHEN_AUTOUPDATES_DISABLED` Skips updater detection when auto-updates are disabled. - `SLOW_OPERATION_LOGGING` Enables slow-operation logging. - `UPLOAD_USER_SETTINGS` Enables settings-sync push paths. ## Compile-Safe But Runtime-Caveated These bundle today, but I would still treat them as experimental because they have meaningful runtime caveats: - `VOICE_MODE` Bundles cleanly, but requires claude.ai OAuth and a local recording backend. The native audio module is optional now; on this machine the fallback path asks for `brew install sox`. - `NATIVE_CLIPBOARD_IMAGE` Bundles cleanly, but only accelerates macOS clipboard reads when `image-processor-napi` is present. - `BRIDGE_MODE`, `CCR_AUTO_CONNECT`, `CCR_MIRROR`, `CCR_REMOTE_SETUP` Bundle cleanly, but are gated at runtime on claude.ai OAuth plus GrowthBook entitlement checks. - `KAIROS_BRIEF`, `KAIROS_CHANNELS` Bundle cleanly, but they do not restore the full missing assistant stack. They only expose the brief/channel-specific surfaces that still exist. - `CHICAGO_MCP` Bundles cleanly, but the runtime path still reaches externalized `@ant/computer-use-*` packages. This is compile-safe, not fully runtime-safe, in the external snapshot. - `TEAMMEM` Bundles cleanly, but only does useful work when team-memory config/files are actually enabled in the environment. ## Broken Flags With Easy Reconstruction Paths These are the failed flags where the current blocker looks small enough that a focused reconstruction pass could probably restore them without rebuilding an entire subsystem. - `AUTO_THEME` Fails on missing `src/utils/systemThemeWatcher.js`. `systemTheme.ts` and the theme provider already contain the cache/parsing logic, so the missing piece looks like the OSC 11 watcher only. - `BG_SESSIONS` Fails on missing `src/cli/bg.js`. The CLI fast-path dispatch in `src/entrypoints/cli.tsx` is already wired. - `BUDDY` Fails on missing `src/commands/buddy/index.js`. The buddy UI components and prompt-input hooks already exist. - `BUILDING_CLAUDE_APPS` Fails on missing `src/claude-api/csharp/claude-api.md`. This looks like an asset/document gap, not a missing runtime subsystem. - `COMMIT_ATTRIBUTION` Fails on missing `src/utils/attributionHooks.js`. Setup and cache-clear code already call into that hook module. - `FORK_SUBAGENT` Fails on missing `src/commands/fork/index.js`. Command slot and message rendering support are already present. - `HISTORY_SNIP` Fails on missing `src/commands/force-snip.js`. The surrounding SnipTool and query/message comments are already there. - `KAIROS_GITHUB_WEBHOOKS` Fails on missing `src/tools/SubscribePRTool/SubscribePRTool.js`. The command slot and some message handling already exist. - `KAIROS_PUSH_NOTIFICATION` Fails on missing `src/tools/PushNotificationTool/PushNotificationTool.js`. The tool slot already exists in `src/tools.ts`. - `MCP_SKILLS` Fails on missing `src/skills/mcpSkills.js`. `mcpSkillBuilders.ts` already exists specifically to support that missing registry layer. - `MEMORY_SHAPE_TELEMETRY` Fails on missing `src/memdir/memoryShapeTelemetry.js`. The hook call sites are already in place in `sessionFileAccessHooks.ts`. - `OVERFLOW_TEST_TOOL` Fails on missing `src/tools/OverflowTestTool/OverflowTestTool.js`. This appears isolated and test-only. - `RUN_SKILL_GENERATOR` Fails on missing `src/runSkillGenerator.js`. The bundled skill registration path already expects it. - `TEMPLATES` Fails on missing `src/cli/handlers/templateJobs.js`. The CLI fast-path is already wired in `src/entrypoints/cli.tsx`. - `TORCH` Fails on missing `src/commands/torch.js`. This looks like a single command entry gap. - `TRANSCRIPT_CLASSIFIER` The first hard failure is missing `src/utils/permissions/yolo-classifier-prompts/auto_mode_system_prompt.txt`. The classifier engine, parser, and settings plumbing already exist, so the missing prompt/assets are likely the first reconstruction target. ## Broken Flags With Partial Wiring But Medium-Sized Gaps These do have meaningful surrounding code, but the missing piece is larger than a single wrapper or asset. - `BYOC_ENVIRONMENT_RUNNER` Missing `src/environment-runner/main.js`. - `CONTEXT_COLLAPSE` Missing `src/tools/CtxInspectTool/CtxInspectTool.js`. - `COORDINATOR_MODE` Missing `src/coordinator/workerAgent.js`. - `DAEMON` Missing `src/daemon/workerRegistry.js`. - `DIRECT_CONNECT` Missing `src/server/parseConnectUrl.js`. - `EXPERIMENTAL_SKILL_SEARCH` Missing `src/services/skillSearch/localSearch.js`. - `MONITOR_TOOL` Missing `src/tools/MonitorTool/MonitorTool.js`. - `REACTIVE_COMPACT` Missing `src/services/compact/reactiveCompact.js`. - `REVIEW_ARTIFACT` Missing `src/hunter.js`. - `SELF_HOSTED_RUNNER` Missing `src/self-hosted-runner/main.js`. - `SSH_REMOTE` Missing `src/ssh/createSSHSession.js`. - `TERMINAL_PANEL` Missing `src/tools/TerminalCaptureTool/TerminalCaptureTool.js`. - `UDS_INBOX` Missing `src/utils/udsMessaging.js`. - `WEB_BROWSER_TOOL` Missing `src/tools/WebBrowserTool/WebBrowserTool.js`. - `WORKFLOW_SCRIPTS` Fails first on `src/commands/workflows/index.js`, but there are more gaps: `tasks.ts` already expects `LocalWorkflowTask`, and `tools.ts` expects a real `WorkflowTool` implementation while only `WorkflowTool/constants.ts` exists in this snapshot. ## Broken Flags With Large Missing Subsystems These are the ones that still look expensive to restore because the first missing import is only the visible edge of a broader absent subsystem. - `KAIROS` Missing `src/assistant/index.js` and much of the assistant stack with it. - `KAIROS_DREAM` Missing `src/dream.js` and related dream-task behavior. - `PROACTIVE` Missing `src/proactive/index.js` and the proactive task/tool stack. ## Useful Entry Points - Feature-aware build logic: [scripts/build.ts](/Users/paolo/Repos/claude-code/scripts/build.ts) - Feature-gated command imports: [src/commands.ts](/Users/paolo/Repos/claude-code/src/commands.ts) - Feature-gated tool imports: [src/tools.ts](/Users/paolo/Repos/claude-code/src/tools.ts) - Feature-gated task imports: [src/tasks.ts](/Users/paolo/Repos/claude-code/src/tasks.ts) - Feature-gated query behavior: [src/query.ts](/Users/paolo/Repos/claude-code/src/query.ts) - Feature-gated CLI entry paths: [src/entrypoints/cli.tsx](/Users/paolo/Repos/claude-code/src/entrypoints/cli.tsx)