Releases: kunickiaj/codemem
Release list
Release v0.39.0
Highlights
- OpenCode memory recall is now friendlier to provider prompt caching: codemem attaches recalled context to the latest user message instead of rewriting the system prompt every turn.
- Session compaction stays cleaner: codemem skips prompt-time memory injection while OpenCode is summarizing a session, then resumes on normal turns.
- The legacy system-prompt path is still available with
CODEMEM_INJECT_SURFACE=system, and the docs now explain both modes.
What's Changed
Other Changes
- feat(plugin): inject memories into user messages by @kunickiaj in #1315
- docs(plugin): document message-based memory injection by @kunickiaj in #1316
- chore(release): bump version to 0.39.0 by @kunickiaj in #1317
Full Changelog: v0.38.0...v0.39.0
Release v0.38.0
What's new in 0.38.0
- Quieter observer. A memory-worthiness bar means routine sessions (context lookups, status checks, review passes with no findings) now produce a summary only — no forced observations. Rich implementation sessions still emit 2–4 thread-covering observations. Measured effect during the dogfood window: ~40–50% fewer observations per observer call, with no starvation on real work.
- Relevance-first pack ranking (new default). Durable observations and decisions now lead default/task/debug packs; session summaries lead only when you explicitly ask for a recap. Measured: ~3pp more durable content and ~3pp less telemetry in top-5 results, with explicit-recap behavior unchanged.
- Distill v1 with a worthiness judge (on by default).
codemem distillmines recurring memories into reviewable AGENTS.md rule candidates; an observer-model judge drops routine-activity clusters.--draftproposes a diff and--applywrites a codemem-managed block. Also exposed via thememory_distill_candidatesMCP tool. The judge requires observer credentials on the serving peer; retrieval-only peers return unjudged candidates.
Known limitations
- Repeating
distill --applyfor the same candidate can append a reworded duplicate bullet (the drafter regenerates wording per run). Duplicates are harmless and hand-removable; a fix that tracks applied candidates by cluster identity is planned as a follow-up. - Judged distill on a serving peer without observer credentials silently returns unjudged candidates (metadata still reports
judged: true); improved signaling is planned.
Release v0.38.0-alpha.2
What's Changed
Other Changes
- fix(docker): persist MCP OAuth state by @kunickiaj in #1305
- feat(core): observer worthiness bar — drop the min-observation quota by @kunickiaj in #1308
- feat(core): scaffold distill fact-miner candidate engine by @kunickiaj in #1288
- feat(core): cluster distill candidates semantically by @kunickiaj in #1289
- feat(core): score distill candidate promotability by @kunickiaj in #1290
- feat(core): dedupe distill candidates against context by @kunickiaj in #1291
- feat(core): emit distill candidates with scope routing by @kunickiaj in #1292
- feat(cli,mcp): expose distill candidates by @kunickiaj in #1293
- feat(distill): draft AGENTS.md rules from candidates with diff/apply by @kunickiaj in #1294
- feat(distill): judge candidates for durable-lesson worthiness by @kunickiaj in #1309
- chore(release): bump version to 0.38.0-alpha.2 by @kunickiaj in #1310
Full Changelog: v0.38.0-alpha.1...v0.38.0-alpha.2
Release v0.38.0-alpha.1
What's Changed
Other Changes
- docs(memory): define dual-artifact memory-worthiness policy by @kunickiaj in #1295
- feat(core): add dual-artifact memory worthiness classifier by @kunickiaj in #1296
- test(core): add dual-artifact eval scenario pack + artifact-share metric by @kunickiaj in #1297
- docs(memory): design derived-fact derivation pass by @kunickiaj in #1298
- feat(core): add read-only dual-artifact audit report + CLI by @kunickiaj in #1299
- feat(core): capture-time artifact routing + telemetry suppression (gated) by @kunickiaj in #1300
- feat(core): relevance-first default ranking + artifact_class trace diagnostic by @kunickiaj in #1303
- chore(release): bump version to 0.38.0-alpha.1 by @kunickiaj in #1304
Full Changelog: v0.37.1...v0.38.0-alpha.1
Release v0.37.1
What's Changed
Other Changes
- fix(mcp): support hosted connector OAuth redirects by @kunickiaj in #1286
- chore(release): bump version to 0.37.1 by @kunickiaj in #1287
Full Changelog: v0.37.0...v0.37.1
Release v0.37.0
✨ Highlights
🗜️ Reclaim database disk space
codemem's local SQLite store could grow into the gigabytes and never shrink on its own. 0.37 gives you the tools to take that space back:
codemem db prune-replication-opsnow prunes every sharing scope (not just the default) and reports an honest whole-table size. It's peer-safe — it respects each scope's retained floor, so it won't drop ops a peer still needs.codemem db prune-raw-events --max-age-days <N>trims old recorded session events.codemem db vacuumreturns the freed space to disk (row deletes alone don't shrink the file).- Opt-in background retention to keep growth bounded automatically:
sync_retention_enabled(replication ops) andraw_events_retention_enabled(raw events).
Tip for existing large DBs: run the prunes, then
codemem db vacuumonce. VACUUM takes an exclusive lock and needs free temp space, so stop the daemon/viewer first.
⚡ Faster, lighter viewer & queries
- Production viewer bundle is minified and pre-compressed (brotli/gzip) for smaller downloads and faster loads.
/api/usageis aggregated in SQL, scope-visibility filtering uses an indexed lookup, plus tuned SQLite pragmas (cache/mmap) and dropped legacy indexes — noticeably snappier on large databases.
🔒 Security
- Dependency advisory patches: pnpm 11.8.0 and fixes for hono, vite, protobufjs, and undici.
- Feed markdown is now sanitized with DOMPurify in the viewer.
🛠️ Reliability fixes
- Sync holds the inbound cursor when ops fail to apply, so a transient failure retries instead of silently skipping data.
- Coordinator device removal is now atomic; invite expiry is timezone-safe.
- CLI commands have structured error boundaries (clean failures and exit codes); the OpenCode plugin hardens subprocess and tool-arg handling.
What's Changed
Other Changes
- fix(core): hold inbound replication cursor when ops fail to apply by @kunickiaj in #1262
- fix(opencode-plugin): harden subprocess and tool-arg handling by @kunickiaj in #1263
- fix(cli): add structured error boundaries to command handlers by @kunickiaj in #1264
- fix(ui): sanitize feed markdown with DOMPurify and bundle marked by @kunickiaj in #1265
- fix(viewer-server): evict usage cache and fix error/config consistency by @kunickiaj in #1266
- fix(core): make coordinator removeDevice atomic and invite-expiry timezone-safe by @kunickiaj in #1267
- perf(core): add cache_size/mmap_size/temp_store pragmas in connect() by @kunickiaj in #1268
- perf(core): drop legacy unused memory_items indexes by @kunickiaj in #1269
- perf(core): resolve scope-visibility set once and filter with indexed IN() by @kunickiaj in #1270
- perf(viewer): aggregate /api/usage in SQL, bound recent-packs visibility window by @kunickiaj in #1271
- perf(core): gate per-open additive schema-compat shim behind a version marker by @kunickiaj in #1272
- perf(viewer/ui): minify production bundle + precompress assets (brotli/gzip) by @kunickiaj in #1273
- feat(core): raw_events retention config keys + db prune-raw-events CLI by @kunickiaj in #1274
- chore(deps): bump pnpm to 11.8.0 + patch hono/vite/protobufjs/undici advisories by @kunickiaj in #1275
- fix(ui): avoid serving stale precompressed bundles in build:watch by @kunickiaj in #1276
- fix(cli): prune-replication-ops prunes all scopes + honest whole-table size report by @kunickiaj in #1278
- chore(release): bump version to 0.37.0 by @kunickiaj in #1280
Full Changelog: v0.36.1...v0.37.0
Release v0.36.1
What's Changed
Other Changes
- fix(codex): remove unsupported hook config field by @kunickiaj in #1258
- fix(sync): additively merge-recover scoped peers with local rows but no cursor by @kunickiaj in #1259
- fix(core): treat claimed same-actor peers as mine in ownership_scope SQL by @kunickiaj in #1260
- chore(release): bump version to 0.36.1 by @kunickiaj in #1261
Full Changelog: v0.36.0...v0.36.1
Release v0.36.0
What's Changed
Other Changes
- chore: upgrade pnpm to 11.5.0 by @kunickiaj in #1231
- test(plugin): stabilize transform hook timers by @kunickiaj in #1232
- chore: bump biome, tsx, vite, and vitest dependencies by @kunickiaj in #1233
- fix(ui): keep coordinator rename drafts out of device titles by @kunickiaj in #1238
- fix(ui): show blocking identities for project bulk assignment by @kunickiaj in #1239
- chore(deps): bump @opencode-ai/plugin to 1.17.1 by @kunickiaj in #1241
- fix(ui): link redacted sync attempts to diagnostics by @kunickiaj in #1243
- fix(sync): add structured failure categories by @kunickiaj in #1244
- test(sync): lock scoped ops author invariant by @kunickiaj in #1245
- docs(sync): clarify capability header threat model by @kunickiaj in #1246
- test(sync): exercise scoped sync against real routes by @kunickiaj in #1247
- test(sync): cover midflight scope membership grant by @kunickiaj in #1248
- feat(sync): render per-space peer progress by @kunickiaj in #1249
- test(sync): cover cli per-space status by @kunickiaj in #1250
- fix(sync): gate discovered-device pairing setup states by @kunickiaj in #1251
- fix(sync): show friendly names in pairing requests by @kunickiaj in #1252
- chore(ui): rename Coordinator Admin surface to Teams by @kunickiaj in #1253
- chore(release): bump version to 0.36.0 by @kunickiaj in #1254
Full Changelog: v0.35.2...v0.36.0
Release v0.35.2
What's Changed
Other Changes
- fix(codex): valid Codex hook output from codex-hook-ingest; consolidate to --codex-only by @kunickiaj in #1229
- chore(release): bump version to 0.35.2 by @kunickiaj in #1230
Full Changelog: v0.35.1...v0.35.2
Release v0.35.1
✨ Plugin-free Codex install (codemem setup --codex)
If you're on API-key / non-subscription Codex Desktop, plugin installation is greyed out — so this release adds a way to wire codemem into Codex without the marketplace:
npx -y codemem setup --codexThis configures Codex directly:
- Adds
[mcp_servers.codemem]to~/.codex/config.toml(recall via MCP — works immediately). - Writes
~/.codex/hooks.jsonfor capture + prompt-time recall (SessionStart,UserPromptSubmit,PostToolUse,Stop).
It's safe and re-runnable: existing config/comments/secrets are preserved (files are backed up, never reformatted), unrelated hooks are kept, and it honors CODEX_HOME. Hooks call codemem directly when it's on your PATH, otherwise fall back to npx -y codemem. Restart Codex and approve the one-time prompt to trust the codemem hooks; MCP recall needs no trust.
Codex support remains early beta. Subscription users should still prefer the plugin marketplace (
codex plugin marketplace add … / codex plugin add codemem@codemem).
Full Changelog: v0.35.0...v0.35.1