My Agentic Coding Starter Kit
Rebuilt my personal workspace from scratch. No dotfiles, no setup scripts. The complexity moved out of the config files and into the models.
I used to have a dotfiles repo and Macbook setup scripts: aliases, gitconfig, tmux conf, Homebrew bundles, the whole thing. Run one on a fresh machine, walk away, come back an hour later to everything installed. Overkill, honestly.
Both were relics of my IC years, two years out of date by the time I last touched them. I’d changed teams, companies, even countries. I told myself I’d update them eventually.
When I sat down to set up my personal machine from scratch, the old approach didn’t fit. I don’t even use a terminal the same way anymore.
The old way
My dotfiles repo was built for a different era. It assumed:
- A stable toolset and a terminal-first workflow
- Time to maintain config files as a craft
None of those hold anymore. New tools appear weekly. The workflow is prompt-first, not terminal-first. And I don’t have the time or interest to maintain a perfect zsh prompt when I spend most of my day talking to an agent.
The Macbook setup scripts had the same problem. They automated installing things I don’t even use now. They didn’t know about Ollama, or opencode, or any of the agentic tools I actually use now.
The new philosophy
The goal was minimal. Agent-first. Don’t script tools upfront. Install opencode and Ollama, then ask an agent when you need something else.
Shell stays boring
A sensible prompt, a few aliases, tmux for session management. No fancy prompt frameworks, no plugin managers, no 500-line zshrc.
Agents know the stack
If I need a tool, I ask the agent to install it. I don't script it upfront.
tmux is the bedrock
Sessions, not windows. Everything runs in a shared context.
Local models are the default
Ollama serves models locally. No API keys needed for everyday work. Cloud models are for when the task demands it.
Quickstart
Fresh Macbook? Run this:
# Homebrew (for system packages)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Core tools
brew install tmux node
# Ollama — local models (macOS)
brew install ollama
ollama pull qwen2.5-coder:7b
ollama pull deepseek-coder-v2:16b
ollama pull llama3.2:3b
# opencode — main harness
curl -fsSL https://opencode.ai/install | bash
# Claude Code — heavy tasks (requires node, installed above)
npm install -g @anthropic-ai/claude-code
# Paseo — run agents from anywhere (requires node, installed above)
npm install -g @getpaseo/cli
Then start the Paseo daemon and keep the machine awake — both in dedicated tmux panes:
paseo daemon start
# In a separate pane — dies if you run it backgrounded in a plain terminal
caffeinate -dims
That’s the whole thing. No dotfiles repo. No setup scripts. You’re ready.
The external monitor setup
tmux
Three panes. One monitor. One session. That shared context is what makes the whole thing click.
- Pane 1: Claude Code. Heavy lifting. Complex refactors, architecture discussions, and writing the first draft of something new.
- Pane 2: opencode. My daily driver for free models. I route queries through Ollama’s local models for quick questions, code review, and anything where a local model is good enough.
- Pane 3: vim. Side-by-side with opencode so I can see diffs, make manual adjustments, and keep a tight feedback loop.
All three panes live under the same tmux session. I can copy-paste between them, detach without losing state, and come back to find my workspace exactly where I left it.
My laptop is separate. I use it for browsing and checking output. If I’m building a web app, that’s where I open the preview.
opencode
opencode is my main harness. It connects to Ollama’s local models for everyday work: no API key rotation, no rate limits, no cost. Just a free model that’s good enough for most tasks.
Claude Code
When local models aren’t enough, I switch to Claude Code. Complex refactors, architecture discussions, and first drafts of something new. Different tasks need different models.
That’s just how it works.
For personal use, the $20 Pro plan covers it. No per-token billing. I use it for what local models can’t do.
Ollama
Running locally on my machine. Three models, each for a different weight class:
| Model | Use case | Hardware |
|---|---|---|
qwen2.5-coder:7b | Daily driver for code | CPU only, runs on any Mac |
deepseek-coder-v2:16b | Complex refactors, MoE architecture | 16GB+ RAM or Apple Silicon |
llama3.2:3b | Quick reviews, inline suggestions | Lightweight, minimal overhead |
All three are slower than Claude and miss things it would catch. For most day-to-day work, they’re good enough.
If I need something bigger, I reach for Claude.
Paseo
Paseo is for when I’m not at my desk. It runs a daemon on my personal machine that lets me check in from my phone when I need to walk the dog or step away. Same agents, same machine, just remote.
It only runs on my personal PC. I work in fintech. Everything on the work machine goes through a VPN to reach the intranet, and Paseo hasn’t been cleared from a security standpoint. Paseo just hasn’t been cleared for the work environment. This setup is for personal use only.
The caffeinate command keeps the machine awake so agents don’t get interrupted when I step away. No screen needed. No login needed. Just a running daemon and a phone in my pocket.
The config
My entire machine setup fits in a few files:
.tmux.conf: Session bindings, panel navigation, copy mode.zshrc: Prompt, a handful of aliases, PATH management.gitconfig: Name, email, a couple of aliases
No dotfiles manager. No plugin framework. No install script.
If I need something, I install it when I need it. The agents handle the rest.
What changed
My old setup assumed I’d use the same tools forever. Script everything once, never think about it again. That assumption aged poorly.
The new setup assumes nothing. Lose your machine? Install opencode and Ollama, you’re done. Everything else is just files I can recreate in five minutes.
I spent years curating dotfiles and arguing about terminal emulators. The agentic setup doesn’t need that. The complexity just moved. It’s in the models now, not in my config files.
This setup was accurate at time of writing, which is about 20 minutes ago in internet years. By the time you read this, there’s probably already a better way to do all of it. I’ll write a part 2 when the dust settles, or when someone tweets something that makes me rethink everything, whichever comes first.