For fun, here’s a small thing I built with Claude Code: a folder in my Dock with one face for each of my agents, and when I click a face, that agent is ready to work.
Video coming soonThe full walkthrough, plus a one-minute Short, on YouTube
What I wanted
Each of my agents is just a Claude Code session running in its own project folder, in its own Terminal window. With one agent that’s fine. With three or four going at once, I was hunting through Terminal windows that all looked alike, and every now and then I’d start the same agent twice without noticing.
So what I wanted was something like speed dial. One click on a face, and either that agent’s window comes to the front, or, if it isn’t running yet, it starts up in the right folder on the right model.
What I built
I ended up with a team folder in my Dock that pops up as a grid of faces. Behind it there are only a few small pieces, and Claude Code wrote all of them from my prompts.
The first piece is a launcher, one script that knows a short table of my agents: each one’s name, window title, folder and model. Give it a name and it checks three things in order. Is there already a window with that title? Bring it forward and stop. Is Claude already running in that folder, maybe in some other window? Say so and stop, so there’s never a duplicate. Otherwise, open a new window with that title and start Claude Code on that agent’s model.
Then there’s Wake Team, which walks the same table, starts everyone who isn’t running yet, and tells me who it skipped. Each agent also gets its own tiny Mac app whose only job is to run the launcher with that agent’s name, and each app gets a face. The faces all come from one image prompt style, each with its own job and its own prop, so they look like a team and not a random set of avatars. Last, the whole folder gets pinned to the Dock and shown as a grid.
Everything in the video uses a made-up team, not my real agents.
Try it: open the team folder in the Dock
team
What broke
Quite a bit, and every snag ended up as a fix in my notes.
The window titles kept changing. The launcher finds an agent by its window title, but Claude Code renames the window as it works, so the match broke. The fix was a setting that tells Claude Code to leave the title alone.
macOS asked for permission. The first time, macOS asks whether Terminal may control Terminal. It sounds odd, but the answer is yes.
A strange error about extended attributes. Building the apps straight into my Documents folder failed with an error about resource forks and Finder information. Building them in a temporary folder first and copying them over without the extra file data fixed it.
Moving the scripts broke the apps. Each app remembers exactly where its script lives, so tidying the scripts into another folder broke every app at once. Now they live in a hidden folder right next to the apps, and they stay put.
The faces had to work at icon size. A portrait that looks great full size can turn into a smudge in the Dock, so I picked the ones I could still read at that size. I also learned to never ask the image model for lettering, because it gets it wrong. Names go on afterward.
The Dock kept the old icons. Setting a custom icon on a Mac app takes more than swapping a picture. The app has a setting that says use the stock icon, which has to come out, and then the app has to be signed again so it still opens. Even after all that, the Dock kept showing the old icon, but that turned out to be caching, and restarting the Dock fixed it.
What I learned
- Check before you start. Most of the launcher is checks, not starting. “Is it already open? Is it already running?” is what stops the duplicates.
- One table, everything reads it. The launcher, Wake Team and the apps all work from one short list of agents, so adding an agent means adding one row.
- Pick the model per agent. That table has a model column, so agents that follow set patterns can run on a lighter model and the ones doing writing, design or judgment get the stronger one. I select the startup model for each agent, based on what I need them working on. This allows me to tune my usage but keep my quality. You can always change model after launch.
- Make it readable at the size you’ll use it. That goes for the faces, and for most things on a screen.
- Most snags are small and specific. Each one has a simple fix once you know what’s going on, which is why they’re worth writing down.
This setup is for a Mac, the built-in Terminal app and Claude Code, and an agent or two, each in its own folder. I’m sure it’s possible on Windows, I just have not tried it yet.
This is something pretty cool I’ve been working on, and I wanted to share how it came together. I hope you enjoy it.
Not affiliated with or endorsed by Anthropic. I’m an independent user.