If you touch any of these areas, read docs/client-parity-checklist.md before changing code:
- bootstrap
- startup/session handling
- Deep Sleep
- client sync
- shared-brain claims in docs/public copy
Non-negotiable maintenance rules:
- Keep the public client capability matrix honest.
- Do not claim 1:1 native hook parity between Claude Code and Codex.
- Treat Claude Desktop as shared-brain / MCP-only unless the product surface really changes.
- Do not relax Claude-only regression allowlists casually.
- When parity-related code changes, run:
python3 scripts/verify_client_parity.pyThis repo already has automated guardrails and CI for client parity. Extend them when possible instead of relying on memory or release-note archaeology.
NEXO Desktop (separate repo at ../nexo-desktop) bundles this repo's
checkout into its .dmg/.exe at build time via
extraResources: { from: "../nexo", to: "brain-bundle" }. There is no
pinned Brain version in Desktop — whatever sits in ../nexo HEAD when
Desktop runs npm run dist:release is what ships to clients.
What that means for changes here:
- Internal Brain change (Python logic, hook, cron, plugin, MCP tool
body, refactor, perf): no Desktop coordination needed. Bump version
- commit + push +
npm publish. Existing Desktop installs receive the new Brain via Brain's own auto-update (src/auto_update.pyrunsnpm install -g nexo-brain@latestperiodically inside WSL/Mac).
- commit + push +
- Brain ↔ Desktop contract change (touching ANY of the items below):
Desktop needs a fresh build to ship. Tell whoever maintains Desktop,
or open an issue tagged
desktop-impactso the next Desktop release picks it up:src/desktop_bridge.py(the IPC surface Desktop's renderer talks to)- Hooks Desktop dispatches (
hooks/session-start.sh,hooks/stop.py, etc.) — output shape changes calibration.json/profile.jsonschema (Desktop reads these)bin/nexo-brain.jsflags / behaviour Desktop relies on (--yes/--skipsetup mode, onboarding completion markers,nexo-brain --versionoutput)- MCP tool names/signatures the renderer wires to UI (Settings, Onboarding wizard, etc.)
- Anything touched by
desktop_bridgerequest handlers
When in doubt, grep Desktop for the symbol you renamed or moved:
rg "your_symbol_here" ../nexo-desktopIf there is a hit, the change is desktop-impact. Coordinate the
Desktop rebuild before tagging a Brain release that ships to clients.