Messages & Integrations
Message people, message Foxl from Telegram, Slack, Discord, iMessage, Signal and more, and let it act in Microsoft 365.
Three different things in Foxl carry messages, and it is worth separating them before anything else:
| What it is | Where | |
|---|---|---|
| Integrations | Services the agent can reach and act in, as you. Outbound. | Settings > Tools > Integrations |
| Channel adapters | Bots that let somebody message the agent from Telegram, Slack, Discord, iMessage, Signal and more. Inbound. | Settings > Connect > Messages |
| The Messages screen | Your conversations with people, and the conversations the adapters collect - who wrote, and what Foxl answered. | Beside Chat, in Foxl Agent |
The rest of this page is about the first two. The Messages screen is described in The Messages screen at the end.
OAuth Integrations
Connect services with one click from Settings > Tools > Integrations. No API keys needed - Foxl uses OAuth to act as you.
| Service | Tool | Capabilities |
|---|---|---|
| Microsoft 365 | outlook | Email (inbox, read, send, reply, forward, search, folders, drafts and reply drafts in the original conversation, sending a reviewed draft once, attachments, contacts, move, categories, update, and tidying the inbox in one reviewed card), Calendar (view, meeting, availability, room booking, search, shared list), To-Do (lists, tasks, checklist) |
| Slack | slack | Search messages, read channels/DMs/threads, send messages, open conversations, reactions, file uploads, user lookup |
| Gmail | gmail | Send email from your Gmail address; search, read and reply too if you turned reading on when connecting. It never deletes or changes your mail. See Gmail |
After connecting, the corresponding tool is automatically registered and available to the agent. Disconnecting removes the tool.
Slack Workspace Selection
By default, Slack OAuth connects to the workspace you're logged into in your browser. To connect a specific workspace, enter the workspace name (the part before .slack.com) in the input field before clicking Connect.
Available Channels
Messaging bots (channel adapters)
Every adapter is under Settings > Connect > Messages, and each one answers only the people you list. A channel whose row is marked Preview has not yet answered a real message the way it ships, so it may not work yet. iMessage replies into SMS and RCS chats have not been tried with another person yet either.

