跳到正文
cccskills
免费在 GitHub 公开中文介绍

imsg

搜索Mac上Messages.app的会话历史、监控新消息并发送iMessage或SMS;在支持的环境中,还可回复指定消息、添加回应、创建投票和管理群组。

原文查看原文说明

Use the imsg CLI from OpenClaw agents for iMessage/SMS DMs, groups, replies, reactions, polls, watching, and private-API actions.

AI 评分100分/ 100查看安装方法

适用场景

  • 查找Messages.app中的历史会话
  • 向指定联系人发送文字或文件
  • 回复指定消息或添加回应
  • 在现有群组中创建投票
  • 监控指定会话的新消息

中文介绍

功能

搜索Mac上Messages.app中的会话和历史记录,发送iMessage或SMS,并监控新消息。在支持的环境中,还能回复指定消息、添加回应、创建投票,以及管理群组名称和成员。优先通过OpenClaw的message执行其支持的操作,查询历史和使用附加功能时采用imsg。

适用场景

适合查找过去的联系记录,或在核对联系人、群组后发送消息。也可在现有群组中为日程安排创建投票,或等待指定会话中的回复。

使用示例

  • “查找我们讨论晚餐的聊天记录。”
  • “向这个电话号码发送‘我正在路上’。”
  • “在这个群组中创建投票,选项为Pizza和Sushi。”

注意事项

发送等操作需要macOS 14或更高版本、imsg,并登录Messages.app。读取历史需要完全磁盘访问权限,部分操作还需要自动化或辅助功能权限。回复、投票等依赖使用私有API的连接功能。发送SMS需要设置iPhone短信转发。收件人不明确或需要更改会话状态时,会先确认。Linux仅支持读取复制的chat.db。

本介绍由 AI(OpenAI Codex)根据公开的 SKILL.md 撰写。准确的规格请查看下方原文。

客观评估

AI 仅根据 SKILL.md 的内容,从 4 个方面进行了评估。星标数和热度不计入评估。

指令清晰度能否看出何时使用、做什么
A良好明确列出历史搜索、发送等用途,以及message与imsg的分工。
步骤具体性步骤、输入输出和示例是否具体
A良好提供从确定会话到执行的步骤、命令示例和JSON输出格式。
安全性发送数据、删除文件、执行命令等是否有说明
A良好明确发送、群组变更及通过imsg launch重启前的确认条件。
安装难易度所需工具和 API 密钥是否少且有说明
A良好列出Homebrew安装方式及macOS、权限和iPhone转发要求。

总分按每项 A=25 分、B=15 分、C=5 分相加。 由 AI(OpenAI Codex)于 2026年10月19日 评估。仅供参考,安装前请同时查看原文。

如果您认为评估有误,请申请复核

请写明哪一项有误以及原因。无需登录。我们会对照 SKILL.md 重新评估,并在此处更新结果。

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

包含的文件(1)

  • SKILL.md10.6 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

imsg

Use the generic message tool first for actions that its current iMessage schema exposes. Use imsg when the task needs local Messages.app history, target discovery, watching, or an administrative/private-API capability that is not exposed by message.

Do not use this skill for Telegram, Signal, WhatsApp, Discord, Slack, or for replying inside the current OpenClaw conversation when the configured channel already routes the reply.

Agent Flow

  1. Resolve the conversation first.
  2. Choose DM, existing group, or new group.
  3. Prefer an available message action; otherwise pick the lowest-capability imsg command that preserves the requested semantics.
  4. Confirm any send or visible state change unless the user already gave exact recipient, content, and action.
  5. Execute with stable identifiers: prefer --chat-id for normal sends/watch/history and --chat chat GUID for bridge actions.

Never infer a recipient from a casual name alone when several chats or handles could match. Show the matched display name, handle(s), group participants, and message text/action before sending.

Host Requirements

  • macOS 14+ with Messages.app signed in for send/react/bridge actions.
  • Private API mode is strongly encouraged for OpenClaw iMessage. It unlocks replies, precise tapbacks, effects, polls, attachment replies, read/typing actions, and group management. Basic mode is a fallback for reads plus plain text/file send.
  • Full Disk Access for the process context that runs imsg or OpenClaw; reads fail without Messages DB access.
  • Automation permission for Messages.app when using public send.
  • Accessibility permission for the process context that runs public imsg react; it uses System Events UI automation. Bridge tapback uses private API instead.
  • Optional Contacts permission for contact-name resolution.
  • SMS sends require Text Message Forwarding from the user's iPhone to this Mac.
  • Linux reads a copied chat.db only; it cannot send, react, launch Messages.app, mark read, or type.

Resolve Targets

Use --json reads. Output is newline-delimited JSON; use jq -s when jq is available, or consume one object per line directly.

imsg chats --limit 25 --json | jq -s
imsg search --query "dinner" --match contains --json | jq -s
imsg history --chat-id 42 --limit 20 --attachments --json | jq -s
imsg group --chat-id 42 --json

