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

@enbox/memoryd

v0.1.1

Published

User-owned AI memory layer with task graph, built on DWN protocols. MCP server.

Readme

memoryd

Research preview — this project is under active development and not yet ready for production use. APIs, protocols, and CLI commands may change without notice.

User-owned AI memory layer built on DWN protocols. Persistent memory for AI agents — facts, preferences, and a dependency-aware task graph — exposed as an MCP server. Your data stays on your DWN. Any AI client can connect.

Why

AI products are memory silos. User context is trapped per app, switching tools resets utility, and no one gives you control over what agents remember. memoryd fixes this:

  • You own your memory — facts, preferences, tasks, and history live on your DWN under your DID. Not on OpenAI's servers, not in a vendor's database.
  • Any AI client can connect — Claude Desktop, Cursor, VS Code Copilot, or any MCP-compatible client gets persistent memory by connecting to one daemon.
  • No cold start — switch AI tools without re-explaining yourself. Consented memory follows you.
  • Task graph with teeth — dependency-aware task tracking inspired by Beads. Agents can plan, decompose, track, and close structured work across sessions.
  • Semantic search — local vector sidecar (sqlite-vec + FTS5) for hybrid retrieval. Agents find relevant memories by meaning, not just keywords.
  • Encrypted by default — DWN records are JWE-encrypted. The local search index is ephemeral and rebuildable.
  • Revocable access — grant scoped capabilities to agents via Web5 Connect. Revoke any time.

Install

# Install via bun/npm
bun add -g @enbox/memoryd

# Or curl installer (coming soon)
curl -fsSL https://memoryd.sh/install | bash

Quick start

# Create an identity (first time)
memoryd auth login

# Initialize memory protocols on your DWN
memoryd init --password <your-password>

# Start the MCP server (default port 3200)
memoryd serve --password <your-password>

# Or use the env var to avoid interactive prompts:
export MEMORYD_PASSWORD=<your-password>
memoryd init
memoryd serve

Connect your MCP client (Claude Desktop, Cursor, etc.):

memoryd mcp install   # auto-detects and configures your client

CLI

# Memory
memoryd fact add "Prefers TypeScript over JavaScript" --category coding
memoryd fact add "Uses Neovim with LazyVim config" --category tools
memoryd fact list --category coding
memoryd fact search "development preferences"

# Tasks (beads-compatible UX)
memoryd task create "Implement auth module" --priority p1 --type feature
memoryd task create "Add JWT validation" --priority p2 --parent <task-id>
memoryd task dep add <child-id> <parent-id>
memoryd task ready                          # Tasks with no open blockers
memoryd task update <id> --claim            # Atomic: set assignee + in_progress
memoryd task show <id>                      # Detail with deps, subtasks, history
memoryd task list --status open

# Maintenance
memoryd compact                              # Memory decay / summarization
memoryd audit                               # Agent action log
memoryd revoke <agent-did>                  # Revoke agent access

MCP Tools

When connected as an MCP server, memoryd exposes these tools to AI agents:

Personal memory

| Tool | Description | |---|---| | memory_add_fact | Store a durable fact about the user | | memory_add_preference | Store a user preference | | memory_search | Hybrid search (vector + full-text + tag filters) | | memory_supersede | Replace a fact, keeping history | | memory_compact | Summarize and archive old memories |

Task graph

| Tool | Description | |---|---| | task_create | Create a task with priority, type, optional parent | | task_update | Update status, priority, assignee; claim for atomic grab | | task_add_dependency | Link tasks (blocks, relates_to, duplicates, supersedes) | | task_ready | List tasks with no open blockers | | task_show | Full task detail with subtasks, deps, status history | | task_list | Filtered task list | | task_add_note | Annotate a task |

MCP Resources

| URI | Description | |---|---| | memory://facts | List facts (filterable) | | memory://facts/{id} | Single fact with supersession chain | | memory://tasks | Task list (filterable) | | memory://tasks/ready | Unblocked tasks | | memory://tasks/{id} | Task detail with full graph |

Architecture

                     MCP Clients
                 (Claude, Cursor, etc.)
                       |
                   MCP Protocol (stdio / HTTP)
                       |
                 +-----------+
                 |  memoryd  |
                 |  daemon   |
                 +-----------+
                       |
          +------------+------------+
          |            |            |
    MCP Server    CLI Handler   HTTP API
          |            |            |
          +------------+------------+
                       |
              +--------+--------+
              |   Core Logic    |
              |  (TypeScript)   |
              +--------+--------+
                       |
          +------------+------------+
          |            |            |
    DWN Client    Vector Sidecar   Embedding
    (@enbox/api)  (bun:sqlite +    Provider
          |        sqlite-vec +    (local/API)
          |        FTS5)                |
          |            |            |
     User's DWN    ~/.memoryd/     Ollama /
     (source of    index.db        OpenAI /
      truth)       (local cache)   etc.

Two-layer data model (v1)

