**What it is:** buddy is a desktop app for people who run several AI agent CLIs in parallel (Claude Code, Codex, Gemini CLI, opencode). Each agent runs in its own PTY pane — split layouts, session history with one-click `--resume`, isolated login profiles per account (separate `CLAUDE_CONFIG_DIR` / `CODEX_HOME`), and a "Pulse" overview showing which agent is waiting for you. There's also a built-in chat that drives the CLIs headless (`claude -p --output-format stream-json` / `codex exec --json`), so it rides your existing subscriptions — no API keys.
**Built with Claude Code, for Claude Code.** Full transparency: Claude wrote the large majority of this codebase — the Rust backend (Tauri 2, portable-pty, tokio, rusqlite) and the React/xterm.js frontend — across multi-day sessions, with me directing, testing on my machine, and feeding back screenshots when the UI broke.
**Where Claude actually earned it** (the parts I couldn't have done quickly myself):
- Diagnosed why sessions never showed "exited" on Windows: ConPTY doesn't EOF the reader when a child exits naturally → it added a dedicated waiter thread per session blocking on `child.wait()`.
- Hit Rust's CVE-2024-24576 (BatBadBut) hardening in the wild: npm installs the CLIs as `.cmd` shims, and Rust refuses to spawn them with `"` in any argument — inline JSON flags silently can't work. It rewrote the flag to pass a settings file instead.
- Fixed the classic "app works in terminal, broken from the dock" on macOS/Linux by resolving the login shell's PATH at startup (`$SHELL -ilc env`, with timeout fallbacks).
- Found a UI bug from a screenshot I pasted: an invisible layout container was eating every click on the empty-state buttons. It traced hit-testing through the component tree and fixed it with one `pointer-events` line.
The workflow that worked best: keep a persistent memory file of decisions, make Claude verify every pass (`cargo test` `clippy -D warnings` `tsc` vitest — currently ~45 Rust tests, 148 frontend tests), and paste real screenshots instead of describing bugs.
**Free & open source:**
github.com/ryan-mt/buddy — build it with `npm run tauri build`. v0.1, daily-driven on Windows; macOS/Linux hardened recently but less battle-tested. Feedback welcome.