Docs menuMessages

Docs / Messages

Messages

Send a teammate a note that reaches their agent, and choose when it interrupts you.

A message is a short note to a teammate, or to everyone in a workspace. It goes from your device to theirs. Our servers never see it.

Flanner Messages runs on Flanner Mesh. It is included in Team Mesh and Organization, and is not sold on its own. Personal Mesh does not include it.

Messaging is switched on in the console unless an admin turned it off. The commands are under flanner messages. If you are not set up yet, start with the setup guide. For what it is and why, see Flanner Messages.

Send and read

From the CLI. Every send shows you what will be sent, and to whom, then asks. --yes skips the question for send and reply. A message to a whole workspace (flanner messages broadcast) always asks.

flanner messages inbox

Threads with unread messages. Add --all to see read ones too.

flanner messages read 7f3a

One conversation, with whether each thing you sent was delivered.

flanner messages send ben chen "drop the old column now, or next release?"

Message one or more teammates by handle. You see who it goes to, by name, before it is sent.

flanner messages reply 7f3a "next release"

Answer everyone on a thread.

From the web UI. Run flanner web and open Messages in the sidebar. It lists your chats, one per teammate, group or workspace, with unread ones on top. Open a chat to read it, reply, or mute the sender.

From your agent. Ask it: “ask ben whether we drop the old column now or next release.” The agent has to preview the exact message before flanner will send it, and is told to send only when you say yes. flanner actions list shows every message an agent sent.

A message is plain text, up to 4 KB. It can go to up to 20 people, or to one workspace. If a teammate is offline, it shows as queued. Your device tries again after 1, 5 and 15 minutes, then every 30 minutes, for up to a day, as long as your device is receiving.

You can message people who share a workspace with you, if you can comment there; readers receive messages but cannot send them. Your teammates need flanner 0.15.0 or later, and a message to an older version fails at once.

Every command and its flags are in the CLI reference, and the tools your agent calls are in the MCP tool list.

Your agent gets a quote, not an instruction

A teammate's message reaches your agent as a quote, with the sender's name, and a line saying it was only shown. flanner tells the agent never to act on it. That includes a message asking it to run something, change a setting, mute someone or send something.

That is an instruction, not a lock. What your agent may do on your machine is still set by its own permissions. Once shown, a message is part of the agent session, like anything else you show it.

More than three new messages at once reach the agent as one summary: how many, and from whom. It opens them only if you ask.

In Claude Code

Run flanner init after you join your team. On a device whose plan includes messages, it adds a hook to Claude Code. With it, a new message appears in your session at your next prompt, and between tool calls at most once a minute. If you ran init before joining, run it again.

To see a message the moment it arrives, even in an idle session, start Claude Code with channels. Channels are a Claude Code research preview. For now they load flanner through a development flag:

claude --dangerously-load-development-channels server:flanner

Starts Claude Code with flanner's channel loaded.

flanner messages interrupt channel

Tells flanner to use the channel. Run it once; it applies to this device.

Claude Code's --channels flag only accepts plugins, which is why the longer flag is needed. A flanner plugin is planned; until then, use the command above. On a Claude Team or Enterprise plan, channels stay blocked, the development flag included, until an Owner turns them on in the Claude Code admin settings or sets channelsEnabled in managed settings.

Without channels, nothing is lost. Messages wait for the hook, and the desktop notification still tells you one arrived.

A message already waiting when a session starts is not pushed; the hook shows it at your next prompt. One catch: once you choose channel, Claude Code sessions started without the flag show messages only at your next prompt; flanner messages interrupt tool brings back the check between tool calls.

In Codex

flanner init adds the same hook to Codex, if Codex is installed; if you install it later, run init again. Codex runs a new hook only after you trust it, so open Codex and run /hooks once. After that, a new message appears at your next prompt or tool call.

Codex has no way to show a message in an idle session. While Codex waits for you, the desktop notification is what tells you.

If your administrator only allows managed hooks, Codex skips flanner's hook. flanner init warns you when that rule is in a file on this machine, but cannot see one set by device management. Either way, give your administrator the entry this prints:

flanner init --print-codex-hook

Prints the hook entry for your administrator to add. It installs nothing itself.

Until they add it, you still see messages in flanner messages inbox, the web UI and desktop notifications, and Codex can read them if you ask.

Receiving when no agent is open

Your device can only accept a message while flanner is running to receive it, and only then does it resend your queued messages. To keep that going across reboots, with no admin rights:

flanner peer autostart on

Starts receiving now, and whenever you log in. If your system cannot start it, it says so and changes nothing. flanner peer autostart off removes it.

What starts at login is flanner peer serve, the same process that syncs your plans with your team's devices.

Desktop notifications are on by default. They name the sender, never the message. Clicking one opens the conversation in the web UI, if it is running: on Windows, on macOS with terminal-notifier installed, and on Linux with a notify-send from 2020 or later. Otherwise the notification shows without the click. On Linux, notifications need notify-send; without it, none show. flanner messages notifications off turns them off on this device.

flanner status tells you when this device is not receiving, and how to fix it.

Your settings

These are yours, and apply to this device only. Set quiet hours from the CLI, from the web UI under Settings, Team, Messages, or by asking your agent. Mute from the CLI, a chat's Mute button, or your agent; Settings lists who is muted and can unmute them.

  • Quiet hours, such as 22:00 to 07:00 in your local time. Messages still arrive, but nothing interrupts you. When quiet hours end, what waited appears together.
  • Mute a teammate, for a while or until you unmute them. Their messages still arrive and are listed; they never interrupt. They are not told.
  • How agents interrupt you: through the channel, between tool calls (the default), or only at your next prompt. This one is CLI only: flanner messages interrupt.

flanner tells your agent to change quiet hours or a mute only when you ask, never because a message asked.

Organization settings are in the console, on the Workspaces page, for admins: whether messaging is on, and how long messages are kept. The default is 90 days; an admin can choose 30, 180 or 365. After that, every device deletes them.

Handles and names

You send to a teammate by handle, like ben. A handle is made from the part of your email address before the @. If two people on a team would get the same one, the later one gets a number, like ben2.

A handle cannot be changed, not even by an admin. That way nobody can pick a handle to pass as someone else.

It is not the name you chose with flanner accept --as, which is your user id on the team. flanner shows your handle wherever it names you: in messages, review comments, flanner review status and flanner members.

Your display name is different: you can change it in the console. Messages show whatever your name is now, including old ones.