Target rules:

  • DM to a phone/email: use imsg send --to when the user gave an exact handle, or after a single unambiguous chat match.
  • Existing DM thread: imsg send --chat-id <id> is safer than re-resolving a name.
  • Existing group: inspect with imsg group --chat-id <id> --json; send with --chat-id, bridge with the chat GUID from group.
  • New group: use chat-create only when the user explicitly asked to create a group or no existing group matches.
  • Ambiguous group names: confirm participants, not just display name.
  • SMS: use --service sms only when requested or when iMessage fallback is not desired. SMS relay requires Text Message Forwarding.

Do not make jq a hard prerequisite for the skill; it is only a convenient formatter for examples.

Capability Choice

Use imsg standard commands when the current message schema does not cover the operation or when local history is needed:

  • Read/list/search/watch: chats, group, history, search, watch
  • Basic text/file send: send
  • Standard tapback to most recent incoming message in a chat: react

Use the private API bridge for the native iMessage actions OpenClaw users normally expect:

  • Rich replies, text formatting, effects, subjects, multipart sends
  • Native Apple Messages polls and poll votes
  • Tapback by message GUID or tapback removal
  • Edit, unsend, delete, notify anyways
  • Read receipts, typing indicators, bridge event watch
  • Group create/name/photo/member/leave/delete/mark actions
  • Account, whois, nickname checks

For OpenClaw channel setup, check bridge availability early:

imsg status --json

If the host supports bridge actions but Messages is not injected yet, ask before running imsg launch. It kills and relaunches Messages.app to inject the bridge, so treat it as a visible state change:

imsg launch
imsg status --json

If SIP, library validation, private entitlement checks, or missing selectors still block the capability, explain that the requested private-API action is unavailable on this host and offer the closest non-bridge action, if one exists. Do not silently downgrade a threaded reply, effect, subject, poll, or GUID-targeted tapback into a plain send/react.

DM Scenarios

Exact handle, basic send:

imsg send --to "+14155551212" --text "On my way" --service auto

Known DM thread:

imsg send --chat-id 42 --text "On my way"
imsg send --chat-id 42 --file /path/to/photo.jpg

Force channel only when the user asks:

imsg send --to "+14155551212" --text "green bubble" --service sms
imsg send --to "+14155551212" --text "iMessage only" --service imessage --no-sms-fallback

Threaded reply, formatting, effects, or attachment reply:

imsg send-rich --chat 'iMessage;-;+15551234567' \
  --reply-to <message-guid> --text "reply text"
imsg send-rich --chat 'iMessage;-;+15551234567' --text 'hello world' \
  --format '[{"start":0,"length":5,"styles":["bold"]}]'
imsg send-rich --chat 'iMessage;-;+15551234567' --text "boom" --effect impact
imsg send-attachment --chat 'iMessage;-;+15551234567' \
  --reply-to <message-guid> --file /path/to/file.jpg

Formatting ranges are UTF-16 positions. Supported styles include bold, italic, underline, and strikethrough; use --format-file for generated JSON.

Group Scenarios

Inspect before acting:

imsg group --chat-id 42 --json
imsg history --chat-id 42 --limit 20 --json | jq -s

Send to an existing group:

imsg send --chat-id 42 --text "Works for me"

Bridge reply or poll in an existing group:

imsg send-rich --chat 'iMessage;+;chat0000' \
  --reply-to <message-guid> --text "replying in thread"
imsg poll send --chat 'iMessage;+;chat0000' \
  --question "Dinner?" --option "Pizza" --option "Sushi"

Create or mutate groups only on explicit request:

imsg chat-create --addresses '+15551111111,+15552222222' --name 'Crew' --text 'gm'
imsg chat-name --chat 'iMessage;+;chat0000' --name 'Renamed'
imsg chat-photo --chat 'iMessage;+;chat0000' --file /path/to/group.jpg
imsg chat-add-member --chat 'iMessage;+;chat0000' --address +15553333333
imsg chat-remove-member --chat 'iMessage;+;chat0000' --address +15553333333
imsg chat-leave --chat 'iMessage;+;chat0000'
imsg chat-delete --chat 'iMessage;+;chat0000'
imsg chat-mark --chat 'iMessage;+;chat0000' --read

Group mutations are highly visible. Confirm the exact group and participant list before changing membership, name, photo, read state, leaving, or deleting.

Reactions and Replies

Public react is limited: it reacts to the most recent incoming message in the chat.

imsg react --chat-id 42 --reaction like
imsg react --chat-id 42 --reaction love
imsg react --chat-id 42 --reaction dislike
imsg react --chat-id 42 --reaction laugh
imsg react --chat-id 42 --reaction emphasis
imsg react --chat-id 42 --reaction question

For a specific message GUID or removal, use bridge tapback:

imsg tapback --chat 'iMessage;-;+15551234567' --message <message-guid> --kind love
imsg tapback --chat 'iMessage;-;+15551234567' --message <message-guid> --kind love --remove

