Skip to content

Releases: bnimit/memor-ai

v0.8.0 — Dashboard as a managed service

12 Jun 15:57
aeb2e81

Choose a tag to compare

Dashboard runs as a background service alongside the daemon

memor service install now starts both the daemon and the dashboard as managed user services that cycle in lockstep — so the dashboard is always live (http://localhost:8420) and is recycled whenever you stop/restart/uninstall the service. No more hand-starting memor dashboard or stray, out-of-sync processes.

What's new

  • Two managed units — macOS launchd (ai.memor.daemon + ai.memor.dashboard) / Linux systemd (memor-daemon + memor-dashboard)
  • memor service install --no-dashboard — install only the daemon
  • memor service restart — stop + reinstall, to recycle onto a new binary after pipx upgrade
  • memor service stop / uninstall / status now operate on both units
  • Dashboard port configurable via MEMOR_DASHBOARD_PORT (default 8420); install warns if the port is already in use
  • Dashboard service runs with --no-open so it never pops a browser tab on login/restart

Verified

Full launchd lifecycle exercised live on macOS (install → recycle → restart → uninstall), plus 298 passing tests.

Upgrade

pipx upgrade memor-cli
memor service restart   # recycle running services onto 0.8.0

Full Changelog: v0.7.1...v0.8.0

v0.7.1 — Fix Claude/Codex agent misdetection

11 Jun 02:44
6021fab

Choose a tag to compare

Bugfix

Claude Code recalls were being logged — and shown on the dashboard — as Codex, even when Codex was never used.

Root cause: detect_agent() treated the presence of permission_mode as a Codex signal. Per the Claude Code hooks reference, permission_mode is a base field on every Claude Code hook input (default | plan | acceptEdits | dontAsk | bypassPermissions), so it can't discriminate between agents.

Fix: Per the OpenAI Codex hooks docs, Codex input carries model and a Codex-specific turn_id extension that Claude Code never sends. Detection now keys on those.

Changes

  • detect_agent: drop permission_mode, match turn_id/model
  • Regression tests for both directions (Claude+permission_mode → claude; turn_id → codex)
  • 287 tests passing

Upgrade: pipx upgrade memor-cli (or pip install -U memor-cli)

Full diff: v0.7.0...v0.7.1

v0.7.0 — Multi-Agent Support + Vec Storage Fix

10 Jun 16:28
f792160

Choose a tag to compare

What's Changed

Multi-Agent Support

  • Claude Code, Codex CLI, and Copilot CLI — single memor-hook binary auto-detects which agent is calling it
  • Interactive installermemor install-hook prompts to pick your agent (or --agent claude|codex|copilot)
  • Agent trackingrecall_log records which agent triggered each recall; dashboard shows per-agent breakdown with badges

Vec Storage Bloat Fix

  • Fixed 47x storage overhead in sqlite-vec vec0INSERT OR REPLACE orphaned entries, deactivation paths left vec0/FTS dirty
  • memor compact CLI command — rebuilds vec0 with right-sized chunk_size, VACUUMs the database
  • Daemon auto-compact — detects bloat (>2x ideal chunks) and rebuilds during ingestion cycles
  • Dashboard fix — cached store instance (no more intermittent unable to open database file)
  • Dashboard cleanup — hide dormant projects with no memories or recall activity

Upgrade

pip install --upgrade memor-cli
memor compact --yes   # one-time rebuild to reclaim bloated storage

Full Changelog: v0.6.1...v0.7.0

v0.6.1 — Vec Storage Bloat Fix

10 Jun 12:50
adf124f

Choose a tag to compare

What's Changed

Patch release fixing critical sqlite-vec storage bloat (554MB → ~12MB for the same data).

Fixes

  • Vec0 storage bloat: INSERT OR REPLACE on vec0 orphaned entries because SQLite changes the artifact rowid on replace. All deactivation paths (deactivate, deactivate_stale, decay_quality) now clean vec0 + FTS entries via centralized _deactivate_artifact()
  • Dashboard connection errors: Cached single SqliteStore instance instead of creating one per API request (caused intermittent sqlite3.OperationalError: unable to open database file)
  • Dashboard noise: Hide dormant projects (only raw chunks, no memories or recalls) from the project list

New

  • memor compact CLI command — rebuilds the vec0 index with right-sized chunk_size, re-embeds all active artifacts, VACUUMs the database. Run this once after upgrading to reclaim space.
  • Daemon auto-compact — detects when vec0 chunk count exceeds 2x ideal and triggers rebuild during ingestion cycles (without VACUUM to avoid exclusive locks)

Upgrade

pip install --upgrade memor-cli
memor compact --yes   # one-time rebuild to reclaim bloated storage

Full Changelog: v0.6.0...v0.6.1

v0.6.0 — Global Memories & Negative Feedback

10 Jun 03:27
cea34d8

Choose a tag to compare

What's New

Global Memories

Patterns that appear in 3+ projects are now automatically promoted to a _global scope. Global memories are recalled everywhere — your coding habits and preferences follow you into new projects from the first prompt.

  • Cross-project clustering detects shared patterns automatically
  • Source duplicates are deactivated (superseded by the global version)
  • No manual tagging needed

Negative Feedback Signals

Memor now detects when recalled memories get corrected or contradicted by the user or assistant:

  • User rejection: "no that's wrong", "we switched to X"
  • Assistant contradiction: "however, looking at the current code, we actually use Y"

Corrected memories receive a quality penalty via Bayesian scoring ((uses - negatives + 1) / (recalls + 2)), making them less likely to be recalled next time.

Dashboard Updates

  • Version badge in the topbar
  • Hero metric grid fixed to 5 columns
  • Global memory count shown in hero metrics
  • Negative feedback column in memory quality table

Other

  • Updated README with global memories and negative feedback documentation

Full Changelog: v0.5.1...v0.6.0

v0.5.1

09 Jun 05:43
24382c4

Choose a tag to compare

Patch: fix __version__ string that was still reporting 0.4.1 after the 0.5.0 release.

v0.5.0

09 Jun 05:39
81fe26d

Choose a tag to compare

What's New

Counterfactual Eval Harness (CLI)

  • memor eval-counterfactual --project <name> — win/tie/loss scoring vs no-memory baseline using LLM judge
  • Builds cases from real session data, measures do-no-harm rate
  • Developer tool requiring ANTHROPIC_API_KEY — not on the dashboard (stays true to "no API keys" product promise)

ROI Trend Sparkline (Dashboard)

  • SVG area sparkline in the Token ROI hero section showing daily tool call reduction %
  • Gradient fill, dashed grid lines, hover dots with tooltips — Robinhood-style fintech aesthetic
  • Backed by get_roi_trend() grouping turn_metrics by day

Tests

  • 227 tests passing (+12 new: 8 counterfactual eval, 4 ROI trend)

Full Changelog: v0.4.1...v0.5.0

v0.4.1

08 Jun 02:36
164ca4b

Choose a tag to compare

Fixes

  • Dashboard bar chart visible.bar-stack CSS fix; bars now render as discrete pixel cells
  • Chart fills card height — flex layout instead of fixed 180px; x-axis pushed to bottom
  • Token ROI hero banner — promoted from cramped third column to its own section above the chart grid
  • "Extractive" → "No Distill" — clearer label in Project Breakdown table

Closes

  • #8 (query complexity routing shipped in v0.4.0 + label rename in this patch)

v0.4.0 — Context Savings

07 Jun 16:03
8a70e32

Choose a tag to compare

What's New

Five architecture improvements to measure and prove real token savings:

Query Complexity Routing

Scores queries by word count, identifier density, and structure. Routes to SKIP (trivial, 0 tokens), LIGHT (simple, k=4, 500 tokens), or FULL (complex, k=8, 1500 tokens). Trivial prompts like "yes" and "ok" inject nothing; simple follow-ups get a lighter budget.

Session Context Window

Maintains a rolling window of the last 5 queries per session. When a user types a sparse follow-up ("try the other approach"), the retriever sees it enriched with recent conversational context.

Semantic Feedback

Adds embedding cosine similarity alongside existing n-gram matching in the feedback analyzer. Catches paraphrased reuse that verbatim n-gram matching misses.

Distillation Quality Gate + Faster Decay

  • Extractive distiller gates chunks below a 0.3 signal score — filler text never becomes a memory
  • Quality scores decay by 50% every 14 days for unrecalled memories
  • Below 0.03 floor → auto-deactivate
  • Compaction threshold lowered from 0.90 → 0.85

Turn-Level Token ROI

Parses transcripts turn-by-turn, counts tool calls per turn, correlates with recall events. New turn_metrics table, /api/roi endpoint, and dashboard "Token ROI" card showing "X% fewer tool calls with recall."

Stats

  • 215 tests passing
  • 17 files changed, +993 lines
  • 8 new test files, 3 new modules

Install

pipx install --force memor-cli
# or
pip install memor-cli==0.4.0

v0.3.0 — Hybrid retrieval & relevance gate

05 Jun 11:31
6936f12

Choose a tag to compare

Retrieval-quality release. Memor now retrieves over two channels and refuses to inject when nothing is relevant.

Highlights

Hybrid retrieval (dense + lexical). Added a SQLite FTS5 / BM25 channel fused with the dense vector channel via Reciprocal Rank Fusion. Recovers exact identifiers, error strings, and API names that static embeddings blur together. The FTS index syncs on ingest and auto-backfills existing databases on first open — no re-ingest needed.

Absolute-similarity gate. Min-max normalization previously forced the top hit to look perfect regardless of its true cosine, so the relevance threshold could never reject anything. The gate now drops anti-correlated candidates before ranking — an off-topic prompt injects nothing instead of the least-bad guess. Validated on a real ~10K-artifact DB: off-topic queries now return no_hits with zero injected tokens. Tunable via MEMOR_MIN_SIMILARITY.

Recall guards (P0). Per-recall token-injection budget (default 1500, MEMOR_MAX_TOKENS) and trivial-prompt skipping so confirmations like "yes"/"lgtm" don't trigger recall.

Feedback & metrics (P1). Working implicit-feedback loop (detects whether recalled memories were actually used), session-level dedup so the same memory isn't re-injected within a session, and the dashboard "precision" metric renamed to the more honest "coverage".

Install

pipx install --force memor-cli   # or: pipx upgrade memor-cli

Then restart the daemon + hook so they pick up 0.3.0.

Full changelog: v0.2.0...v0.3.0