My Complete Agentic Coding Setup and Tech Stack
I get asked what a complete agentic coding setup looks like. After 30 years of programming and over a year of using coding agents daily, here’s what I actually use — the full stack, the agents, the deployment, and the glue that holds it together.
Tech Stack
TypeScript is my language of choice. I picked it before I started with agentic coding — it’s a great general-purpose language with strong tooling and a large community, and hard to avoid completely if your project involves web frontends. Coding agents know many languages, but they know TypeScript very well.
On top of that, I use Vue + Tailwind on the frontend, Fastify on the backend, and PostgreSQL with Drizzle as the ORM. This stack is fast to build with, well-supported by coding agents, and straightforward to deploy. One note on Drizzle — I still run migration generation manually rather than letting the agent do it. Schema changes are one area where I want to see exactly what’s happening before it runs.
I built Stacknaut as a starter kit that bundles this exact stack with AI agent configuration and Hetzner/Kamal deployment baked in. It’s what I use to spin up new projects — auth, billing, admin, background jobs, and deployment are already wired up, so I skip straight to the product.
Coding Agents
I use three agents: Droid, Claude Code, and Codex. I wrote about my shared configuration setup — the short version is that all three share the same AGENTS.md, skills, and commands via softlinks to a single directory in Dropbox.
The agents have different strengths, but the shared config means I can switch freely — depending on the task or whichever frontier model is currently better.
I use Codex to review Droid/Claude Code’s work. Having a second model catch what the first one missed is one of the most reliable quality improvements I’ve found.
For simple TODOs, I run agents in YOLO mode inside Docker. For complex work, I stay in interactive mode — nudge it, then say “take over” to hand off the mechanical part (review, commit, deploy).
Editor + Terminal
I do close to zero code writing now — the agents handle that. But I still read a lot of code, especially diffs. That’s a big part of working with agents. I use WebStorm for its refactoring and code navigation, and Neovim for quick edits. Neovim runs in a dedicated Alacritty instance — the only Alacritty window I have — so it’s essentially a standalone editor I keep open all the time.
I run everything in tmux. Each agent session gets its own window. I often run multiple agent sessions against the same repo — the trick is keeping their blast radius from intersecting. Each session works on a different part of the codebase, and I review the diffs before they step on each other.
I have tmux auto-rename set up so windows show the project and task — makes it easy to jump between sessions.
AGENTS.md as Project Memory
Every project has an AGENTS.md. The agent reads it automatically on startup. It contains the project’s architecture, development commands, coding conventions, and hints for common tasks. CLAUDE.md is just a single line — @AGENTS.md — so I only maintain one file.
This is the single most effective thing I do for agent quality. Without it, the agent guesses. With it, the agent knows how to run tests, what patterns to follow, and what to avoid.
It needs maintenance though — I add and edit instructions as I work with the agent. I also have a skill that asks the agent to reflect on our session and update AGENTS.md with anything it learned. Over time the file gets better without me having to remember every detail.
Skills
Skills are the key productivity multiplier. They’re small markdown files that all three agents understand — reusable prompts I’ve refined over time.
My most-used skills:
- commit — stages, writes a concise message, commits
- review+fix — loops review and fix until clean
- spec — interviews me to build a detailed spec before coding
- take-over — finishes the task end-to-end (review, commit, deploy)
- reflect-agents.md-file — reflects on the session and updates
AGENTS.mdwith what it learned - deploy — runs the deployment pipeline
Skills compose. “Take over” calls review+fix, then commit, then deploy. I say two words and walk away.
Deployment
I deploy to Hetzner using Kamal 2 — zero-downtime Docker deploys with rolling restarts. For indie builders, self-hosting on Hetzner is hard to beat on cost — and the savings become especially significant when you run multiple projects on the same box. That’s the real win if you have several products.
Kamal handles the Docker orchestration, SSL via Let’s Encrypt, and zero-downtime deploys. The config is a single YAML file. I use Render for one project where the managed approach makes more sense, but Hetzner + Kamal is my default.
Infrastructure
The rest of my setup:
- Cloudflare — DNS and CDN. I use Cloudflare Tunnel for exposing local dev servers to webhooks during development.
- PostHog — product analytics. I wrote about setting it up previously. Self-hosted on Hetzner.
- Clicky — simple web analytics for traffic.
- Namecheap — domain registrar.
The Full Picture
The setup has evolved over the past year. The common thread is that everything is optimized for working with coding agents — shared config, composable skills, AGENTS.md as project memory, multiple tmux sessions, and a deployment pipeline the agent can trigger directly.
If you’re starting from scratch, the most important keyword is “agentic” — and the parts that matter most are AGENTS.md and skills. I wrote about my solopreneur journey and how this setup fits into building products solo.