Skip to main content
Who is admitted, how messages route to sessions, and which chats can write config.

Access control and routing

channels.imessage.dmPolicy controls direct messages:
  • pairing (default)
  • allowlist (requires at least one allowFrom entry)
  • open (requires allowFrom to include "*")
  • disabled
Allowlist field: channels.imessage.allowFrom.Allowlist entries must identify senders: handles or static sender access groups (accessGroup:<name>). Use channels.imessage.groupAllowFrom for chat targets such as chat_id:*, chat_guid:*, or chat_identifier:*; use channels.imessage.groups for numeric chat_id registry keys.

ACP conversation bindings

iMessage chats can be bound to ACP sessions. Fast operator flow:
  • Run /acp spawn codex --bind here inside the DM or allowed group chat.
  • Future messages in that same iMessage conversation route to the spawned ACP session.
  • /new and /reset reset the same bound ACP session in place.
  • /acp close closes the ACP session and removes the binding.
Configured persistent bindings use top-level bindings[] entries with type: "acp" and match.channel: "imessage". match.peer.id can use:
  • normalized DM handle such as +15555550123 or user@example.com
  • chat_id:<id> (recommended for stable group bindings)
  • chat_guid:<guid>
  • chat_identifier:<identifier>
Example:
See ACP Agents for shared ACP binding behavior.

Config writes

iMessage allows channel-initiated config writes by default (for /config set|unset when commands.config: true). Disable: