ソース情報
- リポジトリ
- openclaw/imsg
- ソースの最終更新活動
- 2026年7月11日 20:13
- 検出された SKILL.md の言語
- 英語
- スター
- 1,289
- フォーク
- 176
インストール方法
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
ソースファイルを確認
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
メニュー
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
SOC 職業分類に基づく
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
直接コマンドでは確認用 Prompt が省略されます。実行前にソースを確認してください。
npx skills add https://github.com/openclaw/imsg --skill imsgコマンドは1行のまま表示されます。コピー前に横へスクロールして全体を確認してください。
ローカルで確認しますか?SkillsMP が現在取得できるファイルをダウンロードできます。
SKILL.md を表示中
| name | imsg |
| description | iMessage/SMS: local history, contacts, live watch, and requested sends. |
imsg reads ~/Library/Messages/chat.db directly and sends through Messages.app automation. Reading is local and safe. Sending, reacting, marking read, typing indicators, and any chat mutation require an explicit user request — confirm recipient, service, and content in your final summary.
--json and emits NDJSON (one object per line). Pipe to jq -s to get an array. Stdout carries only JSON; progress and warnings go to stderr.chats, group, history, watch, search, send, react, nickname --local, account --local, whois --local.imsg launch dylib injection): send-rich, send-multipart, send-attachment, send-sticker, tapback, poll, edit, unsend, delete-message, read, typing, notify-anyways, chat-*, name-photo, and default-mode account/whois/nickname.imsg status --json before using bridge commands. Stickers additionally require send.sticker in rpc_methods and selectors.stickerSend; attaching one requires selectors.stickerAttach. If the bridge is down, use a standard command only when it preserves the requested semantics; otherwise stop and explain. Never turn a reply/effect/subject into a plain send or a GUID-targeted tapback into react, and never suggest disabling SIP unprompted.imsg completions llm.imsg status --json # feature availability + setup hints
sqlite3 ~/Library/Messages/chat.db 'pragma quick_check;' # fails => terminal lacks Full Disk Access
Resolve a person visible in the Messages.app UI from chats, not search. The UI name usually surfaces as contact_name (Contacts permission); it does not appear in imsg search results, raw message.text, or the DB handle table. No search hits is not proof the contact doesn't exist.
imsg chats --limit 200 --json | jq -s '.[] | select((.contact_name // .display_name // .name // .identifier // "" | ascii_downcase) | contains("beatrix"))'
imsg chats --unread-only --json | jq -s
Then inspect and read the chat by rowid:
imsg group --chat-id ID --json # identity + participants; check before automating
imsg history --chat-id ID --limit 50 --json | jq -s
imsg history --chat-id ID --start 2025-01-01T00:00:00Z --end 2025-02-01T00:00:00Z --json
imsg stats --chat-id ID --time-zone UTC --media --json # logical message + media totals
imsg scheduled list --json # future Send Later rows; read-only
imsg chat-background status --chat-id ID --json # inspect local background state; read-only
imsg name-photo status --chat GUID --json # read-only Share Name & Photo eligibility
id is the chat.db rowid: stable on one machine, the preferred --chat-id handle. identifier and guid are portable across machines.--start is inclusive, --end exclusive; both take ISO8601. Use absolute timestamps for date-scoped questions.--attachments adds attachment metadata; --convert-attachments converts CAF→M4A / GIF→PNG for model consumption.imsg search --query "pizza tonight" --json searches message bodies only (--match contains default, exact available).imsg stats [--chat-id ID] [--time-zone IANA] [--media] --json aggregates logical messages by chat, inbound sender, service, and local date; no bridge required.unread_count. Inbound message payloads include is_read and, when read, date_read; outbound payloads omit both.imsg whois --address "+15551234567" --type phone --local, imsg nickname --address "+15551234567" --local --json, imsg account --local --json. Note nickname --local returns your AddressBook label for the handle; the iMessage-shared nickname needs default-mode nickname via the bridge.sqlite3 queries are a last resort; the handle table lacks the resolved names imsg chats provides.imsg watch --chat-id ID --json # filesystem events with polling fallback
imsg watch --since-rowid N --json # resume from a message id cursor
Message id doubles as the watch cursor: persist the last-seen id and pass it back via --since-rowid. Add --reactions for tapback add/remove events and --attachments for attachment metadata.
imsg send --to "+15551234567" --text "message" --service auto
imsg send --chat-id ID --text "message" # prefer for groups: no address ambiguity
imsg send --to "+15551234567" --file ~/Desktop/pic.jpg
imsg name-photo share --chat GUID # shares YOUR Name & Photo; explicit request only
--service auto prefers iMessage and falls back to SMS for text-only phone sends; --no-sms-fallback disables that.imsg react --chat-id ID --reaction like (AppleScript) only targets the most recent incoming message and needs Accessibility permission. To react to a specific message by GUID, use bridge tapback.name-photo share is not a vCard send. It discloses the local Messages Name & Photo to every participant in the selected chat; confirm the destination and explicit user intent before invoking it.Only after imsg status confirms the bridge is loaded (imsg launch injects it; refuses when SIP is on; macOS 26 entitlement gates can block features even with SIP off):
imsg send-rich --chat 'iMessage;-;+15551234567' --text 'hi' --reply-to MSG_GUID # replies, effects, subjects
imsg send-sticker --chat GUID --file ~/Pictures/sticker.png --attach-to MSG_GUID --target-part 0
imsg send-rich --chat 'iMessage;-;+15551234567' --url https://imsg.sh
imsg poll send --chat GUID --question 'Dinner?' --option 'Pizza' --option 'Sushi' --comment 'Vote by 5pm'
imsg poll unvote --chat GUID --poll POLL_GUID --option-index 1
imsg edit --chat GUID --message MSG_GUID --new-text 'updated' # macOS 13+
imsg chat-create --addresses '+15551234567,+15559876543' --name 'Crew'
poll send echoes --question as a best-effort plain caption after the Polls balloon; --comment overrides that caption. Do not retry automatically when only the caption fails: the poll may already be delivered. history and watch backfill a title-less inbound native poll's poll.question from its clean caption row.
Destructive bridge commands — unsend, delete-message, chat-delete, chat-leave, chat-remove-member — need per-action user confirmation.
For repo edits:
make test
make build
./bin/imsg chats --limit 3 --json | jq -s # live read proof against the local DB