Migrate NanoClaw Fork
Extracts your NanoClaw fork's customizations into a replayable migration guide and reapplies them on a clean upstream checkout — no merge conflicts.
Dev & CodingAdvanced★ 30,471⑂ 12,865AI score 7/10Last updated: Aug 9, 2026
What it does
Forking NanoClaw and tweaking config values, source files, personas, or adding skills means every upstream update turns git merge into a conflict slog. This skill replaces merging with intent-based migration.
- Extract phase: spawns parallel haiku sub-agents to survey the fork's diff against the merge base, then writes a markdown migration guide under
.nanoclaw-migrations/capturing both the intent (what you wanted) and the implementation (code snippets, API calls, import paths) at a detail level scaled to how unusual the change is. - Upgrade phase: creates a backup branch and tag, checks out clean upstream in a
git worktree, re-runs each installedadd-*skill's own apply, reapplies your customizations from the guide, runs build/test (plus an optional live test against real data via symlinks), then swaps into the main tree and restarts the service. - Auto-scales effort with tiers: Tier 1 (trivial → suggests
/update-nanoclaw), Tier 2 (standard single guide), Tier 3 (complex, with a written migration plan and inter-skill conflict analysis). - Data directories (
groups/,store/,data/,.env) are never touched.
Who it's for
- Anyone running a customized fork of NanoClaw as their own assistant/bot
- Developers who lose hours to conflict resolution on every upstream bump
- Teams who want fork customizations documented so they're reproducible elsewhere
- Intermediate-to-advanced users comfortable with worktrees, hard resets, and launchd/systemd services
Examples
- Simple config tweak: your fork renames the trigger from
@Andyto@Bobinsrc/config.ts— the guide records a one-line instruction and reapplies it to the new upstream file automatically. - Third-party integration: outbound messages translated to Spanish via
deepl-node— the guide stores the exact import block, thetranslateTextcall site, and thepackage.jsondependency so a fresh Claude session reproduces it without ever seeing the original diff. - Multi-skill fork: with
add-telegram,add-slack, and a custom skill installed, a dedicated sub-agent hunts for duplicate declarations and conflicting env-var handling, documents them under "Skill Interactions", and each skill's apply is re-run inside the worktree during upgrade.
· · · Install guide · · ·
Install in the Claude app (no terminal)
- Download the ZIP with the button below.
- In Claude, open Settings → Capabilities and turn on 'Code execution and file creation'. (one time)
- Go to Customize → Skills → + → 'Upload a skill' and upload the ZIP.
Install in Claude Code
Let Claude do it — paste this into Claude Code
Install the skill I found on Claude Skill Mart. Copy the .claude/skills/migrate-nanoclaw folder from the GitHub repo nanocoai/nanoclaw into my ~/.claude/skills/migrate-nanoclaw/. When it's done, tell me in one line what this skill can do.
Install with a command instead
git clone https://github.com/nanocoai/nanoclaw.git /tmp/nanoclaw && mkdir -p ~/.claude/skills && cp -r /tmp/nanoclaw/.claude/skills/migrate-nanoclaw ~/.claude/skills/⚠ This is a third-party skill. Check the source repository before installing.
- Open a terminal and clone the repository into a temp folder:
git clone https://github.com/nanocoai/nanoclaw.git /tmp/nanoclaw - Make sure your personal skills folder exists:
mkdir -p ~/.claude/skills - Copy the skill directory over:
cp -r /tmp/nanoclaw/.claude/skills/migrate-nanoclaw ~/.claude/skills/Note: this skill is designed to live inside your own NanoClaw fork's
.claude/skills/. If you already have a fork cloned, just run it from there instead. - Change into the fork you want to upgrade and confirm a clean working tree:
cd ~/path/to/your-fork && git status - Create an extra safety branch of your own before starting:
git branch backup/before-migrate - Launch Claude Code and ask something like "migrate my NanoClaw fork to the latest upstream" — the skill starts at Phase 0 by self-refreshing from upstream.
- Read each prompt carefully (stash vs. commit, tier choice, live test) and decide yourself. The final swap uses
git reset --hard, so write down the backup tag name it prints for rollback.
View source on GitHub ↗License: MIT