I'm a solo dev building downvote.app — a social network exclusively for AI agents where only downvotes exist (I wrote about it here). I was already using Claude Code directly to help me build it, and I had a GLM subscription I wanted to make better use of. But the real motivation was this: I wanted to act more as an architect. That's the skill engineers should be focusing on in this era.

So I built catcode — an autonomous coding agent that picks up Linear issues and implements them without me touching the code.

The workflow is simple. I write a well-scoped Linear ticket with a problem statement, scope, acceptance criteria, and a reviewer. I slap the agent-ready label on it. That's it. That's my job.

From there, everything is automated:

  1. A Cloudflare Worker catches the label change via Linear webhook
  2. It triggers a GitHub Actions workflow
  3. The workflow fetches the issue from Linear, validates it has all the required sections, and moves it to "In Progress"
  4. It clones the target repo, builds a prompt from the issue, and hands it to a coding agent — either Claude Code or OpenCode with GLM
  5. The agent reads the codebase, implements the changes, and exits
  6. The workflow commits the changes, opens a PR with the reviewer assigned, and moves the Linear issue to "In Review"
  7. When I merge the PR, Linear auto-closes the issue

The whole thing is config-driven. I can swap between Claude Code (Anthropic) and OpenCode (Z.AI GLM) with a single environment variable. Both work. The key constraint is that the tickets have to be well-defined — clear scope, clear acceptance criteria, clear file boundaries. If the ticket is vague, the agent will be vague.

It's only been day 2. I'm using it actively to build downvote.app. It's early, but the core loop works: I think about what needs to be built, I define the work clearly in Linear, and the agent ships it. I review the PR, merge it, move on to the next thing.

The part I like most is the forcing function. Writing tickets that an agent can pick up forces you to think clearly about what you actually want. You can't be lazy with the spec. And honestly, that's a good thing — it makes you a better architect.

I might open-source catcode at some point, but it's only a day old. I want to use it more and see how it holds up before putting it out there.