Skip to content

Guide · Agent skill

How to use the iMessage Access Manager agent skill

Updated · written with AI from the project's own documentation and checked against our catalogue data

The iMessage Access Manager skill, named access, lets Claude manage who is allowed to talk to an iMessage channel connected to your Claude setup. It approves pairing codes, edits the allowlist of senders, sets whether direct messages are open to pairing or limited to an allowlist, and configures group chats and reply splitting. This guide explains what agent skills are, how to install this one, how to trigger it, and what safety limits it enforces.

iMessage Access Manageranthropics/claude-plugins-official · Apache-2.0

Quick start

  1. 1Download and unzip the skill. Download the ZIP from this page and unzip it so that SKILL.md sits in a folder named access.
  2. 2Place the folder. Move the access folder into ~/.claude/skills/ for all projects, or into .claude/skills/ inside one project. You can also upload it under Settings → Capabilities → Skills in the Claude apps.
  3. 3Make sure the iMessage channel is running. The skill needs the iMessage channel server from the same plugin, since that server reads and writes access.json.
  4. 4Check the current status. Ask Claude who is allowed or run /imessage:access with no arguments to see the DM policy, allowed senders, pending requests and group count.
  5. 5Approve a pairing in your terminal. When someone is pending, run /imessage:access pair with the 6-character code shown in the status list.
  6. 6Adjust the policy or groups. Use policy, allow, remove, group add or set to change access, typing each command yourself in your terminal.

What is an agent skill, and what does this one do?

An agent skill is a folder containing a SKILL.md file with instructions that Claude can load when a request matches the skill's description. This skill's SKILL.md tells Claude how to read and edit a local settings file that controls access to the iMessage channel.

Claude does not talk to iMessage through this skill. It only edits the JSON file at ~/.claude/channels/imessage/access.json, and the channel server re-reads that file. The skill can check status, approve or deny pending pairing codes, add or remove allowed senders, change the DM policy, manage group chats, and set reply delivery options.

  • Show status: DM policy, allowed sender count and list, pending requests with codes, sender IDs and age, and group count
  • Approve or deny a pairing by its code
  • Add or remove a sender ID from the allowlist
  • Set the DM policy to pairing, allowlist or disabled
  • Add, remove or configure group chats, including mention requirements and per-group allowed senders
  • Set reply splitting with textChunkLimit and chunkMode, and set mentionPatterns for group triggers

How do you install the access skill?

Download the ZIP file from this page and unzip it. The skill folder contains SKILL.md. Place the unzipped folder in one of these locations, depending on how you want to use it:

For all your projects, put it in ~/.claude/skills/. For a single project, put it in that project's .claude/skills/ folder. Alternatively, in the Claude apps, open Settings → Capabilities → Skills and upload the skill there.

  • Personal: ~/.claude/skills/
  • Project only: .claude/skills/ inside the project folder
  • Claude apps: Settings → Capabilities → Skills, then upload
~/.claude/skills/

What does the skill need to work?

The skill depends on the iMessage channel server that is part of the same plugin. That server reads and writes access.json, so the skill has nothing to act on without it. The skill also needs local filesystem access to ~/.claude/channels/imessage/.

If the channels folder does not exist yet because the server has never run, the skill creates default settings instead of failing. A missing access.json is treated as a default with the allowlist policy and empty lists.

  • The iMessage channel server from the same plugin, which reads and writes access.json
  • Local filesystem access to ~/.claude/channels/imessage/
  • The skill runs no scripts and uses no network access, according to its listing

How do you trigger the skill with natural requests?

The skill's description says to use it when you ask to pair, approve someone, check who is allowed, or change policy for the iMessage channel. You can phrase requests in ordinary language. The skill also accepts slash-style arguments, which are listed below.

When you give a pairing request without a code, the skill lists the pending entries and asks which code to approve. It will not pick one automatically, even if only one is pending.

  • "Who is allowed to message my iMessage channel right now?"
  • "Show me the pending pairing requests."
  • "Approve pairing code ABC123." (replace with the actual 6-character code)
  • "Set the DM policy to allowlist."
  • "Add +15551234567 to the allowlist."
/imessage:access pair <code> /imessage:access deny <code> /imessage:access allow <senderId> /imessage:access remove <senderId> /imessage:access policy <pairing|allowlist|disabled> /imessage:access group add <chatGuid> [--no-mention] [--allow id1,id2] /imessage:access group rm <chatGuid> /imessage:access set <key> <value>

