Agent Messenger Download
NewAsk Claude for terminals, and hands-free voice clips

Chat with your coding agents like it's 2005.

Agent Messenger gives every project a contact in a buddy list. Double‑click one and you're in a real Claude Code, Codex, Gemini or OpenCode session: the same agent, tools and login as your terminal.

Apple Silicon (M1 or newer) · Not notarized yet. First-launch help

The Agent Messenger contact list, grouped by project with pull request tags on its rows, next to a conversation window where Claude and Codex share a project and Codex asks to run a command, with a toast in the corner for an incoming message
Try the live demo in your browser. The app's real interface, playing itself. Click anything in it to take over. The app's real interface, and it is yours: double-click a contact and say anything. Replies in the demo are scripted. The app talks to the real agents. Open it full screen

What it is

Real coding agents, in a buddy list

It is not a chatbot skin. Every contact is a real agent that can read your project, run commands and edit files. You see all of it as a classic messenger.

Four agents, one list

Pick Claude Code, Codex, Gemini or OpenCode when you add a contact. Claude Code is built in. The others run the CLI on your Mac, with the same login, settings and MCP servers.

  • Claude CodeBuilt in
  • CodexYour codex CLI
  • GeminiYour gemini CLI
  • OpenCodeYour opencode CLI

The contact list

A contact for every project

Add a project folder and it shows up as a buddy. Double-click it to open a conversation there. The list starts out grouped by project, and its ... menu groups it by status, service or your own groups, filters it to one project and sorts it. Favorites stay on top, and archived contacts fold away.

Status at a glance

Online means ready. Busy shows what the agent is working on. Away means it is waiting for you to approve something.

Pull requests in sight

A contact whose branch has a pull request wears tags at the end of its row: Merged, Conflict, 2 failing, Running or Passed. A toast tells you when checks start failing or have all passed, and a line under your picture counts the pull requests waiting for your review.

A conversation

Invitations, not prompts

When an agent wants to run a command or edit a file, you get an invitation: Accept, Always allow or Decline. Each tool call appears as a line in the conversation, with its output or its changes one click away. Questions come one at a time, like slides: pick an answer and the next one is up.

Nudge to interrupt

A nudge shakes the window and stops the agent. When an agent needs you, it nudges you back.

The whole toolbox

Permission modes, slash commands that complete as you type, output styles, file attachments and pasted screenshots.

Group conversations

Two agents, one conversation

Invite another contact into a conversation, whichever service it runs on, or make a new one right there. They work in the same folder and answer in turn, and one hands over to the other with an @mention.

They pick their own effort

Give the goal and let the agents decide how hard each of them should think. An effort check comes first: one agent names a level for everyone about to answer, and says why.

A branch for every agent

Every contact in a git repository works in its own worktree and branch, so your folder stays as it is and two agents never change each other's files. Click the + on a contact for another agent on the project.

Beside the conversation

The plan, your shell and the diff, one tab away

A pane opens beside the conversation and the window grows to make room for it. Each plan, terminal and list of changes gets a tab of its own.

Plans beside the chat

In Claude's plan mode, the plan opens in a pane beside the conversation, with a tab for each plan. Approve it there, or say what should change.

Your own terminal

Press ⌘J for your shell in the contact's folder, beside the conversation. It is a real terminal with tabs you can add, name and reorder, and its shells keep running when you put it away.

Ask Claude for terminals

Say "a terminal for the tests, running npm test" and Claude opens it beside the conversation, with that name on its tab and the command typed in. It asks first when a command is to run.

See what changed

Changes in the toolbar opens a tab that lists every file the folder has not committed yet, with the lines it gained and lost. Click one for its diff. It looks again when a turn ends.

Claude (api) - Conversation
Add a dark theme
  1. Add color tokens for dark mode
  2. Switch them with prefers-color-scheme
  3. Check contrast on every screen
Would you like to proceed? Yes, auto-accept edits Yes, ask before edits No, keep planning

And the rest

