Why I Built Coda
The story behind building a native macOS workspace manager — and why AI agents need to see your dev environment.
It Started With Too Many Terminal Tabs
I run several products under Simply Fluent. That means on any given day I'm working across multiple codebases, each with their own stack — different run commands, different ports, different dependencies. Every time I sat down to work, the same ritual: open a terminal, cd into the right folder, try to remember if it's npm run dev or yarn start or make serve, repeat for the next project, and the next one.
It's the kind of friction you stop noticing because it's always been there. But it adds up. Five minutes here, ten minutes there, multiplied by every single day.
So I built a little tool to define my projects and start them with one click. Nothing fancy. Just a list of commands and a button.
Then I Couldn't Find My Windows
Some of my projects share the same backend. I'd have the API running in one terminal, but I'm working on two different frontends that both need it. So now I've got five or six terminal windows open and I can't remember which one has the backend logs. I'm Cmd+Tab-ing through windows, scanning for the right one, losing my train of thought every time.
That's when I built views — the ability to compose different terminals into layouts. Put the API logs next to the frontend logs. Save that arrangement. Switch between views depending on what I'm working on. Same terminal can show up in multiple views because it's the same running process, just visible in different contexts.
And I haven't even mentioned the stress of a crash or a reboot — having to remember what was running, which ports, which windows were where. With views, Coda just remembers everything. All your sessions, servers, window setups, browsers, agent sessions — all of it. I can quit Coda, let my system rest, start it back up, and everything is exactly where I left it. I don't have to remember anything anymore.
Then I Kept Switching to the Terminal for Claude
I was using Claude Code in a separate terminal. Every time I needed AI help, I'd switch away from Coda, go to the Claude terminal, explain what was happening, copy logs, paste them in. Then switch back to check if the fix worked. Then switch back to Claude again.
So I thought — why not just put Claude in the app? As a panel, right next to my logs. Same window, no context switching. And if Claude works, why not Gemini? Why not Codex? So I added agent panels. Any AI coding agent runs as a first-class panel inside your workspace.
Then I Kept Switching to the Browser
Same story. I'm checking localhost, refreshing the page, opening dev tools, switching back to the terminal to check the logs, switching back to the browser. The context switching was killing me.
So I embedded a browser. Full WebKit engine, right inside the panel layout. URL bar, navigation, console capture, the works. Now I can see my logs, my AI agent, and my browser all at once. No switching.
Then I Kept Switching to My Task Manager
At this point I started to see the pattern. Every time I was switching to another app, I asked myself: can this just live inside Coda instead?
Task management was next. I added a kanban board — nothing heavy, just columns and cards so I can track what I'm working on without leaving the window. Quick add with a keyboard shortcut. Done.
Then Voice, Because Why Not
I was already talking to Claude through the agent panel. But typing long prompts while looking at the browser and logs felt clunky. So I added voice input — hold a button, talk, it transcribes and sends to your agent. Now I can literally have a conversation with Claude while we both look at the same browser panel and the same logs.
"Take a screenshot of the app and check the layout."
"Show me the errors from the API server."
"Fix it and restart the backend when you're done."
It's transformed the way I work and removed so much overhead.
Then MCP Changed Everything
Once the agent panels were in place, MCP — the Model Context Protocol — made them dramatically more useful. MCP is an open standard that lets AI agents interact with external tools through a structured API.
I built an MCP server into Coda with 30+ tools. Now Claude, Gemini, or Codex can reach into your dev environment directly. Read logs. Check the browser console. Take screenshots. Restart services. Run commands. All without you copying or pasting anything.
Before MCP: you're the middleman. Copy logs, paste to Claude, copy the fix, apply it, restart, check the browser, report back. Repeat.
After MCP: you say "the API is returning 500 errors, investigate and fix it." Claude reads the logs itself, checks the browser, finds the bug, applies the fix, restarts the server, takes a screenshot to verify, and tells you it's done.
The agent becomes self-sufficient. You stop being the middleman and start working with it.
Why Native
I built Coda as a native macOS app in SwiftUI. Not Electron, not a web app, not a terminal multiplexer with a UI slapped on top.
- •Process management needs real OS integration. Spawning processes, monitoring PIDs, catching crashes, sending signals — that's systems programming.
- •Embedded browsers need to work properly. WKWebView gives you a real engine with console capture, screenshot APIs, and proper lifecycle management.
- •It has to feel like it belongs on your Mac. I spend all day in my tools. If something feels off, I'll ditch it in a week.
Where It Ended Up
Coda started as a convenience — just start my projects faster. But it kept growing and taking shape into what it is now: a workspace where everything lives in one window. Your running processes, your browser, your AI agents, your tasks, your voice. No more switching between six apps. No more being the go-between for your AI and your dev environment.
If you want to try it, download the beta — it's free right now. And come join me on Discord to help shape where this project goes next.
Coda is a native macOS app by Simply Fluent. Requires macOS 15 (Sequoia) or later.