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

roboto-mem

v0.3.0

Published

Team Memory sync for Claude Code — git-backed knowledge base injected into agent sessions

Readme

roboto-mem

Team Memory for Claude Code — your team's Standards and Lessons, synced into every session.

npm license

roboto-mem walkthrough

Watch the walkthrough as MP4

New to all of this? Start with the friendly guide — every command explained from zero, with a video for each step. No git expertise needed.

What it is

roboto-mem gives your team a Team Memory: a git-backed knowledge base synced into every Claude Code session. Entries are Standards (authored rules, always in force) or Lessons (learned gotchas, indexed, read on demand), and the Digest — the scope-filtered view of what applies to this repo — is injected at session start. New Entries arrive only through Promotion, the explicit, reviewed act of adding an Entry: it opens a PR, and nothing enters unreviewed.

See it in action

The digest your agent reads — Standards in full, overrides resolved, Lessons indexed:

digest

A real session: Claude quotes the org Standard and the squad override it learned from Team Memory, then writes code that follows them:

live Claude session

The secret scan stops a promotion, and --force doesn't change its mind:

secret scan

A teammate's merged Team Skill lands in ~/.claude/skills/ on your next sync — adopted once, everywhere:

team skills sync

All thirteen clips, with instructions for every feature: docs/demos.

Prefer video? Captioned MP4s of every feature: scaffold the Commons · bind a project · sync · offline resilience · status · the digest · the hook · promote · the secret scan · lint · live Claude session · two memory repos · skill add · team skills sync

Install

For yourself, inside Claude Code:

/plugin marketplace add https://github.com/robotostudio/roboto-mem.git
/plugin install roboto-mem@roboto-mem

The CLI alone (for CI or non-Claude-Code use) is on npm: npx roboto-mem or npm i -g roboto-mem.

For a team repo, add this to .claude/settings.json so teammates are prompted to install when they trust the folder:

{
  "extraKnownMarketplaces": {
    "roboto-mem": {
      "source": { "source": "github", "repo": "robotostudio/roboto-mem" }
    }
  },
  "enabledPlugins": {
    "roboto-mem@roboto-mem": true
  }
}

Quickstart

  1. Scaffold a Commons: run roboto-mem init --commons in a new repo and push it.
  2. Bind a project: roboto-mem init --commons-url <git-url> --project <id> --squads <ids>.
  3. Session starts now inject the Digest.
  4. /promote your first Lesson.

Commands

| Command | What it does | |---|---| | roboto-mem init --commons | Scaffold a new Commons: entry directories, CODEOWNERS, token-free CI, vendored CLI | | roboto-mem init --commons-url <url> --project <id> --squads <ids> | Bind a repo to the Commons; stacks are detected from package.json | | roboto-mem sync | Clone the Commons on first run, fast-forward after | | roboto-mem digest | Print the scope-filtered Digest (--hook wraps it in the SessionStart envelope) | | roboto-mem promote --scope <s> --type <standard\|lesson> --name <n> … | Validate → dedupe → secret-scan → branch → PR | | roboto-mem lint <dir> | The CI gate: validate every entry, redacted findings, exit 1 on problems | | roboto-mem status | Binding, session scopes, entry counts, sync freshness | | roboto-mem skill add <owner>/<repo> [--skill <n>] | Vendor a store skill into the Commons pinned at a commit — validate → secret-scan → PR | | roboto-mem skill promote <name> | Lift a personal skill from ~/.claude/skills into a Commons PR |

Inside Claude Code, the plugin adds /mem-status, /mem-sync, /mem-upgrade (prompted, never silent), /promote, and /skill-add.

Interactive Mode

Commands that take many flags — init, promote, skill add, skill promote — can be run bare in a terminal to prompt for each input:

$ npx roboto-mem promote
? Scope (org, squad/web, stack/react, etc.)
  org
? Type (standard or lesson)
  lesson
? Name (slug-style: lowercase-with-dashes)
  sanity-typegen-break
? Description (one short line)
  TypeGen flag breaks Sanity client queries
? Author
  you
? Body file path
  ./entry.md

  lesson · org · sanity-typegen-break
? Open a PR to the Commons? (Y/n)
  y
✔ Created PR · https://github.com/your-org/team-memory/pull/42

Flags you provide are never re-asked. Non-TTY runs (CI, hooks, scripts) never prompt — they behave exactly as they did before.

How scoping works

Entries live at a Scope: org, squad/<id>, stack/<id>, or project/<id>. A repo's session scopes come from its binding (project, squads) plus detection (react in package.jsonstack/react, typescriptstack/typescript), and the Digest includes exactly the entries whose scope applies. A squad Standard can explicitly override an org Standard — the Digest then replaces the org entry's body with a pointer to the override, so your agent never reads two contradicting rules.

Team Skills

Team Skills are reusable agent workflows — SKILL.md directories living at skills/<name>/ in the Commons, reviewed like any other Entry. They enter via roboto-mem skill add <owner>/<repo> (vendored from GitHub, pinned at a commit), roboto-mem skill promote <name> (lifted from your personal ~/.claude/skills/), or a direct PR adding a directory under skills/. Every bound project materializes them into ~/.claude/skills/ on sync, so a merged skill reaches teammates on their next session start. A personal skill with the same name always wins — the team version is reported as shadowed, never overwritten. Remove a skill from the Commons and the next sync deletes the materialized copy too.

When the network is down

A dead VPN or a git-host outage doesn't take sessions down. With a cached copy present, sync reports stale (offline?) and the Digest keeps working from the last good state, honestly labelled. Only a missing cache is a real failure.

The trust contract

Nothing enters Team Memory without a reviewed PR. The tool never auto-upgrades and never silently misreads newer formats — it falls back to the last-good Digest and says so.

Development

pnpm install
pnpm test
pnpm build

License

MIT © Roboto Studio