Everything a messenger should do

  • Start from an issue

    Add a contact from a GitHub issue or pull request, by number or link. An issue names the contact and its branch, and a pull request checks out its own. The title and text wait in the message box as a draft.

  • Add a project your way

    Open a folder on your Mac, clone a repository from GitHub by its address or from a list of your own, or start a new project with a git repository and a first commit. Each ends in Add a Contact with the folder filled in.

  • Run your project

    Run starts the project's own command, such as a dev server, in the contact's folder. Every contact gets a port of its own, so two agents on one project can each run theirs at once.

  • The model for the job

    Badges under the conversation show a contact's model and effort level. Click one to switch, or search the service's own list for another model. In a group conversation every agent has its own.

  • In your menu bar

    A menu-bar icon lists every contact with its status and counts what is unread. Control+Option+M brings the contact list to the front from any app.

  • Busy means busy

    Set yourself to Busy and the toasts, sounds and nudges stop. Back Online, anyone still waiting for an answer asks again. Five idle minutes show you as Away.

  • Voice clips

    Hold F2 and say your message. It is turned into text on your Mac by whisper.cpp and typed into the message box, so you can fix it before you send it. Or have it sent as soon as you stop talking.

  • Picks up where you left off

    Conversations resume when you reopen the app. A toast and a dock bounce tell you when an agent replies in the background.

  • Message history

    A new chat archives the old one. View message history lists a contact's past conversations, searches them and saves any of them as Markdown.

  • Search every conversation

    The contact list's search box also looks through every conversation, past ones included. Open a match and its message history comes up with the search filled in.

  • Sounds on

    The original MSN Messenger sounds: the chime when a message arrives, the nudge and the sign-in jingle. The Tools menu turns them off.

  • Make it yours

    Reply with emoticons in your own font color, or send one of 15 classic winks that play over the conversation with sound. Add your own emoticons, winks and display pictures too.

Terminal to messenger

Same agents, different window

Everything you do in a terminal has a place here. Usually a nicer one.

Terminal to Messenger
In the terminal In Agent Messenger
claude, codex, gemini or opencode in a project folder Add a contact for the folder, pick its Service, then double-click it
A terminal tab for every project One contact list, grouped by project, status, service or your own groups
Flipping through tabs to see who has finished A menu-bar icon with every contact's status and an unread count
git worktree add, then one more terminal tab Every contact gets its own worktree and branch; the + on one adds another agent on the project
Pasting one agent's answer into another's terminal Invite it into the conversation: they answer in turn and hand over with an @mention
Permission prompt An invitation: Accept, Always allow or Decline
Esc to interrupt Nudge: shakes the window and stops the agent
git status and git diff HEAD The Changes tab beside the conversation: the files that changed, each with its diff
One more tab for your own shell Terminal beside the conversation, in the contact's folder: ⌘J, with tabs you can name
Opening three more tabs and typing the same command into each "Open three terminals running the tests": Claude opens them, with the command typed in
gh pr checks, again and again Tags on the contact's row, such as Passed or 2 failing, and a toast when they change
gh repo clone or git init, then cd Add project: open a folder, clone from GitHub or start a new one
gh issue view, then pasting the issue into a prompt Add a contact from the issue or pull request: its text waits in the message box as a draft
gh pr view and counting what an agent cost Rest the mouse on a contact: its branch, pull request, changes and today's cost
npm run dev in one more tab, on a port you pick by hand Run in the toolbar: the project's own command, on a port of its own for each contact
The agent's streamed reply "Claude says:" or "Codex says:", with Markdown and emoticons, and "Gemini is typing a message..."
Tool calls: commands, edits, file reads and searches Lines like "OpenCode ran npm test", with Show output and Show changes links
A terminal bell when an agent needs you A toast, a dock bounce and a nudge, with sound
Do Not Disturb Your own status: Busy keeps it quiet until you are back Online
Permission modes, approval policies and sandboxes The Mode menu, with each agent's own modes, such as Ask before acting, Plan mode and Never ask
Reading a plan in the scrollback before you approve it The plan opens in a pane beside the conversation, with a tab for each one
/model and /effort The model and effort badges under the conversation: click one, or let the agents decide
/compact, /review and other slash commands The Activities menu lists every command your agent has. Or type / and they complete as you type
/output-style in Claude Code Tools > Output style, for that contact only
Typing every message Hold F2 and say it: a voice clip, turned into text on your Mac, and sent at once if you like
Resuming a session, such as claude --resume Conversations pick up where they left off
/clear, and the old session is out of sight New Chat archives the conversation, and View message history finds it again
grep through old session transcripts The contact list's search box looks through every contact's conversations

