Meet NanoCo, maintainers of NanoClaw: we raised $12M to give every member of your team a professional assistant →
Skills
Infrastructure Official

Update Skills

Pull the latest code for your installed channel and provider skills by re-applying them from upstream.

What it does

  • Detects which channel and provider skills are wired into your tree
  • Re-applies each selected skill through its own idempotent apply step
  • Refreshes copied-in code without merging any branch or losing customizations
  • Leaves .env credentials, barrel wiring, and DB state untouched
  • Validates with build and tests, and rebuilds the container image when needed
  • Requires a clean working tree before it runs

What you'll need

  • NanoClaw installed and running
  • One or more channel or provider skills already installed
  • A clean git working tree
  • An origin remote pointing at the NanoClaw upstream

Install

/update-skills

How it works

Each NanoClaw skill is a self-installing additive unit. Channel and provider skills copy their code into your tree from a long-lived upstream branch — channels or providers — using git fetch origin <branch> followed by git show origin/<branch>:path > path. Because every apply is idempotent, updating a skill just means re-running its own apply: it re-fetches the latest files and overwrites the copied-in code, so newer versions land additively.

The /update-skills skill orchestrates that across everything you have installed. It never merges a branch and never touches your local customizations, credentials, or database state — it only refreshes each skill’s own code files.

Setup

The skill runs in a few phases:

  1. Preflight — runs git status --porcelain and stops if the working tree is dirty, telling you to commit or stash first. It then checks git remote -v and confirms origin points at a NanoClaw upstream (the default is https://github.com/nanocoai/nanoclaw.git), and fetches the skill branches with git fetch origin channels providers --prune.
  2. Detection — reads src/channels/index.ts and src/providers/index.ts, collecting each import './<name>.js'; line (excluding cli). Each imported name maps to its /add-<name> skill. Operational and utility skills under .claude/skills/ copy no code into the tree, so they’re listed for reference only.
  3. Selection — presents the installed channel and provider skills and lets you multi-select which to re-apply, or skip.
  4. Re-apply — processes one skill at a time, invoking each skill’s own /add-<name> apply. That apply runs its own pre-flight, fetches the latest files from upstream, overwrites the copied-in code, and installs any pinned dependency. If a skill’s apply reports a problem, it’s recorded and the run continues with the rest.
  5. Validation — runs pnpm run build and pnpm test. If the re-apply changed any files under container/, it rebuilds the agent image with ./container/build.sh so new sessions pick up the new code.

At the end you get a summary of the skills re-applied, anything skipped or that reported a problem, and the new HEAD from git rev-parse --short HEAD.

Tips

  • Only code-carrying skills — channels and providers — can be refreshed this way. If none are installed, the skill tells you there’s nothing to update and stops.
  • The container rebuild is what makes a provider’s runtime fix live, not the file copy. Skill code that lives in the container keeps running the old image until ./container/build.sh finishes.
  • Each channel and provider ships its own registration test, which runs as part of pnpm test and asserts the barrel still registers the adapter against the freshly fetched code.
  • If build fails, the skill only fixes issues clearly caused by the refreshed code — missing imports or type mismatches — and won’t refactor unrelated code.
  • If the service is running, restart it afterward so it picks up the refreshed code.