v0.39.0
Magic Context v0.39.0
Per-harness model configuration, calmer context-housekeeping nudges, and reliability fixes across the dreamer, historian, and command surfaces.
Per-harness agent model configuration
Historian and dreamer model selection is now configured per harness, with no shared core. Each block speaks only its harness's vocabulary — variant for OpenCode, thinking_level for Pi — and every entry, including individual fallbacks, can carry its own qualifier:
Existing flat configurations migrate automatically on first load: comments are preserved, the rewrite is atomic, and your pre-migration file is kept as an exclusive .bak next to the original. Hand-written flat keys after migration warn and are ignored (the migrated blocks win). Block-level qualifiers apply to the primary model only; fallback entries declare their own — a fallback model never inherits a reasoning setting it may not support.
The dashboard config editor gained per-harness tabs, and its model pickers now list only the models registered for that harness.
Calmer ctx_reduce nudges
The context-housekeeping reminders were rewritten after field reports of agents misreading them as scarcity warnings and defensively narrowing scope:
- Every reminder now carries a denominator ("~90k of this session's ~870k window") and states explicitly that housekeeping is routine, lossless, and never a reason to change scope.
- Repeated same-level reminders within three user turns collapse to a one-line note instead of repeating the full text.
- Reminders no longer re-suggest outputs the agent has already marked for reduction, and the backlog measure excludes already-queued work — including no reminder at all on the exact pass where queued reductions get applied.
Fixes
- map-memories starvation (#356): batches get a 240-second floor instead of an even share of the deadline — large memory backlogs now cost more runs instead of making zero progress. Two consecutive batch timeouts end the run loudly.
- Migration backup durability: the pre-migration
.bakis now installed atomically (hard-link no-clobber with truncated-backup repair), so a crash mid-backup can never strand a partial copy as your only pre-migration snapshot. - map-memories all-or-nothing validation (#357): a well-formed manifest covering 79 of 80 memories now commits the 79 and retries only the missing one. The verify family got the same treatment, with a safety pin: an id absent from a manifest can never be interpreted as verify or archive.
/ctx-statuson Desktop (#289): dialog-only commands now render their full status as text when no TUI is attached, instead of rendering nothing.- Plugin load failure (d79d10d): a bundling regression could make the whole plugin fail to load at boot; builds now verify the packaged bundles actually import before shipping.
Notes
No schema migration in this release (the database remains at v80 from v0.38.1). No configuration action is required — the per-harness config migration is automatic and keeps a backup.