Free, for your Mac

Get Agent Messenger

Agent Messenger Setup
  1. Download for Mac

    For Macs with Apple Silicon (M1 or newer).

    Download for Mac
  2. Install it

    Open the downloaded .dmg and drag Agent Messenger to Applications.

  3. Open it for the first time

    This release isn't notarized by Apple yet. Try opening Agent Messenger from Applications, then go to System Settings > Privacy & Security > Open Anyway and confirm. Apple's first-launch guide explains the prompt.

  4. Add your first contact

    Pick a project folder and a service, then say hello. Each agent uses the login it already has on your Mac. Claude Code is built in and uses your Claude Code login, or an ANTHROPIC_API_KEY. For Codex, Gemini and OpenCode, install that CLI and sign in to it once.

System requirements
  • macOS on Apple Silicon (M1 or newer)
  • A login for the agents you use: Claude Code (or an Anthropic API key), Codex, Gemini or OpenCode
  • Claude Code is built in. Other contacts need the Codex CLI, Gemini CLI or opencode
  • Optional: whisper.cpp for voice clips and the GitHub CLI for pull requests and issues

Good to know

Questions

What is Agent Messenger?

Agent Messenger is a Mac app for chatting with the Claude Code, Codex, Gemini and OpenCode coding agents through an interface styled after MSN Messenger 7.5. Every project folder is a contact in a buddy list, and every conversation is a real agent session that can read the project, run commands and edit files.

When can I download it?

You can download Agent Messenger for Mac now. It runs on Apple Silicon (M1 or newer). See the first-launch instructions, or try the live demo in your browser with scripted replies.

Is this just a chat window with a retro theme?

No. Each conversation runs a real Claude Code, Codex, Gemini or OpenCode session, with the same agent loop, tools and settings as claude, codex, gemini or opencode in your terminal. It can read your project, run commands and edit files.

Do I need to install the agents myself?

Not Claude Code: it comes with the app. Codex, Gemini and OpenCode are not bundled, so install the ones you want. Each agent signs in the way it does in your terminal. For Claude Code that is a Claude Code login on this Mac, or an Anthropic API key.

How do I chat with Codex?

Choose Codex as the Service in Add a Contact. Codex is not bundled, so install the Codex CLI first with npm install -g @openai/codex and run codex login. It uses the same login, config.toml, AGENTS.md and MCP servers as codex in your terminal. Codex contacts have their own Mode menu, and Activities has /compact, /review and your Codex skills. They have no plan approval.

How do I chat with Gemini or OpenCode?

Choose Gemini or OpenCode as the Service in Add a Contact. Neither is bundled. For Gemini, install Gemini CLI 0.33 or newer with npm install -g @google/gemini-cli and run gemini once to sign in. For OpenCode, run npm install -g opencode-ai and opencode auth login. Both use the same settings, commands and MCP servers as in your terminal, and each has its own Mode menu.

Can two agents work on the same project together?

Yes. Click Invite in a conversation and pick another contact, whichever service it uses, or click the + there to make a new one with its service and model. Everyone in the conversation works in its folder and answers in turn, each seeing what was said before. Type @ and a name to ask only one of them. An agent can hand over to another the same way, for up to six turns per message. Each agent has its own mode, model and effort level, and what any of them asks for arrives as an invitation that says who is asking.

