customize — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited customize (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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-gmail-tool, /add-gcal-tool, /add-ollama-tool, etc.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 (e.g. /add-gmail-tool, /add-gcal-tool), run it — it wires the MCP server and routes credentials through OneCLI so no raw keys reach the container.ncl groups config add-mcp-server --id <group-id> --name <name> --command <cmd> [--args <json-array>] [--env <json-object>], then 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.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.