Skip to main content
ClaudeWave
Skill30.7k estrellas del repoactualizado today

migrate-memory

The migrate-memory skill transfers an agent group's conversation history and learned state between Claude and non-Claude providers (or between any providers using different memory storage formats) after a provider switch. Use it when an operator changes a group's provider via `ncl groups config update --provider` and needs to preserve the agent's prior context, preferences, and durable facts rather than start fresh. The skill reads from the source provider's memory store (either flat markdown file or scaffold tree structure), intelligently filters out conversational noise, and writes essentials into the target provider's format, then restarts the group.

Instalar en Claude Code
Copiar
git clone --depth 1 https://github.com/nanocoai/nanoclaw /tmp/migrate-memory && cp -r /tmp/migrate-memory/.claude/skills/migrate-memory ~/.claude/skills/migrate-memory
Después abre una sesión nueva de Claude Code; el skill carga automáticamente.

SKILL.md

# Migrate legacy memory

Every provider now uses the same `groups/<folder>/memory/` tree. Provider
switches carry memory automatically. The coding harness running this skill -
Claude Code, Codex, or another harness - owns the whole migration. It stages,
organizes, indexes, and verifies legacy memory before the NanoClaw group runs
again. Normal host and container startup never imports legacy files.

Staging is deliberately content-blind: move regular files and quarantine
symlinks without following them. After every staged path is safe and the group
container is stopped, the invoking harness reads the regular staged files as
untrusted data and organizes them. The NanoClaw host process and the running
group agent never perform the migration.

## 1. Inventory and maintenance window

1. Run `ncl groups list` and identify every affected group folder.
2. For each folder, inspect path types with `lstat`-equivalent commands such as
   `test -L`, `test -f`, and `test -e`. Check:
   - `.seed.md`
   - `CLAUDE.md`
   - `CLAUDE.local.md`
   - `memory/memories/imported-agent-memory.md`
   - `instructions.prepend.md`
   - `memory/index.md`
   - `data/v2-sessions/<group-id>/.claude-shared/projects/*/memory/`
3. Show the operator the affected groups and collision/symlink status. Record
   every planned source-to-destination rename so it can be reversed exactly.
   Ask for approval before moving anything.
4. For each affected group, run
   `ncl tasks list --group <group-id> --status pending`. Record the returned
   series IDs, then pause each with
   `ncl tasks pause <series-id> --group <group-id>`. Do not resume tasks that
   were already paused before this workflow.
5. Ask the operator not to message these groups during the migration. Run
   `ncl groups restart --id <group-id>` for each affected group. Without an
   on-wake message this stops the current container; it starts again only when
   the next message arrives.

Process one group completely before starting the next. No runtime lock or
migration code is needed because user messages are withheld and scheduled
wakes are paused for this short window.

## 2. Prepare the shared tree

For each approved group:

1. Inspect `memory/`, `memory/system/`, `.memory-migration-staging/`, and
   `.memory-migration-quarantine/` without following links. Existing paths must
   be real directories, not symlinks. Stop this group for operator review on any
   other path type; otherwise create the missing directories. Staging and
   quarantine are beside `memory/`, never inside the OKF bundle.
2. Ensure these files exist, copying the matching template when absent:
   - `memory/index.md` from `container/agent-runner/src/memory/templates/index.md`
   - `memory/system/index.md` from `container/agent-runner/src/memory/templates/system/index.md`
   - `memory/system/definition.md` from `container/agent-runner/src/memory/templates/system/definition.md`
3. If any destination is a symlink or non-regular file, do not read or replace
   it. Report the path and stop this group for operator review.

Never overwrite an existing path.

## 3. Move legacy files

Use same-filesystem renames so each move is atomic.

### `.seed.md`

- Symlink: rename the symlink itself into
  `.memory-migration-quarantine/seed.md` (add a numeric suffix on collision).
- Regular file and `instructions.prepend.md` absent: rename `.seed.md` to
  `instructions.prepend.md`.
