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

@dantelabs/memento

v0.3.2

Published

Bi-directional code-assistant memory sync (Claude Code, Codex, Gemini CLI, Antigravity, Cursor, Windsurf)

Downloads

879

Readme

memento

Bi-directional memory sync for AI coding agents

Keep Claude Code, Codex CLI, Gemini CLI, Antigravity, Cursor, and Windsurf memory files aligned without choosing a single permanent source of truth.

npm CI License: MIT

Quick Setup | Provider Matrix | CLI | Configuration | Safety

Korean


What is memento?

memento is a Node.js CLI that synchronizes long-lived instruction and memory files used by AI coding agents.

Different agents store context in different places:

  • Claude Code: CLAUDE.md, ~/.claude/CLAUDE.md
  • Codex CLI: AGENTS.md, ~/.codex/AGENTS.md
  • Gemini CLI: GEMINI.md, ~/.gemini/GEMINI.md
  • Cursor: .cursor/rules/*.mdc
  • Windsurf: .windsurf/rules/*.md
  • Antigravity: .agent/skills/**, memory-bank/**, selected global memory paths

When you switch tools or use several agents in the same repository, those files can drift. memento reads each provider's native file format, normalizes it into a shared internal document model, resolves conflicts, writes changes back to the original provider files, and creates backups before modifying anything.

The design goal is practical local synchronization:

CLAUDE.md \
AGENTS.md  > memento sync > same project memory everywhere
GEMINI.md /

.cursor/rules/typescript.mdc \
.windsurf/rules/typescript.md  > same rule identity

memento does not run a server, does not upload memory files, and does not replace git. It is a local CLI for keeping agent context consistent on your machine and in your repository.

What's new in 0.3.0

Version 0.3.0 includes the broader assistant context portability added across the 0.2 and 0.3 line:

  • Skills: synchronize provider skill bundles such as Claude Code .claude/skills/* and Codex .agents/skills/*.
  • MCP servers: synchronize project and local MCP server definitions across supported providers.
  • Resource-aware commands: status, sync, diff, and watch accept --resources, --scope, --no-skills, and --no-mcp.
  • Cross-project import: memento import <source> brings memory from another project into the current project.
  • Safer automation: release CI skips already published npm versions, and CLI help/version/install output includes the memento ANSI banner.

Quick Setup

Prerequisites

  • Node.js 18 or newer
  • npm
  • At least one supported agent memory file in the project, or an explicit provider list passed to memento init

1. Install the CLI

npm i -g @dantelabs/memento

Verify the install:

memento --version
memento --help

2. Initialize a project

Run this from the repository root:

memento init

init creates .memento/config.toml and adds these runtime files to .gitignore:

.memento/cache.json
.memento/backup/

If memento cannot auto-detect a provider, force the providers you want:

memento init --providers claude-code,codex,gemini-cli,cursor,windsurf

Valid provider ids are:

claude-code, codex, gemini-cli, antigravity, cursor, windsurf

3. Inspect status

memento status

Typical output shows which providers are active and how memory files are grouped:

memento status

Providers
ok claude-code (active)
ok codex (active)
ok gemini-cli (active)

project
ok synced  agents-md:main  claude-code, codex, gemini-cli

4. Preview or run a sync

Preview first:

memento sync --dry-run

Then write changes:

memento sync

Sync skills and MCP definitions too:

memento sync --resources memory,skills,mcp --scope project

For an interactive conflict prompt:

memento sync --strategy prompt

For CI or scripts that should fail on unresolved conflicts:

memento sync --strategy fail

5. Keep files synchronized while you work

memento watch

watch uses last-write-wins conflict handling and is designed for local development sessions where provider memory files may change as you switch tools.


Core Concepts

Memory tiers

memento treats memory files as one of three tiers:

| Tier | Meaning | Typical location | Git behavior | | --- | --- | --- | --- | | project | Shared repository memory | CLAUDE.md, AGENTS.md, GEMINI.md, .cursor/rules/*.mdc | Usually committed | | project-local | Local project memory for one machine | CLAUDE.local.md, AGENTS.local.md, *.local.mdc | Usually ignored | | global | User-level memory outside a project | ~/.claude/CLAUDE.md, ~/.codex/AGENTS.md | Not committed |

By default, project commands sync project and project-local tiers. Use --include-global to include global files, or use memento global ... to operate only on global memory.

Memory identities

memento does not simply copy every file to every other file. It groups files by semantic identity.

| File | Identity | | --- | --- | | CLAUDE.md | agents-md:main | | AGENTS.md | agents-md:main | | GEMINI.md | agents-md:main | | .cursor/rules/typescript.mdc | rule:typescript | | .windsurf/rules/typescript.md | rule:typescript | | .agent/skills/git-flow/SKILL.md | skill:git-flow | | memory-bank/core/state.md | memory-bank:core/state |

Files with the same tier and identity are compared and synchronized as a group, for example project/agents-md:main.

No permanent source of truth

memento is bi-directional. The winning version for a group is chosen during each sync:

  • if all files are identical, nothing is written
  • if one file changed since the last sync, that change is propagated
  • if multiple files changed differently, the configured conflict strategy decides what happens

This lets you edit memory in whichever agent you are using at the moment.

Resource sync

In addition to markdown memory files, memento can synchronize structured assistant resources.

| Resource | What it represents | Examples | | --- | --- | --- | | memory | Long-lived instruction files and rules | CLAUDE.md, AGENTS.md, GEMINI.md, Cursor/Windsurf rules | | skill | Skill directories with a SKILL.md entry file and related files | .claude/skills/review, .agents/skills/review | | mcp | MCP server definitions in provider config files | .mcp.json, .codex/config.toml, .codeium/mcp_config.json |

Resource commands use scopes:

| Scope | Meaning | | --- | --- | | local | Include the provider's local/default resource locations for the current machine | | project | Use project-level resource files inside the current repository | | cross-cli | Use shared or global resource locations where supported |

Default sync, status, diff, and watch resource selection is memory,skill,mcp. memento import is more conservative and imports memory only unless --resources is provided.


Provider Matrix

| Provider | Provider id | project | project-local | global | | --- | --- | --- | --- | --- | | Claude Code | claude-code | CLAUDE.md, AGENTS.md | CLAUDE.local.md | ~/.claude/CLAUDE.md | | Codex CLI | codex | AGENTS.md | AGENTS.local.md | ~/.codex/AGENTS.md | | Gemini CLI | gemini-cli | GEMINI.md | GEMINI.local.md | ~/.gemini/GEMINI.md | | Antigravity | antigravity | .agent/skills/**, memory-bank/** | memory-bank/**.local.md | ~/.gemini/antigravity/skills/**, ~/.gemini/GEMINI.md, ~/.antigravity/ | | Cursor | cursor | .cursor/rules/*.mdc, legacy .cursorrules | .cursor/rules/*.local.mdc | ~/.cursor/rules/*.mdc | | Windsurf | windsurf | .windsurf/rules/*.md, legacy .windsurfrules | .windsurf/rules/*.local.md | ~/.windsurf/rules/*.md |

Gemini CLI and Antigravity can both reference ~/.gemini/GEMINI.md; memento deduplicates that shared global path.

0.2.0 resource coverage

| Provider | Skills | MCP | | --- | --- | --- | | Claude Code | .claude/skills/*, ~/.claude/skills/* | .mcp.json | | Codex CLI | .agents/skills/*, ~/.agents/skills/*, read-only /etc/codex/skills | .codex/config.toml, ~/.codex/config.toml | | Windsurf | .windsurf/skills/*, .agents/skills/* | .codeium/mcp_config.json | | Cursor | Memory/rules only in this release | Not enabled in this release | | Gemini CLI | Memory only in this release | Not enabled in this release | | Antigravity | Existing memory-bank and skill-like memory paths | Not enabled in this release |

MCP values are copied as provider configuration text. Dry-run and diff output redact secret-like fields by default.


Common Workflows

Start with Claude Code and Codex only

memento init --providers claude-code,codex
memento status
memento sync --strategy prompt

Sync only one provider

memento sync --provider codex

This is useful when you want to write the resolved memory back to one provider after changing another provider's file.

Sync only one tier

memento sync --tier project
memento sync --tier project-local

Include global memory from a project sync

memento sync --include-global

Sync skills and MCP servers

Preview resource writes first:

memento sync --resources memory,skills,mcp --scope project --dry-run

Then run the sync:

memento sync --resources memory,skills,mcp --scope project

To skip one resource type:

memento sync --resources memory,skills --no-mcp
memento status --resources mcp --scope project

Import memory from another project

From the target project root:

memento import ../old-project --dry-run
memento import ../old-project --to codex --strategy replace

Import skills explicitly:

memento import ../old-project --resources memory,skills --scope project

Import MCP definitions only after reviewing the dry-run output:

memento import ../old-project --resources mcp --scope project --dry-run
memento import ../old-project --resources mcp --scope project --strategy prompt

Manage only global memory

memento global init --providers claude-code,codex,gemini-cli
memento global status
memento global sync --strategy prompt
memento global watch

Global commands use ~/.memento/config.toml and operate on global provider paths only.

Use memento in CI

Use --strategy fail to make the command fail when provider memory files disagree:

memento sync --strategy fail --dry-run

Exit code 2 means unresolved conflicts were found.

Restore a previous version

memento restore --list
memento restore --at 2026-04-30T07-37-00_342Z

Restore a single group:

memento restore --at 2026-04-30T07-37-00_342Z --group project/agents-md:main

CLI

Global options

| Option | Description | | --- | --- | | -v, --version | Print the installed memento version | | --debug | Print debug output and stack traces | | --json | Emit JSON lines where supported | | --quiet | Suppress non-error output |

Commands

| Command | Description | | --- | --- | | memento init | Create .memento/config.toml for the current project | | memento status | Show provider detection, tiers, and sync state | | memento sync | Synchronize memory files across active providers | | memento watch | Watch memory files and synchronize changes continuously | | memento diff | Show differences between grouped memory documents | | memento import | Import assistant memory from another project into the current project | | memento restore | List, restore, or prune automatic backups | | memento global | Run init, status, sync, watch, diff, or restore against global memory | | memento update | Update the global memento CLI install | | memento install-skill | Install the bundled Claude Code skill manually | | memento uninstall-skill | Remove the installed Claude Code skill |

Run memento <command> --help for the exact options supported by your installed version.

memento init

memento init [--force] [--providers <list>]

| Option | Description | | --- | --- | | --force | Overwrite an existing .memento/config.toml | | --providers <list> | Comma-separated provider ids to enable |

init probes all supported providers, creates a config, and updates .gitignore for runtime cache and backup files.

memento status

memento status [--tier <tier>] [--resources <list>] [--scope <scope>] [--include-global] [--json]

| Option | Description | | --- | --- | | --tier <tier> | Filter to project, project-local, or global | | --resources <list> | Filter resource kinds: memory, skills, mcp | | --scope <scope> | Resource scope: local, project, or cross-cli | | --no-mcp | Exclude MCP resources | | --no-skills | Exclude skill resources | | --include-global | Include global files in project status | | --json | Emit JSON output |

memento sync

memento sync [--dry-run] [--strategy <strategy>] [--tier <tier>] [--provider <id>] [--resources <list>] [--scope <scope>] [--yes] [--include-global]

| Option | Description | | --- | --- | | --dry-run | Preview the sync without writing files | | --strategy <strategy> | Conflict strategy: lww, prompt, or fail | | --tier <tier> | Filter to one memory tier | | --provider <id> | Filter to one provider id | | --resources <list> | Resource kinds to sync: memory, skills, mcp | | --scope <scope> | Resource scope for skills and MCP | | --no-mcp | Exclude MCP resources | | --no-skills | Exclude skill resources | | --allow-project-secrets | Allow project MCP secret writes when policy permits it | | --yes | Accept non-interactive defaults; currently uses lww | | --include-global | Include global memory in a project sync |

memento watch

memento watch [--debounce <ms>] [--tier <tier>] [--provider <id>] [--resources <list>] [--scope <scope>] [--include-global]

watch monitors provider memory files and runs sync after changes settle.

| Option | Description | | --- | --- | | --debounce <ms> | Debounce interval in milliseconds; default is 500 | | --tier <tier> | Watch only one tier | | --provider <id> | Watch only one provider | | --resources <list> | Resource kinds to watch and sync | | --scope <scope> | Resource scope for skills and MCP | | --no-mcp | Exclude MCP resources | | --no-skills | Exclude skill resources | | --include-global | Include global memory in project watch mode |

memento diff

memento diff [--group <key>] [--all] [--unified] [--tier <tier>] [--provider <id>] [--resources <list>] [--scope <scope>] [--include-global] [--json]

| Option | Description | | --- | --- | | --group <key> | Show one conflict group, such as project/agents-md:main | | --all | Show all diff groups | | --unified | Print unified diff output | | --tier <tier> | Filter to one memory tier | | --provider <id> | Filter to one provider id | | --resources <list> | Resource kinds to diff | | --scope <scope> | Resource scope for skills and MCP | | --no-mcp | Exclude MCP resources | | --no-skills | Exclude skill resources | | --show-secrets | Show raw secret-like values in diff output after explicit use | | --include-global | Include global memory in project diff mode | | --json | Emit JSON output |

memento import

memento import <source> [--dry-run] [--from <providers>] [--to <providers>] [--strategy <strategy>] [--resources <list>]

import reads assistant memory from another project directory and writes it into the current initialized project. By default it imports memory only. Add --resources skills,mcp when you explicitly want skills or MCP server definitions copied too.

| Option | Description | | --- | --- | | --dry-run | Preview the import without writing files | | --from <providers> | Comma-separated source provider ids | | --to <providers> | Comma-separated target provider ids enabled in the current config | | --strategy <strategy> | Existing-target strategy: prompt, skip, replace, or append | | --resources <list> | Resource kinds to import: memory, skills, mcp | | --scope <scope> | Resource scope for skills and MCP: local, project, or cross-cli | | --tier <tier> | Import one memory tier | | --yes | Accept non-interactive defaults; currently replaces existing target content |

memento restore

memento restore [--list] [--at <timestamp>] [--group <key>] [--prune <count>]

| Option | Description | | --- | --- | | --list | List available restore points | | --at <timestamp> | Restore from a timestamp listed by --list | | --group <key> | Restore one memory group | | --prune <count> | Keep the newest N backups and remove older backups |

memento global

memento global init
memento global status
memento global sync
memento global watch
memento global diff
memento global restore

The global subcommands mirror the project commands but use the global memento context at ~/.memento.

memento update

memento update
memento update --dry-run

update runs the npm global install command for the latest published release and shows the same memento ANSI header used by help and version output.

Exit codes

| Code | Meaning | | --- | --- | | 0 | Success | | 1 | Generic error | | 2 | Unresolved conflict, usually from --strategy fail | | 3 | Not initialized; run memento init | | 4 | No active providers |


Configuration

Project configuration lives at:

.memento/config.toml

Global configuration lives at:

~/.memento/config.toml

Example:

[providers.claude-code]
enabled = true
auto = true
include_orphan = false

[providers.codex]
enabled = true
auto = true
include_orphan = false

[providers.gemini-cli]
enabled = true
auto = true
include_orphan = false

[providers.cursor]
enabled = true
auto = true
include_orphan = false

[providers.windsurf]
enabled = true
auto = true
include_orphan = false

[providers.antigravity]
enabled = false
auto = true
include_orphan = false

[resources.memory]
enabled = true

[resources.skill]
enabled = true
include = []
exclude = []

[resources.mcp]
enabled = true
redact_output = true
project_secret_policy = "wizard"

[mapping]
"rule:typescript" = [
  "cursor:.cursor/rules/typescript.mdc",
  "windsurf:.windsurf/rules/typescript.md",
]

[exclude]
paths = [
  "**/private/**",
  "**/generated/**",
]

Provider settings

| Field | Meaning | | --- | --- | | enabled | Whether the provider participates in sync | | auto | Whether automatic detection should be respected | | include_orphan | Include memory files even when the provider app or CLI is not installed |

Resource settings

| Field | Meaning | | --- | --- | | resources.memory.enabled | Enable markdown memory synchronization | | resources.skill.enabled | Enable skill bundle synchronization | | resources.skill.include | Optional include patterns for skill resources | | resources.skill.exclude | Optional exclude patterns for skill resources | | resources.mcp.enabled | Enable MCP server definition synchronization | | resources.mcp.redact_output | Redact secret-like MCP values in command output | | resources.mcp.project_secret_policy | Policy for project-level MCP secrets; default is wizard |

Mapping overrides

Use [mapping] when two files should be treated as the same identity but their default filenames would not match.

[mapping]
"rule:backend-style" = [
  "cursor:.cursor/rules/backend.mdc",
  "windsurf:.windsurf/rules/api-style.md",
]

Excludes

Use excludes for private, generated, large, or high-churn files.

[exclude]
paths = [
  "**/secrets/**",
  "**/scratch/**",
]

Conflict Resolution

memento compares normalized document bodies and the previous sync cache.

| Strategy | Behavior | Best for | | --- | --- | --- | | lww | Last write wins; the newest modified file becomes the winner | automation, watch mode, quick local sync | | prompt | Ask which version should win, show diff, or edit manually | interactive terminal sessions | | fail | Exit with code 2 without writing conflicting groups | CI, pre-commit checks, strict workflows |

Examples:

memento sync --strategy lww
memento sync --strategy prompt
memento sync --strategy fail --dry-run

memento watch always uses lww, because a long-running file watcher cannot safely stop for interactive prompts.


Backup & Restore

Before writing provider memory files, memento saves the previous contents under:

.memento/backup/<timestamp>/

Backups are local runtime artifacts and should not be committed.

Common commands:

memento restore --list
memento restore --at <timestamp>
memento restore --at <timestamp> --group project/agents-md:main
memento restore --prune 10

Use restore when a sync chose the wrong winner, when you want to inspect older memory contents, or when a provider file was manually damaged after a sync.


Claude Code Skill

The npm package includes a Claude Code skill for operating memento from inside Claude Code.

During npm i -g @dantelabs/memento, the package postinstall step attempts to copy the skill into Claude's skills directory when that directory is available. If auto-install is skipped or you want to reinstall manually:

memento install-skill

Remove it with:

memento uninstall-skill

Skip automatic skill installation during npm install:

MEMENTO_SKIP_SKILL_INSTALL=1 npm i -g @dantelabs/memento

Safety Model

memento is intentionally conservative around writes.

  • Local-only: files are read and written on your machine; memento does not upload memory content.
  • Explicit config: project sync requires .memento/config.toml.
  • Dry-run support: use memento sync --dry-run before writing.
  • Resource dry-run support: preview skills and MCP changes with --resources ... --dry-run.
  • Automatic backups: every write has a restore point.
  • Conflict strategies: choose prompt for manual control or fail for CI.
  • MCP secret awareness: secret-like fields are redacted in output by default.
  • Shared global dedupe: shared Gemini/Antigravity global paths are handled once.
  • Watch ignore rules: .memento cache and backup writes do not retrigger sync loops.

Recommended team practice:

  • Commit shared project memory files when they are meant for the whole repository.
  • Keep project-local and .memento/cache.json out of git.
  • Review memento diff --all --unified before the first sync in an existing repository.
  • Use memento sync --strategy fail --dry-run in CI if memory drift should block merges.

Developer & Support

memento is built and maintained by Dante Labs as part of a broader toolkit for practical AI-agent workflows.

| Link | Description | | --- | --- | | GitHub | dandacompany/memento | | npm | @dantelabs/memento | | YouTube | @dante-labs | | Email | [email protected] | | Support | Buy Me a Coffee |

If memento saves you time, helps keep your agent context clean, or becomes part of your daily workflow, sponsorship is appreciated and helps fund continued maintenance, new provider adapters, and real-world compatibility testing.

Issues, bug reports, and provider mapping requests are welcome on GitHub.


License

MIT
Copyright (c) 2026 Dante Labs.


Dante Labs · YouTube @dante-labs · Email [email protected] · Support Buy Me a Coffee