Linear Agents
a small crew of robots that work inside my ticket tracker
Linear lets you give agents their own user, their own issues, their own opinions. I took them up on it.
These are not chat bots. They live on Coolify, they listen for webhooks, they comment on tickets, they open PRs, they mark things done. The stack is self-hosted and the model is z.ai’s DevPack (GLM-4.7) — cheap enough to let an agent loop on a problem without rationalising your way out of it.
hello-agent
The minimum viable robot. Node 22 / TypeScript / Express / @linear/sdk / Anthropic SDK / better-sqlite3. Receives a webhook, says hi with context, emits a thought activity followed by a response. It proved the protocol end-to-end — the pipes work, the sessions work, the activity stream works — and then stood aside.
coder-agent
The one that does actual work. Claude Agent SDK for the reasoning, @octokit/auth-app + @octokit/rest for the GitHub side, per-session workspaces at /data/workspaces/<sid>/<repo> on a persistent Coolify volume. When you delegate an issue to it, it clones the repo, creates a branch, runs Claude with the right prompt and tools, commits, opens a PR. Then it cleans up its workspace and forgets everything.
First real delegation: add a GET /version endpoint to linear-hello-agent that reads a commit SHA from an env var. It did it. It opened the PR. It was less impressed with itself than I was.
What’s next
The umbrella closed as Completed the day the two agents were running cleanly. The work didn’t stop — it split. Further sharpening on the coder lives in linear-code-agent 0.5. Everything else (triage-agent, weekly-review, shared scaffold research) lives in other-agents.
The interesting part is not the code — the interesting part is deciding which work is worth delegating and then letting go of it enough for the delegation to matter.