What v5.9.0 shipped, and what it missed

v5.9.0 introduced four resonance tiers (MAXIMO / ALTO / MEDIO / BAJO) and the nexo preferences --resonance CLI subcommand to let the user pick their default. What it didn't ship: a control in NEXO Desktop's existing Preferences dialog. Users running exclusively through Desktop either had to drop to a terminal to set the tier or live with ALTO.

Schema-driven UI to the rescue

NEXO Desktop doesn't hard-code its Preferences fields. It calls nexo schema --json at open time and builds the dialog from the returned payload via buildFieldsFromBrainSchema(). Adding the field at the Brain end — in src/desktop_bridge.py's _schema_fields() — means Desktop renders a select with the four localised options the next time the user opens Preferences. No Electron rebuild, no DMG, no install.

The field is declared with "group": "preferences", so it lands in the existing Preferences tab alongside report style and execution-first. The four options carry Spanish and English labels (Máximo / Alto (recomendado) / Medio / BajoMaximum / High (recommended) / Medium / Low). An inline hint makes it explicit that the preference only affects interactive sessions: background crons (deep-sleep, evolution, postmortem, marketing posts) stay pinned per caller in resonance_map.py because we pick those for quality of output, not for user ergonomics.

Where the value lives now

v5.9.0's CLI wrote default_resonance into config/schedule.json because that's where other CLI preferences lived. Desktop's Preferences dialog reads and writes brain/calibration.json — the file that already holds assistant name, language, autonomy, communication style, etc. To keep the two surfaces in agreement, v5.9.1 does three things:

• A new resonance_map._load_user_default_resonance() helper reads calibration.json first and falls back to schedule.json. Invalid tiers ("ultra-high", typos) are rejected quietly so callers can fall back deliberately.
resolve_tier_for_caller now calls that helper automatically when the caller does not pass user_default explicitly. nexo chat, launch_interactive_client, and any future user-facing caller pick up whatever the Desktop dialog wrote, without changing their call sites.
nexo preferences --resonance writes to both calibration.json (new canonical) and schedule.json (legacy). Users switching between CLI and Desktop never see the two surfaces disagree.

Upgrading

Run nexo update. Desktop needs nothing beyond what's already installed — open Preferences → Preferences tab and the new select appears. If you were already on v5.9.0 and had set a tier via CLI, the legacy schedule.json value keeps working through the fallback. Setting the tier from Desktop or running nexo preferences --resonance again promotes it to the new canonical location.