Yichen Mac Wechat Dual Open
mcncarl/yichen-skills
Create, inspect, repair, and polish a second WeChat app on macOS by copying WeChat, changing the bundle identifier, ad-hoc re-signing, preparing it for the user to open manually, setting Chinese…
Connects NanoClaw to iMessage through one channel with either a local Mac backend or a hosted backend via photon.codes, copying in the adapter and installing its package.
$ npx skills add nanocoai/nanoclaw --skill add-imessage -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install nanocoai/nanoclaw add-imessage --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/add-imessage .claude/skills/add-imessage && 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 "add-imessage" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/add-imessage into .claude/skills/add-imessage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-imessage", 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/add-imessageType 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 add-imessage -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install nanocoai/nanoclaw add-imessage --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/add-imessage .agents/skills/add-imessage && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "add-imessage" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/add-imessage into .agents/skills/add-imessage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-imessage", 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 add-imessage -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install nanocoai/nanoclaw add-imessage --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/add-imessage .cursor/skills/add-imessage && 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 "add-imessage" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/add-imessage into .cursor/skills/add-imessage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-imessage", 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/add-imessage--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 add-imessage -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install nanocoai/nanoclaw add-imessage --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/add-imessage .gemini/skills/add-imessage && 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 "add-imessage" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/add-imessage into .gemini/skills/add-imessage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-imessage", 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 add-imessageInstalls 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 add-imessage -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/add-imessage .github/skills/add-imessage && 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 "add-imessage" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/add-imessage into .github/skills/add-imessage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-imessage", 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 add-imessage -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 add-imessage --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/add-imessage .opencode/skills/add-imessage && 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 "add-imessage" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/add-imessage into .opencode/skills/add-imessage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-imessage", 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.
add-imessageConnects NanoClaw to iMessage through one channel with either a local Mac backend or a hosted backend via photon.codes, copying in the adapter and installing its package.
NanoClaw does not ship channels in its main branch, so this skill copies the unified iMessage adapter and its tests from the channels branch into src/channels/ and appends one import line to the channel index. Both backends register the same imessage channel type and only one can run per install, so the first step is choosing local or hosted.
The local backend uses the Chat SDK bridge to read the signed-in iMessage account in the Mac's chat.db, so it works on macOS only and the Node binary needs Full Disk Access. A check stops the local path on any other system. The hosted backend uses Photon's spectrum-ts stream through photon.codes, runs on any OS without a Mac relay, webhook or public URL, and is provisioned through a device-login flow. The chosen package is installed at an exact pinned version, because the repository's supply-chain policy rejects version ranges.
The steps are written as prose plus directive fences that a parser can apply on its own, and each directive is safe to repeat, so the skill can be re-run. A REMOVE.md file and a docs.md reference ship alongside it.
5 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:
pnpmbashFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
PHOTON_PROJECT_SECRETFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Add iMessage to NanoClaw loads about 3.8k tokens when it runs. Until then it costs about 89 tokens; SKILL.md has 1,613 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.
Now select the local backend in `.env`. The configure script owns thisROJECT_ID` + `PHOTON_PROJECT_SECRET` to `.env` and the assigned numberThen select the hosted backend in `.env` — the Photon credentials already implyslash replies. Optional `.env`: `PHOTON_MARKDOWN`, `PHOTON_TELEMETRY`,Automated 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,613 words, ~3,764 tokens.
.claude/skills/add-imessage/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.NanoClaw talks to iMessage through a single imessage channel with two
pluggable backends:
chat-adapter-imessage,
reading this Mac's signed-in iMessage account (chat.db). macOS only; the
Node binary needs Full Disk Access.spectrum-ts gRPC stream. The hosted service owns the iMessage line, so
there's no Mac relay, webhook, or public URL. Works on any OS, and a
device-login flow provisions everything for you.Both register the same imessage channel type; only one runs per install.
NanoClaw doesn't ship channels in trunk — this skill copies the unified
imessage adapter in from the channels branch. Full reference:
docs/imessage.md.
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.
Pick the backend first — it decides which package gets installed and which walkthrough runs below (the other backend's steps are skipped):
How should iMessage run — `local` (this Mac's signed-in iMessage account; macOS only, needs Full Disk Access) or `hosted` (a managed line via photon.codes; works on any OS)?The local backend only works on a Mac — it reads this machine's iMessage
chat.db directly, and there is no such database off macOS. On any other OS,
stop here and choose hosted instead; otherwise you'd write a local config
that can never receive a message:
[ "$(uname)" = Darwin ]Fetch the channels branch and copy the unified iMessage adapter and its tests
into src/channels/:
src/channels/imessage.ts
src/channels/imessage.test.ts
src/channels/imessage-registration.test.tsAppend the self-registration import to the channel barrel (skipped if the line is already present). This one line is the skill's only reach-in into core:
import './imessage.js';Pinned to an exact version — the supply-chain policy rejects ranges and
latest. Install only the chosen backend's package.
Local — the Chat SDK iMessage adapter. Its chat.db reader
(@photon-ai/imessage-kit) brings its own better-sqlite3 12.x, which ships no
prebuilt binary, and NanoClaw doesn't run dependency build scripts, so that
copy can't open the database. First point the reader at NanoClaw's own
prebuilt better-sqlite3 ($better-sqlite3 is pnpm's reference to the version
NanoClaw pins). The reinstall applies it to an install that already has the
adapter, since the step below skips a package that is already present:
pnpm pkg set 'pnpm.overrides[@photon-ai/imessage-kit>better-sqlite3]=$better-sqlite3'
pnpm install --no-frozen-lockfilechat-adapter-imessage@0.1.1Hosted — Photon's Spectrum SDK:
spectrum-ts@11.0.0Pin exactly.
spectrum-tsships breaking majors (v11 is what the adapter targets); don't@latest. NanoClaw's pnpm gate (minimumReleaseAge) requires a version ≥3 days old — both pins clear it. A fresher pin needs human sign-off before aminimumReleaseAgeExcludeentry (CLAUDE.md → Supply Chain Security).
Build guards the typed createChatSdkBridge(...) core call used by the local
backend, and the registration test proves the channel is wired:
pnpm run buildpnpm exec vitest run src/channels/imessage-registration.test.tsBoth must be clean. imessage-registration.test.ts imports the real channel
barrel and asserts the registry contains imessage — it goes red if the
import './imessage.js'; line is missing or the barrel fails to evaluate. The
adapter loads neither backend's SDK at import (hosted spectrum-ts only in
setup(), local chat-adapter-imessage only in the factory), so the test
needs no package.
For the hosted backend, also run the full adapter suite — it includes an
integration block that exercises the real installed spectrum-ts (version,
exports, builders) and auto-skips when the package is absent:
pnpm exec vitest run src/channels/imessage.test.tsFor the local backend, check that the chat.db reader's better-sqlite3
loads under Node. It fails with Could not locate the bindings file when that
copy has no binary, meaning step 4's override didn't land: re-run that
override step, then this check:
node --input-type=module -e 'import { createRequire } from "node:module"; const kit = createRequire(import.meta.resolve("chat-adapter-imessage")).resolve("@photon-ai/imessage-kit"); const Database = createRequire(kit)("better-sqlite3"); new Database(":memory:").close();'The adapter reads this Mac's chat.db, which requires Full Disk Access granted
to the Node binary the host runs under. The Node path is buried deep (e.g.
~/.nvm/versions/node/v22.x.x/bin/node), so open its folder in Finder to make
the drag-and-drop target obvious. Harmless off a desktop (SSH/headless) — it
just no-ops:
open "$(dirname "$(which node)")" 2>/dev/null || trueThen tell the user:
Grant Full Disk Access to Node so iMessage can read your chat history:
1. Open System Settings > Privacy & Security > Full Disk Access.
2. Click +, then drag the "node" file from the Finder window that just opened.
3. Toggle it on, then come back here.Stop and wait for the user to confirm Full Disk Access is granted before continuing.
Now select the local backend in .env. The configure script owns this
upsert-and-remove (a plain set-if-absent env write can neither replace a stale
value nor delete a key, and a lingering hosted selector would shadow the
choice):
bash setup/channels/imessage-configure.sh localThe provisioning flow needs the phone number you send iMessages from — it registers that number with your project so the hosted line recognises you:
The phone number you iMessage from, in E.164 format — + followed by country code and number, no spaces or dashes (e.g. +14155551234).Tell the user what's about to happen:
Connect your hosted iMessage line (photon.codes):
1. A login URL and a short code will print below.
2. Open the URL in a browser, approve the device, and enter the code.
3. Setup then registers your number and prints the iMessage line Photon assigned to it. Send one message from your phone to that line — a number only enters routing after it has texted its line once.
4. Once the opt-in lands, setup finishes on its own and confirms your agent's iMessage number.Run the device-login flow. It provisions the project, reuses its current secret
(regenerating only when the API returns none), registers your number, prints
the line to text and waits until that message opts the number in, and surfaces
the iMessage number you'll use — writing
PHOTON_PROJECT_ID + PHOTON_PROJECT_SECRET to .env and the assigned number
to data/photon-auth.json:
pnpm exec tsx scripts/photon-setup.ts setup --phone {{owner_handle}} --embeddedIf the login times out, the code expired (~30 min) — re-run the step; a stored
token is reused. Check state any time with
pnpm exec tsx scripts/photon-setup.ts status.
Then select the hosted backend in .env — the Photon credentials already imply
hosted, but the explicit selector avoids ambiguity if local keys linger:
bash setup/channels/imessage-configure.sh hostedRestart the service so it loads the iMessage adapter and the backend config you just wrote, and wait for its CLI socket before wiring:
bash setup/lib/restart.shFor the hosted backend, confirm the connection came up:
grep "Photon channel connected" logs/nanoclaw.log | tail -1.
The agent greets you in the iMessage conversation tied to the handle you message from — that handle is both your identity and the conversation address. The hosted flow already collected it above; for the local backend, resolve it now (email works too — whatever iMessage recognises):
The phone number or email you iMessage from — a +E.164 number (e.g. +14155551234) or an email / Apple ID (e.g. you@icloud.com).Hosted first contact: text your agent's iMessage number once (it was
printed above; also stored in data/photon-auth.json) before expecting any
message from it. This first text is required, not just convenient — the hosted
line can only message numbers that have already texted it (cold outbound is
rejected with Target not allowed for this project). Tell the user:
Send one text — anything — from your phone to your agent's iMessage number (printed above). The hosted line can only reply to numbers that have texted it first, so its welcome message needs yours to arrive first.iMessage is a native channel: it sends the raw handle as the conversation address, with no channel prefix — so the messaging-group platform id is that handle as-is:
echo "{{owner_handle}}"owner_handle and platform_id are what the owner-wiring step needs. The
welcome iMessage goes out through the adapter once the service is running — on
the local backend that needs Full Disk Access granted (above); on the hosted
backend it goes out via your photon.codes line after your first text.
If you're in the middle of /setup, return to the setup flow now. Otherwise
/init-first-agent stands up an agent on your iMessage DM, or /manage-channels
wires it to an existing agent group.
imessage (one channel; the backend is local or hosted)imessage:<handle>. Group
(hosted) = the opaque Spectrum space id.pnpm exec tsx scripts/q.ts data/v2.db "SELECT platform_id, name FROM messaging_groups WHERE channel_type='imessage'"isolated session mode.Markdown (native; PHOTON_MARKDOWN=false for plain text), file attachments in
and out (inbound staged into the session inbox, capped by
PHOTON_MAX_INLINE_ATTACHMENT_BYTES, default 20 MB), tapback reactions, read
receipts, typing indicators, and ask_user_question via /approve / /reject
slash replies. Optional .env: PHOTON_MARKDOWN, PHOTON_TELEMETRY,
PHOTON_MAX_INLINE_ATTACHMENT_BYTES, PHOTON_DASHBOARD_HOST,
PHOTON_SPECTRUM_HOST. Full table in docs/imessage.md.
The backend answer is rejected. It must be exactly local or hosted,
lowercase. Local only exists on macOS — it reads this Mac's chat.db directly —
so on any other OS the platform check stops you and hosted is the only path.
Local: outgoing works but nothing ever arrives. Full Disk Access wasn't
granted to the actual Node binary the service runs under — with nvm the path
changes per Node version (~/.nvm/versions/node/v22.x.x/bin/node), so an old
grant silently stops covering a new binary. Re-open System Settings → Privacy &
Security → Full Disk Access, add the binary at $(which node), then restart
the service.
Local: Failed to open database … Could not locate the bindings file. The
chat.db reader is on a better-sqlite3 copy with no native binary, from an
install made before step 4 set its override. Re-run /add-imessage with the
local backend: step 4 sets the override and reinstalls, and the skill
restarts the service.
spectrum-ts not installed (hosted) — re-run step 4
(pnpm install spectrum-ts@11.0.0) and restart.
Device login times out (hosted) — the code expires in ~30 min; re-run the login step (a stored token is reused).
Target not allowed for this project (hosted) — intended: the line only
messages numbers that have texted it first. Text the agent's number once, then
retry (a welcome DM queued before that first text simply fails delivery).
Your handle is rejected at the resolve step. It must be a bare +E.164
number (+14155551234 — no spaces, dashes, or parentheses) or, on the local
backend, an email/Apple ID. Use the exact handle you actually send iMessages
from — a number-vs-email mismatch means your messages never map to the wired
conversation.
Adapter installed but silent. Run
pnpm exec vitest run src/channels/imessage-registration.test.ts — red means
the barrel import or the package install drifted, so re-run the Apply steps.
If green, confirm the backend connected (hosted:
grep "Photon channel connected" logs/nanoclaw.log), restart the service
(bash setup/lib/restart.sh), then check logs/nanoclaw.error.log.
More in docs/imessage.md.
spectrum-ts is pinned exactly because it ships breaking majors. To upgrade,
read the release notes for
every version between the pins, bump the pin, reconcile
src/channels/imessage.ts against the new typings, then pnpm run build and
pnpm exec vitest run src/channels/imessage.test.ts. See
docs/imessage.md.
© nanocoai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 3 other files in .claude/skills/add-imessage of nanocoai/nanoclaw.
Open the folder on GitHubat commit 66f0823
Add iMessage to NanoClaw 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 |
|---|---|---|---|---|---|---|
| Add iMessage to NanoClaw this skillnanocoai/nanoclaw | 31k | — | ~3.8k | Automated safety check: Notes | MIT | |
| Yichen Mac Wechat Dual Openmcncarl/yichen-skills | 4.3k | — | ~1.5k | Automated safety check: Pass | Custom licence | |
| Feishu BridgeAlexAnys/feishu-openclaw | 317 | 1 repos | ~615 | Automated safety check: Pass | None | |
| Greenbubbles Setupbojieli/greenbubbles | 352 | — | ~537 | Automated safety check: Pass | MIT | |
| Wechat Exporterrobbin/wechat-exporter | 213 | — | ~2k | Automated safety check: Notes | None | |
| Wechat Article Extractfreestylefly/WeChatBridge | 1.2k | — | ~236 | Automated safety check: Pass | MIT |
mcncarl/yichen-skills
Create, inspect, repair, and polish a second WeChat app on macOS by copying WeChat, changing the bundle identifier, ad-hoc re-signing, preparing it for the user to open manually, setting Chinese…
AlexAnys/feishu-openclaw
Connect a Feishu (Lark) bot to Clawdbot via WebSocket long-connection.
bojieli/greenbubbles
Install or diagnose the local GreenBubbles CLI and read-only WeChat access.
robbin/wechat-exporter
A skill your agent uses when the user says "wechat-exporter", "导出微信", "更新微信聊天记录", or wants to export, decrypt, or refresh WeChat chat history and contacts on macOS.
freestylefly/WeChatBridge
从微信聊天记录导出文件中识别公众号文章链接或分享卡片,提取标题、公众号名称、发布时间、正文和图片,并保留原文链接。当用户要求整理、摘录或归档聊天记录里的公众号文章时使用。
olo-dot-io/Uni-CLI
Comprehensive guide to Uni-CLI — the open Agent-Computer Interface runtime for real software.
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.
Works with
Categories
Connects NanoClaw to iMessage through one channel with either a local Mac backend or a hosted backend via photon.codes, copying in the adapter and installing its package. NanoClaw does not ship channels in its main branch, so this skill copies the unified iMessage adapter and its tests from the channels branch into src/channels/ and appends one import line to the channel index. Both backends register the same imessage channel type and only one can run per install, so the first step is choosing local or hosted.
Add iMessage to NanoClaw fits situations like: adding iMessage as a messaging channel in a NanoClaw install; choosing between a local Mac backend and a hosted iMessage line; connecting NanoClaw to iMessage from a machine that is not a Mac.
Run `npx skills add nanocoai/nanoclaw --skill add-imessage -a claude-code`. Or copy the skill folder (.claude/skills/add-imessage in nanocoai/nanoclaw) into .claude/skills/add-imessage in your project. Claude Code loads it when a task matches its description.
Run `npx skills add nanocoai/nanoclaw --skill add-imessage -a codex`. Or copy the skill folder (.claude/skills/add-imessage in nanocoai/nanoclaw) into .agents/skills/add-imessage 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 add-imessage -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/add-imessage, .gemini/skills/add-imessage, .github/skills/add-imessage and .opencode/skills/add-imessage in your project.
Going by SKILL.md and its folder, Add iMessage to NanoClaw needs the command-line tools its instructions call (pnpm and bash) and credentials named PHOTON_PROJECT_SECRET. Our summary lists: A NanoClaw install; macOS with Full Disk Access for the Node binary, for the local backend; Access to photon.codes, for the hosted backend.
SKILL.md names 1 domain. As links in the text: github.com. 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.
Add iMessage to NanoClaw is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.8k tokens (SKILL.md is roughly 15k 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 Add iMessage to NanoClaw: Yichen Mac Wechat Dual Open (mcncarl/yichen-skills, 4.3k stars), Feishu Bridge (AlexAnys/feishu-openclaw, 317 stars), Greenbubbles Setup (bojieli/greenbubbles, 352 stars) and Wechat Exporter (robbin/wechat-exporter, 213 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,897 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.