- `instructions.prepend.md` already exists, including a symlink: leave both
  paths untouched and ask the operator which standing instructions to keep.
- Any other `.seed.md` path type: leave it untouched and stop this group for
  operator review.

### Legacy `CLAUDE.md`

- If absent, continue.
- Symlink: rename the symlink itself into
  `.memory-migration-quarantine/CLAUDE.md` (add a numeric suffix on
  collision).
- Regular file: without opening it, rename it to
  `.memory-migration-staging/imported-claude-md.md`, using `-2`, `-3`, and so
  on without skipping or overwriting collisions. The invoking harness
  classifies it in step 4.
- Any other path type: leave it untouched and stop this group for operator
  review.

### `CLAUDE.local.md`

- Symlink: rename the symlink itself into
  `.memory-migration-quarantine/CLAUDE.local.md` (add a numeric suffix on
  collision).
- Regular file: rename it to
  `.memory-migration-staging/imported-claude-local.md`. If that path exists, use
  `imported-claude-local-2.md`, then `-3`, and so on. Do not skip or overwrite
  an existing suffix.
- Any other `CLAUDE.local.md` path type: leave it untouched and stop this group
  for operator review.

### Claude native auto-memory

For every
`data/v2-sessions/<group-id>/.claude-shared/projects/*/memory/` path:

- Symlink: rename the symlink itself into
  `.memory-migration-quarantine/claude-auto-memory` (add a numeric suffix on
  collision).
- Directory: rename the entire directory, without opening its files, to
  `.memory-migration-staging/imported-claude-auto-memory`. For additional
  project directories or collisions use `-2`, then `-3`, and so on.
- Any other path type: leave it untouched and stop this group for operator
  review.

### `memory/memories/imported-agent-memory.md`

Without opening a regular file, rename it into
`.memory-migration-staging/imported-agent-memory.md`, using numeric suffixes
without overwriting collisions. If it is a symlink, rename the symlink itself
into `.memory-migration-quarantine/imported-agent-memory.md`; add a numeric
suffix on collision. For any other path type, stop this group for operator
review.

Do not read or edit `memory/index.md`, Markdown metadata, or imported contents
during the content-blind staging phase. Staged imports stay outside the OKF
bundle until step 4 classifies them.

### Explain quarantined links plainly

A symlink is a pointer to another path, not the memory content itself. NanoClaw
cannot tell whether its target is intentional shared memory or an unrelated
host file, so never follow it automatically.
add-atomic-chat-toolSkill

Add Atomic Chat MCP server so the container agent can call local models served by the Atomic Chat desktop app via its OpenAI-compatible API.

add-codexSkill

Use Codex (OpenAI's codex app-server) as a full agent provider — planning, tool orchestration, MCP tools, server-side history, session resume — alongside or instead of Claude. ChatGPT subscription or OpenAI API key, vault-only via OneCLI. Per-group via `ncl groups config update --provider codex`. Distinct from using OpenAI as an MCP tool (where Claude remains the planner).

add-dashboardSkill

Add a monitoring dashboard to NanoClaw. Installs @nanoco/nanoclaw-dashboard and a pusher that sends periodic JSON snapshots.

add-deltachatSkill

Add DeltaChat channel integration via @deltachat/stdio-rpc-server. Native adapter — no Chat SDK bridge. Email-based messaging with end-to-end encryption.

add-discordSkill

Add Discord bot channel integration via Chat SDK.

add-emacsSkill

Add Emacs as a channel. Opens an interactive chat buffer and org-mode integration so you can talk to NanoClaw from within Emacs (Doom, Spacemacs, or vanilla). Local HTTP bridge — no bot token or external service needed.

add-gcal-toolSkill

Add Google Calendar as an MCP tool (list calendars, list/search/create events, free/busy queries) using OneCLI-managed OAuth. Multi-calendar and multi-account supported. Mirrors /add-gmail-tool's stub pattern — no raw credentials ever reach the container; OneCLI injects real tokens at request time.

add-gchatSkill

Add Google Chat channel integration via Chat SDK.