Can two agents work on one repository without undoing each other's work?

Yes. Every contact you add in a git repository works in its own git worktree in ~/.agent-messenger/worktrees/, on a new branch, so the folder you picked is never touched. For another agent on the same project, point at a contact and click the + at the end of its row, or right-click it and choose New contact in this project. The branch is already named: press Enter, or type a name of your own. The new contact keeps the service, model and mode of the first. Files git doesn't track, such as node_modules and .env, are not copied. Deleting the contact can remove its worktree too, and the branch and its commits always stay. In a folder that is not a git repository, contacts work in the folder itself.

Is there a terminal in the app?

Yes. Terminal in a conversation's toolbar, or ⌘J, opens your own shell in that contact's folder, beside the conversation. It is a real terminal, so vim, htop, colours and Ctrl+C work as they do in Terminal. The + after the tabs opens another one, each in a tab you can rename and drag into another order. Putting the terminal away keeps its shells running, and closing the window closes nothing: a terminal belongs to its contact. The agent doesn't see what you type or what is printed.

Can an agent open terminals for me?

A Claude contact can. Say "open three terminals", or "a terminal for the dev server and one for the tests", and each gets a tab beside the conversation, with the name you gave it. Ask for "two terminals running claude" and the command is typed into each one once its shell is up. You are asked first when a command is to run, and shown the command. It is typed once: the agent can't type into a terminal afterwards, and isn't told what the command prints. Codex, Gemini and OpenCode can't do this yet.

Can I see what an agent changed?

Yes. Every edit in the conversation has a Show changes link. For everything at once, open the Changes tab beside the conversation with Changes in the toolbar or ⇧⌘G. It has a row for every file the folder has not committed yet, with the lines it gained and lost, and a click shows a file's diff as git diff HEAD prints it. It looks again when a turn ends. The tab only reads: it never stages, commits or undoes anything.

How do I add a project that is on GitHub?

Choose Add project in the contact list's ... menu. Open GitHub project... clones a repository: type its address or owner/name, or pick one of your own from a list. Open project... picks a folder that is already on your Mac, and Quick start... starts a new project with a git repository and a first commit, and a private repository on GitHub if you leave that box ticked. Each ends in Add a Contact with the folder filled in. Listing and making repositories needs the GitHub CLI; cloning by address works without it.

Can I start an agent on a GitHub issue or pull request?

Yes. Add a Contact has a GitHub issue or pull request field: type a number or paste a link. An issue names the contact after its title, and the branch after its number and title. A pull request checks out its own branch, also from a fork, so what the contact pushes goes to the pull request. The title, text and link wait in the message box as a draft, and nothing is sent until you press Enter. It needs the GitHub CLI, and the app only reads from GitHub.

Can I run my dev server from a conversation?

Yes. Run in a conversation's toolbar starts your project's own command in that contact's folder. The first time it asks for the command and suggests one, such as the dev script of your package.json. Each contact gets a port of its own in PORT, so several contacts on one project can each run a dev server at once. The conversation shows what was started, a link to localhost and the output. The agent is not told, and Stop Run stops everything the command started.

Can I choose which model an agent uses?

Yes. Pick a model in Add a Contact, or click the model badge under a conversation to switch later. The list is searchable and takes any model by its exact name, and Add models... chooses which ones it offers. Claude Code and Codex are asked for their own lists, so new models show up by themselves. The effort badge next to it sets how hard the model thinks, for the models that take a level. Both are remembered for the contact, and nothing is written to your Claude Code or Codex settings. Default leaves the model to your own settings for that service.

Can the agents decide how hard to think?

Yes. Tick Let Claude decide at the bottom of a contact's effort menu and it picks its own level for every message you send. First it replies with a level and a few words on why, then it answers on that level. In a group conversation, Tools > Effort > Let the agents decide works the same way: before anyone answers, one agent names a level for everyone about to answer, such as @Claude(high) @Codex(low). A level you choose yourself holds until the agents pick again. Gemini and OpenCode have no effort levels.

