Stack
The harness
Each task goes to the cheapest model that can do it well. llmr route-auto "<task>" picks the tier, and every tier reads from the same knowledge base. When a mistake costs real time, it gets written up withllmr lesson. The next session checks those lessons before it starts, so the same debugging doesn't get paid for twice.
- Describe the task in plain text
- Check past lessons with
llmr ask - semantic-router picks T0, T1 or T2
- That tier does the work; T1 hands off to T0 after 3 failures
- Record what went wrong with
llmr lesson
T0
Claude Code (Claude Opus) · cloud
Specs, architecture, failing tests, code review, tricky math, hard debugging, unblocking T1.
T1
qwen3.5:9b via Ollama · MacBook
Implementation against a spec + tests, refactors, mechanical edits. Three strikes, then T0 takes over.
T2
qwen2.5:3b-instruct via Ollama · homelab
Commit messages, PR bodies, devlogs, session summaries, and RAG Q&A over my repos.
Harness
| Switchboard (llmr) | My model router and knowledge base |
|---|---|
| semantic-router | Classifies free-text tasks to a tier by embedding similarity (no LLM call) |
| nomic-embed-text | Embeddings for routing and the knowledge base |
| sqlite RAG | dev / consulting / lessons collections; brute-force cosine, no vector DB on purpose |
| Claude Code skills | Tells Claude when to check lessons and hand work to a smaller model |
| Continue | In-editor autocomplete on a 1.5B local model |
Homelab
| Debian | An old i3 laptop with 8 GB RAM and a spinning disk |
|---|---|
| Tailscale | Every service is reachable only over my private network |
| Docker + Portainer | Compose stacks, git-tracked |
| Caddy | Reverse proxy and static hosting |
| Gitea | Self-hosted git for most of my repos |
| Immich | Self-hosted photo library |
| code-server | VS Code in the browser |
Building
| TypeScript + Vite | Default web stack, strict mode |
|---|---|
| React + Zustand | MyPublisher |
| Next.js + Cloudflare Workers + D1 | SetTheMood |
| Vitest | Logic gets tests first, which is what makes handing it to a local model safe |
| Local-first storage | No accounts or backend unless the app needs one |
| Python | Tooling, RAG, and glue scripts |
| Astro + Cloudflare Pages | This site |