Releases: Skyfox-io/Memex
v2.1.3 — wikilinks resolve dotted filenames
Bug fix: wikilink targets containing dots are no longer reported as broken.
Fixed
verify-wikilinks.pyresolved link stems withos.path.splitext, which truncated dotted names ([[v1.2.3]]→v1.2) and falsely flagged them as broken — in both the broken-link and closets checks. Stems now strip only a trailing.md, so filenames with internal dots resolve correctly.
v2.1.2
v2.1.1
Two changes: drop the unpopulated facts.db sidecar, reframe the benchmark headline.
Removed
memory/.facts.dband/memex:facts. The temporal-facts SQLite sidecar shipped in v2.0.0 but never auto-initialized —/memex:initand/memex:upgradenever bootstrapped the DB, and nothing in the session lifecycle wrote to it. Closets already capture verbatim user-stated facts (claims:), decisions (decisions:), and dates (dates:) on every refresh.decisions.mdalready records dated supersession with stronger guarantees (always loaded, lint-checkable). The unique value the DB layer was supposed to add — contradiction detection — was duplicated by the keyword-explicit decision-supersession check already in/memex:lintand/memex:consolidate. Removed:memex/scripts/facts.py,memex/skills/facts/, the facts.db plumbing insources.py, and all references across docs.- Migration: workspaces with no
.facts.dbare unaffected (most workspaces, since the bootstrap never ran). Workspaces that manually populated facts via/memex:facts add ...lose the DB but keep theirmemory/facts.mdmarkdown mirror.
- Migration: workspaces with no
Changed
- README headline reframed. Drops the leaderboard-comparable "90.1% Recall@5 on LongMemEval-S" pull-quote in favor of the actual differentiator: closets-format index in pure markdown matches full-content keyword search on retrieval recall at roughly 1/10th the size, with zero external dependencies. The 90.1% number stays in
benchmarks/longmemeval/README.mdwith full context — what R@5 measures, what the BM25 baseline does, the size argument, and an explicit note that retrieval recall is not end-to-end QA accuracy. - README "How It Works" reworked to lead with closets as the centerpiece, with a sample entry, pagination notes, and an updated file-structure tree showing
_CLOSETS.mdand the optional prose hub index. /memex:consolidateStep 2 rewritten. Now scansdecisions.mdfor explicit override language and proposes annotating unannotated supersessions.--fixapplies. Mirrors/memex:lint's detection.- Skill descriptions and gotchas updated to drop facts.db references (
/memex:idea,/memex:unlink-workspace,/memex:cross-search,/memex:search,/memex:lint,/memex:consolidate). /memex:upgradev1→v2 playbook drops the facts.db row.
Roadmap
End-to-end QA accuracy on LongMemEval-S (retrieve → generate → GPT-4o judge) is the right next benchmark. Not in v2.x.
Note on history
This release also squashes the v2.0.x and v2.1.0 commit histories into clean release commits (one per tagged release). Tag SHAs for v2.0.0 and v2.1.0 have been updated to point at the squashed commits. Marketplace clones will see a force-update on next pull.
See CHANGELOG.md for the full list.
v2.1.0 — lighter session lifecycle
A lighter, more discoverable v2. Session lifecycle does less. Tier 1 gets typed retrieval. Hub indexes become optional. Cross-hub search lands as its own skill. Decisions compression and graph rebuild move out of session-end and into the bulk-write skills where they belong.
All v2.0 workspaces are forward-compatible. No breaking changes. /memex:upgrade handles the v2.0 → v2.1 increment idempotently.
Added
memory/_CLOSETS.md. Typed-field index over Tier 1 files (status, session-log, decisions, glossary, plus user-added Tier 1 entries). Field-level retrieval ("who is X?", "what did the user say about Y?") now hits structured fields on Tier 1 just like hub closets do for Tier 2. Init scaffolds it;/memex:reindex --hub memorybackfills existing workspaces./memex:searchskill. Cross-hub search within a single workspace. Greps_MANIFEST.mdplus every_CLOSETS.mdand_CLOSETS-archive.mdplusmemory/.facts.db, grouped by folder. Companion to/memex:cross-search.- Recently Archived section in primary
_CLOSETS.md. When pagination overflows into_CLOSETS-archive.md, the primary closets file appends a list of the 5 most recently demoted file stems. Surfaces archive contents in the always-loaded layer. - ORPHAN FOLDERS check in
/memex:lint. Flags top-level subdirectories with markdown files that aren't registered in the Hub Map. Suggests/memex:add-domain <name>per orphan. - Decisions compression in
/memex:consolidate. Two concrete rules: drop redundant supersession pairs and collapse same-period clusters. Read-only by default;--fixapplies.
Changed
- Hub indexes are now optional.
/memex:add-domainis closets-only by default. The optional[domain]-index.mdexists for prose context. Existing workspaces with index files keep working unchanged. - Session-end is lighter. Removed: typed-edge graph rebuild, session-lock writes, in-line decisions compression. Session-end is unconditional and idempotent.
- Wikilink suggest at session-end is scoped to session-modified files via the new
--filesflag onverify-wikilinks.py. Workspace-wide suggest stays available via/memex:wikilinks. - Session-start uses mtime for unclean-close detection. No lock file involved. The 5-minute window absorbs minor clock drift.
- Session lock removed.
memory/.session.lockis gone. Bulk-write skills keep their locks for real multi-minute write operations. - Typed-edge graph refresh is lazy. Rewritten by
/memex:reindexand/memex:consolidate. Session-end nudges; doesn't rebuild. /memex:reindexcoversmemory/as a synthetic hub and rewritesmemory/.graph.mdafter the verify pass.
Fixed
- Decisions compression no longer happens at session-end or
/memex:update. Both skills are append-only for decisions. Compression rules and--fixaction live only in/memex:consolidate. verify-wikilinks.py --suggestaccepts--files <list>.
See CHANGELOG.md for the full list and the v2.0 → v2.1 upgrade playbook.
v2.0.0 — Memex v2: 90.1% R@5 on LongMemEval-S
v2.0.0: 90.1% Recall@5 on [LongMemEval-S], the standard retrieval benchmark for long-term memory in chat assistants.
What's new in v2
- Two-tier index — per-hub
_CLOSETS.mdfiles enumerate every file's distinct subjects, named entities, decisions, dates, and status in typed fields. Sessions scan closets to decide what to open without opening anything. Pagination engages at 30 entries (overflow goes to_CLOSETS-archive.md, lazy-loaded only on a primary-closets miss). - Temporal facts SQLite sidecar —
memory/.facts.dbtracks(subject, predicate, object)triples withvalid_from/valid_todates. Stdlibsqlite3only. Markdown mirror atmemory/facts.mdis the source of truth; the DB is regenerable viafacts.py rebuild. - Typed-edge graph — optional YAML frontmatter (
supersedes,blocks,people,projects) auto-extracted intomemory/.graph.mdat session-end. Pure regex; zero LLM calls; opt-in per file. - Cross-workspace federation —
/memex:link-workspace+~/.memex/sources.mdglobal registry; search across linked workspaces with/memex:cross-search. Reads manifests + closets + each source'sfacts.dbread-only. Privacy-first: opt-in per source. - Standalone consolidation cycle —
/memex:consolidateruns dedup, contradiction sweep, and orphan check independently from session-end. - Idempotent session-end + crash recovery — content-hash check skips no-op writes;
memory/.session.locksurfaces the previous session if it crashed without closing.
New skills
/memex:upgrade (one-command v1→v2 migration), /memex:reindex (bulk-rebuild closets), /memex:resummarize (refresh summaries to v2 format), /memex:consolidate (drift sweep), /memex:facts (temporal-facts CRUD), /memex:cross-search (federated search), /memex:link-workspace, /memex:unlink-workspace. Plus the v1 set retained: init, session-start, session-end, update, idea, add-domain, archive, wikilinks, lint. 17 skills total.
Upgrading from v1.1.1
When the marketplace update lands and you open your next session, the briefing will append a one-line prompt:
Memex upgrade available — run /memex:upgrade to migrate to v2 retrieval.
Run /memex:upgrade once. It detects state (manifest version, summary-format-version, per-hub closets coverage), builds an idempotent plan, and runs the right subset of /memex:resummarize + /memex:reindex + lint. Re-runs are no-ops.
Until you run it, your workspace works in compatible mode (no closets, no graph) — nothing breaks.
Compatibility
- Zero new runtime dependencies. Markdown plus Python stdlib only.
- Existing v1 workspaces upgrade silently via
/memex:upgrade. v1 manifests, hub indexes, and decisions files are read directly. - Marketplace auto-update. v1.1.1 users will see an update prompt the next time their Cowork client refreshes the marketplace. No re-add required.
Benchmark
Full reproducer in benchmarks/longmemeval/: five extractors × eight rankers × 500 questions × six question categories, with paired-bootstrap CIs via compare.py. Headline strategy closets:emax lands at 90.1% R@5 / 94.6% R@10 / 0.880 MRR / 96.4% Hit@5.
Full changelog
See CHANGELOG.md for the full v2.0.0 entry.
v1.1.0
Memex v1.0.5
Structured memory plugin for Claude Cowork. Converts workspaces into wikilinked knowledge systems with persistent memory, tiered context loading, and Obsidian-compatible navigation.
Install
In Cowork: Customize > Browse plugins > "+" > enter Skyfox-io/Memex > Sync. Then run /memex:init.
What Memex does
- Converts your workspace into a
[[wikilinked]]knowledge base that works with Obsidian - Gives Claude full workspace awareness while only loading what the current task needs
- Auto-briefs you at session start with status, blockers, and ideas
- Auto-closes sessions cleanly: updates memory, logs decisions, verifies wikilinks
- Content-aware init: scans files, detects domains, flags stale docs, surfaces conflicts, proposes organization
Skills
| Skill | What it does |
|---|---|
/memex:init |
Set up, adopt, health-check, or upgrade a workspace |
/memex:idea |
Quick-capture an idea to the inbox |
/memex:update |
Save current status mid-session without closing |
/memex:add-domain |
Add a new domain folder with hub index |
/memex:archive |
Move a file from active to archived |
/memex:wikilinks |
Check for broken links and convert plain text to wikilinks |
/memex:session-start |
Session briefing (runs automatically) |
/memex:session-end |
Session close (runs automatically) |