Personalizer overview
Nimbus middleware is the product wedge: a Bayesian personalization head for frozen neural / foundation embeddings. Encoders stay external. Apps consume thinBrainState outputs.
One-liner: anything that can encode(X) → Z plugs in; Nimbus owns personalization, uncertainty gating, and cheap online updates — not the trunk.

Classical CSP / bandpower / Riemann features still work. Use
Personalizer(encoder=None) or the standalone heads (NimbusLDA, …) documented under Models.Start Here
Encoder contract
wrap → Personalizer → save/load rules.BrainState
App-facing intents, presets, and bridges.
Evidence
Cost bake-off, FT comparison, transfer map.
Python Quickstart
Fit a Personalizer in a few minutes.
Minimal example
Integrator checklist
- When to adapt — factory works → little lift; gated stress → head adaptation; cost bake-off favors head before full FT. See Evidence.
- Gate decisions —
preset="research"/"consumer"; inspectBrainState.rejected,need_more_data,uncertainty. See BrainState. - Head stability — after online updates, use
calibration_sufficienton an unlabeled pool. - Encoder swap — freeze trunk; match
embedding_dim; never pass logits as embeddings; keepmodel_idconsistent acrosssave/load. See Encoder contract.