| Channel | What it needs | Notes |
|---|---|---|
| Telegram | A bot token from @BotFather, plus your chat id or an allowed-users list | Replies are formatted (bold, links, code) |
| Slack | A bot token (xoxb-) and an app-level token (xapp-, with connections:write), plus the channel ids it may answer in | Mentions in those channels. Direct messages too, from Allowed Users, once the app subscribes to message.im with the im:history scope and has the Messages tab on under App Home |
| Discord | A bot token from the Developer Portal with Message Content Intent on, plus the user ids that may message it | DMs; server channels only when listed and the bot is mentioned |
| iMessage (Mac only) | Full Disk Access for Foxl Messages (Foxl asks with one button), permission for Foxl Messages to control Messages (macOS asks once, when you press Start), and the phone numbers or emails that may message it, none of them an address of the Apple Account Messages uses on this Mac. Nothing to install: Foxl Messages, which reads and sends for Foxl, comes with Foxl | Messages on this Mac, including SMS and RCS chats (a reply keeps the chat's service; an SMS from someone you also have an iMessage or RCS chat with is answered in that chat). In a group chat Foxl answers a listed person who writes @foxl, and the whole group sees the answer. Foxl answers only messages from another account: a message you send to yourself gets no answer, and Start refuses a listed number or email of this Mac's own account. To write to Foxl from your own phone, sign Messages on this Mac in to a separate Apple Account for Foxl. Typing indicators and read receipts are not available (macOS offers them only to Apple's own apps), and the row says so. If Foxl Messages may not control Messages, the row says that replies cannot be sent and where to allow it |
| Signal | A phone number to link by QR code, plus who may message it: your own Note to Self once Phone Number is filled in, and each other person by their Signal ID (the row shows the ID of the last sender it turned away) | Direct messages only. The Signal helper saves every attachment anyone sends in a private folder of Foxl's own, which Foxl empties each time the helper stops, not in your computer's temporary folder |
| Matrix | Homeserver URL, the bot's user id and access token, and the Matrix ids that may message it | Unencrypted rooms only for now; an encrypted DM gets a short note instead of an answer |
| Mattermost | Server URL, a bot account token, and the usernames that may message it | DMs; channels when listed and mentioned |
| Feishu / Lark | App ID and App Secret of an app using the long connection, and the open_ids that may message it (the row shows a refused open_id to copy) | DMs; groups when the bot is mentioned |
| Nextcloud Talk | Server URL, the bot user's name and an app password, and the user ids that may message it | One-to-one conversations; groups when mentioned |
| IRC | Server, nickname and the services accounts that may message it (optional SASL password) | Over TLS. People are matched by their logged-in services account, never by nickname |
| Twitch | The bot's username and an OAuth token with chat:read chat:edit, the channels to join and who may talk to it | Answers @mentions, in the channel's public chat |
| Nostr | A secret key made for the bot, and the public keys that may message it | Encrypted direct messages (NIP-04) |
| Zalo | A Zalo bot token, and the user ids that may message it (the row shows a refused id to copy) | Direct messages |
Voice messages, audio files and videos sent to the Telegram or Discord bot are listened to
on this computer and answered like a typed message, with their caption: by Amazon Transcribe on
the AWS account set up here (about a cent a minute), or by the on-device speech engine from
Settings > Notes > Recording. A recording longer than 10 minutes is heard for its first 10
(an hour with the on-device engine). Voice messages, MP3 and WAV files are read on every computer,
and M4A and MP4 files, such as Telegram's round video messages, on a Mac. A file this computer
cannot listen to is saved in the workspace's inbox folder, and Foxl is told why.
Slack is also an outbound integration (the slack tool, connected by OAuth above) -
the bot and the integration are separate connections. This is the whole list: the pane
offers only channels this desktop can run. WhatsApp is held for now (its only library brings in
a GPL-3.0 dependency). Microsoft Teams, Google Chat, LINE, Synology
Chat and SMS through Twilio are not offered, because those services deliver messages only to
a public web address, and this desktop does not accept connections from the internet. A
channel saved for another platform by an earlier version is still listed, with Remove,
so what was saved for it can be deleted.
iMessage: give Foxl its own Apple Account
The iMessage connect dialog opens on the recommended setup: an Apple Account of Foxl's own,
signed in to Messages in a second user on this Mac (foxlbot). You then message Foxl like any
other contact, and its replies never look like your own. The
iMessage setup guide walks through every step of the dialog with
screenshots: picking Foxl's address, creating its Apple Account and Mac user, the two macOS
permissions, the first message, what to do after the Mac restarts, and how to undo the setup.
This setup has not been run end to end on a real Mac yet, which is one more reason the iMessage
row is marked Preview.
Social Media
There is no built-in X/Twitter skill today; use the exec tool with a CLI of your choice, or the browser extension on x.com.
| Channel | Skill | Requirements |
|---|---|---|
| Microsoft 365 (Outlook) | outlook integration | Connect under Settings > Tools > Integrations (OAuth) |
| Email (CLI) | himalaya | himalaya CLI tool |
| Gmail, Naver, Daum, Kakao, iCloud or Yahoo Mail | imap_mail | An app password, entered in a card in the chat the first time; it reads, and changes mail only through the cleanup card you apply. See Agent Tools |
| Gmail (integration) | gmail integration | Connect under Settings > Tools > Integrations (OAuth); it sends, and reads only if you turned reading on when connecting |
| Gmail | browser_extension | Logged into Gmail in Chrome |
| Outlook | browser_extension | Logged into Outlook in Chrome |
Smart Home
| Channel | Skill | Requirements |
|---|---|---|
| Spotify | spotify / spotify-player | Spotify account |
| Sonos | sonos | Sonos speakers on network |
Setting Up a Channel
Method 1: Channel adapters
- Open Settings > Connect > Messages and press Connect beside the channel (the dialog links to that service's own setup guide)
- Paste the bot's credentials and list who may talk to it - the list starts empty, and an empty list answers nobody. For Signal, press Show QR code and scan it in Signal on your phone (Settings > Linked devices > Link new device); this needs Foxl's own
signal-clion the computer, which has builds for a Mac and a Linux x64 computer only (on Windows and ARM Linux the Signal row says so instead of offering Connect), and the dialog says so when it is missing - Save, then press Start; the row says Connecting at once (its button is then Stop) and Connected once the channel is up, and later links to the conversations it has collected
A change to a running channel's settings takes effect when you save: the channel restarts with them, so someone you remove from the allowed list gets no further answer.

Other services are reached through skills: open Settings > Tools > Skills, and each skill's SKILL.md contains its setup steps, including what API keys or tools are needed.
Method 2: Browser Extension
For web-based services (Gmail, Outlook, Google Calendar, Slack web), the Chrome Extension provides direct access:
- Install the Chrome Extension
- Log into the service in Chrome
- Ask the agent to interact with it
No API keys needed - the agent uses your existing browser sessions.
Method 3: Shell Tools
Some integrations work through CLI tools:
# Email via himalaya
brew install himalaya
# Then: "Check my email"Signal needs none of this - it is a built-in adapter under Settings > Connect >
Messages that drives its own signal-cli and links your number by QR
code.
Example Workflows
Morning Slack Summary
"Every morning at 8am, check my Slack channels and summarize unread messages"
Uses: the slack integration + scheduling
Answering a team channel
Add your Telegram group (or a Slack channel id) under Settings > Connect > Messages and let Foxl answer questions there. The others in it get answers without your tools, files or memory unless you turn on Let other people use my full agent.
Uses: the Telegram or Slack adapter
Email-to-Slack Bridge
"When I get an email from client@northwind.example.com, send a summary to my Slack #clients channel"
Uses: browser_extension (Gmail) + the slack integration + scheduling
Music at a set time
"At 7pm, play my Focus playlist on the kitchen speaker"
Uses: sonos or spotify skill + scheduling
Integrations and channel adapters run on the Foxl desktop app. In the iOS app, connecting Microsoft 365 or Slack tells you to connect it in Foxl on your computer, signed in to the same account; once it is connected there, the agent can use it from your phone too, while your computer is on.
Adding New Channels
If you need a channel that isn't available as a built-in skill, you can:
- Create a custom skill with instructions for the agent
- Use the
exectool to run CLI commands for the service - Use the
browser_extensionto interact with the service's web interface
The Messages screen
Messages sits beside Chat in Foxl Agent. It holds your conversations with people (see Contacts and direct messages) and every conversation that arrived through a channel adapter. It is in the sidebar, and in the phone's tab bar, once you are signed in, or once an adapter is switched on under Settings > Connect > Messages. Signed out, with no adapter conversation to show, it asks you to sign in.
The first time a channel connects, the people you allowed are listed there right away, each as a conversation with no messages yet, so you can write first (on Telegram only to someone who has messaged your bot before: Telegram does not let a bot start a conversation). When one of them writes, it continues that conversation instead of opening a second one. This works for Telegram, Signal, Slack, Discord, iMessage, Mattermost, Nostr and Zalo; Matrix, Feishu, IRC, Twitch and Nextcloud Talk show a conversation once someone writes, and a channel that already has conversations keeps just those.
Conversations from your channels
Somebody messages your bot, Foxl answers (with your local tools when it is you), and the reply posts back to that platform. Here you see the whole exchange: who wrote, what they said, and what Foxl replied. Each reply is labelled, so an answer the AI wrote can never be mistaken for one you sent. While a channel is set up, these conversations stay out of your own chat list (search and Export everything still include them).
An adapter answers only in channels you list, and the list starts empty. A message from a channel you have not added is ignored - it is not "everyone in the workspace unless you say otherwise". That default is deliberate and load-bearing: your own channel runs use your local tools on your machine, and so does everyone's while Let other people use my full agent is on, so the allowlist is what stands between a workspace member and a shell. Add channels under Settings > Connect > Messages.
One consequence worth knowing: in a channel, the Slack adapter only sees messages that
@-mention the bot (so it is not reading your channel history). Direct messages arrive
only from the people in Allowed Users, and only once the Slack app subscribes to
message.im with the im:history scope and has the Messages tab on under App Home.
Everything the Slack bot posts has its &, < and > escaped, so a reply cannot notify a
whole channel (@channel, @here, @everyone), mention someone, or show a link whose label
is a different address from where it goes: a link is posted as its label followed by the
address. Bold, italic and code formatting still show.
Your messages and other people's
Each channel knows which messages are yours from one field you fill in: Your Chat ID for Telegram, Phone Number for Signal (your own Note to Self), and a Your ... field on the others - your member or user ID, the phone number or email you write from on iMessage, your Matrix ID, your username, your Open ID, your services account or your public key. Only that ID is you, matched the way the allowed list matches; a name or the text of a message never counts. Put yourself on the allowed list too, as before.
- Your messages get your full agent, exactly as before.
- Everyone else on the allowed list gets an answer from the conversation and what the model knows, and nothing more: no tools (no commands, files, browser, mail, schedules, web pages or web search, nothing sent or saved, no memory written) and none of your files or past conversations in its instructions: not your profile, your memory or your Personality (SOUL.md). What it remembers is what was said in the chat itself. It is told that someone other than you is writing, and what it cannot do.
- On Telegram, photos and files from someone other than you are not saved on your computer:
Foxl is told a photo or file was attached and answers without it. Their voice messages, audio
files and videos are listened to and answered like their text (up to 5 minutes a day each on
Amazon Transcribe), and are not saved either. Your own are saved in your workspace's
inbox/telegramfolder as before, and so is everyone's on a channel where other people get your full agent. - Let other people use my full agent, in the channel's settings, gives everyone on that channel's list your full agent again. It starts off for a channel you add.
- In a group, a room or a Twitch chat, Foxl is told that everyone there reads its answer, whoever wrote.
Over iMessage only an iMessage from your phone number or email is you. An SMS always counts as someone else, even one showing your own number, because anyone can send an SMS that shows it.
A channel saved before Foxl had this switch, with no ID of yours in it, keeps giving everyone the full agent, so your own messages do not change; its row asks you to add your ID. A channel that already had it (Telegram's Your Chat ID, Signal's Phone Number) gives everyone else the narrower answers right away.
What a channel run may do
Your own channel runs, and other people's where Let other people use my full agent is on, follow Settings > Safety > By where a run comes from > Messages, which starts on Full access - your Safety rules as they are, auto-approve included, which is how channel runs always worked. Two stricter choices:
- Ask first: shell commands, file writes, the browser and sending ask for approval in a Foxl window on this computer, as if auto-approve were off. With no Foxl window open the call waits until you answer it in Foxl, on this computer or your phone, and the thread is told it waits.
- Read only: the run gets only the tools that read - files, web pages, memory, past conversations. Every tool that can change something, your custom and MCP tools included, is removed, and a call to one is refused. The reply can still quote what the run read, so this keeps a message from changing your computer; it does not keep your files private from the person who asked.
Even on Full access, a message, mail or web-page text that carries a card number, a Korean resident registration number or a US Social Security number, and a browser step that sends money, moves it between accounts or trades, wait for your approval in a Foxl window, and so does a purchase, a cancellation or a step on a page Foxl could not read when you turned on its switch under Settings > Safety > Purchases or when it comes from someone else's thread, a purchase or a cancellation also when the run opened another site first, and a purchase when the page says it cannot be undone (see the browser's safety measures); with no Foxl window open, the run waits until you answer it in Foxl, on this computer or your phone, and then goes on.
Over iMessage an SMS from a listed number is answered too, and anyone can send an SMS that shows someone else's number, yours included. A listed number is therefore no proof of who wrote an SMS, which is why an SMS always gets the answers other people get. With Let other people use my full agent on and Messages on Full access, whoever fakes a listed number runs the agent with this computer's tools; if that matters to you, leave the switch off, or put Messages on Ask first or Read only.
Replying yourself
You can answer straight from the thread. Your reply goes out on the channel it came from, in the right Slack thread, and it is only recorded once the platform has actually accepted it.
Tapping a "message from Telegram" notification lands on the thread rather than on the assistant chat, and the Messages row in Settings links to the conversations it has collected.
Where the threads live
Threads live on the desktop, so they show up wherever your desktop is reachable - including a phone on the relay. They do not need a team or a shared workspace.
A mention that arrives while your computer is asleep or the app is quit is missed, not queued. The adapter holds an outbound connection rather than a mailbox, so there is nothing to replay when it comes back. Turn on Keep running when closed if you want the machine to keep answering after you quit the app.
The Messages screen belongs to Foxl Agent only. On code.foxl.ai, /channels
lands on Tasks like any other unknown path.
Contacts and direct messages
Messages is also where you talk to people, one to one. Press Contacts at the top of the list (on a phone, the first item of the ... menu), type the email address the person uses with Foxl and press Find. If a Foxl account uses exactly that address, you see their name and picture: press Add to contacts and they are in your contacts at once. Nobody is asked and nothing waits for an answer. If no account uses the address, it says so. No team or shared workspace is involved.
- New message opens your conversation with a contact. There is one conversation per person.
- They can answer right away. Adding someone puts them in your contacts only, not you in theirs, and they reply in the same conversation without adding you. On their side the conversation says you are not in their contacts, with Add to contacts and Block.
- Remove from contacts (the ... beside a contact) takes them off your list and nothing else: your conversation stays, and you can both keep writing in it.
- Block stops the conversation both ways: neither of you can write in it until you unblock. It does not remove anyone from your contacts. Unblock is beside a blocked contact, in the conversation, and in Settings > Account > Blocked accounts.
- Only the exact address finds someone: there is no list of people to browse. Each account can look up 30 addresses an hour and 100 a day (adding someone by address counts as one), and have 1,000 contacts.
- A direct conversation carries text, reactions, replies and calls. Pictures and files cannot be sent in it yet; the message box offers no attach button there.
A direct conversation works like the rest of this screen:
- Threads: Reply in thread is on a message's hover bar, its right-click menu and, on a phone, the long-press sheet. The reply goes under the message it answers, which then shows 3 replies with who replied and when; the thread opens beside the conversation on a wide screen and as its own screen on a phone. A link to a reply, or a notification about one, opens its thread. Loading older messages keeps your place.
- Statuses: Set a status at the top of the ... menu beside Messages takes an emoji, a line such as "In a meeting" and when it clears (30 minutes up to the end of the week, or never). It shows after your name and in your conversation's header, for the people you talk to. A person's dot is green while they are active and a hollow ring while they are away; Set yourself as away and Appear offline set it by hand.
- People: click or tap someone's name or picture on a message, and their card opens with their name, email, Message (opens your conversation with them; for someone you have no conversation with yet, Contacts opens on their address, one tap from Add to contacts) and Copy email.
- Unreads: a new message raises its conversation's unread count and moves it to the top of the list as soon as it is sent. On a computer or an iPad, More unreads at the foot of the list takes you to an unread conversation below the fold.
- Keyboard: Option+Up and Option+Down (Alt on Windows and Linux) move to the conversation above or below, and Option+Shift+Up and Option+Shift+Down to the previous or next unread one. Both can be changed in Settings > Shortcuts.
- Coming back: in the iPhone, iPad and Android apps and on app.foxl.ai, a conversation you read before opens on its last messages right away, also after the app was closed, and new messages, edits and deletions arrive a moment later. The device keeps the newest 50 messages of up to 24 conversations for a week at most, encrypted like the chat history Foxl keeps on the device, and deletes them when you sign out or another account signs in.
- Huddles: press the headphones in a conversation to call the other person. It rings them, on their phone too, and posts a "started a huddle" line in the conversation. A huddle invite is marked time-sensitive, so the ring can reach them inside Do Not Disturb, and it expires after two minutes. See Notifications.
- Profile pictures: the people you talk to see the picture you set on the Account page. A picture set from an image link is copied into your Foxl account when you save it, so their apps load it from Foxl rather than from the site you linked; the link has to point to a JPEG, PNG, WebP or GIF of up to 512 KB.
- Limits: each account can post about 1,000 messages, edits, reactions and typing indicators a day (a message counts once per 2,000 characters) and 120 a minute. Over a limit the action is refused and nothing is saved; the message says whether to wait a minute or, for the daily limit, about how many hours until it resets.
Team history
Teams, their channels and their shared files are retired. Nothing they held is deleted: if you were in a team, it is listed under Team history at the foot of Messages, and opening it shows that team's channels and direct messages to read. Nothing new can be posted there; to keep talking to someone from a team, add them to your contacts.
Conversations
Chat sessions, temporary chats, projects, pinned chats, pop-out windows, search, the message box, keyboard shortcuts, what a reply shows, locked chats, chat settings, and export
iMessage setup guide
Text Foxl from your iPhone over iMessage: give Foxl its own Apple Account in a second Mac user, step by step.