customize skill
Add new capabilities or modify NanoClaw behavior. Use when user wants to add channels (Telegram, Slack, email input), change triggers, add integrations, modify the router, or make any other customizations. This is an interactive skill that asks questions to understand what the user wants.
Is the customize skill safe?
Clean: nothing in its files matched our rules. We read 1 file in the folder on 2026-09-28.
- medium
SKILL.md:112Edits shell startup files, cron or launch agents, so something runs again after the skill is done.
launchctl unload ~/Library/LaunchAgents/$(launchd_label).plist
Install the customize skill
A skill is a folder. Copy it into your agent's skills folder and the agent loads it when the task matches its description.
git clone --depth 1 https://github.com/nanocoai/nanoclaw.git /tmp/nanoclaw mkdir -p ~/.claude/skills cp -r /tmp/nanoclaw/.claude/skills/customize ~/.claude/skills/customize
In the Claude apps, zip the folder and upload it from the Skills settings. The folder on GitHub
The instructions your agent would load
SKILL.md as published, without the frontmatter. Read it on GitHub
NanoClaw Customization
This skill helps users add capabilities or modify behavior. Use AskUserQuestion to understand what they want before making changes.
Workflow
- Understand the request — Ask clarifying questions.
- Prefer a dedicated skill — If a skill covers the request, invoke it instead of editing core by hand:
- Channels: /add-telegram, /add-slack, /add-discord, /add-whatsapp, /add-signal, /add-imessage, and the rest of the /add- family.
- Wiring channels to agents and isolation levels: /manage-channels.
- Container directory access: /manage-mounts.
- Agent providers (non-default): /add-opencode, /add-codex, /add-ollama-provider.
- MCP tools: /add-ollama-tool, /add-atomic-chat-tool.
- Plan the changes — Identify the v2 surface the change belongs to (entity model in the central DB, per-agent-group container config, per-group CLAUDE.md, or core code).
- Implement — Make the change on the right surface.
- Test guidance — Tell the user how to verify.
Entity Model
Customizations route through the v2 entity model: users → messaging groups → agent groups → sessions. A messaging group is one chat/channel on one platform; an agent group holds the workspace, personality, and container config; a wiring links a messaging group to an agent group with a session mode and trigger rules. Inspect and edit all of this with the ncl admin CLI. See docs/isolation-model.md for the three isolation levels.
Key Files
For ad-hoc DB queries, use pnpm exec tsx scripts/q.ts "".
Common Customization Patterns
Adding a New Input Channel (e.g., Telegram, Slack, Email)
Questions to ask:
- Which channel? (Telegram, Slack, Discord, WhatsApp, Signal, email, etc.)
- Should this channel reach an existing agent group or a new one?
- What isolation level — share an agent group with other channels, or keep it separate?
- Same trigger rules as other channels on that agent group, or different?
Implementation:
- Run the matching install skill (/add-telegram, /add-slack, …). It fetches the adapter from the channels branch, wires the registration import, installs the pinned package, and builds.
- Run /manage-channels (or use ncl messaging-groups + ncl wirings) to create the messaging group, choose the isolation level, and wire it to an agent group with a session mode and trigger rules.
Adding a New MCP Integration
Questions to ask:
- What service? (Calendar, Notion, database, etc.)
- What operations are needed? (read, write, both)
- Which agent group should have access?
Implementation:
- If a dedicated /add--tool skill exists, run it — it wires the MCP server and routes credentials through OneCLI so no raw keys reach the container.
- Otherwise wire the MCP server into the agent group's container config with either --command [--args ] [--env ] for stdio or --url for Streamable HTTP (HTTPS, or plain HTTP for localhost / host.docker.internal): ncl groups config add-mcp-server --id --name .... Then run ncl groups restart --id to take effect. From inside a container the agent uses the addmcpserver self-mod tool, which requires one admin approval.
Changing Assistant Behavior
Questions to ask:
- What aspect? (persona, response style, instructions)
- Apply to one agent group or several?
Implementation:
- Persona, instructions, and personality live per agent group in groups//CLAUDE.md — edit that file for the target group.
- Container runtime behavior (provider, model, packages, MCP servers) lives in the container_configs table: ncl groups config get/update --id .
Adding New Commands
Questions to ask:
- What should the command do?
- Which agent group(s)?
- Does it need new MCP tools?
Implementation:
- The agent interprets requests naturally — add instructions to the agent group's groups//CLAUDE.md.
- For routing or trigger changes (which messages wake which agent group), update the wiring's trigger rules: ncl wirings update --id ....
Changing Deployment
Questions to ask:
- Target platform? (Linux server, different Mac)
- Service manager? (launchd, systemd)
Implementation:
- Create the appropriate service files.
- Update paths in .env / config.
- Provide setup instructions.
After Changes
Always tell the user.
Run from your NanoClaw project root:
# Rebuild and restart
pnpm run build
source setup/lib/install-slug.sh
# macOS:
launchctl unload ~/Library/LaunchAgents/$(launchd_label).plist
launchctl load ~/Library/LaunchAgents/$(launchd_label).plist
# Linux:
# systemctl --user restart $(systemd_unit)Example Interaction
User: "Add Telegram as an input channel"
- Run /add-telegram to install the adapter, wire its registration, and build.
- Ask: "Should Telegram reach an existing agent group, or a new one?"
- Ask: "Share an agent group with your other channels, or keep Telegram separate?"
- Run /manage-channels (or ncl messaging-groups create + ncl wirings create) to create the messaging group and wire it to the chosen agent group with a session mode and trigger rules.
- Tell the user how to authenticate and test.
More skills from nanocoai/nanoclaw
- Aadd-anydocAdd local office-document-to-Markdown conversion to NanoClaw agent containers with the pinned Firecrawl AnyDoc CLI. Use when agents need to read attached Word, PowerPoint, Excel, OpenDocument, RTF, EPUB, CSV, or text-based PDF files without uploading them to a hosted parser.
- Aadd-atomic-chat-toolAdd Atomic Chat MCP server so the container agent can call local models served by the Atomic Chat desktop app via its OpenAI-compatible API.
- Fadd-clidashAdd clidash — a zero-dependency, read-only web dashboard that derives its tabs and tables at runtime from any CLI that lists resources as JSON. Ships pre-wired for NanoClaw's ncl CLI (agent groups, sessions, channels, users, roles), plus message-activity charts, a log tail, and a read-only file viewer for group skills/CLAUDE.md/profiles.
- Aadd-codexUse 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 the selected gateway. Per-group via `ncl groups config update --provider codex`. Distinct from using OpenAI as an MCP tool (where Claude remains the planner).
- Aadd-dashboardAdd a monitoring dashboard to NanoClaw. Installs @nanoco/nanoclaw-dashboard and a pusher that sends periodic JSON snapshots.
- Aadd-deltachatAdd DeltaChat channel integration via @deltachat/stdio-rpc-server. Native adapter — no Chat SDK bridge. Email-based messaging with end-to-end encryption.
- Cadd-dialAdd Dial channel integration — a real phone number for SMS and AI voice calls via the Dial platform (getdial.ai). Native adapter — no Chat SDK bridge.
- Aadd-dial-numberAdd another phone number to an existing Dial channel — a second (or third) public line for the agent, so one NanoClaw install answers SMS and AI voice calls on multiple numbers. Use when Dial is already installed and the operator wants an additional number (e.g. a personal line plus a support line). Requires the Dial channel to already be installed (see /add-dial).
- Aadd-dial-toolGive chosen NanoClaw agents a real phone number as a container tool — the `dial` CLI baked into the agent image plus OneCLI credential injection for api.getdial.ai, scoped per agent, so the agents you pick can send SMS, place AI voice calls, and receive verification codes from inside the sandbox. Independent of the Dial channel; idempotent; re-run to change which agents may use it. Use when the user wants agents to text, call, or run `dial …` from a chat, without wiring Dial as a messaging channel.
- Aadd-discordAdd Discord bot channel integration via Chat SDK.
- Aadd-emacsAdd 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.
- Aadd-gchatAdd Google Chat channel integration via Chat SDK.