My weekly AI stack (October 2026)

I get asked a lot what I actually use day to day for AI work. The honest answer is that the stack is small. Three models, one local LLM server, a few agent CLIs, and a handful of supporting tools. Here’s the full list, what’s installed where, and what I use it for.

The models

For the boring 80%: MiniMax M3. I run it through the Mavis / MCode CLI. The cost is low. The quality is good enough. I use it for refactors, type hints, tests, docstrings, dependency upgrades, and the long tail of small changes. About 80% of my AI work goes through M3.

For the bug hunts and the multi-file work: Claude Sonnet 4.5. I run it through Claude Code in the terminal. The cost is higher. The model is more consistent. The model is better at reasoning about large unfamiliar codebases. About 15% of my AI work goes through Claude.

For the quick single-file edits: OpenAI Codex CLI. The terminal loop is fast. The diff is tight. The model is good at the mechanical work. About 5% of my AI work goes through Codex.

For the “I want a second opinion” work: GPT-5. I use the API directly. I don’t have a CLI for it because the use case is rare. Maybe once a week.

The local LLM server

ollama running on the RTX 3090 in the Proxmox cluster. The model is qwen2.5-coder:32b quantized to Q4. The use case is “I want to run a model without sending the data to anyone.” For the morning agent (the one that summarizes my night), the data is my own logs and calendar. I don’t want to send that to OpenAI. The local model is fine for the summarization.

ollama is also what I use for the small RAG over my notes. The embeddings come from bge-large-en-v1.5 running on the same GPU. The retrieval quality is close enough to the hosted options that the cost saving is worth it.

The agent CLIs

  • codex (OpenAI’s CLI) — small mechanical edits
  • claude (Anthropic’s CLI) — bigger reasoning work
  • mc (the Mavis CLI) — M3 for the boring 80%

I have all three installed. I have a shell alias that opens the right one based on a heuristic:

ai() {
  if [ "$#" -eq 0 ]; then
    echo "usage: ai <prompt>"
    return 1
  fi
  local prompt="$1"
  local len=${#prompt}
  if [ "$len" -lt 100 ]; then
    codex "$prompt"
  else
    mc "$prompt"
  fi
}

Short prompts go to Codex. Long prompts go to M3. The heuristic is wrong about 10% of the time. The wrong 10% I escalate by hand.

The supporting tools

rg (ripgrep). I use this for searching codebases. Faster than grep, respects .gitignore, has a good query language. Every agent CLI uses it under the hood. I use it directly for “find this pattern in this codebase.”

fd. I use this for finding files. Faster than find, respects .gitignore, has saner defaults. Same reason as rg.

fzf. I use this for fuzzy-finding in the terminal. Open a file, find a command in history, switch between recent branches. None of this is AI-related. All of it is part of the loop.

tmux. I run two terminals most of the time. One has the agent. One has the editor (or vim). The split is “thing that’s running” and “thing I’m reading.” tmux makes the split ergonomic.

lazygit. I review the agent’s diff with lazygit. The diff is staged. The diff is committed with a message. The push is lazygit plus one keystroke. The agent commits, I review and push. The separation matters.

zoxide + fzf. I jump between project directories fast. The shell is set up so cd is fuzzy by default. I type the first few letters of a project name and I’m there. The small time savings add up over a day.

What’s not in the stack

No vector database hosted in the cloud. I tried Pinecone and Weaviate. The latency annoyed me. The local chromadb is fine.

No LangChain or LlamaIndex. I tried both. The abstraction tax is higher than the value for the kind of work I do. I write the few hundred lines of glue code myself. The glue is clearer than the framework.

No AI-powered editor autocomplete. I tried Copilot and Cursor. The autocomplete is fine. The autocomplete changes the way I write code, in ways I don’t like. I type the code. The agent does the non-typing work. The separation is what I want.

No AI in the commit message. I write the commit message. The commit message is the documentation of why the change exists. I don’t want the model to write it. The model will write plausible-sounding messages. The messages will be wrong in subtle ways. I write them.

The cost

About $40/month on the hosted models (M3 + Claude + Codex + GPT-5 combined). The local model costs electricity (about $5/month for the GPU). The supporting tools are free. The total cost is about what a Netflix subscription costs.

The cost is justified. The AI work is the most productive part of my day. The cost is less than the time savings.

The thing this list is not

This list is not a recommendation. This is what works for me. Your stack will be different. Your projects are different. Your tolerance for cost is different. The right stack is the one that fits the work you do.

The pattern is: a cheap default for the boring work, a more capable model for the harder work, a local model for the data you don’t want to send anywhere, and a small set of supporting tools that make the loop fast. Everything else is noise.


← back to all posts