add-dial
Skill31k starsChanged 9 days agoMITView on GitHub
Add 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.
- Pipes a download into a shell
- Reads credentials
We split this skill into the rules it gives an agent
11 rules. About 0 are common, 4 are distinctive, and 7 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 61
Add the pair-dial loader to the STEPS map in setup/index.ts, inside the dormant marker region (skipped if already present — pair-dial ships …
- Distinctive: line 153
Check whether you're already signed in:
- Distinctive: line 161
If you're not signed in, go straight to email verification — default the choice so the branch guard below stays single-valued:
- Distinctive: line 170
If you are signed in, read which account (for the prompt below) and ask whether to reuse it or sign in as a different one (matches the old …
- Very specific: line 215
Verify it and provision your number (this also installs the NanoClaw agent skill):
- Distinctive: line 348
Run the pairing handshake.
- Very specific: line 381
If yes, apply the /add-dial-tool skill now, as its own document describes.
- Very specific: line 427
If you're in the middle of /setup, return to the setup flow now.
- Very specific: line 431
If you installed the Dial tool before any agent existed, it reaches no agent until you give it one: once your agent exists, run …
- Very specific: line 448
The email code never arrives: Check spam, confirm the address is one you can read, and re-run — dial auth login <email> --force re-sends.
- Very specific: line 456
Everything green but no replies: Run pnpm exec vitest run src/channels/dial-registration.test.ts — red means the barrel import drifted, so …
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Add Dial Channel
Adds Dial — a real phone number for SMS and AI voice
calls. Native adapter (no Chat SDK bridge): both directions go through the
dial CLI — outbound via dial message, inbound via its command-target daemon. NanoClaw doesn't ship
channels in trunk — this skill copies the Dial adapter, its pairing helper, and
their tests in from the channels branch. The pair-dial setup step is
maintained in trunk, so it is not copied here.
The mechanical steps under Apply carry nc: directive fences: an agent
reads the prose and applies them, and a parser can apply them deterministically
from the same document. Every directive is idempotent, so the whole skill is
safe to re-run; anything a parser can't apply falls back to the prose beside it.
Apply
1. Copy the adapter, pairing helper, and tests
Fetch the channels branch and copy the Dial adapter, its pairing store and
user-agent helper (each with its test), and the registration test into place
(overwrite — the branch is canonical):
src/channels/dial.ts
src/channels/dial-pairing.ts
src/channels/dial-pairing.test.ts
src/channels/dial-user-agent.ts
src/channels/dial-user-agent.test.ts
src/channels/dial-registration.test.ts
src/channels/dial-grant.test.ts
src/channels/dial-status.test.tsThe dial-cli container skill is deliberately not copied here.
container/skills/ is mounted read-only into every agent container
(src/container-runner.ts), and a group with skills:'all' picks up whatever
it finds there — so shipping the skill with the adapter would hand it to agents
on installs that never configured Dial. It is installed only by
/add-dial-tool, offered under Add phone superpowers below, which is the
skill that actually provisions the CLI the skill documents.
dial.ts imports dial-user-agent.js at module scope, so omitting that helper
breaks the build and every test that loads the channel barrel.
2. Register the adapter
Append the self-registration import to the channel barrel (skipped if present). This one line is the skill's only reach-in into the channel core:
import './dial.js';3. Register the pairing setup step
Add the pair-dial loader to the STEPS map in setup/index.ts, inside the
dormant marker region (skipped if already present — pair-dial ships in core, so
this idempotent-skips on a normal install, but is expressed for a clean-upstream
rebuild). The pairing handshake below spawns this step:
'pair-dial': () => import('./pair-dial.js'),4. Install the packages
Pinned to exact versions — the supply-chain policy rejects ranges and latest.
qrcode renders the scannable pairing card:
qrcode@1.5.4The adapter needs no Dial client library: it shells out to the dial CLI, which
this skill already requires for inbound. @getdial/sdk was dropped because it
depends on pubnub, which pulls react-native, Metro and Hermes into the
lockfile for what is a single send — and the CLI ships in lockstep with the Dial
API, so a contract change arrives as a CLI release rather than breaking a
request pinned in the adapter.
5. Build
Build first: it guards the adapter's typed core calls and proves the dependency is installed.
pnpm run build6. Validate
Then run the one integration test.
pnpm exec vitest run src/channels/dial-registration.test.tsdial-registration.test.ts imports the real channel barrel and asserts the
registry contains dial — it goes red if the import line drifts. End-to-end
SMS/voice is verified manually once the service runs.
Sign in to Dial
Install the CLI
Dial's CLI owns the account credential (an auth file it writes on sign-in), so
the setup uses the dial CLI here. Ensure it's installed — this installs it if
it's missing (for the full onboarding/auth reference, see the dial-cli skill or
curl -fsSL https://getdial.ai/skills.md):
command -v dial || curl -fsSL https://getdial.ai/install | bashIdentify this install
Calls this setup makes to Dial identify the install. The dial CLI prepends
DIAL_USER_AGENT to its own token, so the account's requests stay attributable
to this NanoClaw install in Dial's server-side logs. Resolve the token once
(nanoclaw/<version>; an unreadable package.json degrades to
nanoclaw/unknown rather than blocking the install) and prefix every dial
command below with it:
node -p "'nanoclaw/'+(require('./package.json').version||'unknown')" 2>/dev/null || echo nanoclaw/unknownPin the CLI path
Now pin the CLI's absolute path into .env. The adapter shells out to dial
to register its inbound command target, and it runs inside the NanoClaw service,
which does not inherit your interactive shell's PATH. The CLI usually lands in
a version-manager bin directory (~/.nvm/versions/node/*/bin, ~/node/bin, …)
that the service cannot see, so a bare dial fails with ENOENT, the command
target is never registered, and the channel comes up connected but deaf — no
inbound SMS or calls, with only a line in logs/nanoclaw.error.log to show for
it. DIAL_CLI_PATH removes the guesswork; dial.ts already prefers it:
command -v dialDIAL_CLI_PATH={{dial_cli_path}}Check the sign-in
Check whether you're already signed in:
DIAL_USER_AGENT={{dial_ua}} dial doctor --jsonSkip the reuse question when signed out
If you're not signed in, go straight to email verification — default the choice so the branch guard below stays single-valued:
echo switchRead the account
If you are signed in, read which account (for the prompt below) and ask whether to reuse it or sign in as a different one (matches the old wizard's "Reuse this account?" prompt, with an explicit way to switch):
DIAL_USER_AGENT={{dial_ua}} dial doctor --jsonYou're already signed in to Dial as {{connected_email}}.Reuse this Dial account, or sign in as a different one? (reuse/switch)Reuse the account
Reuse — no verification needed; with no --code the command just (re)installs
the NanoClaw agent skill:
DIAL_USER_AGENT={{dial_ua}} dial auth verify-otp --agent nanoclawSend the code
Switch (or not signed in) — verify an email with a one-time code. Collect the email:
What's your email? Dial sends a one-time code to verify it. By continuing you create a Dial account and agree to Dial's Terms of Service (https://getdial.ai/terms) and Privacy Policy (https://getdial.ai/privacy).Send the code (--force re-sends even if a prior code is pending):
DIAL_USER_AGENT={{dial_ua}} dial auth login {{owner_email}} --forceVerify the code
Collect the code (resolves inline, right after the send above):
Enter the 6-digit code from your emailVerify it and provision your number (this also installs the NanoClaw agent skill):
DIAL_USER_AGENT={{dial_ua}} dial auth verify-otp --code {{otp}} --agent nanoclawConfirm the line
Confirm the account's number — this becomes the agent's public line (its
platform_id):
DIAL_USER_AGENT={{dial_ua}} dial number list --json | jq -er '.numbers[0].number'Your agent's Dial line is {{platform_id}}.Set the inbound greeting
Set the line's inbound behavior — the system prompt the AI uses on calls into this number. Verification no longer takes an instruction, so a fresh number starts on Dial's default greeting until this runs:
DIAL_USER_AGENT={{dial_ua}} dial number set {{platform_id}} --inbound-instruction "You are a friendly AI receptionist answering calls to this number. Greet the caller, ask how you can help, and take a clear message — their name, number, and reason for calling — if you cannot help directly."Pin the default sender
Make that line the CLI's default sender. Verification saves whichever number
the account considers primary — the oldest one — while the line picked above
is the newest (numbers[0]). On a single-number account those coincide, so
nothing looks wrong; with two or more they diverge permanently, and every
dial call / dial message that omits --from-number goes out from a number
this install isn't listening on. Replies to it are dropped as no_agent_wired.
Rewriting phoneNumber/phoneNumberId in the auth file makes the no-flag path
land on the wired line, so an agent that forgets the selector is still correct:
f="${XDG_DATA_HOME:-$HOME/.local/share}/dial/auth.v1.json"; i=$(DIAL_USER_AGENT={{dial_ua}} dial number list --json | jq -er --arg n '{{platform_id}}' '.numbers[]|select(.number==$n)|.id') && jq --arg n '{{platform_id}}' --arg i "$i" '.phoneNumber=$n|.phoneNumberId=$i' "$f" > "$f.new" && mv -f "$f.new" "$f" && chmod 600 "$f" && echo "default sender pinned to {{platform_id}}"Choose who may text the line
A phone number is guessable, and whoever reaches the agent gets a turn with it —
including its dial CLI, which is authenticated for the whole Dial account. An
admitted stranger can ask the agent to list every SMS and call on the account,
read call transcripts, or buy another number. Session isolation doesn't prevent
this: the credential is the exposure, not the conversation.
So decide who gets in. owner is the safe default; pick public only if you
want a line strangers can start conversations on (an inbound receptionist, or
outbound sales where prospects text back):
Who may text this line — `owner` (only the phone you pair next; everyone else is refused) or `public` (anyone who knows the number reaches the agent)?Your answer is written to the line's own unknown_sender_policy when the line is
registered below, after the restart (ncl is socket-only, so it needs the
service up). It lives in the database from then on — per line, so a second number
added later carries its own answer — and the adapter never rewrites it.
Locked to you: only the phone you pair in a moment can reach the agent on {{platform_id}}. Anyone else who texts it is refused — including people your agent calls, so they can't reply by text. To open it later: `ncl messaging-groups update --id <id> --unknown-sender-policy public` (find the id with `ncl messaging-groups list`).Open line: anyone who knows {{platform_id}} can text the agent and will get a reply. Each person gets their own conversation, but they all reach an agent holding your Dial account credentials — so don't hand out this number casually. To lock it to just you later: `ncl messaging-groups update --id <id> --unknown-sender-policy strict` (find the id with `ncl messaging-groups list`).Restart
Restart the service
Restart the service so it loads the Dial adapter, and wait for its CLI socket. The adapter must be live and polling before pairing — it's the thing that observes the code you text:
bash setup/lib/restart.shStart inbound delivery
Wire inbound event delivery and the command target. Both are best-effort: a
sandbox/CI without a user-service supervisor can't run the listen daemon, but
outbound still works and inbound can be started manually later (see
Troubleshooting), so these never fail the run:
DIAL_USER_AGENT={{dial_ua}} dial listen install || trueRegister the command target
Point the daemon at the adapter's event handler (same best-effort rule):
DIAL_USER_AGENT={{dial_ua}} dial local-target add cmd "$PWD/data/dial/handle-dial-event.sh" || trueRegister the line (owner-only)
Register the line, carrying the access choice from above onto its own row. One
platform_id serves many correspondents, so it's a group (--is-group 1) and
each texter becomes a thread inside it. Idempotent — a re-run returns the
existing row, and does NOT reset a policy you have since changed with ncl:
ncl messaging-groups create --channel-type dial --platform-id {{platform_id}} --is-group 1 --name "Dial {{platform_id}}" --unknown-sender-policy strictRegister the line (public)
The same row, open to anyone who texts it:
ncl messaging-groups create --channel-type dial --platform-id {{platform_id}} --is-group 1 --name "Dial {{platform_id}}" --unknown-sender-policy publicPair your phone
Dial account auth carries no per-sender binding, so the agent proves you own the phone you'll text from with a one-time pairing handshake: it issues a 6-digit code, you text those exact 6 digits to the Dial line, and the live adapter matches them. Tell the user:
A 6-digit pairing code (and a scannable QR) is about to appear in this terminal. From the phone you want to use, text just those 6 digits to your Dial line {{platform_id}} — or scan the QR, which opens Messages pre-filled so you just press Send.Run the pairing handshake. It prints the code/QR, streams "waiting…" while it watches for your text, and resolves the sender's number once the code matches:
pnpm exec tsx setup/index.ts --step pair-dial -- --line {{platform_id}}owner_handle (the phone you paired from) and platform_id (your Dial line) are
what the owner-wiring step needs. The greeting goes out over your Dial line as
soon as pairing completes.
Now set expectations about outbound SMS, before the operator hits it as a silent carrier rejection. Calls both ways and inbound texts work from this moment; US carriers drop outbound SMS from a number that has no 10DLC registration, and the adapter reports that as a delivery-failure notice rather than anything the operator can fix in NanoClaw:
Your number {{platform_id}} can receive texts and calls now. To text US numbers it needs 10DLC registration: $25, usually 3-5 business days, here's the link: https://getdial.ai/dashboard/numbersAdd phone superpowers (optional)
Show the pitch as a boxed note, then ask — mirrors the old wizard's p.note
- confirm:
Add phone superpowers to your assistant? Say yes so your assistant can send SMS and make AI calls for you from every channel you use it on — Telegram, WhatsApp, and more.Install the Dial tool now?If yes, apply the /add-dial-tool skill now, as its own document describes. It
asks which agents may use Dial (and attaches the account's key in OneCLI to
those agents only), puts the CLI and its skill in the agent image, and
registers the key with OneCLI. It needs OneCLI; if that isn't set up it says so, and the channel
still works without the tool:
The tool's own document asks which agents may use Dial. Ask it here instead: a nested step's stdout is a pipe, so clack cannot echo what is typed into it, and this skill owns the operator's terminal. List the groups, then collect the answer and hand it down:
ncl groups list --json | jq -r 'if (.data|length)==0 then "no" else "yes" end'No agents exist yet, so there is nobody to give Dial to. Installing the tool with no agent holding the key; once your first agent exists, run `/add-dial-tool` to give it Dial.ncl groups list --json | jq -r '[.data[] | "\(.id) (\(.name))"] | join(", ")'Agents on this install: {{agent_groups}}. Giving an agent Dial lets it text and call any number and buy numbers, billed to your Dial account. Agents you leave out do not get the Dial key (reversible by running /add-dial-tool again). Agents created after this run do not get Dial until you run /add-dial-tool again.Which agents may use Dial? Enter agent ids separated by commas with no spaces (the `ag-…` column), `all` for every agent that exists now, or `none` to install the tool with no agent holding the key for now.pnpm exec tsx setup/lib/skill-driver.ts .claude/skills/add-dial-tool --input 'dial_agents={{dial_agents}}'pnpm exec tsx setup/lib/skill-driver.ts .claude/skills/add-dial-tool --input 'dial_agents=none'Then tell the sandboxed agent which line is its own. The container authenticates
through the OneCLI proxy and has no auth file, so defaultNumberId is null
in there — an agent that omits --from-number gets an error, and one that picks
from dial number list gets whichever number sorts first, which is unrelated to
what's wired. Only this skill knows the answer, so it has to write it down —
into the mounted skill file, which every container reads on its next spawn:
if [ ! -f container/skills/dial-cli/SKILL.md ]; then echo "dial-cli skill not installed (the tool installer did not complete) — skipping the wired-line note"; else printf '\n## This install'"'"'s line\n\nAlways pass `--from-number {{platform_id}}` on every `dial call` and `dial message`. That is the line this NanoClaw install is wired to; any other number on the account reaches nobody and replies to it are dropped.\n' >> container/skills/dial-cli/SKILL.md && echo "wired line recorded for the sandbox: {{platform_id}}"; fiNext Steps
If you're in the middle of /setup, return to the setup flow now. Otherwise wire
this channel with /init-first-agent (or /manage-channels). To add a second
Dial number later, see the /add-dial-number skill.
If you installed the Dial tool before any agent existed, it reaches no agent until
you give it one: once your agent exists, run /add-dial-tool and pick it.
Channel Info
- type:
dial - terminology: Dial calls it a "number" or "line." One number is a single threaded line — each texter/caller gets their own thread.
- platform-id-format: the bare E.164 number (e.g.
+14155550123) — unlike prefixed channels, the number itself is the id. - how-to-find-id: Do NOT ask the user for an id. Dial registration uses pairing — run
pnpm exec tsx setup/index.ts --step pair-dial -- --line <E.164>. The step prints a 6-digit code + QR; tell the user to text just those 6 digits to the Dial line. Success emits aPAIR_DIALblock withSTATUS=success,PLATFORM_ID(the bare line), andPAIRED_NUMBER(the bare sender E.164). The service must be running — the adapter is what observes the code. - supports-threads: yes (each correspondent is a thread on the line, with its own session)
- typical-use: A real phone number for SMS and AI-handled voice calls — receptionist, notifications, 2FA relay.
- default-isolation: One line → one agent group. Who may reach it is the operator's choice at setup (
inbound_access):owneradmits only the paired phone,publicadmits everyone. Defaults to owner-only.
Troubleshooting
dial: command not found / the CLI gate fails. The Dial CLI isn't on PATH. Run curl -fsSL https://getdial.ai/skills.md and follow its install steps, then re-run this step.
The email code never arrives. Check spam, confirm the address is one you can read, and re-run — dial auth login <email> --force re-sends. The code is sent by Dial's servers, not NanoClaw.
Inbound texts/calls don't reach the agent. dial listen install needs a user-service supervisor (launchd/systemd --user); sandboxes/CI don't have one. Outbound still works. Start it manually with dial listen install once a supervisor is available, and confirm the command target with dial local-target list.
Pairing never completes. The live adapter observes the code, so the service must be running — the restart step comes before pairing for exactly this reason. Text just the 6 digits to the Dial line; a wrong message is ignored. Codes expire after 10 minutes, so if it times out (5 min) or the code goes stale, re-run this step for a fresh one.
"Pairing is paused for about N min." Five wrong codes texted to the line inside 10 minutes locks that line for 15 — a brute-force guard, and while it holds even the correct code is refused. The wizard prints this warning when it happens; nothing is texted back to the sender, by design. Wait it out and re-run this step for a fresh code, or override the thresholds with DIAL_PAIRING_MAX_ATTEMPTS / DIAL_PAIRING_ATTEMPT_WINDOW_MS / DIAL_PAIRING_COOLDOWN_MS / DIAL_PAIRING_TTL_MS.
Everything green but no replies. Run pnpm exec vitest run src/channels/dial-registration.test.ts — red means the barrel import drifted, so re-run the Apply steps. If green, restart again (bash setup/lib/restart.sh) and check logs/nanoclaw.error.log.
Trending
Steady: 0 new projects took it in the last 4 weeks, none the 4 weeks before.thin data
Who's talking about qwibitai/nanoclaw
- Jordan Urbs“How to Use NanoClaw (Better Than OpenClaw?)”YouTube · Mar 6, 2026 · 30k views
- Yar Malik“OpenClaw vs ZeroClaw vs PicoClaw vs NullClaw vs NanoBot vs TinyClaw vs NanoClaw — Full Comparison”YouTube · Feb 27, 2026 · 9.8k views
- Aashish Pahwa“3 Free Alternatives To Openclaw”YouTube · Mar 11, 2026 · 3.2k views
- Mike's Ai Forge“NanoClaw + Docker: Build a 100% Secure AI Agent”YouTube · Mar 20, 2026 · 1.9k views
- Prism Labs“Anthropic Is Eating the OpenClaw Ecosystem (And They Know It)”YouTube · Mar 19, 2026 · 1.7k views
The biggest 5 of 79 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 79
Talked about on GitHub, YouTube, Bluesky and Hacker News (79 times).
On GitHub · 50
- Feb 22, 2026Nanoclaw needs a skill marketplace/registry — nanocoai/nanoclaw17 reactions · 9 comments
- Mar 6, 2026🦞 OpenClaw 生态日报 2026-03-06 — duanyytop/agents-radar3 reactions
- Mar 3, 2026🦞 OpenClaw 生态日报 2026-03-03 — duanyytop/agents-radar3 reactions · 1 comment
- Mar 25, 2026feature: make it possible to select alternatives for software we installing (e.g. for openclaw) — Osmantic/ODS2 reactions · 4 comments
- Mar 3, 2026🦞 OpenClaw 生态日报 2026-03-03 — duanyytop/agents-radar2 reactions
45 more on GitHub
- May 4, 2026NanoClaw — community-scripts/DevScripts1 reaction
- Mar 7, 2026🦞 OpenClaw 生态日报 2026-03-07 — duanyytop/agents-radar1 reaction
- Mar 2, 2026🦞 OpenClaw 生态日报 2026-03-02 — duanyytop/agents-radar1 reaction
- Feb 26, 2026🦞 OpenClaw 生态日报 2026-02-26 — duanyytop/agents-radar1 reaction
- Feb 22, 2026Research: Architecture for standalone agent app with model layer, agentic loops, and messaging integration — laurentenhoor/devclaw1 reaction · 3 comments
- Feb 20, 2026fix: signal active containers to close when a scheduled task is enqueued — nanocoai/nanoclaw1 reaction · 4 comments
- Feb 14, 2026[SECURITY] [Upstream PR #216] Secret sanitization bypass via /proc and Read tool — nanocoai/nanoclaw1 reaction · 1 comment
- Jul 27, 2026Weekly upstream sync 2026-07-27 — vweaver/nanoclaw0 reactions · 1 comment
- Jun 18, 2026[Security] Non-owner members can create persistent child agents without approval in NanoClaw owner-initialized groups — nanocoai/nanoclaw0 reactions
- Jun 14, 2026[Security] Local gateway approval bypass via unauthenticated loopback webhook — nanocoai/nanoclaw0 reactions
- May 19, 2026fix(webhook) + docs: восстановление webhook + откат NanoClaw v0.1 + research — botkin-health/Botkin0 reactions
- May 9, 2026Setup script silently deletes existing groups/*/CLAUDE.md without warning or backup — nanocoai/nanoclaw0 reactions
- May 6, 2026feat: add NanoClaw v2 script — community-scripts/DevScripts0 reactions · 1 comment
- May 6, 2026feat: add NanoClaw v2 script — community-scripts/DevScripts0 reactions · 1 comment
- May 4, 2026New Script: NanoClaw — community-scripts/DevScripts0 reactions · 1 comment
- Apr 29, 2026Research: Memory approach of common non-coding Agents — 8monkey-ai/hebo-platform0 reactions · 20 comments
- Apr 27, 2026feat(channels): agent-channels:{telegram,discord,slack} layers — minimal MIT-cribbed adapters — tangle-network/starter-foundry0 reactions · 2 comments
- Apr 19, 2026feat(setup): add register-task step (carry until qwibitai#1857 lands) — sagri-tokyo/nanoclaw0 reactions
- Mar 30, 2026NanoClaw の Fork とローカル初期セットアップ — Helicoir/nanoclaw0 reactions
- Mar 30, 2026Feature: Native typing indicator via iLink sendtyping API — WEIFENG2333/ilink-bot0 reactions
- Mar 30, 2026Feature: Native typing indicator via iLink sendtyping API — co-pine/wx-robot-ilink0 reactions
- Mar 25, 2026fix: LID JID fallback via senderPn, warn on unmatched messages — nanocoai/nanoclaw-whatsapp0 reactions · 1 comment
- Mar 24, 2026Setup: IPC fix + Dev Agent configuration — yaelandau22/nanoclaw0 reactions
- Mar 23, 2026🦞 Bản tin hàng ngày hệ sinh thái OpenClaw 2026-03-23 — compasify/agents-radar0 reactions
- Mar 22, 2026🦞 Bản tin hàng ngày hệ sinh thái OpenClaw 2026-03-22 — compasify/agents-radar0 reactions
- Mar 21, 2026🦞 Bản tin hàng ngày hệ sinh thái OpenClaw 2026-03-21 — compasify/agents-radar0 reactions
- Mar 20, 2026skill: add-group-persona — per-group agent personas from WhatsApp group description — nanocoai/nanoclaw-whatsapp0 reactions
- Mar 20, 2026🦞 Bản tin hàng ngày hệ sinh thái OpenClaw 2026-03-20 — compasify/agents-radar0 reactions
- Mar 19, 2026🦞 Bản tin hàng ngày hệ sinh thái OpenClaw 2026-03-19 — compasify/agents-radar0 reactions
- Mar 18, 2026Prefer injected credentials and preserve service env — nanocoai/nanoclaw0 reactions · 2 comments
- Mar 18, 2026## Summary — Shinogreat/docs0 reactions
- Mar 17, 2026Add image support — send and receive images via Telegram — kylenessen/nanoclaw0 reactions
- Mar 16, 2026🦞 Bản tin hàng ngày hệ sinh thái OpenClaw 2026-03-16 — compasify/agents-radar0 reactions
- Mar 15, 2026🦞 Bản tin hàng ngày hệ sinh thái OpenClaw 2026-03-15 — compasify/agents-radar0 reactions
- Mar 14, 2026🦞 Bản tin hàng ngày hệ sinh thái OpenClaw 2026-03-14 — compasify/agents-radar0 reactions
- Mar 13, 2026🦞 Bản tin hàng ngày hệ sinh thái OpenClaw 2026-03-13 — compasify/agents-radar0 reactions
- Mar 12, 2026🦞 Bản tin hàng ngày hệ sinh thái OpenClaw 2026-03-12 — compasify/agents-radar0 reactions
- Mar 11, 2026🦞 Bản tin hàng ngày hệ sinh thái OpenClaw 2026-03-11 — compasify/agents-radar0 reactions
- Mar 10, 2026🦞 Bản tin hàng ngày hệ sinh thái OpenClaw 2026-03-10 — compasify/agents-radar0 reactions
- Mar 9, 2026🦞 Bản tin hàng ngày hệ sinh thái OpenClaw 2026-03-09 — compasify/agents-radar0 reactions
- Mar 8, 2026🦞 Bản tin hàng ngày hệ sinh thái OpenClaw 2026-03-08 — compasify/agents-radar0 reactions
- Mar 7, 2026🦞 OpenClaw 生态日报 2026-03-07 — compasify/agents-radar0 reactions
- Mar 5, 2026fix: Expose ANTHROPIC_MODEL from .env to agent — nanocoai/nanoclaw0 reactions · 1 comment
- Mar 4, 2026持续跟进前沿技术更新,不断优化marrow-core — zrr1999/marrow-core0 reactions
- Mar 3, 2026SKILL: unified channel media support (2-way, lazy retrival) — nanocoai/nanoclaw0 reactions · 3 comments
On YouTube · 22
- Mar 6, 2026How to Use NanoClaw (Better Than OpenClaw?) — Jordan Urbs30k views · 43 comments
- Feb 27, 2026OpenClaw vs ZeroClaw vs PicoClaw vs NullClaw vs NanoBot vs TinyClaw vs NanoClaw — Full Comparison — Yar Malik9.8k views · 33 comments
- Mar 11, 20263 Free Alternatives To Openclaw — Aashish Pahwa3.2k views · 2 comments
- Mar 20, 2026NanoClaw + Docker: Build a 100% Secure AI Agent — Mike's Ai Forgesays it tested it1.9k views · 3 comments
- Mar 19, 2026Anthropic Is Eating the OpenClaw Ecosystem (And They Know It) — Prism Labs1.7k views · 1 comment
17 more on YouTube
- Mar 19, 2026Every company needs to figure out their AI agent strategy. — NanoClaw1.4k views
- Apr 6, 202624시간 일하는 AI 개발자 만들기 — NanoClaw + Discord 셋업 가이드#NanoClaw #Claude #디스코드봇 #AI에이전트 #Docker #ClaudeCode — 빠른개발소식1.4k views · 9 comments
- Apr 23, 2026Announcing NanoClaw v2, in partnership with @VercelHQ ✨ — NanoClaw1.2k views
- Feb 14, 2026NanoClaw Lightweight Secure AI Agent Assistant for WhatsApp — Eddy Says Hi #EddySaysHi1.2k views
- May 5, 2026Building Small, Secure AI Agents with NanoClaw's Creator — NanoClaw853 views · 1 comment
- Mar 13, 2026NanoClaw is a safer OpenClaw — NEXT with John Koetsier783 views · 5 comments
- Mar 24, 2026How I move knowin' my NanoClaw agents don't hold any of my API keys — NanoClaw601 views
- May 3, 20263 Tips for Building Better AI Agent Skills — NanoClaw481 views
- Feb 28, 2026Nano Claw vs OpenClaw: Cheaper, Safer, or Just Hype? — Vibe Code Wiki367 views · 1 comment
- May 3, 2026Give your AI agent actual guardrails — NanoClaw339 views
- Feb 22, 2026[Product Reviw] 신뢰 가능한 OpenClaw? NanoClaw 🦞 — LOADING_265 views
- May 1, 2026How I Set Up My Personal AI Assistant (Claude + NanoClaw + Telegram) — Tino Muchenje | AI in Practice251 views · 2 comments
- May 6, 2026Nanoclaw: Containerized Claude Agent for Slack and WhatsApp — VibeDev205 views
- Feb 19, 2026The NEW #NanoClaw is Finally Here! — AskGuru187 views
- May 1, 2026I Built an AI Chief of Staff. One Month In. | AI in Practice — Tino Muchenje | AI in Practice167 views
- Mar 18, 2026The Future of Open-Source Contributions in the AI Age — Packet Pushers115 views
- Apr 24, 2026Best AI Agent Product Launch Video | Nanoclaw — Luceo Studio92 views
On Bluesky · 6
- Feb 12, 2026Uh so I highly recommend setting this up (I used nanoclaw: github.com/qwibitai/nan... combined with Telegram). Most of the benefits of… — @paulgp.com19 likes and reposts · 2 replies
- Feb 21, 2026Self-modifying AI agents: "There are no configuration files to learn. Just tell Claude Code what you want. Or run /customize for guided… — @narphorium.com2 likes and reposts
- Apr 6, 2026📦 qwibitai / nanoclaw ⭐ 26,620 (+91) 🗒 TypeScript A lightweight alternative to OpenClaw that runs in containers for security. Connects to… — @github-trending-js.bsky.social1 likes and repost
- Mar 16, 2026Próbáld inkább ezt: github.com/qwibitai/nan... — @kispocok.hu1 likes and repost · 1 reply
- Feb 24, 2026NanoClaw github.com/qwibitai/nan... — @annjose.com1 likes and repost
1 more on Bluesky
- Feb 24, 2026Check it out here: github.com/qwibitai/nan... — @jainamparmar.bsky.social0 likes and reposts · 1 reply
On Hacker News · 1
- Feb 27, 2026Show HN: Badge that shows how well your codebase fits in an LLM's context window88 points · 41 comments
Other versions4 projects use a version of this.
Word for word · 2
- gavrielc/nanoclaw★ 31k100% same
- nanocoai/nanoclaw★ 31k100% same
Edited · 2
- TomGranot/groupguard★ 385% same
- prathish-ks/isthmus★ 296% same
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository55 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- container/CLAUDE.mdCLAUDE.md
- add-anydocSkill
- add-atomic-chat-toolSkill
- add-clidashSkill
- add-codexSkill
- add-cursorSkill
- add-dashboardSkill
- add-deltachatSkill
- add-dial-numberSkill
- add-dial-toolSkill
- add-discordSkill
- add-emacsSkill
- add-gchatSkill
- add-githubSkill
- add-imessageSkill
- add-iron-proxySkill
- add-karpathy-llm-wikiSkill
- add-linearSkill
- add-macos-statusbarSkill
- add-matrixSkill
- add-mattermostSkill
- add-mnemonSkill
- add-ollama-providerSkill
- add-ollama-toolSkill
- add-onecliSkill
- add-opencodeSkill
- add-resendSkill
- add-rtkSkill
- add-signalSkill
- add-slackSkill
- add-tavily-toolSkill
- add-teamsSkill
- add-telegramSkill
- add-vercelSkill
- add-webexSkill
- add-wechatSkill
- add-whatsapp-cloudSkill
- add-whatsappSkill
- customizeSkill
- debugSkill
- init-first-agentSkill
- learnSkill
- manage-channelsSkill
- manage-mountsSkill
- migrate-from-openclawSkill
- migrate-from-v1Skill
- migrate-memorySkill
- migrate-nanoclawSkill
- migrate-slack-agentsSkill
- setupSkill
- slack-a2a-roomsSkill
- slack-agent-flowSkill
- update-nanoclawSkill
- update-skillsSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

