Add new capabilities or modify NanoClaw behavior...
This skill helps users add capabilities or modify behavior. Use AskUserQuestion to understand what they want before making changes.
/add-telegram, /add-slack, /add-discord, /add-whatsapp, /add-signal, /add-imessage, and the rest of the /add-<channel> family./manage-channels./manage-mounts./add-opencode, /add-codex, /add-ollama-provider./add-ollama-tool, /add-atomic-chat-tool.CLAUDE.md, or core code).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.
| File | Purpose |
|---|---|
src/index.ts |
Entry point: init DB, migrations, channel adapters, delivery polls, sweep, shutdown |
src/router.ts |
Inbound routing: messaging group β agent group β session β inbound.db β wake |
src/delivery.ts |
Polls outbound.db, delivers via adapter, handles system actions |
src/session-manager.ts |
Resolves sessions; opens inbound.db / outbound.db; heartbeat path |
src/container-runner.ts |
Spawns per-agent-group containers with session DB + outbox mounts, OneCLI ensureAgent |
src/channels/ |
Channel adapter infra (registry, Chat SDK bridge); specific adapters install from the channels branch |
src/config.ts |
Process-level config (assistant name, paths, timeouts) read from .env |
data/v2.db |
Central DB: users, roles, agent_groups, messaging_groups, wirings, container_configs |
data/v2-sessions/<session>/ |
Per-session inbound.db (hostβcontainer) + outbound.db (containerβhost) |
groups/<folder>/CLAUDE.md |
Per-agent-group memory/persona and instructions |
For ad-hoc DB queries, use pnpm exec tsx scripts/q.ts <db> "<sql>".
Questions to ask:
Implementation:
/add-telegram, /add-slack, β¦). It fetches the adapter from the channels branch, wires the registration import, installs the pinned package, and builds./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.Questions to ask:
Implementation:
/add-<service>-tool skill exists, run it β it wires the MCP server and routes credentials through OneCLI so no raw keys reach the container.--command <cmd> [--args <json-array>] [--env <json-object>] for stdio or --url <url> for Streamable HTTP (HTTPS, or plain HTTP for localhost / host.docker.internal): ncl groups config add-mcp-server --id <group-id> --name <name> .... Then run ncl groups restart --id <group-id> to take effect. From inside a container the agent uses the add_mcp_server self-mod tool, which requires one admin approval.Questions to ask:
Implementation:
groups/<folder>/CLAUDE.md β edit that file for the target group.container_configs table: ncl groups config get/update --id <group-id>.Questions to ask:
Implementation:
groups/<folder>/CLAUDE.md.ncl wirings update --id <wiring-id> ....Questions to ask:
Implementation:
.env / config.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)
User: "Add Telegram as an input channel"
/add-telegram to install the adapter, wire its registration, and build./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.