github basicmachines-co/basic-memory v0.24.0

latest release: v0.24.1
4 hours ago

What's Changed

  • fix(cli): stop stranding anyio worker threads on command exit by @phernandez in #1349
  • fix(core): ignore wikilinks in inline code by @phernandez in #1348
  • fix(core): honor batch metadata concurrency by @phernandez in #1347
  • docs(core): explain CLA acceptance, sign-off fixes, and fork PR CI by @phernandez in #1350
  • fix(integrations): declare the Hermes plugin manifest as v1 so the installer accepts it by @phernandez in #1356
  • fix(cli): stop accepting a private project visibility the cloud does not have by @phernandez in #1357
  • fix(installer): pass --prerelease=allow on every uv install path by @phernandez in #1353
  • fix(cli): drop the local routing entry when a cloud project is removed by @phernandez in #1355
  • fix(core): unresolve inbound relations on entity delete by @phernandez in #1358
  • fix(cli): seed config projects into the database on CLI-only installs by @phernandez in #1354
  • docs(core): drop the broken star-history chart and document CJK keyword-search limits by @phernandez in #1360
  • fix(core): make case-only renames stick on case-insensitive filesystems by @phernandez in #1362
  • feat(cli): add bm prune to drop index entries for ignored files by @phernandez in #1363
  • fix(core): parse quoted PostgreSQL search safely by @phernandez in #1361
  • fix(core): refresh linking notes' search rows on API note delete by @phernandez in #1368
  • feat(core): configure custom OpenAI embedding endpoints by @phernandez in #1370
  • fix(integrations): make the memory write path insistent and its result citable by @phernandez in #1367
  • fix(core): stop splitting entity body into per-bullet vector chunks by @phernandez in #1371
  • feat(mcp): surface similar existing notes after write_note creates a note by @phernandez in #1375
  • fix(core): bound production indexing convergence by @phernandez in #1374
  • feat(core): add portable document ingestion contracts by @phernandez in #1178
  • feat(core): add the pdf-inspector extraction adapter behind a pdf extra by @phernandez in #1377
  • fix(core): tolerate disappearing guarded files by @phernandez in #1383
  • feat(core): support unsegmented-script full-text search by @phernandez in #1373
  • fix(core): batch relation search refresh cleanup by @phernandez in #1391
  • feat(mcp): ship the manual in the package and serve it as resources by @phernandez in #1389
  • fix(mcp): correct the search_notes examples in the tool description by @phernandez in #1386
  • feat(mcp): generate manual SYNOPSIS blocks from the tool registry by @phernandez in #1393
  • test(core): benchmark multilingual embeddings by @phernandez in #1392
  • feat(core): add deterministic wiki projector by @phernandez in #1381
  • feat(mcp): serve notes as MCP resources via their memory:// URLs by @phernandez in #1394
  • feat(core): order accepted project changes by @phernandez in #1382
  • feat(mcp): add POSIX read tools behind enable_posix_tools flag by @phernandez in #1406
  • feat(core): add section indexing and range reads by @phernandez in #1408
  • feat(cli): add POSIX verbs over the shared translation layer by @phernandez in #1411
  • feat(core): add BEAM benchmark integration to the benchmarks package by @phernandez in #1407
  • feat(core): add agent-task eval harness for tool-surface comparison by @phernandez in #1409
  • feat(core): add xAFS dataset adapter to the benchmarks package by @phernandez in #1410
  • refactor(core): converge wiki logs on the accepted-change vocabulary by @phernandez in #1396
  • feat(cli): add local wiki projection commands by @phernandez in #1422
  • fix(ci): pin the uv interpreter so the matrix tests what it claims by @phernandez in #1429
  • fix(core): harden the eval harness from live A/B and BEAM runs by @phernandez in #1416
  • fix(core): bound generated wiki logs by @phernandez in #1433
  • fix(core): link empty wiki folders from parent indexes by @phernandez in #1434
  • feat(mcp): route project-qualified paths in the POSIX tools by @phernandez in #1421
  • fix(core): keep deleted wiki folders deleted by @phernandez in #1436
  • feat(mcp): add metadata predicates and field projection to POSIX find by @phernandez in #1423
  • feat(core): add temporal qualifiers and time-aware search (SPEC-82) by @phernandez in #1426
  • fix(mcp): route identifiers by the session's own project set by @phernandez in #1439
  • fix(core): restrict the vector filter pass to its own candidates by @phernandez in #1443
  • fix(core): key search_index uniqueness on the row kind by @phernandez in #1444
  • fix(cli): index on project add and make status readiness honest by @phernandez in #1440
  • fix(core): merge the alembic heads left by #1440 and #1444 by @phernandez in #1447
  • fix(core): seed agent-task projects with one index pass, and verify recency by @phernandez in #1448
  • feat(core): record error excerpts on failed agent-task tool turns by @phernandez in #1449
  • feat(core): xAFS audit, corrections, judge default, and harness fixes by @phernandez in #1450
  • fix(core): record seeding failures against their tasks instead of aborting by @phernandez in #1452
  • fix(core): index markdown whose leading fences are not YAML by @phernandez in #1453
  • docs(skills): literary analysis corrections from the Moby Dick run by @phernandez in #1459
  • feat(core): agent-curated BEAM ingestion by @phernandez in #1461
  • feat(core): curate BEAM conversations in parallel by @phernandez in #1462
  • fix(core): keep BEAM curation alive through server startup failures, and resume by @phernandez in #1463
  • fix(core): surface the HTTP error body in completion-runner failures by @phernandez in #1464
  • feat(api): batch accepted note reads for hosted search by @phernandez in #1454
  • fix(core): run claude -p judges and answerers without the operator's MCP servers by @phernandez in #1465
  • fix(core): sandbox the bm-local provider's default project home by @phernandez in #1467
  • feat(core): resume an interrupted BEAM scoring pass by @phernandez in #1469
  • fix(mcp): stop a same-named note from being read as its own project by @mmaxjr in #1460
  • fix(mcp): preserve search result fidelity by @phernandez in #1470
  • feat(integrations): expose OpenClaw note metadata by @phernandez in #1474
  • fix(mcp): normalize constrained project names by @phernandez in #1471
  • fix(core): support type metadata in edit note by @phernandez in #1472
  • fix(cli): honor Claude profile configuration by @phernandez in #1473
  • fix(core): make Markdown note permalinks mandatory by @phernandez in #1477
  • fix(core): use bounded SQLite pooling on Windows by @phernandez in #1480
  • fix(mcp): round-trip find note-type predicates by @phernandez in #1481
  • fix(cli): validate local sync path before saving config by @dawNotPoi in #1466
  • feat: generate PARAMETERS from the tool registry by @FBISiri in #1478
  • test(core): verify semantic reindex exits on native platforms by @phernandez in #1482
  • feat(core): let a subclass write inside the accept transaction by @groksrc in #1483
  • fix(core): project accepted note filenames using canonical metadata by @phernandez in #1484
  • fix(core): preserve non-Markdown files during moves by @phernandez in #1485
  • feat(core): enforce one-way locked notes in mutation APIs by @phernandez in #1486
  • feat(integrations): give Tau persistent Basic Memory continuity by @phernandez in #1489
  • feat(core): add PDF page citations to document observations by @phernandez in #1490
  • feat(core): add an overridable seam for completed schema validation by @groksrc in #1491
  • feat(integrations): unify Tau memory schemas and setup by @phernandez in #1493
  • fix(core): report resolved schema identity to validation observers by @groksrc in #1494
  • feat(cli): add Codex plugin install command by @phernandez in #1497
  • feat(cli): add Claude Code plugin install command by @phernandez in #1498
  • feat(mcp): add bounded line reads and literal grep context by @phernandez in #1502
  • feat(integrations): add Pi memory package by @phernandez in #1492
  • fix(core): preserve agent source through note materialization by @phernandez in #1505
  • fix(plugins): upgrade FastMCP to stable 4.0.3 by @phernandez in #1506
  • feat(mcp): enable POSIX tools by default by @phernandez in #1507
  • fix(cli): report missing notes with a failing exit status by @phernandez in #1508
  • fix(integrations): report effective Pi automation status by @phernandez in #1509
  • perf(core): avoid hashing files before the first index by @phernandez in #1510
  • docs(plugins): diagnose Codex Desktop WSL hook prerequisites by @phernandez in #1511
  • fix(mcp): retry gateway rate limits by @dawNotPoi in #1513
  • feat(core): index Markdown links to project files by @phernandez in #1514
  • feat(mcp): add compact search discovery results by @phernandez in #1515
  • feat(mcp): add compact graph context discovery by @phernandez in #1516
  • feat(cli): expose compact search and context discovery by @phernandez in #1518
  • feat(core): retain extraction page maps in document provenance by @phernandez in #1519
  • docs(core): publish document extraction schema note by @phernandez in #1517
  • fix(mcp): unify note writes with typed outcomes by @phernandez in #1521
  • fix(cli): wait out rate limits during a WebDAV transfer by @phernandez in #1532
  • feat(core): ingest docx, pptx, and csv into document sidecar notes by @phernandez in #1529
  • feat(cli): generate section-1 man SYNOPSIS and OPTIONS from Typer by @FBISiri in #1524
  • fix(core): honor escaped hashes and whitespace in ignore patterns by @phernandez in #1544
  • fix(mcp): report index-required guidance for never-indexed projects by @phernandez in #1545
  • fix(sync): repair Markdown type drift while preserving resource convergence by @phernandez in #1543
  • fix(core): exclude Emacs autosaves from local indexing by @phernandez in #1547
  • fix(core): reject missing replace_section headings by @phernandez in #1546
  • fix(mcp): explain empty unspaced CJK compound searches by @phernandez in #1548
  • perf(core): bound lexical hybrid previews and trace search stages by @phernandez in #1556
  • perf(core): bound reranker batches and disable ONNX CPU arena by @phernandez in #1555
  • refactor(core): compile search filters over an explicit ProjectScope by @phernandez in #1562
  • refactor(core): move FTS execution behind FtsBackend and bind the read path to scope by @phernandez in #1563
  • refactor(core): extract SearchReader and SemanticSearch from the search repository by @phernandez in #1565
  • refactor(core): bind vector adapters to the database and search them over a ProjectScope by @phernandez in #1566
  • feat(api): search an explicit set of projects with one query by @phernandez in #1567
  • feat(mcp): search all projects with one scoped query per database by @phernandez in #1573
  • perf(core): read only the projects in scope from the vector indexes by @phernandez in #1574
  • fix(core): fill a filtered vector window instead of stopping at rejected neighbours by @phernandez in #1575
  • fix(mcp): rank merged search hits by strength and name each hit's project by @phernandez in #1576
  • fix(core): resolve Markdown path links against the note at resolution time by @phernandez in #1577
  • fix(core): keep projects under a shared root top-level by @phernandez in #1598
  • feat(cli): always delete cloud files on cloud project remove by @phernandez in #1600
  • fix(core): let Wiki index.md links become graph relations by @phernandez in #1601
  • perf(core): cut Logfire span and log volume on hot paths by @phernandez in #1602
  • fix(core): let storage own the note-file delete checksum match by @jope-bm in #1606
  • feat(core): stamp created_by/updated_by authorship in note frontmatter by @phernandez in #1608
  • docs(core): align importer Args: names with actual function signatures by @phernandez in #1610
  • docs(skills): note optional web search setup for memory-research by @phernandez in #1611
  • fix(core): avoid correlated sqlite-vec orphan cleanup by @phernandez in #1612
  • fix(mcp): report a missing explicit note path as not found by @phernandez in #1614
  • chore(mcp): audit model-facing prompts, tool descriptions, and skills by @phernandez in #1603
  • feat(cli): export and validate OKF v0.2 bundles by @phernandez in #1554
  • fix(mcp): apply move_note cross-project guard to directory moves by @phernandez in #1615
  • fix(core): retrieve once per reranked search request by @phernandez in #1616
  • docs(core): v0.24.0 changelog by @phernandez in #1618
  • fix(core): keep agent actor origins when parsing object metadata by @phernandez in #1613
  • docs: describe what man1/ actually ships by @phernandez in #1620
  • fix(mcp): report the accepted checksum from write_note and edit_note by @phernandez in #1619
  • fix(core): replace an entity's search rows in one transaction by @phernandez in #1623
  • fix(core): resolve explicit non-slug permalinks through memory:// URLs by @phernandez in #1622
  • fix(core): v0.24.0 live-run defects (project lookup, build_context, wiki, man, search scope, examples) by @phernandez in #1637
  • docs(core): v0.24.0 changelog entries for #1586 and #1613 by @phernandez in #1639
  • feat(core): record the actor on note deletes by @phernandez in #1640
  • fix(mcp): report failed delete_note and move_note as tool errors by @phernandez in #1641
  • feat(mcp): let write_note overwrite only the revision the caller read by @jope-bm in #1642
  • fix: project status over GET, and say why workspace discovery failed by @phernandez in #1643
  • fix(core): a project with indexed notes is indexed, even without a full pass by @phernandez in #1645
  • fix(core): recognize a synced original that indexing already rewrote by @phernandez in #1654
  • fix(core): index single files with the checksum storage reports by @phernandez in #1655
  • fix(core): create vector storage at initialization, never at runtime by @phernandez in #1656
  • feat(core): name new Alembic revisions by sequential schema version by @phernandez in #1658
  • fix(core): serialize vector storage DDL so concurrent initializations cannot race by @phernandez in #1659
  • fix(core): compare storage and content checksums like with like; record the materialized object's storage checksum by @phernandez in #1660
  • fix(core): accept-time publication marker; PUT renames announce moves; real-DB runner tests by @phernandez in #1668
  • ci: balance Postgres shards by recorded durations; run Windows only on main by @phernandez in #1669
  • fix(core): move a directory's notes as accepted note moves by @phernandez in #1670
  • fix(core): recognize a DB-first note's storage echo by its accepted content by @phernandez in #1671
  • feat(core): report work units on indexing and embedding results by @phernandez in #1672
  • fix: Carry the content checksum on index-file results for live updates by @phernandez in #1673
  • fix(mcp): edit_note reports a refused write as an error by @sammywachtel in #1662
  • fix(mcp): revert edit_note refused-write error reporting (#1662) by @phernandez in #1682
  • test(core): write the indexed-bytes test note with LF newlines by @phernandez in #1678
  • fix(mcp): fixes from the v0.24.0 live test by @phernandez in #1683
  • fix(core): log tracebacks without per-frame values on the long-lived sinks by @phernandez in #1679
  • docs(core): bring the v0.24.0 changelog up to date by @phernandez in #1680
  • test(cli): make the man install default-root test own its HOME by @phernandez in #1690
  • fix(mcp): make grep match keywords by default by @phernandez in #1689
  • fix(core): key vector chunks by content so unchanged text keeps its embedding by @phernandez in #1691
  • docs(core): align delete_directory and find docstring Args with signatures by @FBISiri in #1652
  • fix(core): a search refresh that loses a race never fails the save by @phernandez in #1694
  • fix(core): an accepted write is never reported as failed by its file write by @phernandez in #1693
  • fix(mcp): widen metadata filter grammar and own the count query by @phernandez in #1676
  • fix(core): warn when the watcher cannot read a new directory by @phernandez in #1692
  • fix(sync): make the index delete check case-exact by @phernandez in #1699
  • fix(cli): bind MCP HTTP transports to loopback by default by @phernandez in #1697
  • fix(core): keep environment overrides out of config.json by @phernandez in #1701
  • feat(mcp): let compact build_context skip loading observations by @phernandez in #1702
  • fix(core): resume deferred oversized-entity embeddings on the next index pass by @phernandez in #1700
  • fix(core): quote punctuated words one by one in SQLite full-text queries by @phernandez in #1695
  • fix(cli): polish help and messages from the v0.24.0 live run by @phernandez in #1704
  • fix(mcp): fix small note-tool defects from the v0.24.0 live run by @phernandez in #1705
  • fix(core): keep appended setext underlines from turning paragraphs into headings by @phernandez in #1698
  • docs(core): add the v0.24.0 milestone fixes to the changelog by @phernandez in #1706
  • feat(core): remove semantic_search_enabled; semantic search is always on by @phernandez in #1696
  • fix(core): finish removing semantic_search_enabled after today's merges by @phernandez in #1709
  • docs(core): add the #1696 semantic-search-always-on entry to the changelog by @phernandez in #1707
  • fix(cli): describe all edit_note operations in help and docstring by @phernandez in #1710
  • fix(cli): list Team projects in one request and transfer files in parallel by @phernandez in #1703
  • perf(sync): skip embeddings for Wiki projector pages by @phernandez in #1714
  • feat(cli): deprecate cloud bisync and mirror sync; diagnostics env overrides by @phernandez in #1711
  • feat(mcp): checksum-guarded edit_note and metadata-only read_note by @phernandez in #1712
  • fix(cli): escape user values in Rich output; single deprecation notice by @phernandez in #1723
  • feat(core): extracted_text sidecars, page map on the run note, stored file formats by @phernandez in #1724
  • fix(core): keep created_at on edits; clearer build_context and conflict output by @phernandez in #1725
  • fix(mcp): give the similar-notes advisory its own similarity floor by @phernandez in #1722
  • docs(skills): add memory-comark for ::bm-* components in notes by @phernandez in #1715
  • fix(core): drain deferred embeddings in reindex and report unfinished work by @phernandez in #1729
  • fix(core): embed accepted writes once, after the file is materialized by @phernandez in #1735
  • docs: add comark(7), the Comark component quick reference by @phernandez in #1736
  • docs: say component problems never block a write by @phernandez in #1739
  • feat(core): connect extracted text to source files with derived_from by @phernandez in #1744
  • fix(mcp): fixes from the v0.24.0 live run by @phernandez in #1745
  • docs(core): fill remaining v0.24.0 changelog gaps by @phernandez in #1749
  • docs(skills): describe Comark authoring recovery and repairs by @phernandez in #1754
  • perf(core): stop runaway vector widening and cap note text in search reads by @phernandez in #1750
  • perf(core): rank only filter-admitted chunks inside sqlite-vec and pgvector by @phernandez in #1753
  • perf(core): rank search by id and fetch note text for returned rows only by @phernandez in #1755
  • fix(core): read rerank prefix text up to the reranker's document limit by @phernandez in #1757
  • fix(core): widen rerank reads only for rows without a matched chunk by @phernandez in #1758
  • perf(core): per-note read-cache eviction groups on fastapi-redis-sdk, QUERY-only search and resolve by @phernandez in #1752
  • feat(skills): add memory-quest skill for Memory Quest Mission 8 by @groksrc in #1677
  • ci(skills): publish every skill as a downloadable zip by @groksrc in #1737
  • fix(integrations): pass Memory Quest fields through OpenClaw and Hermes tools by @groksrc in #1738
  • fix(core): indexing and vector sync fixes from contributor reports by @phernandez in #1759
  • chore(deps): update fastmcp to 4.1.0 by @phernandez in #1760
  • fix(core): stop recording read cache hits as span errors by @phernandez in #1761
  • fix(core): delete retired read-cache entries on invalidation by @phernandez in #1762
  • fix(integrations): mask credentials on the hermes capture path by @k0nnect in #1764
  • fix(core): normalize file paths to NFC at the ingest boundary on macOS by @phernandez in #1766
  • feat(skills): project-note reflect and defrag, temporal qualifiers, memory-okf, packaged skills by @phernandez in #1767
  • fix(api): delete omitted frontmatter keys on a full-document PUT by @phernandez in #1769
  • docs(core): add a dev-mode .envrc that isolates Basic Memory config by @groksrc in #1779
  • fix(core): preserve file created_at through index input adaptation by @phernandez in #1781
  • fix(mcp): create missing edit_note notes at the path the identifier names by @phernandez in #1782
  • fix(mcp): name other-workspace projects in POSIX refusals and ls / by @phernandez in #1780
  • fix(mcp): skip generated notes in write_note's similar-notes advisory by @phernandez in #1784
  • feat(skills): add memory-agents for Basic Memory Cloud agents by @phernandez in #1785
  • fix(sync): move reused vector chunk metadata in set-based batches by @phernandez in #1788
  • fix(core): report case-only Wiki scope collisions instead of failing the run by @phernandez in #1789
  • fix(cli): import ChatGPT conversations that have no title by @phernandez in #1790
  • perf(core): count admitted vector chunks from the manifest alone by @phernandez in #1793
  • perf(core): run FTS text conditions only on the GIN candidates by @phernandez in #1794
  • perf(core): read FTS chunk candidates from the GIN index by @phernandez in #1795
  • fix(core): avoid reflecting vector tables during NFC migration by @phernandez in #1801
  • perf(core): collect multiword FTS operand matches through GIN by @phernandez in #1802
  • fix(api): bound context traversal depth and recent page size by @phernandez in #1804
  • fix(deps): update security dependencies and container trust stores by @phernandez in #1805
  • fix(core): keep remote paths independent of host symlinks by @phernandez in #1807
  • docs(core): update v0.24.0 changelog for release by @phernandez in #1818
  • fix(ci): pin Codex hook ref without resolving the unpushed release tag by @phernandez in #1819
  • chore(core): release v0.24.0 by @phernandez in #1821

New Contributors

Full Changelog: v0.23.2...v0.24.0

Don't miss a new basic-memory release

NewReleases is sending notifications on new releases.