BigPizzaV3/CodexPlusPlus · warning · anyhow::Error

Codex enhancements are disabled

Error message

Codex enhancements are disabled

What it means

The tray menu action "apply Dream Skin" first loads settings and refuses to proceed when the global enhancements_enabled master switch is off. This guard ensures Dream Skin cannot be toggled on while all Codex++ enhancements are disabled.

Solutions

  1. Enable the master 'enhancements' switch in manager settings, then retry the tray action
  2. Set enhancementsEnabled=true via the settings UI before applying Dream Skin
  3. If settings were reset unintentionally, restore them or flip the switch back on

Example fix

// before
trayApplyDreamSkin();
// after
if (!settings.enhancementsEnabled) { await settings.update({ enhancements_enabled: true }); }
trayApplyDreamSkin();
Defensive patterns

Strategy: validation

Validate before calling

const settings = await loadSettings(); if (!settings.enhancementsEnabled) return; // skip tray action

Try / catch

try { await trayApplyDreamSkin() } catch (e) { if (String(e).includes('enhancements are disabled')) openEnhancementsSettings(); }

Prevention

When it happens

Trigger: Choosing the Dream Skin apply item from the tray menu (apply_dream_skin_from_tray, lib.rs ~400, invoked from install_tray) while current.enhancements_enabled == false.

Common situations: User disabled all enhancements in settings but still clicks the tray Dream Skin option; settings file reset to defaults with enhancements_enabled=false; another feature toggled the master switch off programmatically.

Related errors


AI-assisted analysis of BigPizzaV3/CodexPlusPlus@b1ed92e5e4 (2026-09-19). Data as JSON: /api/errors/bd33cd11b35eb767. Report an issue: GitHub.

Appendix: source

Thrown at apps/codex-plus-manager/src-tauri/src/lib.rs:400

            None::<&str>,
        );
        let quit_item = MenuItem::with_id(&app, TRAY_MENU_QUIT, &quit_label, true, None::<&str>);
        if let (Ok(show), Ok(apply_skin), Ok(quit)) = (show_item, apply_skin_item, quit_item) {
            if let Ok(menu) = Menu::with_items(&app, &[&show, &apply_skin, &quit]) {
                let _ = tray.set_menu(Some(menu));
            }
        }
    }
    if let Some(window) = app.get_webview_window("main") {
        let _ = window.set_title(&window_title);
    }
}

async fn apply_dream_skin_from_tray() -> anyhow::Result<()> {
    let store = codex_plus_core::settings::SettingsStore::default();
    let current = store.load()?;
    if !current.enhancements_enabled {
        anyhow::bail!("Codex enhancements are disabled");
    }
    let settings = store.update(serde_json::json!({
        "codexAppDreamSkinEnabled": true,
        "codexAppDreamSkinPaused": false
    }))?;
    debug_assert!(settings.enhancements_enabled);
    codex_plus_core::dream_skin::sync_default_dream_skin_base_theme(
        true,
        &settings.codex_app_dream_skin_theme_config,
    )?;
    codex_plus_core::dream_skin_runtime::apply_dream_skin_live(
        DREAM_SKIN_DEBUG_PORT,
        codex_plus_core::protocol_proxy::protocol_proxy_port(),
    )
    .await?;
    Ok(())
}

View on GitHub (pinned to b1ed92e5e4)