npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

memhub

v0.3.0

Published

Smart, self-maintaining, cross-machine memory for Claude Code — Postgres-backed, no rented LLM brain.

Downloads

961

Readme

memhub

Smart, self-maintaining, cross-machine memory for every AI CLI — Postgres-backed, no rented LLM brain.

mem0 and Honcho are memory stores that pay a separate LLM (OpenAI) to do the thinking. memhub flips that: your AI CLI's LLM is already in the room, so it does the extraction, reasoning, and background reconciliation itself — for free. The backend is just Postgres, and one memory is shared by all your AI CLIs on all your machines.

npm install -g memhub
memhub init

What you get

  • One brain for every CLImemhub init detects and registers with Claude Code, Codex CLI, Gemini CLI, opencode, OpenClaw, and Cursor. All of them read and write the same memory, concurrently and safely (Postgres is the arbiter; the nightly dream takes an advisory lock).
  • Follows you across machines — every machine points at one shared Postgres. Postgres is the sync.
  • Works in every project — registered at user scope, so the memory tools are available everywhere.
  • Automatic or manual captureauto (the CLI saves and reconciles silently as you work) or manual (only when you ask). Manual remember/forget work in both modes.
  • Duplicate-proof by construction — a normalized content hash with a partial unique index makes duplicate saves impossible at the database level; a duplicate remember becomes a confirm (freshness + confidence bump) instead. No agent discipline required.
  • Write-time reconciliation — every remember echoes the most similar existing memories back to the calling agent with instructions to supersede/confirm instead of hoarding near-duplicates.
  • Smart recall — hybrid retrieval (pgvector semantic + english full-text + simple full-text for code identifiers like feeds.json) fused with Reciprocal Rank Fusion, then ranked by relevance × recency decay × salience. Works with just a Postgres URL (full-text only).
  • Session context in one call — the context tool returns the peer-card identity summary plus the most salient and recent facts; weak agents don't need to craft recall queries.
  • Temporal honestyobserved_at records when a fact was true (not when it was saved), expires_at auto-hides transient facts, and supersede chains preserve full history.
  • Self-healing (living memory) — every fact tracks source, source client, confidence, salience, and freshness. Confidence grows on re-confirmation; review surfaces stale memories; contradictions get superseded.
  • Background dreaming — a Honcho-style reasoning pass derives new facts (deductions + inductions), resolves contradictions, reconciles embedding-detected near-duplicates, and maintains a stable peer-card — powered by your own CLI's LLM, no rented model.
  • Yours — plain rows in your own Postgres, no opaque vendor store, no required LLM API key.

Setup

npm install -g memhub
memhub init     # global setup, then restart your AI CLIs

The wizard asks for:

  • Postgres connection string (Supabase / Neon / Railway / self-hosted all work).
  • Namespace — your identity; the same namespace on another machine shares one brain.
  • Capture modeauto (recommended) or manual.
  • Embeddings providernone (full-text only), openai, ollama, or cloudflare.
  • AI CLIs to register — installed CLIs are auto-detected and preselected.

It migrates the schema, registers the MCP server with each chosen CLI, and (in auto mode) installs a small instruction block into each CLI's global instructions file.

Add another machine by running the same init with the same Postgres URL, namespace, and capture mode. When upgrading from v0.2.x, update memhub on all machines — old versions error instead of deduplicating when saving a fact that already exists.

How each CLI is wired

| CLI | Registration | Instructions file | |---|---|---| | Claude Code | claude mcp add --scope user | ~/.claude/CLAUDE.md | | Codex CLI | codex mcp add | ~/.codex/AGENTS.md | | Gemini CLI | ~/.gemini/settings.json (merged) | ~/.gemini/GEMINI.md | | opencode | ~/.config/opencode/opencode.json (merged) | ~/.config/opencode/AGENTS.md | | OpenClaw | ~/.openclaw/openclaw.json (merged) | ~/.openclaw/workspace/AGENTS.md | | Cursor | ~/.cursor/mcp.json (merged) | — |