What happens when an agent makes a plan?

In plan mode, Claude writes a plan and waits for your answer before it changes anything. The plan opens in a pane beside the conversation, and the window grows to make room for it. Each plan has a tab: approve it, or choose No, keep planning and say what should change. The conversation keeps a View plan link, and File > View a plan lists every plan and how you answered it. Codex, Gemini and OpenCode have no plans to approve.

Can an agent change my files without asking?

Not unless you let it. Claude, Codex and Gemini ask first by default, and every command or edit arrives as an invitation. The Mode menu can loosen that. Never ask lets the agent run anything, so only use it in folders you don't mind breaking. OpenCode is the exception: its Build mode changes files and runs commands without asking, unless your opencode.json says otherwise.

How do voice clips work?

Hold F2, say your message and let go. What you said is typed into the message box, so you can fix it before you press Enter. Your voice is turned into text on your Mac by whisper.cpp, and the recording never leaves it. Neither whisper.cpp nor its model is bundled: run brew install whisper-cpp and download a model. Tools > Voice clips changes the shortcut, and can send what you said as soon as you stop talking, without waiting for Enter.

How does it know about my pull requests?

It asks the GitHub CLI. Install gh and run gh auth login once. A contact whose branch has a pull request then wears tags at the end of its row that say how it stands: Merged, Conflict, a count such as 2 failing, Running, Passed or Closed. Click the tags to open the pull request on GitHub. A toast tells you when checks start failing or have all passed, and the line under your picture counts the pull requests waiting for your review. The app only reads, and without gh all of it is left out.

Can I stop it from interrupting me?

Yes. Set your own status to Busy or On The Phone and the toasts, sounds, nudges and dock bounce stop, while the dock icon and the menu bar keep counting. Appear Offline hides the counts too. Nothing is answered for you: when you go back Online, every contact still waiting asks again. The app also shows you as Away after five minutes without input.

Where are my conversations stored?

On your Mac. Contacts and chat history live in ~/Library/Application Support/Agent Messenger/, and each agent keeps its own session transcripts, such as Claude Code's in ~/.claude/.

Can I find an old conversation again?

Yes. Starting a new chat moves the conversation to message history instead of deleting it. Right-click a contact and choose View message history to browse and search its past conversations, save one as Markdown or delete it. The newest 50 per contact are kept, on your Mac. To look through every contact at once, type in the contact list's search box: from two characters on, it also lists the contacts whose conversations contain your text.

What if I'm done with a project for now?

Archive its contact. Right-click it and choose Archive contact: it stops, its conversation window closes and it moves to an Archived section that stays folded. Its message history, folder and worktree are kept. Restore contact brings it back as it was, and its conversation picks up where it left off. For the contacts you use most, Add to favorites lists them at the top.

Can I use my own emoticons and winks?

Yes. Choose Tools > Open emoticon pack folder, drop pictures into emoticons, winks or pictures, and restart the app. GIF, PNG, WebP and JPEG files work. Put an audio file with the same name next to a wink and it plays with sound. The app comes with its own smileys and 15 classic winks, and a file with the same name replaces the bundled one. Make sure you have the right to use what you add.

Does it play the original MSN sounds?

Yes. Both the app and this demo play the original MSN Messenger message, nudge and sign-in recordings. The 15 bundled winks also play their original soundtracks.

Does the app send anything about me?

Only anonymous counts, sent to PostHog under a random id: that the app was opened and which of its features were used, such as a terminal or a group conversation, with the app's version and your version of macOS. Nothing you or an agent wrote goes along, nor the name of a folder, file, branch or contact. Turn the counts off with Tools > Share anonymous usage data in the contact list. This page counts its visits and downloads as well, without cookies.

Is there a Windows or Intel Mac version?

Not yet. The first release is for Macs with Apple Silicon.

Say something

Feedback, bugs and requests

Something broken, or something missing since 2005? Send it from here, or from the app's Help menu.

Your agents have just signed in.

Say hello. They have been waiting since 2005.