• v6.4.2 50fde316a1

    v6.4.2 Stable

    ric_harvey released this 2026-07-19 23:26:07 +00:00 | 4 commits to main since this release

    The 6.4 line lands on main: skills that travel between instances, skills that propose themselves, and a test suite that now covers 99.9% of the codebase. This release rolls up 6.4.0 through 6.4.2.

    Skills move between instances (6.4.0)

    Every skill on the web UI gains an Export button that downloads the skill together with all the source memories it was compiled from as a single zip bundle — self-describing, with a format version and a sha256 checksum for every file, the skill as both JSON and human-readable SKILL.md, and one JSON file per source memory. An Import Skill button takes such a bundle into another OmniMem instance: validated end to end, previewed before anything is written, and strictly additive — existing skills and memories are never overwritten, so replaying a bundle is a no-op. Embeddings never travel; everything is re-embedded on the receiving instance.

    Skills propose themselves (6.4.1)

    At most once a day, a briefing() runs an auto skill scan across all projects. Domains with no compiled skill whose lessons already clear the reinforcement gate get a draft proposed automatically — by default only when a rule spans two or more projects, the strongest signal a lesson deserves to become policy. Skills whose sources have changed get a fresh draft compiled so the diff is ready to review. The scan only ever creates proposal stashes, so the propose-and-accept gate is untouched and a human still commits every draft. Ignoring a draft declines it: the identical draft is never raised twice, and it only comes back when the underlying lessons change. Tunables: SKILL_SCAN_INTERVAL_HOURS, SKILL_SCAN_CROSS_PROJECT, SKILL_SCAN_MIN_POOL, SKILL_SCAN_MAX_PROPOSALS.

    Test coverage rose from 90% to 99.9% (6.4.1)

    The suite grew from 1032 to 1291 tests and every application module now sits at 100% line coverage, including code that had never been imported by a test at all: the MCP server entry point (Host/Origin allowlist derivation, the fail-closed public-bind check), the on-connect instructions, and the RSS worker's scheduler. The pass also caught tests that were passing while asserting nothing; all now assert unconditionally and are deterministic regardless of Python's hash seed.

    Web UI fixes (6.4.2)

    • The articles page shows which feed each article came from instead of a project column that said the same thing on every row
    • Articles list in the order they arrived (created_at), so startup migrations no longer shuffle them
    • The compiled skills table stays inside the page: long domain names wrap at their hyphens, badges stay in their columns, and the action buttons stack instead of pushing past the edge on narrow viewports

    Also fixed

    • One corrupt updated_at timestamp no longer takes down the whole /memories page
    • install.sh no longer hangs under curl | bash, and shows numbered step-by-step progress
    • Security scans run clean: bandit false positives on deliberate 0.0.0.0 test fixtures and a gitleaks false positive (the "key" in "valkey") are suppressed with targeted annotations

    Self-hosted, open source, runs on Docker Compose. Python 3.12, FastMCP, Valkey.

    Full detail in CHANGELOG.md.

    Downloads