Traul Message Search
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.
Connects the first NanoClaw agent to a chat channel and proves delivery by having it send the operator a welcome direct message.
$ npx skills add nanocoai/nanoclaw --skill init-first-agent -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install nanocoai/nanoclaw init-first-agent --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/init-first-agent .claude/skills/init-first-agent && 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 "init-first-agent" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/init-first-agent into .claude/skills/init-first-agent/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "init-first-agent", 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/init-first-agentType 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 init-first-agent -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install nanocoai/nanoclaw init-first-agent --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/init-first-agent .agents/skills/init-first-agent && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "init-first-agent" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/init-first-agent into .agents/skills/init-first-agent/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "init-first-agent", 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 init-first-agent -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install nanocoai/nanoclaw init-first-agent --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/init-first-agent .cursor/skills/init-first-agent && 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 "init-first-agent" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/init-first-agent into .cursor/skills/init-first-agent/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "init-first-agent", 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/init-first-agent--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 init-first-agent -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install nanocoai/nanoclaw init-first-agent --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/init-first-agent .gemini/skills/init-first-agent && 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 "init-first-agent" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/init-first-agent into .gemini/skills/init-first-agent/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "init-first-agent", 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 init-first-agentInstalls 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 init-first-agent -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/init-first-agent .github/skills/init-first-agent && 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 "init-first-agent" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/init-first-agent into .github/skills/init-first-agent/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "init-first-agent", 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 init-first-agent -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 init-first-agent --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/init-first-agent .opencode/skills/init-first-agent && 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 "init-first-agent" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/init-first-agent into .opencode/skills/init-first-agent/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "init-first-agent", 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.
init-first-agentConnects the first NanoClaw agent to a chat channel and proves delivery by having it send the operator a welcome direct message.
Three prerequisites are checked first: the service is running, at least one channel skill has been installed with credentials in .env, and the adapter shows as connected in the host log. The agent then asks which enabled channel should carry the welcome DM, and asks, in plain text, for the operator's user ID on that channel, a display name and a persona name for the agent.
Next it works out the DM platform ID. Telegram, WhatsApp, iMessage, Matrix and Resend can use the user handle directly, while Discord, Slack, Teams, Webex and Google Chat need an extra resolution step, for example the user messaging the bot once. The agent group is selected or created, and the welcome message goes through the normal delivery path. Every step is idempotent, so rerunning is safe.
6 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.
Shell commands in SKILL.md call:
pnpmnpxFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pnpm and npx, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Wire First NanoClaw Agent loads about 2.5k tokens when it runs. Until then it costs about 72 tokens; SKILL.md has 1,283 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.
nel>` skill has run, credentials are in `.env`, and the adapter is uncommented in `src/channels/index.ts`.nels (uncommented imports). Cross-check `.env` for the relevant credentials.t provider (`DEFAULT_AGENT_PROVIDER` in `.env`, or `claude` when unset). To put it on a different provider, switch afterAutomated 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); files beside SKILL.md are not scanned.
The full file from nanocoai/nanoclaw at commit 66f0823, republished under its MIT licence (© nanocoai). 1,283 words, ~2,466 tokens.
.claude/skills/init-first-agent/SKILL.md (or your agent's skills folder).Wire the first NanoClaw agent to a channel and verify end-to-end delivery by having the agent DM the operator. Everything the skill does is idempotent — rerunning is safe.
launchctl list | grep "$(. setup/lib/install-slug.sh && launchd_label)" (macOS) or systemctl --user status "$(. setup/lib/install-slug.sh && systemd_unit)" (Linux). If stopped, tell the user to run /setup first./add-<channel> skill has run, credentials are in .env, and the adapter is uncommented in src/channels/index.ts.logs/nanoclaw.log — look for a recent channel setup / adapter connected line for the target channel.Read src/channels/index.ts to find enabled channels (uncommented imports). Cross-check .env for the relevant credentials.
AskUserQuestion: "Which channel should host the welcome DM?" with one option per enabled channel (Discord, Slack, Telegram, WhatsApp, Webex, Teams, Google Chat, Matrix, iMessage, Resend, …).
Record the choice as CHANNEL (lowercase, e.g. discord).
Read the channel's own skill for its ## Channel Info > how-to-find-id section (e.g. .claude/skills/add-discord/SKILL.md, .claude/skills/add-telegram/SKILL.md). Show those instructions to the user in plain text.
Then ask in plain text (NOT AskUserQuestion — these are free-form):
USER_HANDLE.dm-with-<normalized>) and as the welcome-message addressee. Record as DISPLAY_NAME.DISPLAY_NAME. Record as AGENT_NAME.This depends on whether the channel supports cold DM via adapter.openDM.
Channels without cold DM (direct-addressable): telegram, whatsapp, imessage, matrix, resend. The user handle doubles as the DM chat id. Set:
PLATFORM_ID=${CHANNEL}:${USER_HANDLE}Skip to step 4.
Channels with cold DM (resolution-required): discord, slack, teams, webex, gchat. The bot can DM cold at runtime via Chat SDK, but this skill runs standalone — it can't call the adapter. Two resolutions:
Tell the user:
Send any single message to the bot as a DM from your account on
${CHANNEL}. The router will record the DM as a messaging group. Replydonehere when you've sent the message.
Wait for the user's confirmation. Then look up the most recent DM messaging groups:
pnpm exec tsx scripts/q.ts data/v2.db "SELECT id, platform_id, name, created_at FROM messaging_groups WHERE channel_type='${CHANNEL}' AND is_group=0 ORDER BY created_at DESC LIMIT 5"Show the top rows to the user and confirm which platform_id is theirs (usually the most recent). Record as PLATFORM_ID. If none appeared, check logs/nanoclaw.log for unknown_sender drops — the adapter might be rejecting inbound due to connection or permission issues.
For Telegram only, there's an existing pair-code primitive. When you run this tool, take the output and extract the pairing code. Then show it to the user in plain text and ask the user to send the code in the Telegram chat to complete the pairing.
npx tsx setup/index.ts --step pair-telegram -- --intent new-agent:dm-with-<folder>Parse the PAIR_TELEGRAM_ISSUED status block for CODE and follow the REMINDER_TO_ASSISTANT line in that block. Then wait for the PAIR_TELEGRAM block — read PLATFORM_ID and PAIRED_USER_ID from it. telegram.ts's interceptor has already upserted the user and granted owner if none existed yet. Use PLATFORM_ID and PAIRED_USER_ID directly in step 5.
List the existing agent groups and their wirings through the admin CLI:
ncl groups list --json
ncl wirings list --jsonIf setup already installed a template, it appears in the groups result even when it has no wiring. Show the user each group's name, folder, and id, and note which groups already appear as agent_group_id values in the wirings result.
AGENT_GROUP_ID; the init script will create one.id as AGENT_GROUP_ID. Do not infer it from the display name or folder.When creating a new agent, first pick the provider. Read src/providers/index.ts and collect the installed providers from its import './<name>.js'; lines — claude is always available as the built-in default. If a non-default provider is installed (e.g. codex), ask the user which one this agent should run on; if only claude is available, skip the question. An existing group keeps the provider and template configuration it already has.
npx tsx scripts/init-first-agent.ts \
--channel "${CHANNEL}" \
--user-id "${CHANNEL}:${USER_HANDLE}" \
--platform-id "${PLATFORM_ID}" \
--display-name "${DISPLAY_NAME}" \
--agent-name "${AGENT_NAME}"When an existing group was selected, append its exact id:
--agent-group-id "${AGENT_GROUP_ID}"When the channel runs a named adapter instance (e.g. a second Telegram bot registered as telegram-mega), append --instance "${INSTANCE}" with the registry key (never the short name) so the DM row, the wiring and the welcome all target that bot; omitted = the channel's default instance.
The new group is created on the instance default provider (DEFAULT_AGENT_PROVIDER in .env, or claude when unset). To put it on a different provider, switch after creation with ncl groups config update --id <group-id> --provider <name>. Add --welcome "System instruction: ..." to override the default welcome prompt.
The script:
users row and grants owner role if no owner exists.agent_groups row, or creates one and calls initGroupFilesystem at groups/dm-with-<name>/.messaging_groups row.messaging_group_agents (which auto-creates the companion agent_destinations row).data/cli.sock), targeting the DM messaging group. The service routes it into the DM session, which wakes the container synchronously. If the socket isn't reachable (service down), falls back to a direct inbound.db write that the next host sweep picks up.Show the script's output to the user.
The welcome DM is queued synchronously; the only wait is container cold-start (~60s on first launch) before the agent processes the message and the reply flows through outbound.db to the channel.
Do not tail the log or poll in a sleep loop. Ask the user in plain text:
The welcome DM should arrive shortly. Let me know when you've received it (or if it doesn't arrive within two minutes).
Wait for the user's reply. If they confirm receipt, the skill is done.
If they say it didn't arrive, then diagnose using the DB directly (no waiting loops required — the message either delivered or it didn't):
pnpm exec tsx scripts/q.ts data/v2-sessions/<agent-group-id>/<session-id>/outbound.db "SELECT id, status, created_at FROM messages_out ORDER BY created_at DESC LIMIT 5" — check for stuck pending rows. Replace <agent-group-id> and <session-id> with the values from the script's output.grep -E 'Unauthorized channel destination|container.*exited|error' logs/nanoclaw.log | tail -20 — look for ACL rejections or container crashes.ls data/v2-sessions/<agent-group-id>/*/outbound.db — confirm the session exists."Missing required args" — the script wants --channel, --user-id, --platform-id, --display-name at minimum. Re-check the command you assembled.
No messaging_groups row appears after the user DMs (step 3a) — auto-created rows are stamped with the channel adapter's declared unknown_sender_policy (two-level model: adapter declaration → per-row override; strict only when the adapter has no declaration). Under strict the router silently drops messages from unknown senders but still creates the messaging_groups row; under request_approval an approval card goes to an admin instead. If the row is missing entirely, the adapter isn't receiving the inbound message. Check logs/nanoclaw.log for adapter errors (auth, gateway disconnect, rate limit).
Owner already exists — hasAnyOwner() returned true, so the grant is skipped silently. That's fine; the script still creates the agent and wiring. Reassigning ownership needs a separate flow (not this skill).
Wrong person got the welcome DM — the --platform-id you passed is someone else's DM channel. Rerun with the correct one; the script is idempotent on user/messaging-group/agent-group but writes a new session welcome each run.
Agent group name collision — use step 4 to select the intended group by id. If creating a new agent and dm-with-<display-name> already exists, the script reuses it; pass a different --display-name to get a distinct folder.
© nanocoai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/init-first-agent of nanocoai/nanoclaw.
Open the folder on GitHubat commit 66f0823
Wire First NanoClaw Agent 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 |
|---|---|---|---|---|---|---|
| Wire First NanoClaw Agent this skillnanocoai/nanoclaw | 31k | — | ~2.5k | Automated safety check: Notes | MIT | |
| Traul Message Searchdandaka/traul | 113 | — | ~3.9k | Automated safety check: Notes | AGPL-3.0 | |
| Chat SDKdatabuddy-analytics/Databuddy | 1.2k | — | ~2.6k | Automated safety check: Pass | AGPL-3.0 | |
| Lettabotletta-ai/lettabot | 326 | — | ~3.4k | Automated safety check: Pass | Apache-2.0 | |
| Message Push0xranx/golembot | 323 | — | ~984 | Automated safety check: Pass | MIT | |
| Ak Dev New Messaging Integrationyaalalabs/agent-kernel | 191 | — | ~4.2k | Automated safety check: Pass | Apache-2.0 |
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.
databuddy-analytics/Databuddy
Build multi-platform chat bots with Chat SDK (chat npm package).
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.
yaalalabs/agent-kernel
Step-by-step guide for adding a new messaging platform integration to Agent Kernel.
yaalalabs/agent-kernel
Add a messaging platform integration to an existing Agent Kernel project.
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
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
Installs or refreshes OneCLI as the gateway provider for NanoClaw, copying the adapter files, registering the provider and running the setup script.
nanocoai/nanoclaw
Guides a conversational migration from an OpenClaw install to NanoClaw v2, carrying over identity, channel credentials, scheduled tasks and workspace files.
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
Adds a persistent wiki knowledge base to a NanoClaw group following Karpathy's LLM Wiki pattern, with folders, a tailored container skill and a CLAUDE.md section.
Categories
Connects the first NanoClaw agent to a chat channel and proves delivery by having it send the operator a welcome direct message. env, and the adapter shows as connected in the host log. The agent then asks which enabled channel should carry the welcome DM, and asks, in plain text, for the operator's user ID on that channel, a display name and a persona name for the agent.
Wire First NanoClaw Agent fits situations like: right after a channel is installed and the NanoClaw service is running; verifying end-to-end delivery from a new channel to the operator; creating the first agent group for a direct-message conversation.
Run `npx skills add nanocoai/nanoclaw --skill init-first-agent -a claude-code`. Or copy the skill folder (.claude/skills/init-first-agent in nanocoai/nanoclaw) into .claude/skills/init-first-agent in your project. Claude Code loads it when a task matches its description.
Run `npx skills add nanocoai/nanoclaw --skill init-first-agent -a codex`. Or copy the skill folder (.claude/skills/init-first-agent in nanocoai/nanoclaw) into .agents/skills/init-first-agent 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 init-first-agent -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/init-first-agent, .gemini/skills/init-first-agent, .github/skills/init-first-agent and .opencode/skills/init-first-agent in your project.
Going by SKILL.md and its folder, Wire First NanoClaw Agent needs the command-line tools its instructions call (pnpm and npx). Our summary lists: A running NanoClaw service; At least one installed channel with credentials in .env; Your user ID on the chosen channel.
SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. 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. Review the folder before installing.
Wire First NanoClaw Agent is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.5k tokens (SKILL.md is roughly 9.9k 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 Wire First NanoClaw Agent: Traul Message Search (dandaka/traul, 113 stars), Chat SDK (databuddy-analytics/Databuddy, 1.2k stars), Lettabot (letta-ai/lettabot, 326 stars) and Message Push (0xranx/golembot, 323 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,883 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.