Zack Proser

Zack Proser

@zackproser.bsky.social

https://zackproser.com Applied AI @ WorkOS #buildinginpublic AuDHD 👨‍💻 full-stack open-source hacker ✍️ technical writer 🎨 visual artist Previously: Pinecone, Gruntwork.io, Cloudflare, Proofpoint, BrightContext

559 followers3.3K following422 posts

People keep asking whether the agents can do the work. Mine do enough of it that the question lost its pull. The useful question is cheaper: can I spin up another me? No. That's the bottleneck.

View full thread

People keep asking whether the agents can do the work. Mine do enough of it that the question lost its pull. The useful question is cheaper: can I spin up another me? No. That's the bottleneck.

Agent capacity drops in price every quarter. My attention stays fixed at one human. So everything I build is attention-budget design: the autonomy boundary, the PR gate, Slack as one console.

The rule: agents do anything reversible on their own. Anything irreversible or outbound stops for a human. A draft in a thread costs zero attention. A merged PR that publishes to my domain gets my thirty seconds, on purpose.

A portrait on your homepage says "here is a guy." I wanted mine to say "here is fifteen years of work — come dig in." Those are two different bets about what a personal site is for. One sells the person. One hands over the proof and trusts it to do the selling.

My homepage used to open with a portrait of me. A face tells you nothing about the work. So I burned it down. Now the hero is my consultancy's mark — a mind on fire — rendered as living pixels, surrounded by every essay I've written as a star you can hover and read.

I run two AI agents from one phone. One handles infrastructure. One handles content. Keeping them separate isn't an accident — it's the whole reason the setup works. Separation of concerns isn't just for code. It's for agents too.

Claude Code runs on my Mac, driven from the iPhone app's remote control. Real credentials, filesystem access, shell. It does AWS, OpenTofu, secrets, git. Hermes is a Discord bot on EC2. Always on, purpose-built for content. Two brains, two blast radii.

Here's the part that makes it stronger than one agent: Claude Code is the side channel into Hermes whenever Hermes misbehaves. One agent can SSH in and repair the other. A single mega-agent can't do that to itself. The split-brain architecture, in full: zackproser.com/blog/two-ag...

zackproser.comOne Phone, Two AgentsI run two AI agents — Claude Code for infrastructure, Hermes for content — both controlled from my phone. Here's the split-brain architecture and why separation of concerns matters for AI agents too.

A year ago my team trialed Devin and nobody could get a single session to finish. We killed it. The verdict was unanimous: not ready. Today it's one of the most-used agents in our Slack. The gap between "impressive demo" and "reliable tool" can close fast.

View full thread

The lesson isn't about one tool. It's that "not ready" has a shelf life — re-evaluate the thing you wrote off a year ago. My own experiment now: I'm using Devin to write blog posts with pixel art and three.js. I handle taste and voice; it handles labor.

A year ago my team trialed Devin and nobody could get a single session to finish. We killed it. The verdict was unanimous: not ready. Today it's one of the most-used agents in our Slack. The gap between "impressive demo" and "reliable tool" can close fast.

The 2024 trial was bad in specific ways. Sessions hung mid-task. The Slack integration dropped context between messages. Memory like a goldfish. Then it shipped iteration after iteration until it just... worked.

You have about ten seconds to convince a user you're already solving their problem. Get the door wrong and it doesn't matter how good your model, stack, or architecture is. Nobody walks through. Time-to-value is the moat now.

View full thread

The difference had nothing to do with prompts or architecture. It removed the one thing that actually mattered: friction at the point of use. If your AI feature asks me to sign up, log in, and read onboarding before I get value — I'm already gone.

You have about ten seconds to convince a user you're already solving their problem. Get the door wrong and it doesn't matter how good your model, stack, or architecture is. Nobody walks through. Time-to-value is the moat now.

I built the same product twice. 2024: a standalone web app. Separate login, separate URL, separate context switch. It died in silence. 2026: the same idea as a Slack bot. Adopted in a week. Same model class. The only thing that changed was the door.

Don’t sleep on this. Arjun is a brilliant engineer.