Use send-rich --reply-to <message-guid> for threaded replies. Confirm the referenced message if the user says "that" or "the previous one".

Polls

Native Apple Messages polls require the bridge. Creation needs at least two --option values. Voting requires one of --option-id, --option-index, or --option.

Messages renders only the options on a poll balloon, so current imsg poll send echoes --question as a best-effort plain caption after the poll. Use --comment to override that caption. Do not retry automatically when only the caption fails: the poll may already be delivered.

imsg poll send --chat 'iMessage;-;+15551234567' \
  --question "Dinner?" --option "Pizza" --option "Sushi" --comment "Vote by 5pm"
imsg poll send --chat 'iMessage;+;chat0000' --reply-to <message-guid> \
  --question "Approve?" --option "Yes" --option "No"
imsg poll vote --chat 'iMessage;+;chat0000' \
  --poll <poll-message-guid> --option-id <option-id>

Find poll IDs and options with:

imsg history --chat-id 42 --limit 20 --json | jq -s '.[] | select(.poll != null) | {guid, poll}'

history and watch backfill a title-less inbound native poll's poll.question from its clean caption row. Poll vote rows are poll events, not tapbacks; watch --reactions is not required to see them.

Watch and Long-Running Agents

For a short one-off wait, use watch:

imsg watch --chat-id 42 --since-rowid 9000 --json
imsg watch --chat-id 42 --attachments --convert-attachments --json
imsg watch --chat-id 42 --reactions --json
imsg watch --chat-id 42 --bb-events --json

--since-rowid is exclusive. Without it, watch starts at the newest row. watch uses filesystem events plus a low-frequency polling fallback, so it can catch up after missed SQLite sidecar events. Poll objects appear without --reactions.

For a daemon or multi-chat integration, use imsg rpc. It speaks JSON-RPC 2.0 over stdin/stdout. Inspect imsg status --json for rpc_methods before using newer bridge or poll methods.

Safety Rules

  • Confirm recipient, chat, and content before every send unless the user's request already contains exact values.
  • Confirm visible state changes: read receipts, typing indicators, edits, unsends, deletes, poll votes, tapbacks, group membership, group name/photo, leaving/deleting chats.
  • Never send to unknown numbers or ambiguous contact-name matches without approval.
  • Confirm attachments exist and are the intended files.
  • Prefer E.164 phone numbers; use --region US or another region only when needed for local formats.
  • Use bridge actions for bridge-only semantics, but confirm visible state changes and destructive actions first.

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

1password

免费

Set up and authenticate the 1Password CLI, then supply stored passwords and API keys to commands or configuration. The skill covers desktop integration, service accounts, and interactive sign-in while keeping secrets out of chat and logs.

中文简介正在准备中。当前显示英语简介。

  • Setting up the 1Password CLI
  • Supplying API keys to commands
  • Using service account authentication in CI
openclaw/openclaw39.2万2026年10月18日 更新

acp-router

免费有简介AI 评分 80分

将提交给OpenClaw的自然语言请求转交给Claude Code等外部编程智能体,通过ACP或acpx启动、继续会话,并保留对话上下文。

  • 在讨论串中启动Claude Code
  • 继续外部智能体的现有工作
  • 通过acpx直接传递指令
openclaw/openclaw39.2万2026年10月18日 更新

Add a model provider to OpenClaw and verify it with a real response. The skill validates configuration, keeps credentials in environment or file references, and reports test results and any default model changes.

中文简介正在准备中。当前显示英语简介。

  • Adding a model provider to OpenClaw
  • Configuring credentials through environment or file references
  • Checking whether a model returns a real response
openclaw/openclaw39.2万2026年10月18日 更新

Prepare an agent activity transcript for a GitHub pull request or issue. Extract relevant prompts, decisions, and results from local logs, remove sensitive material, and preview the edited record before separately authorized publication.

中文简介正在准备中。当前显示英语简介。

  • Preparing an agent activity record for a pull request
  • Extracting task-relevant prompts and results from local logs
  • Previewing a transcript with sensitive information removed
openclaw/openclaw39.2万2026年10月18日 更新

Manage Apple Notes on macOS through memo, a command-line tool. Create, browse, search, edit, delete, and move notes between folders, or export selected notes to HTML or Markdown for use outside the app.

中文简介正在准备中。当前显示英语简介。

  • Creating notes with titles
  • Finding notes by folder or approximate search
  • Editing notes and organizing them into folders
openclaw/openclaw39.2万2026年10月18日 更新

Manage Apple Reminders from your Mac with remindctl, a terminal tool. View tasks by date, add or edit reminders, organize lists, and mark tasks complete or delete them, including personal to-dos that sync to iOS.

中文简介正在准备中。当前显示英语简介。

  • Review today’s tasks and overdue reminders
  • Add personal to-dos with due dates
  • Organize tasks visible on an iPhone or iPad
openclaw/openclaw39.2万2026年10月18日 更新

查看 openclaw 的全部技能

报告此技能的问题