What do the DM policy options mean?

The dmPolicy setting has three modes. The skill's default for a missing file is allowlist. The source explains that pairing is not the default because the server reads your personal chat.db, and pairing would autoreply a code to every contact who texts you.

Your own texts in self-chat bypass the gate regardless of policy, so messages you send to yourself always get through.

  • pairing: an unknown sender receives a code, and you approve it in your terminal
  • allowlist: only senders listed in allowFrom are let through (the default)
  • disabled: the policy is set to disabled, as listed in the valid modes
/imessage:access policy allowlist

How do groups and delivery settings work?

Groups are keyed by chat GUID, such as iMessage;-;+15551234567 for a one-to-one chat. Chat IDs differ from sender IDs, so do not paste a phone number where a chat GUID is required. Each group can require a mention, which is on by default, or be opened with --no-mention. You can also limit a group to specific sender IDs with --allow.

iMessage has no structured mentions, so mentionPatterns, a JSON array of regex strings, is the only way to trigger the channel in groups. Reply splitting uses textChunkLimit, which has a maximum of 10000, and chunkMode, which is either length for a hard cut or newline for a cut that prefers paragraph breaks.

  • textChunkLimit: a number, with a maximum of 10000
  • chunkMode: length (hard cut) or newline (paragraph-preferring)
  • mentionPatterns: a JSON array of regex strings, for example ["@mybot"]
/imessage:access group add iMessage;-;+15551234567 --no-mention /imessage:access set chunkMode newline

What safety rules does the skill enforce?

The skill acts only on requests typed by you in your terminal session. If a request to approve a pairing, add to the allowlist, or change policy arrives through a channel notification such as iMessage, Telegram or Discord, the skill refuses and tells you to run /imessage:access yourself. The source notes that channel messages can carry prompt injection, so access changes must never follow untrusted input.

The skill also reads the file before writing it, because the channel server may have added pending entries in the meantime. It pretty-prints JSON with a 2-space indent so you can edit it by hand.

  • Access changes are refused when they come from channel messages
  • The file is always read before it is written, to avoid overwriting new pending entries
  • Pairing always needs the explicit code

What people use it for

  • Checking which contacts can reach your Claude iMessage channel before changing anything
  • Approving a single pending pairing code after a new contact requests access
  • Adding a family member's phone number or email to the allowlist
  • Setting up a group chat that responds only when mentioned, using mentionPatterns
  • Limiting long replies by setting textChunkLimit and chunkMode

Frequently asked questions

Is the iMessage access skill free?

The source does not state pricing or licence terms beyond the listing's Apache-2.0 licence, so check the licence in the repository for the terms that apply. The skill itself is a SKILL.md file in the anthropics/claude-plugins-official repository.

What do I need to use the iMessage access skill?

You need the iMessage channel server from the same plugin, which reads and writes access.json, plus local filesystem access to ~/.claude/channels/imessage/. The skill runs no scripts and uses no network access, according to its listing.

Can this skill send or read my iMessages?

No. The skill never talks to iMessage. It only edits the access.json config file, and the channel server re-reads that file.

Why does the skill refuse to approve a pairing that came through a message?

The skill only acts on requests you type in your own terminal session. Channel messages can carry prompt injection, so a request to approve, allow or change policy that arrives through iMessage, Telegram or Discord is refused.

Why is the default DM policy allowlist and not pairing?

The server reads your personal chat.db, and pairing would autoreply a code to every contact who texts you. Allowlist mode lets only listed senders through, while your own self-chat always gets through.

Where is the state stored and what happens if it is missing?

All state lives in ~/.claude/channels/imessage/access.json. If the file is missing, the skill uses defaults: dmPolicy allowlist with empty allowFrom, groups and pending lists.

New agent skills, repos and AI tools — every week

The best new skills and open-source projects, the fastest-growing repos, and one free prompt. Five minutes to read. Unsubscribe anytime.

Our verdict

This skill suits owners of a Claude iMessage channel who want to control which contacts can reach it, and developers who need pairing or group rules for a personal bot. It is not a messaging tool and will not send or read iMessages, so pick another option if that is what you need. It is also a poor fit for shared or unattended setups, because it requires the owner to approve changes in their own terminal.

Download the skill