You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Release Notes
Added
A redesigned hippius-mem dashboard: one screen with vaults and repos on
the left, notes in the middle and the selected note on the right, over a
dark glass theme with the Hippius logo. Above the list it shows live notes
by type, the last 7 days of activity and the most reused notes. Search,
type chips and tag filters compose; /, j/k and g work from the
keyboard. The fonts (Geist, Geist Mono, Unbounded, all SIL OFL 1.1) and the
logo are bundled in the binary and served from /assets/, so the page still
loads nothing from the network.
MemoryStore::recall_all_repos and RecallScope in hippius-mem-core:
rank a query against every repository of a team, for tools that browse a
whole vault. It does not mark hits as recalled, so it never reinforces.
The agent-facing recall stays repo-scoped.
MemoryStore::refresh_now: the cheap change check of refresh_if_stale
without its 20-second window, for a person asking whether anything is new.
The dashboard's sync pill uses it, so "Synced" now means it checked, and a
failed check shows as failed.
Wallet login (POST /api/auth/verify/, used to mint S3 sub-tokens) now
sends substrate_signature: an sr25519 signature over the challenge message
by the mnemonic's Substrate key, under the standard substrate context.
The Hippius API will soon refuse logins from accounts that have never sent
it (#128).
Fixed
Dashboard search with no repo selected now searches every repo of the
vault. It used to search only team-wide notes. With a repo selected, search
now returns only that repo's notes, matching the list.
Opening a note found by a dashboard search no longer counts as a teammate
reusing it. Reuse is an agent signal; a person browsing used to append a Reinforce op.
The dashboard shows a note's links. They come from Link ops, which only
the op-log history folds in, so the note detail always returned an empty
list. Links now load with the audit trail (/notes/{id}/history carries links; the note detail no longer has the field).
recall and get no longer stall for minutes behind a background sync
(#125). Three causes, each fixed:
A Relate or Reinforce in the op-log tail forced a full index rebuild.
A get after a recall writes a Reinforce, so this was most syncs. The
incremental path now applies both.
A full rebuild ran the embedding model over every live note. It now reuses
a vector this process computed when the note's summary is unchanged, and
embeds the rest.
A corpus embed held the model lock from start to finish, so a query embed
waited for all of it. A large embed now runs in batches of 256 and lets
any waiting query or single-note embed go first before each batch, so a
query waits for at most the batch in flight.
A sync pass discarded because this process wrote during it threw its
vectors away, and the retry embedded the same text again (on a cold start,
the whole corpus, up to four times). The retry now reuses them.
A checkpoint's stored vectors are no longer reused by a different embedding
model of the same width (all-MiniLM-L6-v2 and bge-small-en-v1.5 are both
384). The checkpoint now records the model; a restore under another model
discards the vectors and embeds again.
Changed
Checkpoints carry a new optional vector_space field. Older releases ignore
it and keep reading new checkpoints. A checkpoint without it (written by an
older release) has its vectors discarded: the first cold start after
upgrading embeds the whole corpus once (minutes on a few-thousand-note team)
and writes a stamped checkpoint that later cold starts on the same model
reuse. While some machines still run an older release, each checkpoint they
write can cost one more such cold start. A team whose members run different
embedding models shares one checkpoint: a cold start that finds the other
model's checkpoint newest embeds the whole corpus.
Security
Removing the full rebuild that ran on most syncs also removes a side effect:
it used to clear a forged checkpoint record (a wrong summary, tags or
vector written by a current team member) within a sync or two. Such a
forgery now lasts until the note is edited or the index is rebuilt in full.
A full rebuild and hippius-mem snapshot embed again every vector that
came from a checkpoint, and a machine keeps a vector it computed itself
over a checkpoint's. See "A snapshot's ... are not verified" in docs/SECURITY.md.
hippius-mem-lean 0.5.0
Install hippius-mem-lean 0.5.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/thenervelab/hippius-mem/releases/download/v0.5.0/hippius-mem-lean-installer.sh | sh
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Release Notes
Security update (rmcp 2.2.0) and a SessionStart brief that fits its time box
again. No format or protocol change; mixes freely with 0.4.x.
Fixed
The SessionStart brief (hippius-mem brief) syncs directly instead of probing
first: a fresh process can never skip the sync, so the probe only repeated its
op-log LIST. 7.6-11s to about 4s on a 4.6k-note team, which brings it back
under the hook's 8s time box (past it, the hook injects nothing).
Security
rmcp 1.8.0 to 2.2.0, closing GHSA-9pj6-vhgr-3mwh (unauthenticated
session-table leak in the Streamable HTTP server transport that hippius-mem serve uses; exposure here was limited to loopback behind the
bearer token), GHSA-33f5-2c5q-wgwj (OAuth protected-resource metadata
validation) and GHSA-9g45-5xwm-f3wc (custom headers leaking to cross-origin
redirects). No protocol change for clients.
hippius-mem-lean 0.4.2
Install hippius-mem-lean 0.4.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/thenervelab/hippius-mem/releases/download/v0.4.2/hippius-mem-lean-installer.sh | sh
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Release Notes
Cheaper freshness checks: a recall that re-probes the shared log reads each
author's signed head instead of listing every op key. No format change; mixes
freely with 0.4.0.
Changed
The pre-read freshness probe reads the per-author signed heads (a few small
objects) instead of listing every op key, and syncs only when a head moved.
The full op-key count still runs when a head moved or cannot be read, and at
least every 5 minutes as the backstop for a head that failed to publish.
Measured on a 4.6k-note team: a quiet refresh 2.0-3.1s to 0.4-0.7s, and the
first request after warmup no longer lists the op log at all. Tradeoff: a
write whose head reads back unchanged (a failed head publish, a stale read of
the overwritten head, or two machines racing under one identity) now appears
within 5 minutes rather than on the next probe; a normal write still appears
on the next probe. hippius-mem profile shows both probes and reports any op-log author that
publishes no head.
hippius-mem-lean 0.4.1
Install hippius-mem-lean 0.4.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/thenervelab/hippius-mem/releases/download/v0.4.1/hippius-mem-lean-installer.sh | sh
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Release Notes
Faster recall: a new session's first sync drops from ~36s to ~5s and a
refresh re-sync from ~19s to ~3.5s on a 4.6k-note team, by running the cold
sync once, caching the index checkpoint, and writing it ~5x smaller. Upgrade a
team together (see Changed).
Added
hippius-mem profile: times each cold-start phase (store build, refresh probe,
op-log read + verify, checkpoint load, cold sync and re-sync, recall) against the
bound team's real bucket, splitting wall time from S3 time with LIST/GET counts
and bytes. The gateway is wrapped read-only, so it never writes to the bucket.
InstrumentedBlobStore (core): a BlobStore decorator counting calls, S3 time
and bytes per operation, with an optional read-only mode.
sync_phases criterion bench: per-phase CPU cost over a 5,000-note corpus plus
a round-trip census, run nightly beside store_benches.
llms.txt: a short agent index that points at FOR-AGENTS.md and the README.
Changed
Index checkpoints are written about 5x smaller (94 MiB to 19 MiB measured on a
4.6k-note team): sealed records and embedding vectors are stored as base64
instead of JSON number arrays. Checkpoints written by older releases still
load. Upgrade a team together: a release before this one downloads each
new-format checkpoint (up to three are retained) before skipping it as
unreadable, then full-replays and writes a legacy-format checkpoint that this
release must download again. Every result stays correct; a mixed-version team
just moves large checkpoints back and forth until everyone upgrades.
The newest index checkpoint is cached (in memory, and beside the blob cache for
S3 profiles) and reused while the bucket still lists it, instead of being
downloaded on every sync. A new session and every refresh re-sync skip the
download (90 MiB for a 4.6k-note team); measured cold sync 16s to 4.4s,
re-sync ~19s to ~4s.
Fixed
A sync whose op-log listing lagged behind this machine's own just-acknowledged
write no longer drops that note from the local index (or rolls an edit back)
until the next sync. Such a view is detected (this author's head is missing
from it), installed monotonically with the unseen own notes kept, and never
written as a checkpoint.
An author's first sync in every new process no longer discards and re-runs its
whole pass (op-log read, checkpoint download, rebuild): the install stamp is
now taken after the read re-seeds the chain head. Halves cold-start sync time
for anyone who has written a note (36s to 16s measured on a 4.6k-note team).
Live-S3 CI job runs against versitygw (sha256-pinned release binary) instead
of MinIO: MinIO archived the project, and neither quay.io/minio/minio nor
dl.min.io serves it any more, which failed this required check on every PR.
hippius-mem-lean 0.4.0
Install hippius-mem-lean 0.4.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/thenervelab/hippius-mem/releases/download/v0.4.0/hippius-mem-lean-installer.sh | sh
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Release Notes
One shared MCP process per machine: Claude / Grok / Codex talk to hippius-mem serve over loopback HTTP, so N sessions no longer each load
ONNX (#108).
Added
hippius-mem serve: loopback streamable-HTTP MCP daemon so N Grok/Claude/Codex
sessions share one process and one ONNX load (#108). install (embeddings+http-mcp builds) writes a user LaunchAgent / systemd
unit, points those clients at http://127.0.0.1:17432/mcp with a standing
bearer token (Grok: headers; Codex: http_headers — Codex ignores
Grok's key), and keeps Gemini/OpenClaw/Hermes on stdio. Bare hippius-mem
is still the stdio server. install only rewrites those clients to HTTP
after /health succeeds; otherwise it leaves stdio entries and prints a
warning. The HTTP handshake tells agents to pass repo (omitted repo is
team-global — the daemon has no client cwd). One process cannot route per
repo, so serve refuses a config with more than one team profile or a sole
org-routed profile; install also refuses a storage = "local" trial vault
(a never-exiting service would own that vault's exclusive write role). install --uninstall --agent grok leaves the unit running if Claude or Codex
still points at it. Flag parse and port bind happen before the ONNX load.
HTTP sessions idle for up to 24 hours before eviction. Client configs that
embed the bearer token are written 0600.
Fixed
Hermes first-landing: FOR-AGENTS.md Goal 3 and the AGENTS.md / README
opener now say "wire the client" (MCP for most agents, the memory-provider
plugin for Hermes) instead of "register the MCP server".
scripts/install.sh Done block tells Hermes to restart so the plugin loads.
hippius-mem doctor --offline fails when Hermes is present but the plugin,
sidecar, or memory.provider is missing, and names install --agent hermes.
The check is on the doctor CLI only — not the encryption probe that quickstart / upgrade share — so --solo still finishes on a machine
that already has ~/.hermes.
Hermes plugin plugin.yaml now lists system_prompt_block. doctor --offline
treats a copied yaml that omits that hook as unwired (the 0.2.0 install).
Re-run hippius-mem install --agent hermes (or install.sh --update).
Source scripts/install.sh (--from-source / --update) now builds embeddings,dashboard,http-mcp, matching the shipped dist binary. Without http-mcp, install --all-detected would keep Claude/Grok/Codex on stdio.
hippius-mem-lean 0.3.0
Install hippius-mem-lean 0.3.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/thenervelab/hippius-mem/releases/download/v0.3.0/hippius-mem-lean-installer.sh | sh
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Release Notes
Hermes becomes a first-class client (native memory-provider plugin, not MCP),
and install stops silently rewriting every local agent config.
Added
Hermes memory-provider plugin (install --agent hermes): copies a stdlib
Python plugin into $HERMES_HOME/plugins/hippius-mem/, pins the binary and HIPPIUS_MEM_CONFIG in a sidecar, and sets memory.provider: hippius-mem.
Prefetch is recall; the session brief is the new brief MCP tool on one
long-lived hippius-mem subprocess; the model sees remember / recall / get. Conversation turns are not auto-remembered.
brief MCP tool: the same token-bounded digest the SessionStart CLI prints,
so a long-lived server can inject conventions/gotchas without a second
embedder load.
--hermes-home, --hermes-profile, --hermes-all-profiles on install.
CHANGELOG.md.
Changed
Bare hippius-mem install no longer autodetects. A TTY prompts; otherwise
pass --agent <name[,…]> or --all-detected. scripts/install.sh already
passed --all-detected.
hippius-mem init no longer writes ~/.claude.json. MCP registration is install --agent claude.
install --agent hermes no longer registers an MCP server (the 11-tool
schema does not fit Hermes's memory budget). A leftover mcp_servers.hippius-mem
entry from 0.1.0 is stripped.
Mandates and playbook wording: recall takes text; remember takes note_type.
Fixed
Hermes is_available() now finds the sidecar-pinned binary, not only PATH,
so fleet/GUI launches without hippius-mem on PATH still activate.
Installer tests no longer read process HERMES_HOME (would rewrite a real
profile).