Skip to content

v0.39.0

Choose a tag to compare

@github-actions github-actions released this 23 Aug 15:17
· 751 commits to master since this release

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:

"historian": {
  "opencode": {
    "model": { "model": "openai/gpt-5.6-luna", "variant": "xhigh" },
    "fallback_models": [
      { "model": "anthropic/claude-sonnet-4-6", "variant": "thinking-high" },
      "ollama-cloud/deepseek-v4-flash"
    ]
  },
  "pi": { "model": "openai-codex/gpt-5.6-luna", "thinking_level": "xhigh" }
}

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 .bak is 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-status on 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.