Use Avibe
avibe-bot/avibe
Safely inspect and modify local Avibe configuration, routing, runtime settings, watches, scheduled tasks, Avibe Cloud remote access, and operational state.
Guides a conversational migration from an OpenClaw install to NanoClaw v2, carrying over identity, channel credentials, scheduled tasks and workspace files.
$ npx skills add nanocoai/nanoclaw --skill migrate-from-openclaw -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install nanocoai/nanoclaw migrate-from-openclaw --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/nanocoai/nanoclaw.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/migrate-from-openclaw .claude/skills/migrate-from-openclaw && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "migrate-from-openclaw" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/migrate-from-openclaw into .claude/skills/migrate-from-openclaw/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-from-openclaw", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/migrate-from-openclawType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add nanocoai/nanoclaw --skill migrate-from-openclaw -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install nanocoai/nanoclaw migrate-from-openclaw --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nanocoai/nanoclaw.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/migrate-from-openclaw .agents/skills/migrate-from-openclaw && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "migrate-from-openclaw" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/migrate-from-openclaw into .agents/skills/migrate-from-openclaw/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-from-openclaw", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add nanocoai/nanoclaw --skill migrate-from-openclaw -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install nanocoai/nanoclaw migrate-from-openclaw --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nanocoai/nanoclaw.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/migrate-from-openclaw .cursor/skills/migrate-from-openclaw && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "migrate-from-openclaw" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/migrate-from-openclaw into .cursor/skills/migrate-from-openclaw/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-from-openclaw", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/nanocoai/nanoclaw.git --path .claude/skills/migrate-from-openclaw--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add nanocoai/nanoclaw --skill migrate-from-openclaw -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install nanocoai/nanoclaw migrate-from-openclaw --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nanocoai/nanoclaw.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/migrate-from-openclaw .gemini/skills/migrate-from-openclaw && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "migrate-from-openclaw" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/migrate-from-openclaw into .gemini/skills/migrate-from-openclaw/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-from-openclaw", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install nanocoai/nanoclaw migrate-from-openclawInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add nanocoai/nanoclaw --skill migrate-from-openclaw -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/nanocoai/nanoclaw.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/migrate-from-openclaw .github/skills/migrate-from-openclaw && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "migrate-from-openclaw" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/migrate-from-openclaw into .github/skills/migrate-from-openclaw/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-from-openclaw", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add nanocoai/nanoclaw --skill migrate-from-openclaw -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install nanocoai/nanoclaw migrate-from-openclaw --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nanocoai/nanoclaw.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/migrate-from-openclaw .opencode/skills/migrate-from-openclaw && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "migrate-from-openclaw" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/migrate-from-openclaw into .opencode/skills/migrate-from-openclaw/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-from-openclaw", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
migrate-from-openclawGuides a conversational migration from an OpenClaw install to NanoClaw v2, carrying over identity, channel credentials, scheduled tasks and workspace files.
The agent detects an existing OpenClaw installation, reads its state and discusses with you what to bring over instead of copying silently. Credentials are masked when shown, and proposed changes are displayed before they are applied. OpenClaw concepts are mapped onto v2's entity model: an OpenClaw agent becomes an agent group with its own workspace, memory and CLAUDE.md, and a chat becomes a messaging group joined to it by a wiring row.
Standing instructions go into a prepend instructions file and durable facts under a memory folder, container-facing API keys go to the OneCLI Agent Vault, and host-side channel bot tokens for Telegram, Discord and Slack stay in .env. The skill drives NanoClaw's existing setup and init scripts and copies in a few files, including a transform module with its test. REMOVE.md reverses every file it copies, MIGRATE_CRONS.md covers scheduled tasks, and bundled scripts discover the OpenClaw install and extract channel credentials.
9 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 66f0823. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 4 files in scripts/ (TypeScript), which the agent can run.
Shell commands in SKILL.md call:
pnpmclaudeFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pnpm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
SLACK_BOT_TOKENSLACK_APP_TOKENANTHROPIC_API_KEYCLAUDE_CODE_OAUTH_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
OpenClaw to NanoClaw Migration loads about 6k tokens when it runs. Until then it costs about 74 tokens; SKILL.md has 2,934 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
in `.env`; the NanoClaw host process reads them to connect to the platform.table: credential, destination (vault / .env), status`.env` as `TZ=<timezone>`. v2 reads `TZ` from `.env` (`src/config.ts`) and uses`CONTAINER_TIMEOUT=<ms>` in `.env`.ided per credential. **Channel tokens → `.env`** (hostPreview, then write to `.env`. The script emits only masked values:credential** — re-run with `--write-env .env` to save it.new one** — ask in plain text, write to `.env` yourself.<STATE_DIR> --channel <name> --write-env .env2. `<STATE_DIR>/.env` — `ANTHROPIC_API_KEY` or `CLAUDE_CODE_OAUTH_TOKEN`.Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from nanocoai/nanoclaw at commit 66f0823, republished under its MIT licence (© nanocoai). 2,934 words, ~5,970 tokens.
.claude/skills/migrate-from-openclaw/SKILL.md (or your agent's skills folder). This skill also uses 6 other files; get the full folder from GitHub.Guide the user through migrating their OpenClaw installation into NanoClaw v2. This is a conversation, not a batch job. Read OpenClaw state, discuss it with the user, decide together what to bring over and where it belongs in v2's entity model, and show proposed changes before applying.
Principle: Never silently copy data. Read it, explain it, place it, then
apply. Credentials are masked when displayed (first 4 + ... + last 4). Make
judgment calls about what's core vs. reference material.
UX: Use AskUserQuestion for multiple-choice only. Use plain text for
free-form input. Don't dump raw data — summarize and explain conversationally.
This skill drives existing NanoClaw entry points (setup/index.ts --step register, scripts/init-first-agent.ts, the onecli CLI) and copies a few
files in (workspace markdown, OpenClaw skills, and its own transform module +
test). It makes no code-level reach-in into core. Its integration assumptions
about v2 are guarded by scripts/transform.test.ts, which is copied into the
project's scripts/ test tree on apply (Phase 8) so vitest runs it against the
composed install. REMOVE.md reverses every file the skill copies.
OpenClaw and NanoClaw v2 differ structurally. Keep these in mind throughout:
data/v2.db) holds users,
user_roles, agent_groups, messaging_groups, and the
messaging_group_agents wiring between them. There is no store/messages.db
and no scheduled_tasks table.groups/<folder>/instructions.prepend.md. Durable facts
live under groups/<folder>/memory/. The provider project document is
composed at spawn and must not be edited..env; the NanoClaw host process reads them to connect to the platform.unknown_sender_policy plus
user_roles (owner/admin) and agent_group_members — not a JSON allowlist
file.messages_in row (kind='task') in a
session's inbound.db, carrying a cron recurrence and a process_after
timestamp. The agent creates them via its schedule_task MCP tool.Create migration-state.md in the project root at the start of Phase 0. Update
it after each phase. It's the single source of truth — if context is lost,
re-read it to recover decisions and progress. Re-read it before starting any
phase.
Sections to maintain:
Keep it factual and terse. Delete it at the end of Phase 8 (or offer to keep it as a record).
Run the discovery script to find and summarize the OpenClaw installation:
pnpm exec tsx ${CLAUDE_SKILL_DIR}/scripts/discover-openclaw.tsIf the user specifies a custom path, pass --state-dir <path>.
Parse the status block. Key fields: STATUS, STATE_DIR, CHANNELS,
WORKSPACE_FILES, DAILY_MEMORY_FILES, SKILL_COUNT, SKILLS, CRON_JOBS,
MCP_SERVERS, IDENTITY_NAME, AGENT_COUNT, AGENT_IDS, GROUPS (each formatted
channel:id(name)=>v2_platform_id — the right-hand value is what to pass as
--platform-id to register).
Sanity-check the output. The script detects known structures but can miss
data if OpenClaw's format changed. Check CONFIG_TOP_KEYS and
CONFIG_CHANNEL_KEYS — if you see keys it didn't report on, read that section
of the config with the Read tool. Check STATE_DIR_CONTENTS for directories it
doesn't scan.
If STATUS=not_found: Tell the user no OpenClaw install was detected at the
standard locations (~/.openclaw, ~/.clawdbot). Ask for a custom path; if
none, exit.
If STATUS=found: Present a human-readable summary (identity name, workspace files, channels and which v2 supports, daily memory count, skills, cron count, MCP servers, agent count). Then paraphrase the key architectural differences from the section above — don't dump it as a table.
AskUserQuestion: "Ready to start migrating? I'll go through each area one at a time."
Decide this before identity/memory — it determines where files go.
OpenClaw model: all groups routed to one agent share a workspace (SOUL/MEMORY/IDENTITY) and personality; only the session is per-group.
v2 model: each agent group is a separate container with its own filesystem,
standing instructions, and memory/ tree. Multiple messaging groups wired to
the same agent group share that state. There is no groups/global/.
AskUserQuestion: "In OpenClaw your groups shared one personality and memory. In v2 each agent group is separate. How do you want to handle this?"
instructions.prepend.md; keep group
facts in each group's memory tree.Remember this choice for Phase 3.
IDENTITY_NAME from discovery is the OpenClaw name. Ask: "Your OpenClaw
assistant was named <IDENTITY_NAME>. Keep it in v2?" If empty, ask them to
choose (default: "Andy"). The chosen name is passed as --assistant-name to
register/init.
The owner identity and the primary agent are created together by
scripts/init-first-agent.ts. It upserts the user, grants the owner role,
creates the agent group + filesystem, wires a DM messaging group, and queues a
welcome DM over the running service's CLI socket — so the service must be
running. If it isn't, tell the user to start it first.
Resolve the owner's channel identity and the DM platform id (use the channel's own terminology). Then:
pnpm exec tsx scripts/init-first-agent.ts \
--channel <channel> \
--user-id <channel>:<handle> \
--platform-id <channel>:<dm-id> \
--display-name "<Owner Name>" \
--agent-name "<confirmed assistant name>" \
[--role owner] # default: ownerFor direct-addressable channels (telegram, whatsapp) the --platform-id is
usually the same handle as --user-id with the channel prefix. --role
defaults to owner (global, cross-channel) — use admin (scoped to the agent
group) or member only if intended.
For each additional OpenClaw group the user wants to bring over, register a messaging group and wire it to an agent group:
pnpm exec tsx setup/index.ts --step register -- \
--platform-id "<v2_platform_id from discovery>" \
--name "<group name>" \
--folder "<channel>_<name-slug>" \
--channel "<channel>" \
--session-mode "<shared|agent-shared|per-thread>" \
[--trigger "@<assistant name>"] \
[--no-trigger-required] \
--assistant-name "<assistant name>"Notes:
register namespaces the --platform-id the same way the adapter will at
runtime, so pass the => value discovery emitted (or the raw OpenClaw id).--folder to put a group on an existing agent (shared base/separate
conversations); use a new --folder for a fully separate agent.--trigger to set an explicit
regex, or --no-trigger-required for respond-to-everything.Folder naming: <channel>_<name-slug> (e.g. telegram_dev-team). Confirm each
name and folder with the user.
Read the config (<STATE_DIR>/openclaw.json or clawdbot.json) for settings
that map to v2 setup.
Check agents.defaults.userTimezone. If it's a valid IANA zone, write it to
.env as TZ=<timezone>. v2 reads TZ from .env (src/config.ts) and uses
it for cron/recurrence evaluation, so this matters for scheduled tasks.
Check agents.defaults.timeoutSeconds. v2's equivalent is CONTAINER_TIMEOUT
(env var, default 30 min) or per-group ncl groups config update. If the
OpenClaw value differs notably, note it; the user can set
CONTAINER_TIMEOUT=<ms> in .env.
OpenClaw per-channel allowFrom / dmPolicy / groupPolicy map onto v2's
model, which is not a JSON file. Each messaging group has an
unknown_sender_policy; access is granted via user_roles (owner/admin) and
agent_group_members. Map:
dmPolicy/groupPolicy: "open" → leave the default; no extra grants.
allowFrom / groupAllowFrom lists → for each allowed sender, upsert the
user and add them as a member of the relevant agent group via ncl:
ncl users create --id "<channel>:<handle>" --kind <channel> --display-name "<name>"
ncl members add --user "<channel>:<handle>" --group "<ag-id>"dmPolicy: "disabled" → don't wire that chat (or leave it registered but
unwired).
The messaging groups register / init-first-agent create default their
unknown_sender_policy to whatever the channel adapter declares for that
context (DM vs group) — strict when the channel has no declaration — so
unknown senders are gated until you add them (or an admin approves the
adapter-declared approval card). Pass --unknown-sender-policy to register
to override. Show the user the OpenClaw allowlist and confirm who to grant
before running the commands.
Fully conversational — read files directly and discuss. Placement depends on the Phase 1 choice:
instructions.prepend.md.instructions.prepend.md.Never edit a composed CLAUDE.md or AGENTS.md; it is regenerated each spawn.
Put standing behavior in instructions.prepend.md and facts in memory/.
Find workspace files at <STATE_DIR>/workspace/. If AGENT_COUNT > 1, also
check <STATE_DIR>/agents/*/workspace/ and ask which agent maps to which v2
agent group.
Read them. Distinguish always-loaded vs reference:
instructions.prepend.md.groups/<folder>/memory/, linked from that
folder's index.md and the root Map.Choose each memory folder based on which related information will be easiest to
find together; a folder may contain different concept types. Before writing the
first concept into a new folder, create the folder and its index.md. Follow
memory/system/definition.md, including its YAML frontmatter rules, for every
new concept.
Show proposed edits before applying — this is a thoughtful merge, not a paste.
Create a focused user-context concept in an appropriate memory folder and link
it through that folder's index and the root Map. Put only facts relevant in
nearly every conversation (for example name or timezone) into ## Core Memory;
keep all other details in the linked file.
Show MEMORY.md; keep relevant items in focused concepts under the chosen
memory folders, with links through each folder index and the root Map. For
daily files (workspace/memory/*.md, count = DAILY_MEMORY_FILES):
AskUserQuestion: "You have N daily memory files. How to handle them?"
index.md,
then copy with cp <workspace>/memory/*.md <group_dir>/memory/<chosen-folder>/
and link the retained files through its index and the root Map.If SKILL_COUNT > 0, the SKILL.md format is shared, so skills are portable.
Present each (name + description from the front matter) and let the user pick.
For each confirmed skill, copy the directory into the container skills tree:
cp -r <skill_source_dir> container/skills/<skill_name>A container rebuild is needed afterward — note it for Phase 8.
If CONFIG_PLUGINS is non-empty, OpenClaw had plugins/skills carrying keys.
For each, read the config section and decide together:
ncl groups config add-mcp-server. Don't guess at packages.Don't install unknown packages or search for replacements — supply-chain risk.
Two destinations, decided per credential. Channel tokens → .env (host
reads them). Container-facing API credentials → the OneCLI vault (injected
per request, never in container env).
Preview, then write to .env. The script emits only masked values:
pnpm exec tsx ${CLAUDE_SKILL_DIR}/scripts/extract-channel-credentials.ts \
--state-dir <STATE_DIR> --channel <name>Parse the status block. DESTINATION: env confirms a host-side token. Show
CREDENTIAL_MASKED (and CREDENTIAL_MASKED_2 for Slack's app token).
AskUserQuestion:
--write-env .env to save it..env yourself.pnpm exec tsx ${CLAUDE_SKILL_DIR}/scripts/extract-channel-credentials.ts \
--state-dir <STATE_DIR> --channel <name> --write-env .envCheck WRITTEN_TO / WRITTEN_COUNT. Slack writes both SLACK_BOT_TOKEN and
SLACK_APP_TOKEN in one run.
If HAS_CREDENTIAL=false but a credential is expected: the config shape may
be unrecognized, or it uses a file/exec SecretRef (CREDENTIAL_SOURCE
ends in _ref with a NOTE) that can't be auto-extracted. Read the channel
section of the config directly and ask the user to confirm or paste the value.
WhatsApp: authenticates via QR/pairing code — there's no token. Don't copy
Baileys auth state (stale encryption sessions break decryption).
Re-authenticate during /setup via /add-whatsapp. The extraction script
reports DESTINATION: none for it.
Find the agent's model credentials in OpenClaw. Check, in order:
<STATE_DIR>/auth-profiles.json (and
<STATE_DIR>/agents/<id>/agent/auth-profiles.json) — a profiles map keyed
provider:identifier. For an anthropic provider profile the value depends
on type: api_key → key, token → token, oauth → access.<STATE_DIR>/.env — ANTHROPIC_API_KEY or CLAUDE_CODE_OAUTH_TOKEN.models.providers — Anthropic provider apiKey.These are container-facing, so they go to the OneCLI vault. Do not write
them to .env or thread them into a container. Register each in the vault:
onecli secrets create --name Anthropic --type anthropic \
--value <key-or-token> --host-pattern api.anthropic.comFor other container-facing keys discovered in plugins (e.g. OpenAI):
onecli secrets create --name OpenAI --type api_key \
--value <key> --host-pattern api.openai.comRun the command on the user's behalf so the value never lands in the chat
transcript; confirm with onecli secrets list.
Caveats: keyRef/tokenRef with source:"exec" or source:"file" can't
be auto-extracted — ask the user to paste it. For an oauth profile with a
past expiry, warn that the token may need refreshing; the user can run
claude setup-token and register the fresh token.
If OneCLI isn't installed yet, defer this: tell the user that during /setup
(or /init-onecli) they'll register the Anthropic credential, and note the
discovered profile in migration-state.md so it isn't lost.
There is no supported
.env-credentials opt-out anymore: the session spec's admission rules refuse credential values in container env on every lane, by design (the retired/use-native-credential-proxyskill would be denied at every spawn). Credentials go through the OneCLI vault; custom Anthropic endpoints useANTHROPIC_BASE_URLplus the placeholder-token pattern from setup, with the gateway rewriting the header on the wire.
Read <STATE_DIR>/cron/jobs.json. If absent or empty, skip.
If jobs exist, read ${CLAUDE_SKILL_DIR}/MIGRATE_CRONS.md for the v2 task
model, the mapCronToRecurrence transform, the full field mapping, and how
tasks are created (the agent's schedule_task MCP tool, since tasks live in a
per-session inbound.db the host owns). Follow it for each enabled job.
Read the relevant config sections directly. Conversational.
If MCP_SERVERS is non-empty, v2 supports per-agent-group MCP servers via the
container config. Read each server's command/args/env/url from
mcp.servers. For each one the user wants:
ncl groups config add-mcp-server --id <agent-group-id> \
--name <server-name> --command <cmd> \
[--args '<json-array>'] [--env '<json-object>']stdio servers must be runnable inside the container (Node/npx-based work;
custom binaries need a Dockerfile addition). Secrets referenced by a server's
env should go to the OneCLI vault (Phase 4), not be inlined. The config
change takes effect on restart: ncl groups restart --id <agent-group-id>
(add --rebuild only if a custom binary was added to the Dockerfile).
OpenClaw cron.webhook / failureDestination / channel webhooks don't map to
a v2 primitive. For a notification webhook, fold it into a scheduled task's
prompt or a pre-agent script that curls the endpoint. Discuss the use case.
init-first-agent (Phase 1) already queued a welcome DM for the primary owner
agent. If the service was up, the owner should have received it. For groups
registered via setup --step register, the wiring also queues a /welcome
onboarding message on first wiring.
Tell the user which agents are live now and which await channel installation (unsupported channels registered for the future).
Copy the transform module and its test into the project so vitest runs them against the composed install, then build and test:
cp ${CLAUDE_SKILL_DIR}/scripts/transform.ts scripts/openclaw-transform.ts
cp ${CLAUDE_SKILL_DIR}/scripts/transform.test.ts scripts/openclaw-transform.test.ts
# Point the copied test at the copied module name:
sed -i.bak "s#from './transform.js'#from './openclaw-transform.js'#" scripts/openclaw-transform.test.ts && rm -f scripts/openclaw-transform.test.ts.bak
pnpm run build
pnpm exec vitest run scripts/openclaw-transform.test.tsThe test guards the skill's two v2 integration assumptions: credential routing
(container-facing → vault, channel tokens → .env) and the cron → v2
recurrence mapping. It imports the real cron-parser (the same parser the host
recurrence sweep uses), so a missing/renamed dependency turns it red. build
typechecks the transform module against the project.
These copied files are the only files the skill installs into the project tree;
REMOVE.md deletes them.
If OpenClaw skills were copied or MCP servers added: ./container/build.sh,
then restart the service.
Print what was migrated:
users / user_roles / agent group + welcome DM.env TZ; container timeout → notedinstructions.prepend.md + linked memory conceptsmemory/container/skills/.env (list channels)Noted for later: channel installs during /setup; container rebuild if needed;
tasks deferred until a session exists.
Not applicable: unsupported channels (registered for the future); OpenClaw-only features (exec approvals, human delay, TTS, model/thinking config).
Remind: "Run /setup next to finish your NanoClaw install. Channel tokens are
in .env; container-facing credentials are in the OneCLI vault. Select the
channels we configured when setup asks."
Then delete migration-state.md (or offer to keep it as a record), and remove
the copied transform files if you don't want them lingering (see REMOVE.md).
file/exec SecretRef — ask the user to
paste the value.init-first-agent can't reach the CLI socket: the service isn't running.
Start it, then re-run.© nanocoai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 6 other files (scripts) in .claude/skills/migrate-from-openclaw of nanocoai/nanoclaw.
Open the folder on GitHubat commit 66f0823
OpenClaw to NanoClaw Migration next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| OpenClaw to NanoClaw Migration this skillnanocoai/nanoclaw | 31k | — | ~6k | Automated safety check: Notes | MIT | |
| Use Avibeavibe-bot/avibe | 622 | — | ~2.5k | Automated safety check: Pass | MIT | |
| Chat SDKdatabuddy-analytics/Databuddy | 1.2k | — | ~2.6k | Automated safety check: Pass | AGPL-3.0 | |
| Traul Message Searchdandaka/traul | 113 | — | ~3.9k | Automated safety check: Notes | AGPL-3.0 | |
| Lettabotletta-ai/lettabot | 327 | — | ~3.4k | Automated safety check: Pass | Apache-2.0 | |
| Message Push0xranx/golembot | 323 | — | ~984 | Automated safety check: Pass | MIT |
avibe-bot/avibe
Safely inspect and modify local Avibe configuration, routing, runtime settings, watches, scheduled tasks, Avibe Cloud remote access, and operational state.
databuddy-analytics/Databuddy
Build multi-platform chat bots with Chat SDK (chat npm package).
dandaka/traul
Drives the traul CLI to sync, search and monitor messages from Slack, Telegram, Discord, Linear, Gmail, WhatsApp, Claude Code sessions and Markdown files.
letta-ai/lettabot
Set up and run LettaBot - a multi-channel AI assistant for Telegram, Slack, Discord, WhatsApp, and Signal.
0xranx/golembot
Send proactive messages to IM groups or individual users via the gateway Send API.
0xranx/golembot
Creates and manages scheduled tasks, cron jobs, recurring reminders, and timers via the Task HTTP API.
nanocoai/nanoclaw
Installs or refreshes Iron Proxy and its Iron Control web console for NanoClaw, with a local Docker setup, database, credentials and a human approval bridge.
nanocoai/nanoclaw
Installs or refreshes OneCLI as the gateway provider for NanoClaw, copying the adapter files, registering the provider and running the setup script.
nanocoai/nanoclaw
Drives a web browser from the shell with the agent-browser CLI: open pages, read an element snapshot, click and fill by reference, grab text and screenshots.
nanocoai/nanoclaw
Wires up an additional phone number onto an already-installed Dial channel, so one NanoClaw install answers SMS and AI voice calls on more than one line.
nanocoai/nanoclaw
Installs the `dial` CLI and a credential in NanoClaw agent containers so chosen agents can send SMS, place AI voice calls and receive verification codes.
nanocoai/nanoclaw
Connects NanoClaw to iMessage through one channel with either a local Mac backend or a hosted backend via photon.codes, copying in the adapter and installing its package.
Categories
Guides a conversational migration from an OpenClaw install to NanoClaw v2, carrying over identity, channel credentials, scheduled tasks and workspace files. The agent detects an existing OpenClaw installation, reads its state and discusses with you what to bring over instead of copying silently. Credentials are masked when shown, and proposed changes are displayed before they are applied.
OpenClaw to NanoClaw Migration fits situations like: moving an existing OpenClaw setup over to NanoClaw v2; bringing across scheduled tasks and channel credentials; deciding which OpenClaw workspace files are core and which are only reference material.
Run `npx skills add nanocoai/nanoclaw --skill migrate-from-openclaw -a claude-code`. Or copy the skill folder (.claude/skills/migrate-from-openclaw in nanocoai/nanoclaw) into .claude/skills/migrate-from-openclaw in your project. Claude Code loads it when a task matches its description.
Run `npx skills add nanocoai/nanoclaw --skill migrate-from-openclaw -a codex`. Or copy the skill folder (.claude/skills/migrate-from-openclaw in nanocoai/nanoclaw) into .agents/skills/migrate-from-openclaw in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add nanocoai/nanoclaw --skill migrate-from-openclaw -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/migrate-from-openclaw, .gemini/skills/migrate-from-openclaw, .github/skills/migrate-from-openclaw and .opencode/skills/migrate-from-openclaw in your project.
Going by SKILL.md and its folder, OpenClaw to NanoClaw Migration needs TypeScript for the scripts in its folder, the command-line tools its instructions call (pnpm and claude) and credentials named SLACK_BOT_TOKEN, SLACK_APP_TOKEN, ANTHROPIC_API_KEY and CLAUDE_CODE_OAUTH_TOKEN. Our summary lists: An existing OpenClaw installation; A NanoClaw v2 install; The onecli CLI.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
OpenClaw to NanoClaw Migration is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 6k tokens (SKILL.md is roughly 24k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with OpenClaw to NanoClaw Migration: Use Avibe (avibe-bot/avibe, 622 stars), Chat SDK (databuddy-analytics/Databuddy, 1.2k stars), Traul Message Search (dandaka/traul, 113 stars) and Lettabot (letta-ai/lettabot, 327 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
nanocoai (a GitHub organization) maintains it in nanocoai/nanoclaw, which has 30,902 GitHub stars. The repository holds 59 skills in this directory. The repository was last updated on October 6, 2026.
Source: nanocoai/nanoclaw on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.