Run Aider on a remote server
AI pair programming in a terminal that stays put, with git keeping score.
Shelley handles the setup. About 5 minutes.
Prefer a terminal?
curl -fsSL https://exe.dev/deploy/aider/prompt.txt | ssh exe.dev new --prompt=/dev/stdinAider is an open-source AI pair programmer for the terminal. You add files to the chat and describe a change; aider edits them and commits the result to git with a descriptive message, so every step is easy to review or undo.
On an exe.dev VM it reaches Claude and GPT through exe.dev's LLM integration: no API keys to paste, and model usage billed to your exe.dev account. The session lives in tmux on the VM, so you can close your laptop and pick up where you left off from any computer.
What you get#
- Aider connected to Claude and GPT models, with no API key to paste
- A Git repository at
~/projecton persistent disk, where aider commits its changes - An
aidertmux session that survives disconnects
What's running, and where
ssh my-aider.exe.xyz
your terminal
Deploy with Shelley#
Click Deploy and Shelley will set up Aider on a new VM, then check that it works. No config-file wrangling required.
Prefer a terminal?
curl -fsSL \
https://exe.dev/deploy/aider/prompt.txt \
| ssh exe.dev new --prompt=/dev/stdinWhat Shelley is told
Set up Aider on this VM by following the exe.dev recipe at https://exe.dev/deploy/aider.md from top to bottom.
The recipe's example VM name is my-aider. This VM's name is the output of `hostname`: use it wherever the recipe writes my-aider. Skip the step that creates the VM; you are on it.
You are done when all of these are true. Check each one yourself:
- Aider connected to Claude and GPT models, with no API key to paste
- A Git repository at `~/project` on persistent disk, where aider commits its changes
- An `aider` tmux session that survives disconnects
Run the VM-side setup in "Start coding". If `~/.aider.conf.yml` or
`~/.aider.model.settings.yml` already exists and differs from the
recipe's, show the owner the difference and ask before replacing it. If
`git config --global user.email` already prints an address, skip the
git identity step. If `~/project` already exists, reuse it and only make
the first commit when it has no commits. Create tmux detached
(`tmux new -d -s aider -c ~/project`) rather than attaching. Reuse the
session if it already exists. Do not launch interactive aider. Verify in
a scratch repository, not ~/project, so the owner's history stays clean:
`git init /tmp/aider-check && cd /tmp/aider-check && aider --yes-always
--message "Reply with exactly: OK"` must print OK and no error; then
`rm -rf /tmp/aider-check`. Check `tmux has-session -t aider`. Skip the
later optional sections and FAQ. Finish with the SSH command from "Take
a break", using this VM's name, and tell the owner to run `aider` inside
it.
Finish with the URLs I should open.
Also at /deploy/aider/prompt.txt. The recipe it follows is /deploy/aider.md.
Start coding#
On your computer, create a VM and connect. Pick any free name; if you've already clicked Deploy or have a VM, skip the first command and use its name:
ssh exe.dev new --name=my-aider
ssh my-aider.exe.xyz
On the VM, install aider with uv, as aider's
install guide suggests. The
browser extra adds the optional browser version:
uv tool install --force --python python3.12 --with pip "aider-chat[browser]~=0.86"
aider --version
It prints aider 0.86.2 or later. Now point aider at exe.dev's LLM
gateway. The keys are placeholders: the gateway adds the real credentials
on the way out. The second file describes models newer than aider itself;
without it, aider sends them settings they reject:
cat > ~/.aider.conf.yml <<'EOF'
# Models come from exe.dev's LLM integration; the keys are placeholders.
model: sonnet
alias:
- sonnet:anthropic/claude-sonnet-5-5
- opus:anthropic/claude-opus-5-5
- haiku:anthropic/claude-haiku-5-5
- gpt:openai/gpt-6.1-sol
- luna:openai/gpt-6-luna
api-key:
- anthropic=exe-gateway
- openai=exe-gateway
set-env:
- ANTHROPIC_API_BASE=https://llm.int.exe.xyz
openai-api-base: https://llm.int.exe.xyz/v1
EOF
cat > ~/.aider.model.settings.yml <<'EOF'
# How to talk to models newer than aider.
- name: anthropic/claude-sonnet-5-5
edit_format: diff
weak_model_name: anthropic/claude-haiku-5-5
use_repo_map: true
use_temperature: false
cache_control: true
extra_params:
max_tokens: 64000
- name: anthropic/claude-opus-5-5
edit_format: diff
weak_model_name: anthropic/claude-haiku-5-5
use_repo_map: true
use_temperature: false
cache_control: true
extra_params:
max_tokens: 64000
- name: anthropic/claude-haiku-5-5
edit_format: diff
weak_model_name: anthropic/claude-haiku-5-5
use_repo_map: true
use_temperature: false
cache_control: true
extra_params:
max_tokens: 64000
- name: openai/gpt-6.1-sol
edit_format: diff
weak_model_name: openai/gpt-6-luna
use_repo_map: true
use_temperature: false
accepts_settings: [reasoning_effort]
- name: openai/gpt-6-luna
edit_format: diff
weak_model_name: openai/gpt-6-luna
use_repo_map: true
use_temperature: false
accepts_settings: [reasoning_effort]
EOF
Aider commits every change it makes, so tell git who you are. This uses
the email address of your exe.dev account, from the VM's
reflection integration; run the same
git config commands with other values if your GitHub account uses a
different one:
email=$(curl -s https://reflection.int.exe.xyz/email | jq -r .email)
git config --global user.email "$email"
git config --global user.name "${email%@*}"
git config --global user.email
It prints your address. Make a project, give it a first commit (aider compares each change with the commit before it), and open a tmux session:
git init ~/project
git -C ~/project commit --allow-empty -m "Start project"
tmux new -A -s aider -c ~/project
Inside that session, start aider:
aider
The first time, it offers to add .aider* to .gitignore, which keeps
its chat history out of your commits: answer Yes. The header shows
Main model: anthropic/claude-sonnet-5-5. Give it a small task. For
example:
Build a tiny website for a bakery that only sells one kind of bread.
Aider writes the files and commits them. Type /diff to see what changed,
/undo to throw the last change away, and /help for the rest of its
commands. Your files live
in ~/project.
Take a break#
Press Ctrl-b, then d to detach. Aider stays running on the VM when you disconnect, with the chat as you left it. On your computer, use this command to hop back in:
ssh -t my-aider.exe.xyz 'tmux new -A -s aider -c ~/project'
A VM restart ends the running session, but not your files, commits, or
chat log. Reconnect and run aider --restore-chat-history from your
project's folder on the VM to pick up the conversation.
Work on a GitHub repo#
The GitHub integration lets the VM clone and
push a repository with no GitHub token on the VM. Link your GitHub account
on the Integrations page, then give this VM
one repository. On your computer, with your repository in place of
you/myapp:
ssh exe.dev integrations add github --name myapp --repository you/myapp --attach vm:my-aider
On the VM, clone it through the integration and work on a branch:
git clone https://github.int.exe.xyz/you/myapp.git ~/myapp
cd ~/myapp
git switch -c aider-changes
tmux new -A -s myapp -c ~/myapp
Run aider in that session and ask for a change. Name the files it
should edit, or let it find them with its
repository map. When you're happy,
push the branch and open a pull request with gh, which goes through the
same integration:
git push -u origin aider-changes
GH_HOST=github.int.exe.xyz gh pr create --fill --repo you/myapp
Commits carry your git identity, with (aider) added to the author name of
the ones aider wrote. Pushes and the pull request show up as
exe-dev-github-integration[bot] unless you add --act-as-user to the
integration.
Let it make VMs#
Aider doesn't use MCP, so it can't connect to
exe.dev's MCP server the way Codex or Claude Code can.
But aider can suggest shell commands and run them when you say yes, and
ssh exe.dev is a shell command. Give the VM an SSH key of its own for
exe.dev. On the VM:
ssh-keygen -q -t ed25519 -N "" -C "aider-$(hostname)" -f ~/.ssh/exe_aider
grep -qs '^Host exe.dev' ~/.ssh/config || cat >> ~/.ssh/config <<'EOF'
Host exe.dev *.exe.xyz
IdentityFile ~/.ssh/exe_aider
StrictHostKeyChecking accept-new
EOF
On your computer, add that key to your exe.dev account, limited to VMs
tagged aider and to a few commands, for 30 days:
ssh my-aider.exe.xyz cat .ssh/exe_aider.pub |
ssh exe.dev ssh-key add --tag=aider --exp=30d '--cmds="help,whoami,ls,new,rm,ssh,stat,share show"'
VMs the key creates get the tag aider; your other VMs are "not found"
to it, and it can't make anything public. Back on the VM, ssh exe.dev whoami shows the key as current. Now ask aider for something that
needs a machine of its own:
Make a new exe.dev VM with
ssh exe.dev new, install PostgreSQL on it, and check that it's running.
Aider lists the commands it wants to run and asks before it runs them,
even with --yes-always, so nothing runs without you. Answer Yes to
run them, and yes again to show aider the output. To
revoke the key, run ssh exe.dev ssh-key remove aider-my-aider on your
computer.
Open it in your browser#
Aider also has an
experimental browser version:
a chat page for one project. To run it for ~/project all the time, on
the VM:
sudo tee /etc/systemd/system/aider-browser.service >/dev/null <<'EOF'
[Unit]
Description=Aider in the browser, for ~/project
After=network-online.target
Wants=network-online.target
[Service]
User=exedev
WorkingDirectory=/home/exedev/project
ExecStart=/home/exedev/.local/bin/aider --browser
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now aider-browser
Then open https://my-aider.exe.xyz:8501/. exe.dev asks you to log in,
because port 8501 is private to people with access to the VM. Ask for a
change as in the terminal; aider edits and commits the same way.
The browser version and a terminal aider each keep their own chat, so give
one project to one of them at a time. To use it for another project,
change WorkingDirectory and run sudo systemctl restart aider-browser.
Warning
Anyone who can open port 8501 can change your code. Leave it private.
Make yourself at home#
- Pick a model: type
/model opus,/model gptor/model lunain aider, or start it withaider --model haikufor quick, cheap work. Changemodelin~/.aider.conf.ymlto set the default. exe.dev keeps a list of available models and prices; aider's own cost figures are estimates. - Plan with one model, edit with another:
aider --architect --model opus --editor-model sonnethas the first model work out a change and the second apply it. See aider's chat modes. - Edit in your own editor: open the VM in VS Code or
code-server, start
aider --watch-files, and write a comment ending inAI!in any file. Aider makes the change it describes. See IDE integration. - Let it run your tests:
aider --test-cmd "npm test" --auto-testruns your tests after each change and asks the model to fix what fails. - Peek at your app: ask aider to make it listen on
0.0.0.0:8000, start it in a second tmux window (Ctrl-b, then c), and openhttps://my-aider.exe.xyz/. It's private by default. More about previews. - Script it:
aider --yes-always --message "Add type hints to utils.py" utils.pymakes one change, commits it, and exits. See scripting aider.
For everything else, head to aider's docs.
Frequently asked questions#
Can I use my own Anthropic or OpenAI API key?
Yes, without putting it on the VM: store it in an LLM integration as API Key and keep the same base URLs; usage is then billed by the provider. To call a provider directly instead, delete its api-key line (and the ANTHROPIC_API_BASE or openai-api-base line) from ~/.aider.conf.yml and follow aider's API key docs.
Why does aider need a model settings file?
Aider ships with settings for the models it knew when it was released. For newer models it falls back to defaults that some of them reject, such as temperature is deprecated for this model. ~/.aider.model.settings.yml tells aider how to talk to each one. To add a model from exe.dev's model list, copy an entry, change name, and start aider with --model and the new name.
Can aider work on its own while I'm away?
Not really. Aider is a pair programmer: it edits the files you add to the chat, suggests shell commands, and asks before it runs them. It finishes the reply it's working on after you detach, then waits for you. For longer unattended work, try Codex, Claude Code or OpenCode on the same VM; they're preinstalled or one command away.
How do I update aider?
On the VM, run uv tool upgrade aider-chat. It stays within 0.x releases; for a later major version, run the install command from "Start coding" with the new version. Your settings and chat history stay put.
Something's not working. Where do I look?
Run aider --verbose from your project to see which settings files and models it loaded. An error naming a model usually means it's missing from ~/.aider.model.settings.yml, or isn't in exe.dev's model list. curl https://llm.int.exe.xyz/v1/models on the VM shows whether the LLM integration is attached. For the browser version, journalctl -u aider-browser has its log.
How do I back up my work?
Aider commits every change, so push your repository somewhere, such as GitHub. For a copy of the whole VM, run ssh exe.dev cp my-aider my-aider-backup on your computer (choose a free backup name). To use that copy, connect with ssh my-aider-backup.exe.xyz; your files, settings and chat history are there. Reattach any VM-specific integrations.
Updated Oct 30, 2026 · Markdown · manifest.json · Something wrong? Tell us