Layer 1 — Personal memory (https://enbox.org/protocols/memory/v1): Facts, preferences, relationships. Durable user knowledge that agents can read/write under scoped consent. Append-only with supersession chains for history.

Layer 2 — Task graph (https://enbox.org/protocols/task-graph/v1): Structured tasks with priority, type, hierarchy, and dependency links. Immutable status change audit trail. Inspired by Beads — same mental model (create, claim, ready, dependency graph), backed by DWN records instead of local SQLite.

Vector sidecar

The DWN is the source of truth (encrypted, portable, synced). The local SQLite sidecar is an ephemeral search index:

  • sqlite-vec for vector similarity search (KNN)
  • FTS5 for full-text search
  • Reciprocal rank fusion merges results from both
  • Configurable embedding provider (noop default, Ollama or OpenAI optional)
  • Rebuildable from DWN records at any time — it's a cache, not a store

Encryption model

DWN records ──> JWE encrypted at rest (user's DID keys)
                     |
              memoryd decrypts locally (has agent keys)
                     |
              Generates embeddings from plaintext
                     |
              Stores in local SQLite sidecar
              (encrypted at rest via OS disk encryption)
              (ephemeral — rebuildable from DWN)

The sidecar never leaves the device. The DWN records are the portable, sovereign data.

Search Setup

memoryd uses hybrid search that combines vector similarity (sqlite-vec) with full-text keyword matching (FTS5) via reciprocal rank fusion. The quality of vector search depends on the configured embedding provider.

Three embedding providers are available, configured via the MEMORYD_EMBEDDING_PROVIDER environment variable:

noop (default)

No external dependencies required. Only keyword (FTS5) search produces meaningful results. Vector/semantic search returns arbitrary results because all embeddings are zero vectors.

This is the default so that memoryd init && memoryd serve works out of the box without any extra setup, but you will want to switch to a real provider for full hybrid search.

ollama — free, local, private

Requires Ollama running locally with an embedding model pulled:

# Install Ollama: https://ollama.com
ollama pull nomic-embed-text
export MEMORYD_EMBEDDING_PROVIDER=ollama
memoryd serve

The default model is nomic-embed-text (768 dimensions). You can override with:

export MEMORYD_EMBEDDING_MODEL=<model-name>
export MEMORYD_EMBEDDING_URL=http://localhost:11434   # default
export MEMORYD_EMBEDDING_DIMENSIONS=768               # default

openai — cloud-based

Requires an OpenAI API key:

export MEMORYD_EMBEDDING_PROVIDER=openai
export OPENAI_API_KEY=sk-...
memoryd serve

The default model is text-embedding-3-small (1536 dimensions). You can override with:

export MEMORYD_EMBEDDING_MODEL=text-embedding-3-large
export MEMORYD_EMBEDDING_DIMENSIONS=3072

Configuration

All runtime settings are configured via environment variables:

| Variable | Default | Description | |---|---|---| | MEMORYD_PASSWORD | — | Vault password (or use --password flag) | | MEMORYD_EMBEDDING_PROVIDER | noop | Embedding provider: noop, ollama, openai | | MEMORYD_EMBEDDING_MODEL | provider default | Embedding model name | | MEMORYD_EMBEDDING_DIMENSIONS | provider default | Embedding vector dimensions | | MEMORYD_EMBEDDING_URL | http://localhost:11434 | Ollama endpoint URL | | OPENAI_API_KEY | — | OpenAI API key (when using openai provider) | | MEMORYD_SIDECAR_PATH | ~/.memoryd/index.db | Path to the sidecar SQLite database | | MEMORYD_DWN_ENDPOINT | https://enbox-dwn.fly.dev | DWN service endpoint for new identities | | MEMORYD_HOST | localhost | HTTP server bind host | | MEMORYD_PORT | 3200 | HTTP server port |

How this compares

| | memoryd | Beads (bd) | Mem0 | ChatGPT Memory | |---|---|---|---|---| | Task graph | Yes | Yes | No | No | | Personal memory | Yes | No | Yes | Yes | | User-owned | Yes (DWN) | Partly (git) | No (SaaS) | No | | Cross-app | Yes (MCP + DWN) | No (per-repo) | Partial (API) | No | | Encrypted | Yes (JWE + sidecar) | No | No | At rest only | | Vector search | sqlite-vec (local) | None | Qdrant (server) | Proprietary | | MCP server | Yes (native) | Community plugins | Community plugin | No | | Consent model | Yes (Web5 Connect) | No | No | No |

DWN Protocols

memoryd installs three protocols on the user's DWN:

  • https://enbox.org/protocols/memory/v1 — facts, preferences, relationships, collections
  • https://enbox.org/protocols/task-graph/v1 — tasks, subtasks, dependencies, status changes
  • https://enbox.org/protocols/memory-audit/v1 — immutable agent action log

Roadmap

  • [x] Design: personal memory + task graph + vector sidecar
  • [x] v0.1: Protocol definitions, core stores, MCP server, CLI
  • [x] v0.2: Vector sidecar with sqlite-vec, hybrid search
  • [x] v0.3: Memory compaction, consent/revocation, audit logging
  • [ ] v1.0: Conversation memory layer (chat-derived memory extraction)

Status

Research preview (v0.0.1). Core functionality is complete — protocols, stores, MCP server (12 tools, 5 resources, 2 prompts), CLI, hybrid search, audit logging, and consent management are all implemented and tested. See issues for remaining work.