Try it from the starter
Terminal
link reports whether an iMessage trial is
available and what to do if it is not.
Check it worked: the agent answers in Messages and its tool call appears in the playground’s
Debug view.
Connect a line
SetFLOW_MESSAGING_KEY and FLOW_MESSAGING_IMESSAGE_SENDER for the line arranged with Flow.
The starter adds iMessage when the sender is configured.
In a custom entry point, use fm.imessage() from
flowMessaging(). Pass that channel to buildAgent({ channels: [fm.imessage()] }), call
await agent.resume() and start receiving with fm.start(agent, { cursorFile }).
The adapter guide
covers streaming and signed webhooks.
What changes on iMessage
- The agent writes Markdown, sent with iMessage’s own styles (bold, italic, underline,
strikethrough), up to 9,999 characters. To show a mark as written, escape it (
\*). Photos, inline replies, tapbacks, typing and read receipts are supported by the adapter; a read receipt marks the whole conversation. - There are no buttons, lists or templates. Ask for a short text answer instead.
- The shared line replies only after the person writes first. A refused start arrives as
outside_window; do not keep retrying it. - Group chats a line is added to are passed over with a warning: the agent does not answer in them, and no typing or read receipt goes there.
resolve when joining them.