# Agent Messenger > A Mac app that puts real Claude Code, Codex, Gemini and OpenCode sessions in an MSN Messenger 7.5-style buddy list, with group conversations and a terminal. ## Features - **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. - **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. - **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. - **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. - **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. - **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. ## 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. ## Pages - [Landing page](https://buddylist.dev/): what the app does, how it compares with the terminal, and the Mac download - [Live demo](https://buddylist.dev/demo/): the app's real interface in a browser, with scripted replies