{"slug": "show-hn-buddylist-coding-agents-in-an-msn-style-messenger", "title": "Show HN: Buddylist – Coding agents in an MSN-style messenger", "summary": "A developer released Buddylist, an MSN-style messenger desktop app that runs coding agents such as Claude, Codex, Gemini and OpenCode as contacts in a project folder. Buddylist gives each contact its own git worktree and branch, lets multiple agents take turns or answer at once in a shared chat via @mention, and replaces terminal permission prompts with Accept, Always allow or Decline invitations. The app also adds a Changes tab with side-by-side diffs and reviewer threads, a Browser tab for localhost:3000, a Subagents tab with per-subagent Stop controls, and status-bar bars for context window and plan session and weekly limits.", "body_md": "| `claude` ,`codex` ,`gemini` or`opencode` in a project                     folder | **Add a contact** for the folder, pick its Service, then double-click it | \n| A terminal tab for every project | **One contact list** , grouped by project, status, service or your own groups | \n| Pasting one agent's answer into another's terminal | **Invite it into the conversation** : they take turns or answer at once, and hand over with an                     @mention | \n| Permission prompt | **An invitation** : Accept, Always allow or Decline | \n| `Esc` to interrupt | **Stop** , in Send's place while the agent works, or**a nudge** , which shakes the window too | \n| `git worktree add` , then one more terminal tab | **A worktree and branch for every contact** , and the + on one adds another agent on the project | \n| One more terminal tab for a second agent in the same folder | **A chat tab** : ⇧⌘A opens another chat in the folder, with any agent, over the                     conversation | \n| `git status` and`git diff HEAD` | **The Changes tab** : every file's diff, side by side if you like, with your reviewers' threads                     under their lines | \n| `gh pr checks` , again and again | **Tags on the contact's row** , such as Passed or 2 failing, a mark on View PR and a toast when                     they change | \n| Switching to a browser to look at `localhost:3000` | **A Browser tab** beside the conversation, with your dev server in it | \n| Coming back every few minutes to see if CI is green | **A check-in** : Claude checks back on its own, and says when it is | \n| `/effort` before every task, for every agent | **Let the agents decide** : one of them picks a level for everyone about to answer, and says why | \n| `/rewind` to take back what you said | **Rewind to this message** , or Edit it: the conversation goes back to just before it | \n| `claude --resume --fork-session` to try another way | **Fork chat from here** under any reply: a new chat that goes on from that point | \n| `cat` , or the folder open in an editor, to read a file | **All files** beside the conversation: the folder as a tree, and each file in a tab of its own | \n| `cd` to the worktree, then`code .` | **Open** in the toolbar: the folder in your editor, a terminal, Finder or on GitHub | \n| `gh pr create` , then a new branch once it is merged | **Create PR** in the toolbar, then**Continue** on a fresh branch once it is merged | \n| `git merge origin/main` , then fixing the conflicts by hand | **Fix conflicts** in the To: line: the agent merges, resolves them, runs the tests and pushes | \n| Flipping through tabs to see who has finished | **A menu-bar icon** with every contact's status and an unread count | \n| One more tab for your own shell | **Terminal** beside the conversation, in the contact's folder: ⌘J, with tabs you can name | \n| Opening three more tabs and typing the same command into each | **Ask for terminals** , such as \"three running the tests\", and Claude opens them with the command                     typed in | \n| Subagents scrolling past in the output | **The Subagents tab** : what each subagent is doing right now, with a Stop for each | \n| `/context` and`/usage` | **Bars in the status bar** for the context window and your plan's session and weekly limits | \n| `/status` and`/mcp` | **The Session tab** : the account, folder and branch, the context window and the MCP servers, at a                     glance | \n| `/login` to another account once one reaches its limit | **Your other Claude accounts** : accept, and the conversation goes on in the next one | \n| `gh run view --log-failed` , then`gh run rerun --failed` | **The Checks tab** : why each failed check failed, Send to Claude to have it fixed, and Re-run                     failed | \n| `gh pr merge --auto` | **Auto-merge** in View PR's menu: it is merged once its checks pass | \n| `gh repo clone` or`git init` , then`cd` | **Add project** : open a folder, clone from GitHub or start a new one | \n| `gh issue view` , then pasting the issue into a prompt | **A contact from the issue** or pull request: its text waits in the message box as a draft | \n| `gh pr view` and counting what an agent cost | **Rest the mouse on a contact** : its branch, pull request, changes and today's cost | \n| `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 | \n| A setup script and a copied `.env` for every worktree, by hand | **Project settings** : setup and run scripts, variables, and the files every new worktree gets | \n| The agent's streamed reply | **\"Claude says:\"** or \"Codex says:\", with Markdown and emoticons, and a line under the newest                     one:*\"Gemini is running npm test 0:12\"* | \n| Tool calls: commands, edits, file reads and searches | **A line for each** , like*\"OpenCode ran `npm test`\"* , with Show output and Show                     changes links | \n| A terminal bell when an agent needs you | **A toast** , a dock bounce and a nudge, with sound | \n| Do Not Disturb | **Busy** , your own status, keeps it quiet until you are back Online | \n| 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 | \n| Reading a plan in the scrollback before you approve it | **The plan in a pane** beside the conversation, with a tab for each one | \n| `/model` ,`/effort` and`/fast` | **The model, effort and ⚡ fast mode badges** under the conversation: click one, or let the                     agents decide | \n| `/compact` ,`/review` and other slash commands | **The Activities menu** lists every command your agent has. Or type`/` and they                     complete as you type | \n| `/output-style` in Claude Code | **Tools > Output style** , for that contact only | \n| Typing every message | **Hold F2 and say it** : a voice clip, turned into text on your computer, and sent at once if you                     like | \n| Resuming a session, such as `claude --resume` | **Conversations pick up** where they left off, and Continue in message history picks up an older                     one | \n| `/clear` , and the old session is out of sight | **New Chat** archives the conversation, and View message history finds it again | \n| `grep` through old session transcripts | **View all message history** : every contact's conversations in one window, newest first, with a                     search box |", "url": "https://wpnews.pro/news/show-hn-buddylist-coding-agents-in-an-msn-style-messenger", "canonical_source": "https://buddylist.dev/", "published_at": "2026-10-19 14:54:42+00:00", "updated_at": "2026-10-19 15:18:11.702083+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "ai-products"], "entities": ["Buddylist", "Claude", "Codex", "Gemini", "OpenCode", "GitHub"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/show-hn-buddylist-coding-agents-in-an-msn-style-messenger", "markdown": "https://wpnews.pro/news/show-hn-buddylist-coding-agents-in-an-msn-style-messenger.md", "text": "https://wpnews.pro/news/show-hn-buddylist-coding-agents-in-an-msn-style-messenger.txt", "jsonld": "https://wpnews.pro/news/show-hn-buddylist-coding-agents-in-an-msn-style-messenger.jsonld"}}