External Publication
Visit Post

A Vim + Tmux + Aider Workflow for Local LLMs

~/.bnux May 13, 2026
Source
All this new AI tooling has been a gift for the kind of person who loves a good dotfile and would happily pipe a model through a tmux pane before opening another browser tab. It's also a great way to spend a whole afternoon configuring your workflow instead of actually getting anything done. Anyway. When I went looking for an AI pair-programming setup, I didn't want an IDE plugin or a chat tab. I still wanted to live in vim, I just wanted a way to hand real edits off to a model without bouncing out to another window. What I landed on is aider running in one tmux pane, vim in another, and LM Studio quietly serving Qwen 3.6-35B-A3B on localhost. The whole thing runs offline, costs me nothing per token, and uses the same keybindings whether I am at my desk or SSHed into my Pi. tl;dr: Install aider with , point it at LM Studio's OpenAI-compatible server with a small , then run vim and aider in two tmux panes with enabled. Drop or comments in your code, save, and aider answers (or edits and commits) in the other pane. The stack Four pieces, each doing one job: LM Studio loads a model and exposes it on using the OpenAI-compatible protocol. Aider is a terminal-native AI pair programmer. It builds a repo map, edits files directly, and commits each change to git with a descriptive message. Don't like a change? reverts the commit. Vim stays vim. I edit, I save, that's it. Tmux holds the two panes together so I can detach, reattach, and use the same setup over SSH. None of this is particularly novel. The aider authors recommend exactly this layout. The nice thing is that it all fits together cleanly. Install aider I used uv, which installs Python tools into isolated environments without polluting your system Python: That dropped the binary into , which is not on by default on macOS. Either let uv handle it: Or add it yourself in : You can confirm it worked with: Point aider at LM Studio In LM Studio, head to the Developer tab (the icon), load a model, and toggle the server on. You can confirm it is up with: The field in the response is the model name you'll hand to aider. Mine is . Aider reads config from . Mine looks like this: A couple notes: The prefix tells litellm (aider's model router) to use the OpenAI-compatible protocol. Everything after it is the literal model id from LM Studio. The value doesn't matter as long as it exists. LM Studio doesn't check it. is the magic flag (more on that below). With that in place, you can run in any git repo and it'll connect. The vim + tmux layout A minimal to start: The flow: Then followed by to split vertically. Run aider on one side, vim on the other. Navigate with and . Detach with , come back later with and everything is still running, including aider mid-conversation. If you're not big on tmux, iTerm2 vertical splits () get you most of the way there. The reason to graduate to tmux is that the keybindings work identically over SSH, which comes in handy if you also work on something like a Pi or a remote dev box. The and trick This is where the workflow stops being "two tools in two panes" and starts feeling like one thing. With on, aider watches the files in your repo. When it sees a comment containing , it answers the question in its own pane. When it sees , it makes the change and commits. For a question: Save with . Aider reads the comment, answers in the other pane, leaves the code alone. For an edit: Save. Aider edits the file and commits the change. will show a real message describing what it did. You can add this to your so vim notices when aider has rewritten the file underneath you: And a couple of snippets that make the AI comments faster to drop in: Now opens a new line below with waiting for me to type a question, and does the same with . Swap the comment character per language ( for JS and PHP). When to talk to aider directly Comments are for inline tweaks. For bigger work, I move to the aider pane and use the chat directly. The commands I actually use: is the one I reach for most. It lets me ask "what does this file do" or "where would I add a new route" without aider touching anything. is worth knowing about. It plans the change in a stronger reasoning model, then hands the plan to a cheaper editor model to apply. Useful when you've got both a local model and a cloud one configured. A few things I learned the hard way LM Studio's "Auto-eject unused models" can quietly unload your model between sessions. If aider hangs on its first request, check the Developer tab to make sure the model is still loaded, not just selected. RAM headroom matters more than you think. A 35B MoE model needs real memory to load, and if you've also got Docker Desktop sitting on 12GB of containers, you'll feel it. Quitting things you aren't using is what keeps the model fast instead of crawling. Aider will warn that it doesn't know your local model's context size. That's because LiteLLM's metadata catalog only covers hosted models. The warning is harmless. You can silence it with in your config, or feed aider the real specs via if you want accurate readings. is a feature, not a bug. Every aider edit becomes a commit. It feels weird at first, but it means is always safe and doubles as a changelog of every prompt you've run. Local models are good, not great. Qwen 3.6-35B-A3B is genuinely useful for refactors, boilerplate, explanations, and small features. For bigger agentic work it still trails Claude Opus or GPT-5.1. The nice thing about aider is the same config can target a local model today and a cloud one tomorrow, so the workflow doesn't change as the models do. Resources Aider documentation Aider in-chat commands LM Studio uv tmux cheatsheet

Discussion in the ATmosphere

Loading comments...