You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Cover the full release (135 commits since v0.26.0), not just Dreamer V2:
Primers, self-checking smart notes, embedding coexistence, the CortexKit config
move, workspaces selective sharing, and the hardening pass. Reframe smart notes
around the real change (reusable deterministic check vs per-cycle LLM eval), call
out the across-the-board dreamer token-efficiency win, and credit community
contributors @kecsap (#92) and @tracycam (#143).
Co-authored-by: Alfonso [Magic Context] <288211368+alfonso-magic-context@users.noreply.github.com>
# v0.27.0: Dreamer V2, Primers, and the CortexKit config move
2
2
3
-
The background **dreamer**— the agent that maintains your project memory while you're away — gets a full overhaul. It's now a set of independently-scheduled tasks instead of one monolithic run, with two new capabilities.
3
+
The biggest release since the V2 historian. The background **dreamer**is rebuilt into independently-scheduled tasks, two new memory capabilities ship (**Primers** and **friction-learning**), embedding storage stops throwing away your vectors on a config change, and configuration moves to a shared CortexKit location. Plus a deep correctness, security, and cross-harness hardening pass.
4
4
5
5
## Dreamer V2: per-task scheduling
6
6
7
-
Each maintenance task runs on its **own cron schedule**with its **own model**. Configure them in the setup wizard, the dashboard, or `magic-context.jsonc`:
7
+
The dreamer is no longer one monolithic nightly run. Each maintenance task has its **own cron schedule**and its **own model**, configurable in the setup wizard, the dashboard, or `magic-context.jsonc`:
8
8
9
9
```jsonc
10
10
"dreamer": {
@@ -18,27 +18,70 @@ Each maintenance task runs on its **own cron schedule** with its **own model**.
18
18
}
19
19
```
20
20
21
-
A lightweight model handles the routine tasks; you can point a stronger one at just the task that needs it. Set a schedule to `""` to turn a task off. Every dreamer task is **cache-safe by design** — it never busts your prompt cache, no matter when it runs.
21
+
Point a lightweight model at the routine tasks and a stronger one at just the task that needs it. Set a schedule to `""` to turn a task off. Every dreamer task is **cache-safe by design**: it never busts your prompt cache, no matter when it runs.
22
22
23
-
## New: memory importance scoring (`classify`)
23
+
Each task now also runs with a **dedicated prompt and a least-privilege toolset**, so a memory-classification pass can't read files and a docs pass can't touch memory.
24
24
25
-
The `classify` task scores each memory's **importance** by blending how durable the fact is with what your project is actively working on. When the injected memory block is over budget, the most relevant memories stay in context and the least relevant drop first (they remain fully searchable via `ctx_search`). Runs in the background, completely cache-neutral.
Scores each memory's **importance** by blending how durable the fact is with what your project is actively working on, plus its scope and whether it is safe to share with teammates. When the injected memory block is over budget, the most relevant memories stay in context and the least relevant drop first (they remain fully searchable via `ctx_search`). Runs in the background, completely cache-neutral.
26
28
27
29
## New: learning from friction (`retrospective`)
28
30
29
-
The `retrospective` task learns from the moments you had to **correct or re-explain** something, and records the durable lesson as a project memory — so the same friction doesn't recur. It's cheap by default: it only does real work when it detects a genuine correction pattern, and it reads **only your own typed messages** (never tool output or other content), with the learning distilled to a third-person rule rather than your raw words. On by default; turn it off anytime.
31
+
Learns from the moments you had to **correct or re-explain** something and records the durable lesson as a project memory, so the same friction does not recur. It is cheap by default: it only does real work when a cheap pass detects a genuine correction pattern, and it reads **only your own typed messages** (never tool output or other content), with the learning distilled into a third-person rule rather than your raw words. On by default; turn it off anytime.
32
+
33
+
## New: Primers
34
+
35
+
**Primers** are durable, standing answers to the questions that keep coming up about how your project works ("how does the transform pipeline stay cache-stable?", "where does session state live?"). The historian notices when the same question recurs across days and promotes it to a Primer; the dreamer then keeps the answer current by **investigating the actual code** (an open-book read of the relevant files), not by re-summarizing what is already in context. Stale Primers sink out of the render budget over time but stay in the database.
36
+
37
+
## Smart notes that check their own condition, cheaply
38
+
39
+
A smart note (`ctx_note` with a `surface_condition`) resurfaces when its condition becomes true. Until now the dreamer re-checked that condition by asking an LLM **every single time** it ran, all the way up until the condition was finally met. For something like "resurface when PR #42 is merged," that meant paying for a full model call on every check, possibly for days.
40
+
41
+
Now, for a deterministic condition like a GitHub PR being merged, a release tag being published, or a file appearing on disk, the dreamer writes a small **reusable check once** and then simply runs that script on each cycle. The repeated, open-ended LLM evaluation becomes a cheap, deterministic run that verifies the real-world signal (PR state, release tag, file contents) and surfaces the note at the right moment. The script runs in a locked-down WASM sandbox with a read-only, SSRF-guarded capability API, so a note's condition can safely reach out to check the world without ever touching anything it should not.
42
+
43
+
## Memory maintenance, split so neither task starves
44
+
45
+
The old combined memory task is now focused tasks:
46
+
-**verify** checks memories against their backing files and fixes or removes stale ones, but only when those files actually changed (a one-time **map-memories** backfill records which files back which memory).
47
+
-**verify-broad** periodically re-checks the whole pool to catch drift.
48
+
-**curate** deduplicates, tightens, and prunes. Cross-category merges are now structurally rejected: a memory has exactly one category.
49
+
50
+
Beyond the split, every dreamer task was re-tooled to do more with less. Each task now gets a focused prompt and only the tools it needs, and the heaviest passes (classify, verify) were reworked to emit a single structured result instead of grinding through many small tool calls. The result is **noticeably fewer tokens per run for better, more consistent output**, which matters most if you point the dreamer at a paid model.
51
+
52
+
## Embedding storage no longer wipes your vectors on a config change
53
+
54
+
Previously, changing your embedding model or endpoint could trigger a full, destructive re-embed of every memory, commit, and history chunk. Now vectors for different models **coexist** in storage, keyed per model. Switching providers (or testing one) keeps your existing vectors intact; the old set is garbage-collected lazily and only once a trusted new config has registered. A degraded or mid-migration config never drives deletion. Also adds a guard that refuses vectors when an endpoint silently serves a **different** model than requested (wrong-dimension corruption), and supports asymmetric query/passage `input_type`.
55
+
56
+
## Configuration moves to a shared CortexKit location
57
+
58
+
Magic Context configuration now lives in one shared place per machine instead of per-harness:
59
+
- User config: `~/.config/cortexkit/magic-context.jsonc`
**This is automatic.** On first run after upgrading, your existing `magic-context.jsonc` (from the OpenCode or Pi location) is moved to the new path, and the old file is renamed to `*.MOVED_READPLEASE` with a short note inside so nothing is silently left behind. If the migrator finds two legacy files that disagree, it refuses to merge them and asks you to consolidate (it never clobbers your settings). Project-local runtime artifacts (historian error dumps) move under `<project>/.cortexkit/magic-context/`, and a scoped `.gitignore` keeps them out of your repo.
63
+
64
+
## Workspaces: selective memory sharing
65
+
66
+
Workspace members can now share memory **by category** rather than all-or-nothing. Toggle which of the five categories cross into sibling projects (defaults to sharing only `CONSTRAINTS`), so global truths travel while project-local controls stay private.
67
+
68
+
## Reliability and hardening
69
+
70
+
-**Plugin-load resilience.** The plugin entry is hardened against an OpenCode Desktop multi-instance boot-order issue that could leave the transform disabled and balloon a session's context. A failure registering hidden agents can no longer take down the whole plugin.
71
+
-**`/ctx-*` commands no longer leak an error** into the TUI or log on OpenCode 1.17.x. The handled-command signal is now a clean 204 response.
72
+
-**Resilient dreamer leases.** Transient database contention during a long task no longer aborts it as a permanent failure, and a genuine multi-minute stall is detected correctly instead of risking a split-brain run.
73
+
- A multi-wave correctness and security review across storage permissions, config recovery, the embedding pipeline, the dashboard backend, SSRF guards, and migration safety. Storage directories are tightened to `0700`/`0600`.
74
+
-`toast_duration_ms: 0` now disables Magic Context toasts entirely.
75
+
76
+
## Thanks to our contributors
30
77
31
-
## Memory maintenance split: `verify` + `curate`
78
+
This release includes community contributions from:
32
79
33
-
The old combined memory task is now two focused tasks so neither starves the other:
34
-
-**verify** checks memories against their backing files and fixes or removes stale ones (only when those files actually changed).
35
-
-**curate** deduplicates, tightens, and prunes the whole pool. Cross-category merges are now structurally rejected — a memory has exactly one category.
80
+
-**@kecsap**: a configurable toast duration, including `toast_duration_ms: 0` to turn Magic Context toasts off entirely (#92).
81
+
-**@tracycam**: security hardening, including tighter storage-directory permissions, SQLite `ATTACH` path escaping, and project-config privilege fixes (#143).
36
82
37
-
## Also in this release
83
+
Thanks also to everyone who filed detailed bug reports, and to Dependabot for the dependency bumps (#170, #171).
38
84
39
-
- Per-task model/fallback configuration across both OpenCode and Pi.
40
-
- Setup wizard, dashboard config editor, and docs updated for the new task model.
41
-
- Numerous correctness, security, and parity fixes from a multi-wave hardening pass (storage permissions, config recovery, dashboard backend, embedding model matching, compaction-marker boundaries).
42
-
- Plugin-load resilience: the entry is hardened against an OpenCode Desktop multi-instance boot-order issue that could disable the transform.
85
+
## Upgrading
43
86
44
-
Upgrading is automatic — your existing dreamer config is migrated to the new per-task schema in place.
87
+
Upgrading is automatic. Your dreamer config is migrated to the new per-task schema in place, your configuration file is moved to the CortexKit location, and the database migrates to schema v49 on first load. No manual steps.
"Dreamer V2: each maintenance task now runs on its own schedule (cron), with its own model. Configure them in setup, the dashboard, or magic-context.jsonc.",
35
-
"New 'classify' task: scores each memory's importance so the most relevant ones stay in context as your work shifts — fully cache-safe, runs in the background.",
36
-
"New 'retrospective' task: learns from the moments you had to correct or re-explain and records the durable lesson. Reads only your own typed messages; on by default, turn it off anytime.",
37
-
"Memory hygiene split into 'verify' (checks memories against code) and 'curate' (deduplicates and prunes the pool) so neither starves the other.",
35
+
"New 'classify' task scores each memory's importance so the most relevant stay in context as your work shifts; new 'retrospective' learns from moments you had to correct or re-explain. Both cache-safe, on by default, off anytime.",
36
+
"New Primers: durable answers to the questions that keep coming up about your project, kept current by the dreamer investigating the actual code.",
37
+
"Embedding storage no longer wipes your vectors when you change model or endpoint. Different models now coexist, so switching providers keeps your existing vectors.",
38
+
"Config moved to a shared CortexKit location (~/.config/cortexkit/ and <project>/.cortexkit/). This happens automatically on first run; your old file is preserved.",
0 commit comments