About a week ago I open-sourced agmsg, a ~500-line bash + SQLite tool that lets CLI AI agents message each other directly. I built it for a dumb reason: I was tired of being the human copy-paste relay between Claude Code and Codex β selecting code in one terminal, pasting it into the other, carrying replies back, all day.
I expected a few stars from friends and nothing else. Instead it went 5 β 320 in a week, picked up forks, derivative projects, and pull requests from people I've never met. That gap between what I expected and what happened is the interesting part, so here's the honest retrospective: the numbers, what worked, what flopped, and what genuinely surprised me.
In about a week, with no budget and no audience to speak of:
None of this came from one big spike. It came from a sequence of posts across channels, some of which worked and some of which completely didn't.
Leading with a video, not an explanation. The first post that got traction wasn't a description of the architecture β it was a 23-second clip of two Claude Code instances autonomously playing tic-tac-toe over agmsg, with no human input. People stop scrolling for a moving picture of agents doing something on their own. The text underneath could be short; the video did the work.
A relatable problem, stated plainly. "I became a copy-paste relay between two AIs" landed because a lot of people are quietly doing exactly that right now. I didn't open with the technical design. I opened with the annoyance. The design was the payoff, not the hook.
Using a long-form post as the landing pad. Timeline posts are good at reach and bad at depth. So the threads pointed to a longer writeup where the design rationale, the trade-offs, and a full reproduction prompt lived. Reach on one channel, depth on another.
Treating it as a series, not a single launch. Instead of one post that had to carry everything, I spread it: the origin narrative first, then the first outside contribution, then a new feature (actas
, multiple agent roles in one workspace), then a deep dive on the underlying mechanism. Each piece re-surfaced the project to a slightly different audience and kept it alive past the first 24 hours.
My first English post sank. The very first English writeup got ~3.6K impressions and basically no conversion. The content was fine; the distribution was nonexistent. I'd posted it cold, with no thread to carry it and nothing leading into it. A good article with no on-ramp is just a file on the internet.
Hacker News went badly. I tried a Show HN, and my first author comment got auto-killed by the spam filter within seconds β too long, too promo-shaped. Then I made it worse by deleting and reposting it, which is apparently the exact trigger that gets the replacement marked dead permanently. Lesson learned the hard way: a first comment should be two or three sentences with no links, and if it gets flagged you leave it alone.
Reddit was a non-starter. The high-value subreddits gate new accounts on age and karma, and mine had neither when I needed it. There's no shortcut here; you either have a warm account before you need it, or you don't get to play that day.
Derivative projects. I genuinely did not expect someone to take the idea and build agmsg-shogi β agents playing shogi over the same messaging layer. Forks I understood; a from-scratch reinterpretation in a different domain was a different signal entirely. That's when it stopped feeling like a repo and started feeling like a small idea other people wanted to build on.
Contributors kept showing up. Support for Gemini, Antigravity, and GitHub Copilot CLI was added by people I've never talked to. The project now speaks to five different CLI agents, and most of that breadth came from outside. Keeping the surface area tiny β bash and sqlite3, no daemon, no network, no Python β turned out to be the thing that made it easy to extend.
Bookmarks predicted stars better than likes. On the technical posts, the bookmark-to-like ratio was the signal that tracked GitHub stars. People bookmark "I'll need this later"; that intent converts. Likes are applause; bookmarks are intent.
I just published the deep dive on the piece that makes all of this feel real-time β Claude Code's underused Monitor tool, and the six design patterns I had to get right to run a watcher in production. That's where the "how does this actually work" answer lives.
On the roadmap: making the storage layer pluggable so agmsg isn't married to a single SQLite file on one machine.
The thing I keep coming back to: a week in, I'm not sure "messaging layer" is even the right description. What people are actually using β and extending β is closer to a shared blackboard for AI agents: a dumb, durable place where independent agents leave notes for each other, and anything that can read and write a file can join. The messaging was just the first thing I needed it for.
If you're running more than one AI coding agent, it's on GitHub. I'd rather hear what breaks than collect another star.