Arjun Patel@arjunkirtipatel.bsky.social

psst! newsletter post coming out tomorrow, sign up here so it comes to your inbox! My newsletter is called Answering Machines, and I try to take a grounded approach to how LLMs work and how they will shape what we do: Sign up here: #ai #llms #reading buttondown.com/answeringma...

I once blacked out on stage in front of 4,000 engineers. Now I sleep fine before jet-lagged days of back-to-back talks and workshops in a foreign country. I want you to understand the distance, because I started about as badly as it's possible to start.

The single biggest thing I learned: don't memorize your talk. A memorized talk fails the instant one word slips, because there's nothing underneath it. Know the milestones and the key point of each section. Know the anecdote. Then let yourself actually talk.

I run three AI agents that act without me in the loop. People keep asking whether agents can do the work. Mine already do. The real question is uglier: what am I willing to let one do while I'm asleep? I have a one-line answer.

View full thread

I run three AI agents that act without me in the loop. People keep asking whether agents can do the work. Mine already do. The real question is uglier: what am I willing to let one do while I'm asleep? I have a one-line answer.

An agent can do anything reversible on its own. Anything irreversible or outbound stops for a human. That's the whole rule. I've drawn it across all three bots and it has never once felt arbitrary.

I gave my website three employees. A content bot, an ops bot, and a growth bot. Each one its own repo, each deployed to Vercel on eve, all living in one Slack channel. I reviewed Vercel's eve agent framework by actually building a business team on it.

View full thread

The friction is part of the review. The sharp edges are almost all in the beta churn and the Vercel Connect setup — budget real time for them. But the connector code isn't duplicated three times and degrading three ways, because I didn't write it.

I gave my website three employees. A content bot, an ops bot, and a growth bot. Each one its own repo, each deployed to Vercel on eve, all living in one Slack channel. I reviewed Vercel's eve agent framework by actually building a business team on it.

One bot per repo was the most important decision, and it has nothing to do with eve. One agent, one repo, one responsibility. I can read any bot top to bottom in a sitting and know everything it can do — because everything it can do is in that directory.

A stranger told me AI made him suspicious of all writing. He now interrogates every sentence: was this one a machine? What about this one? I understand the reflex. But that's the wrong question. Here's the right one.

View full thread

People ask how I write so fast. The honest answer never had much to do with typing speed — I'd already done the writing in my head. The question isn't "did AI touch this." It's "whose judgment decided it was true, and whose name is on it."

A stranger told me AI made him suspicious of all writing. He now interrogates every sentence: was this one a machine? What about this one? I understand the reflex. But that's the wrong question. Here's the right one.

My writing breaks into three parts. The spark — the idea. Mine. The bellows — drafting and shaping. A machine can do this. The quench — hitting publish. Always mine. A machine can take the middle. It can never take the ends.

The unit of useful agent work isn't a chat reply. It's a reviewable artifact. A chat paragraph evaporates. You nod, you scroll, and ten minutes later it's gone. A PR sits in GitHub with your name on it until you deal with it. That difference is the whole argument.

Most teams build a chatbot, ship it, and wonder why nobody's life got better. The output is a paragraph — so you still have the job. Make the model put the work where review already happens: a PR, a draft, a diff. Now you have a decision to make, not more reading.

My blog bot grades its own homework before I ever see a draft. I don't let the model that wrote the post be the only judge. It sends the MDX to two cold readers from different model families, scores against a rubric, applies fixes, and loops until both say ship.

By the time I open the thread, the post already survived two skeptical reads I never had to do. This matters because I'm the worst reader of my own draft. I've stared at it for an hour. My eyes slide over the clunky transition because I know what it's trying to say.

Got a pitch that opened with Hi {{first_name}}, — the template variable literally unrendered. So I built a thing that doesn't bother either, a brutal AI screener. Three examples in post. "We don't template people we really care about, right?" zackproser.com/blog/inbox-classifier-going-guerilla

zackproser.comGoing Guerilla on My InboxWhat my AI inbox-screener actually does to the templated cold outreach hitting my inbox. Three real auto-sends, the footer that draws the line, and where this goes next.