JSON configs are merged, never clobbered — a malformed existing file aborts that client with a clear message. Deselecting a client on a later init de-registers it and removes its instruction block. Each registration sets MEMHUB_CLIENT so every memory records which CLI wrote it (list can filter by client) — except OpenClaw, whose config format doesn't document an env field, so its writes are attributed via the MCP handshake instead. OpenClaw's native MCP registry requires a recent release; the config entry is written in the documented format either way.

Note: Switching embedding provider or model does not re-embed existing memories — older memories remain searchable via full-text until they are saved again.

Memory tools (used by the CLI's agent)

| Tool | Purpose | |---|---| | context | One-call session bootstrap: peer-card + most salient + most recent facts. | | remember | Store a distilled fact (content, kind, tags, source, confidence, salience, observed_at, expires_at). Dedupes by content hash; echoes similar existing memories for reconciliation. | | recall | Hybrid search ranked by relevance × recency × salience. | | review | List stale memories to reconcile. | | confirm | Mark a fact still true (refreshes freshness, raises confidence). | | supersede | Replace an outdated fact with a corrected one (reuses an existing row if the correction already exists). | | forget | Archive a fact. | | list | Browse / audit memories, optionally by kind, status, or source client. | | history | Show how a fact evolved (its superseded versions). |

All id-taking tools accept full UUIDs or unique 8-character short ids.

In auto mode the agent recalls before remembering, reconciles the similar-memories echo, and calls these tools proactively; you can also just say "remember this" / "forget that".

How ranking works

Candidates come from up to three retrieval lists — pgvector cosine (if embeddings are enabled), english full-text, and simple full-text (unstemmed, so identifiers and stopword-looking tokens match literally). Lists are fused with Reciprocal Rank Fusion, then each candidate's score is multiplied by a bounded recency decay (floor 0.7, half-life ~90 days on last_confirmed_at) and a bounded salience boost (0.75–1.25). Relevance stays dominant: an old, exactly-matching fact still beats a fresh vague one. Expired facts (expires_at in the past) never surface. Recalled memories get access_count/last_accessed_at bumps for future tuning.

Dreaming (background maintenance)

memhub dream                # run a maintenance pass now
memhub schedule             # print the right scheduler for your OS
memhub schedule --install   # install it (nightly at 03:00)

The dream is a Honcho-style reasoning pass over your distilled facts, guarded by a Postgres advisory lock so concurrent CLIs and machines never dream twice. (Advisory locks are session-scoped: point postgresUrl at a direct or session-pooled connection, not a transaction-pooling proxy like PgBouncer transaction mode, or the lock cannot provide mutual exclusion.) It launches a headless agent (claude -p by default, scoped to only the memhub tools) that:

  • Deduces new facts — logical implications of what you've stated.
  • Induces patterns — tendencies spanning ≥ 2 facts, with confidence by evidence count.
  • Resolves contradictions — supersedes outdated or conflicting facts, keeping the version with more information and never merging facts that could both be true.
  • Reconciles near-duplicates — pairs detected by embedding distance are fed in as candidates.
  • Maintains a peer-card — a compact, stable identity summary.

Every memory carries a level (explicit = what you stated, deductive, or inductive); derived facts record their source memory ids, and only explicit facts count toward the auto-trigger so the dream can't feed on its own output.

Automatic behavior: in auto capture mode, when memhub serve starts and a dream is due (≥ 6h since the last one and ≥ 5 new explicit facts), it spawns memhub dream as a detached background process. In manual mode nothing runs on its own.

Custom dream runner: if the machine running the dream doesn't have claude, set dreamCommand in ~/.memhub/config.json (the prompt is appended as the last argument):

{ "dreamCommand": ["codex", "exec", "--full-auto"] }

Requirements

  • Node ≥ 20.
  • A Postgres database. For semantic embeddings, Postgres with the pgvector extension (Supabase / Neon provide it; self-hosted needs CREATE EXTENSION vector, done automatically when you enable a provider).

License

MIT