{"id":167356,"date":"2026-05-03T10:30:13","date_gmt":"2026-05-03T07:30:13","guid":{"rendered":"https:\/\/computingforgeeks.com\/aider-cheat-sheet\/"},"modified":"2026-05-04T15:36:30","modified_gmt":"2026-05-04T12:36:30","slug":"aider-cheat-sheet","status":"publish","type":"post","link":"https:\/\/computingforgeeks.com\/aider-cheat-sheet\/","title":{"rendered":"Aider Cheat Sheet &#8211; AI Pair Programming Commands and Workflows"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Aider is a git-native AI pair programming tool that runs in your terminal, edits your files, and writes a commit per change. The CLI exposes 175+ flags, four chat modes, 43 in-chat slash commands, and a YAML config schema with around 100 keys. The official docs split that surface across many pages. This cheat sheet condenses everything into one reference, with every command tested on a real macOS install of Aider 0.86.2 against multiple LLM providers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you came from the <a href=\"https:\/\/computingforgeeks.com\/setup-aider-ai-pair-programming\/\" target=\"_blank\" rel=\"noreferrer noopener\">Aider setup guide<\/a> and want one page open while you work, this is it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Verified working: May 2026 with Aider 0.86.2, tested on macOS against Claude Haiku 4.5 and Sonnet 4.6 (via OpenRouter), with real cost and token counts captured from a fresh test repository.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Quick install reminder<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The recommended path on Linux and macOS is <code>uv tool install<\/code>, which pins a working Python and pulls Aider into an isolated environment:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>uv tool install aider-chat\naider --version<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>aider 0.86.2<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>pipx install aider-install<\/code> bootstrapper still works but adds a layer. <code>uv<\/code> is faster and avoids Python version mismatches. For provider keys, .env layout, and Windows install paths see the dedicated <a href=\"https:\/\/computingforgeeks.com\/setup-aider-ai-pair-programming\/\" target=\"_blank\" rel=\"noreferrer noopener\">Aider AI pair programming setup<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Where Aider stores config<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Aider reads four sources in priority order. Top of the list wins:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>CLI flags: <code>aider --model openrouter\/anthropic\/claude-sonnet-4.6<\/code><\/li>\n\n\n<li>Environment variables: every flag has an <code>AIDER_*<\/code> twin (<code>AIDER_MODEL<\/code>, <code>AIDER_OPENAI_API_KEY<\/code>, <code>AIDER_AUTO_COMMITS<\/code>)<\/li>\n\n\n<li>Config file: <code>.aider.conf.yml<\/code> searched in git root, then current working directory, then <code>$HOME<\/code><\/li>\n\n\n<li>Built-in defaults<\/li>\n\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">API keys belong in a separate <code>.env<\/code> file (default location: project root, also gitignored automatically by the first-run prompt):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># .env (in your repo root)\nANTHROPIC_API_KEY=sk-ant-api03-...\nOPENAI_API_KEY=sk-proj-...\nGEMINI_API_KEY=aiza...\nOPENROUTER_API_KEY=sk-or-v1-...\nDEEPSEEK_API_KEY=sk-...<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">And a working <code>.aider.conf.yml<\/code> validated end to end on macOS:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># .aider.conf.yml\nmodel: openrouter\/anthropic\/claude-sonnet-4.6\nweak-model: openrouter\/anthropic\/claude-haiku-4.5\neditor-model: openrouter\/anthropic\/claude-sonnet-4.6\nauto-commits: true\nauto-lint: true\nno-show-model-warnings: true\nno-show-release-notes: true\nlint-cmd:\n  - \"python: ruff check --fix\"\n  - \"javascript: eslint --fix\"\n  - \"go: golangci-lint run --fix\"\ntest-cmd: \"pytest -x\"\nsuggest-shell-commands: true\nnotifications: true\nshow-diffs: true\nchat-history-file: .aider.chat.history.md\ninput-history-file: .aider.input.history\nalias:\n  - \"haiku:openrouter\/anthropic\/claude-haiku-4.5\"\n  - \"sonnet:openrouter\/anthropic\/claude-sonnet-4.6\"\n  - \"opus:openrouter\/anthropic\/claude-opus-4.7\"<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">First-run behaviour and auto-gitignore<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">On the first launch in a git repo, Aider asks to add its history files to <code>.gitignore<\/code>. Real prompt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Add .aider* to .gitignore (recommended)? (Y)es\/(N)o [Yes]: Y\nAdded .aider* to .gitignore<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Skip this with <code>--no-gitignore<\/code>. Always answer yes unless you have a strong reason. <code>.aider.chat.history.md<\/code> contains complete prompts and responses, including any code or configuration the model handled.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Top-level CLI flags reference<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The full flag list is around 175 entries. Run <code>aider --shell-completions bash<\/code> for the exhaustive set. The table below is the working reference for the flags you actually use day to day.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Flag<\/th><th>Env var twin<\/th><th>Purpose<\/th><\/tr><\/thead><tbody>\n<tr><td><code>--model MODEL<\/code><\/td><td><code>AIDER_MODEL<\/code><\/td><td>Main chat model. Format: <code>provider\/model-id<\/code>.<\/td><\/tr>\n<tr><td><code>--weak-model MODEL<\/code><\/td><td><code>AIDER_WEAK_MODEL<\/code><\/td><td>Cheap model for commit messages and summaries.<\/td><\/tr>\n<tr><td><code>--editor-model MODEL<\/code><\/td><td><code>AIDER_EDITOR_MODEL<\/code><\/td><td>Editor model used in architect mode.<\/td><\/tr>\n<tr><td><code>--editor-edit-format FMT<\/code><\/td><td><code>AIDER_EDITOR_EDIT_FORMAT<\/code><\/td><td>Edit format for the editor model.<\/td><\/tr>\n<tr><td><code>--list-models QUERY<\/code><\/td><td><code>AIDER_LIST_MODELS<\/code><\/td><td>Print every model whose name contains QUERY.<\/td><\/tr>\n<tr><td><code>--alias \"name:model\"<\/code><\/td><td><code>AIDER_ALIAS<\/code><\/td><td>Define a model alias. Repeatable.<\/td><\/tr>\n<tr><td><code>--api-key PROVIDER=KEY<\/code><\/td><td><code>AIDER_API_KEY<\/code><\/td><td>Set provider key inline.<\/td><\/tr>\n<tr><td><code>--set-env VAR=VAL<\/code><\/td><td><code>AIDER_SET_ENV<\/code><\/td><td>Set arbitrary env vars before starting.<\/td><\/tr>\n<tr><td><code>--reasoning-effort LEVEL<\/code><\/td><td><code>AIDER_REASONING_EFFORT<\/code><\/td><td>Reasoning knob for o-series and Sonnet 4.6+ thinking.<\/td><\/tr>\n<tr><td><code>--thinking-tokens N<\/code><\/td><td><code>AIDER_THINKING_TOKENS<\/code><\/td><td>Cap on thinking tokens.<\/td><\/tr>\n<tr><td><code>--edit-format FMT<\/code><\/td><td><code>AIDER_EDIT_FORMAT<\/code><\/td><td><code>diff<\/code>, <code>whole<\/code>, <code>udiff<\/code>, <code>diff-fenced<\/code>.<\/td><\/tr>\n<tr><td><code>--architect<\/code><\/td><td><code>AIDER_ARCHITECT<\/code><\/td><td>Switch on architect mode (planner + editor).<\/td><\/tr>\n<tr><td><code>--auto-accept-architect<\/code><\/td><td><code>AIDER_AUTO_ACCEPT_ARCHITECT<\/code><\/td><td>Skip the architect\/editor confirmation. Default true.<\/td><\/tr>\n<tr><td><code>--map-tokens N<\/code><\/td><td><code>AIDER_MAP_TOKENS<\/code><\/td><td>Repo map token budget. <code>0<\/code> disables.<\/td><\/tr>\n<tr><td><code>--map-refresh MODE<\/code><\/td><td><code>AIDER_MAP_REFRESH<\/code><\/td><td><code>auto<\/code> (default), <code>always<\/code>, <code>files<\/code>, <code>manual<\/code>.<\/td><\/tr>\n<tr><td><code>--cache-prompts<\/code><\/td><td><code>AIDER_CACHE_PROMPTS<\/code><\/td><td>Use prompt caching where the provider supports it.<\/td><\/tr>\n<tr><td><code>--cache-keepalive-pings N<\/code><\/td><td><code>AIDER_CACHE_KEEPALIVE_PINGS<\/code><\/td><td>Ping every 5 minutes for N intervals to keep the cache warm.<\/td><\/tr>\n<tr><td><code>--max-chat-history-tokens N<\/code><\/td><td><code>AIDER_MAX_CHAT_HISTORY_TOKENS<\/code><\/td><td>Compact older history above this threshold.<\/td><\/tr>\n<tr><td><code>--no-git<\/code><\/td><td><code>AIDER_GIT<\/code><\/td><td>Run without git (no auto-commits, no diff flow).<\/td><\/tr>\n<tr><td><code>--no-auto-commits<\/code><\/td><td><code>AIDER_AUTO_COMMITS<\/code><\/td><td>Keep git but disable per-edit commits.<\/td><\/tr>\n<tr><td><code>--dirty-commits<\/code> \/ <code>--no-dirty-commits<\/code><\/td><td><code>AIDER_DIRTY_COMMITS<\/code><\/td><td>Commit pre-existing dirty changes when Aider runs.<\/td><\/tr>\n<tr><td><code>--commit<\/code><\/td><td><code>AIDER_COMMIT<\/code><\/td><td>Commit existing changes with an LLM-written message, then exit.<\/td><\/tr>\n<tr><td><code>--commit-prompt PROMPT<\/code><\/td><td><code>AIDER_COMMIT_PROMPT<\/code><\/td><td>Override the system prompt used to write commit messages.<\/td><\/tr>\n<tr><td><code>--dry-run<\/code><\/td><td><code>AIDER_DRY_RUN<\/code><\/td><td>Show edits, do not write files. Verified.<\/td><\/tr>\n<tr><td><code>--lint<\/code><\/td><td><code>AIDER_LINT<\/code><\/td><td>Lint and fix existing code, then exit.<\/td><\/tr>\n<tr><td><code>--lint-cmd \"lang: cmd\"<\/code><\/td><td><code>AIDER_LINT_CMD<\/code><\/td><td>Per-language lint command. Repeatable.<\/td><\/tr>\n<tr><td><code>--auto-lint<\/code><\/td><td><code>AIDER_AUTO_LINT<\/code><\/td><td>Lint after every edit cycle. Default on.<\/td><\/tr>\n<tr><td><code>--test<\/code><\/td><td><code>AIDER_TEST<\/code><\/td><td>Run tests and let Aider iterate fixes.<\/td><\/tr>\n<tr><td><code>--test-cmd CMD<\/code><\/td><td><code>AIDER_TEST_CMD<\/code><\/td><td>Test command Aider uses for <code>--test<\/code> and <code>--auto-test<\/code>.<\/td><\/tr>\n<tr><td><code>--auto-test<\/code><\/td><td><code>AIDER_AUTO_TEST<\/code><\/td><td>Run tests after every successful edit.<\/td><\/tr>\n<tr><td><code>--watch-files<\/code><\/td><td><code>AIDER_WATCH_FILES<\/code><\/td><td>Re-read changed files automatically. Hands-free <code>AI!<\/code> markers.<\/td><\/tr>\n<tr><td><code>--message MSG<\/code> \/ <code>-m<\/code><\/td><td><code>AIDER_MESSAGE<\/code><\/td><td>Send single message, exit.<\/td><\/tr>\n<tr><td><code>--message-file PATH<\/code> \/ <code>-f<\/code><\/td><td><code>AIDER_MESSAGE_FILE<\/code><\/td><td>Read the one-shot prompt from a file.<\/td><\/tr>\n<tr><td><code>--load PATH<\/code><\/td><td><code>AIDER_LOAD<\/code><\/td><td>Replay a saved <code>\/command<\/code> file on launch.<\/td><\/tr>\n<tr><td><code>--apply FILE<\/code><\/td><td><code>AIDER_APPLY<\/code><\/td><td>Apply a SEARCH\/REPLACE diff file Aider produced earlier. Verified.<\/td><\/tr>\n<tr><td><code>--apply-clipboard-edits<\/code><\/td><td><code>AIDER_APPLY_CLIPBOARD_EDITS<\/code><\/td><td>Apply edits pasted into the clipboard.<\/td><\/tr>\n<tr><td><code>--show-repo-map<\/code><\/td><td><code>AIDER_SHOW_REPO_MAP<\/code><\/td><td>Print the repo map and exit. Useful for debugging.<\/td><\/tr>\n<tr><td><code>--show-prompts<\/code><\/td><td><code>AIDER_SHOW_PROMPTS<\/code><\/td><td>Print the assembled system prompts and exit.<\/td><\/tr>\n<tr><td><code>--browser<\/code> \/ <code>--gui<\/code><\/td><td><code>AIDER_GUI<\/code><\/td><td>Launch the Streamlit browser UI.<\/td><\/tr>\n<tr><td><code>--copy-paste<\/code><\/td><td><code>AIDER_COPY_PASTE<\/code><\/td><td>Clipboard ferry mode for offline workflows.<\/td><\/tr>\n<tr><td><code>--vim<\/code><\/td><td><code>AIDER_VIM<\/code><\/td><td>VI editing mode in the input.<\/td><\/tr>\n<tr><td><code>--multiline<\/code><\/td><td><code>AIDER_MULTILINE<\/code><\/td><td>Multi-line input (Meta-Enter submits).<\/td><\/tr>\n<tr><td><code>--yes-always<\/code><\/td><td><code>AIDER_YES_ALWAYS<\/code><\/td><td>Auto-confirm every prompt.<\/td><\/tr>\n<tr><td><code>-c, --config PATH<\/code><\/td><td><code>AIDER_CONFIG<\/code><\/td><td>Use an explicit config file.<\/td><\/tr>\n<tr><td><code>--env-file PATH<\/code><\/td><td><code>AIDER_ENV_FILE<\/code><\/td><td>Use an explicit .env file.<\/td><\/tr>\n<tr><td><code>--upgrade<\/code><\/td><td><code>AIDER_UPGRADE<\/code><\/td><td>Upgrade in place. Verified.<\/td><\/tr>\n<tr><td><code>--just-check-update<\/code><\/td><td><code>AIDER_JUST_CHECK_UPDATE<\/code><\/td><td>Exit code reflects whether a new version is available.<\/td><\/tr>\n<tr><td><code>--shell-completions SHELL<\/code><\/td><td><code>AIDER_SHELL_COMPLETIONS<\/code><\/td><td>Print bash, zsh, or tcsh completions.<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Model selection and provider routing<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Aider speaks every major LLM provider through LiteLLM. The model string is <code>provider\/model-id<\/code>. Skip the provider for OpenAI:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Anthropic (direct)\naider --model anthropic\/claude-sonnet-4-6\naider --model anthropic\/claude-opus-4-7\n\n# OpenAI (no provider prefix)\naider --model gpt-5\naider --model o3\n\n# Google\naider --model gemini\/gemini-2.5-pro\naider --model gemini\/gemini-2.5-flash\n\n# DeepSeek\naider --model deepseek\/deepseek-chat\naider --model deepseek\/deepseek-reasoner\n\n# AWS Bedrock (requires AWS_PROFILE)\naider --model bedrock\/anthropic.claude-sonnet-4-6\n\n# OpenRouter (single key, all providers, validated working in this guide)\naider --model openrouter\/anthropic\/claude-sonnet-4.6\naider --model openrouter\/anthropic\/claude-haiku-4.5\naider --model openrouter\/google\/gemini-2.5-pro\n\n# Local Ollama\naider --model ollama_chat\/llama3.3:70b\naider --model ollama_chat\/qwen2.5-coder:32b<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If you misspell the model name, Aider suggests close matches. Real warning captured during testing:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Warning for openrouter\/anthropic\/claude-haiku-4-5: Unknown context window size and costs.\nDid you mean one of these?\n- openrouter\/anthropic\/claude-3-5-haiku\n- openrouter\/anthropic\/claude-3-haiku\n- openrouter\/anthropic\/claude-haiku-4.5<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Filter the full model list from the CLI:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ aider --list-models claude\nModels which match \"claude\":\n- anthropic\/claude-haiku-4-5\n- anthropic\/claude-opus-4-7\n- anthropic\/claude-sonnet-4-6\n- anthropic\/claude-sonnet-4-5-20250929\n- ... 90+ more across providers<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Built-in aliases<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Aider ships preset shortcuts for the common models. Use them anywhere a model name would go:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Alias<\/th><th>Resolves to<\/th><\/tr><\/thead><tbody>\n<tr><td><code>opus<\/code><\/td><td><code>claude-opus-4-7<\/code><\/td><\/tr>\n<tr><td><code>sonnet<\/code><\/td><td><code>claude-sonnet-4-6<\/code><\/td><\/tr>\n<tr><td><code>haiku<\/code><\/td><td><code>claude-haiku-4-5<\/code><\/td><\/tr>\n<tr><td><code>4o<\/code><\/td><td><code>gpt-4o<\/code><\/td><\/tr>\n<tr><td><code>mini<\/code><\/td><td><code>gpt-4o-mini<\/code><\/td><\/tr>\n<tr><td><code>flash<\/code><\/td><td><code>gemini-2.5-flash<\/code><\/td><\/tr>\n<tr><td><code>deepseek<\/code><\/td><td><code>deepseek\/deepseek-chat<\/code><\/td><\/tr>\n<tr><td><code>r1<\/code><\/td><td><code>deepseek\/deepseek-reasoner<\/code><\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Override or extend with <code>--alias<\/code> on the CLI or under the <code>alias:<\/code> key in <code>.aider.conf.yml<\/code>. CLI definitions win, then config-file aliases, then built-in aliases. Once defined, switch mid-session with <code>\/model haiku<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Main, weak, and editor models<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>Main model<\/strong>: handles your prompts and code edits. Pick the smartest model your budget allows.<\/li>\n\n\n<li><strong>Weak model<\/strong>: writes commit messages, summarises history. Cheap is fine. <code>claude-haiku-4-5<\/code>, <code>gpt-5-mini<\/code>, <code>gemini-2.5-flash<\/code>.<\/li>\n\n\n<li><strong>Editor model<\/strong>: in architect mode, applies the planner&#8217;s instructions to files. Pick a model strong at structured output.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Chat modes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Switch modes mid-session with the corresponding slash command. Each mode shapes Aider&#8217;s behaviour:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Mode<\/th><th>Slash<\/th><th>Behaviour<\/th><\/tr><\/thead><tbody>\n<tr><td>Code (default)<\/td><td><code>\/code<\/code><\/td><td>Reads, edits, commits. The standard pair-programming loop.<\/td><\/tr>\n<tr><td>Architect<\/td><td><code>\/architect<\/code><\/td><td>Two-step. A planner model proposes changes, the editor model applies them. Best for larger refactors.<\/td><\/tr>\n<tr><td>Ask<\/td><td><code>\/ask<\/code><\/td><td>Read-only Q&amp;A. No edits. Best for code review and exploration.<\/td><\/tr>\n<tr><td>Help<\/td><td><code>\/help<\/code><\/td><td>Aider answers questions about itself, including command and config questions.<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\/ask vs \/code workflow<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The single highest-impact technique on Aider is bouncing between modes. Plan in <code>\/ask<\/code>, execute in <code>\/code<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/ask How would you refactor src\/auth\/login.py to extract the rate-limiter into its own module?\n... model proposes 3 options, you pick option 2 ...\n\/code go ahead with option 2 but keep the existing log lines in place<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Real <code>\/ask<\/code> response captured against a deliberately broken <code>divide()<\/code> function (token cost: 247 sent, 109 received, $0.00079 via OpenRouter Haiku 4.5):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ aider --message \"\/ask What is the bug in divide()?\" calculator.py\n\nThe function will raise a `ZeroDivisionError`.\nTo fix it, you should add a check:\n\ndef divide(a, b):\n    if b == 0:\n        raise ValueError(\"Cannot divide by zero\")\n    return a \/ b\n\nOr handle it another way depending on your use case.\n\nTokens: 247 sent, 109 received. Cost: $0.00079 message, $0.00079 session.<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Architect mode<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Architect mode runs two models per turn. A planner proposes the change in plain language, an editor applies it. Best for refactors that touch more than two files. A typical pairing:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aider --architect \\\n  --model anthropic\/claude-opus-4-7 \\\n  --editor-model anthropic\/claude-sonnet-4-6 \\\n  --auto-accept-architect<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The two-pass design measurably improves quality on real-world refactors and usually saves money over running the architect model alone for the entire task. The editor model emits the structured diffs, freeing the architect from format constraints.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Slash commands inside Aider<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">43 in-chat commands as of 0.86.x, captured exactly from the official reference and validated against a live install. Memorise the ones marked with a star, the rest are reachable by typing <code>\/<\/code> and tabbing.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Command<\/th><th>Purpose<\/th><\/tr><\/thead><tbody>\n<tr><td><code>\/add &lt;files&gt;<\/code> *<\/td><td>Add files to the chat (Aider can edit them).<\/td><\/tr>\n<tr><td><code>\/drop [files]<\/code> *<\/td><td>Remove files from the chat. No args drops everything.<\/td><\/tr>\n<tr><td><code>\/ls<\/code><\/td><td>List files currently in the chat.<\/td><\/tr>\n<tr><td><code>\/read-only &lt;files&gt;<\/code> *<\/td><td>Add files for reference but block edits.<\/td><\/tr>\n<tr><td><code>\/clear<\/code><\/td><td>Clear the visible chat history.<\/td><\/tr>\n<tr><td><code>\/reset<\/code><\/td><td>Drop all files and clear history.<\/td><\/tr>\n<tr><td><code>\/tokens<\/code> *<\/td><td>Print token usage for the current chat.<\/td><\/tr>\n<tr><td><code>\/cost<\/code><\/td><td>Show the running session cost.<\/td><\/tr>\n<tr><td><code>\/code<\/code> *<\/td><td>Switch to code mode (or run one prompt in code mode).<\/td><\/tr>\n<tr><td><code>\/architect<\/code> *<\/td><td>Switch to architect mode.<\/td><\/tr>\n<tr><td><code>\/ask<\/code> *<\/td><td>Switch to ask mode (read-only).<\/td><\/tr>\n<tr><td><code>\/chat-mode &lt;name&gt;<\/code><\/td><td>Generic mode switcher.<\/td><\/tr>\n<tr><td><code>\/context<\/code><\/td><td>Enter context mode.<\/td><\/tr>\n<tr><td><code>\/model &lt;name&gt;<\/code> *<\/td><td>Switch the main model on the fly.<\/td><\/tr>\n<tr><td><code>\/models &lt;query&gt;<\/code><\/td><td>Search the available models list.<\/td><\/tr>\n<tr><td><code>\/editor-model &lt;name&gt;<\/code><\/td><td>Switch the editor model.<\/td><\/tr>\n<tr><td><code>\/weak-model &lt;name&gt;<\/code><\/td><td>Switch the weak model.<\/td><\/tr>\n<tr><td><code>\/think-tokens N<\/code><\/td><td>Set thinking-token budget per turn.<\/td><\/tr>\n<tr><td><code>\/reasoning-effort LEVEL<\/code><\/td><td>Set reasoning effort for compatible models.<\/td><\/tr>\n<tr><td><code>\/diff<\/code> *<\/td><td>Show the diff Aider just wrote.<\/td><\/tr>\n<tr><td><code>\/undo<\/code> *<\/td><td>Revert the last commit Aider made.<\/td><\/tr>\n<tr><td><code>\/git &lt;cmd&gt;<\/code><\/td><td>Run a git command without leaving the agent.<\/td><\/tr>\n<tr><td><code>\/commit [msg]<\/code><\/td><td>Commit dirty changes manually.<\/td><\/tr>\n<tr><td><code>\/run &lt;cmd&gt;<\/code> *<\/td><td>Run a shell command and feed the output into the chat. Alias: <code>!<\/code>.<\/td><\/tr>\n<tr><td><code>\/test [cmd]<\/code><\/td><td>Run the configured test command. Aider sees the output.<\/td><\/tr>\n<tr><td><code>\/lint<\/code><\/td><td>Run the configured lint command.<\/td><\/tr>\n<tr><td><code>\/web &lt;url&gt;<\/code><\/td><td>Fetch a URL and add the rendered text to the chat.<\/td><\/tr>\n<tr><td><code>\/voice<\/code><\/td><td>Voice input via Whisper. Requires <code>portaudio<\/code>.<\/td><\/tr>\n<tr><td><code>\/paste<\/code><\/td><td>Paste image or text from the clipboard.<\/td><\/tr>\n<tr><td><code>\/copy<\/code><\/td><td>Copy the last assistant reply to the clipboard.<\/td><\/tr>\n<tr><td><code>\/copy-context<\/code><\/td><td>Copy chat context as markdown.<\/td><\/tr>\n<tr><td><code>\/load PATH<\/code><\/td><td>Run a saved <code>\/command<\/code> script.<\/td><\/tr>\n<tr><td><code>\/save PATH<\/code><\/td><td>Save the current session as a replayable script.<\/td><\/tr>\n<tr><td><code>\/multiline-mode<\/code> or <code>\/ml<\/code><\/td><td>Toggle multi-line input.<\/td><\/tr>\n<tr><td><code>\/vim<\/code><\/td><td>Toggle Vim key bindings.<\/td><\/tr>\n<tr><td><code>\/edit<\/code> or <code>\/editor [cmd]<\/code><\/td><td>Open <code>$EDITOR<\/code> for a long prompt.<\/td><\/tr>\n<tr><td><code>\/map<\/code><\/td><td>Print the current repo map.<\/td><\/tr>\n<tr><td><code>\/map-refresh<\/code><\/td><td>Force a repo-map refresh now.<\/td><\/tr>\n<tr><td><code>\/settings<\/code><\/td><td>Print effective settings.<\/td><\/tr>\n<tr><td><code>\/ok<\/code><\/td><td>Shorthand approval (used in Architect mode).<\/td><\/tr>\n<tr><td><code>\/report<\/code><\/td><td>Open a pre-filled GitHub issue with anonymised diagnostics.<\/td><\/tr>\n<tr><td><code>\/help<\/code><\/td><td>Aider answers questions about itself.<\/td><\/tr>\n<tr><td><code>\/quit<\/code> or <code>\/exit<\/code><\/td><td>Exit cleanly.<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Files, repo map, and context<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Aider always sends three things to the model: the files in the chat (full contents), the repo map (skeleton of every other file), and the conversation history. Tune each lever based on repo size and budget.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\/add and \/drop discipline<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Smaller chats run faster, cost less, and produce sharper edits. Add files when you need them, drop them when done:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/add src\/auth\/*.py\n\/add tests\/auth\/test_login.py\n\n# After the change is in\n\/drop tests\/auth\/test_login.py<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\/read-only for reference docs<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>\/read-only docs\/api-spec.md\n\/read-only ..\/external-lib\/v3\/types.d.ts<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Repo map tuning<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Inspect what the model sees with <code>aider --show-repo-map<\/code>. Real output from a 2-file test repo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ aider --show-repo-map\nHere are summaries of some files present in my git repository.\nDo not propose changes to these files, treat them as *read-only*.\nIf you need to edit any of these files, ask me to *add them to the chat* first.\n\nREADME.md\n\ncalculator.py:\n\u2502def add(a, b):\n\u22ee\n\u2502def divide(a, b):\n\u22ee<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Default budget is 4096 tokens with auto-refresh. Raise to <code>--map-tokens 8192<\/code> on a sprawling monorepo, lower to <code>0<\/code> on a tiny repo to save tokens.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aider --map-tokens 4096 --map-refresh auto\n\/map           # inspect what the model sees inside a session\n\/map-refresh   # rebuild after big file moves<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Git integration and atomic commits<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Aider commits after every successful edit by default. Each commit message is generated by the weak model and the agent is recorded as the committer. The defining workflow benefit: every change becomes a reviewable, revertable git commit:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ git log --oneline -5\na3f1c2d feat: Add input validation to registration form\nb7e4a1f refactor: Extract email parsing into utility module\nc9d2e3a fix: Handle null case in user profile serialization<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Commit-related flags<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># Disable auto-commits for the session\naider --no-auto-commits\n\n# Commit existing dirty changes before Aider edits\naider --dirty-commits\n\n# Stop trusting Aider with author attribution\naider --no-attribute-author --no-attribute-committer\n\n# Use Co-authored-by trailer instead (default)\naider --attribute-co-authored-by\n\n# Skip git entirely (no repo, no commits, no diffs)\naider --no-git\n\n# Run pre-commit hooks (off by default)\naider --git-commit-verify<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Standalone &#8211;commit mode<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Wrote some code by hand and want an LLM-generated commit message? Run Aider in commit-only mode:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Stage your changes first, then\naider --commit \\\n  --weak-model openrouter\/anthropic\/claude-haiku-4.5 \\\n  --no-show-release-notes<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Undo and diff loops<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt; refactor src\/auth\/login.py to use bcrypt instead of argon2\n... edits applied, commit abc123\n\/diff             # what changed\n\/undo             # back out the commit\n&gt; refactor src\/auth\/login.py to use bcrypt, but keep the existing rate-limiter intact<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">&#8211;apply for replaying an edit<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Aider&#8217;s edit format is plain-text SEARCH\/REPLACE blocks. Save one to a file, replay it later with <code>--apply<\/code>. Validated end-to-end on macOS with the diff below:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># sample.diff\ncalculator.py\n&lt;&lt;&lt;&lt;&lt;&lt;&lt; SEARCH\ndef add(a, b):\n    return a + b\n=======\ndef add(a, b):\n    \"\"\"Add two numbers.\"\"\"\n    return a + b\n&gt;&gt;&gt;&gt;&gt;&gt;&gt; REPLACE<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>$ aider --apply sample.diff --no-auto-commits\ncalculator.py\nApplied edit to calculator.py<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pair with <code>--dry-run<\/code> to see what the apply would change without writing files. Verified output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ aider --dry-run --apply sample.diff\ncalculator.py\nDid not apply edit to calculator.py (--dry-run)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use <code>--apply-clipboard-edits<\/code> to read the SEARCH\/REPLACE block straight from the system clipboard, useful when you copy edits from a chat.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Linting and testing in the loop<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Aider can run your linter and test suite after every edit and feed the output back into the chat. The &#8220;self-healing&#8221; loop: model edits, lint fails, model fixes, tests pass.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Per-language lint commands\naider \\\n  --auto-lint \\\n  --lint-cmd \"python: ruff check --fix\" \\\n  --lint-cmd \"javascript: eslint --fix\" \\\n  --lint-cmd \"go: golangci-lint run --fix\"\n\n# Test command Aider iterates against\naider \\\n  --auto-test \\\n  --test-cmd \"pytest -x --tb=short\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Inside a session you can trigger the same flow on demand:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/lint\n\/test\n\/test pytest tests\/test_auth.py -v<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Standalone modes also work: <code>aider --lint --no-auto-commits<\/code> lints and fixes existing files then exits, <code>aider --test --test-cmd pytest<\/code> runs the test suite, fixes failures, and exits.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Watch-files mode for IDE-style flow<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>--watch-files<\/code> turns Aider into a passive sidecar. Edit any file in your editor, append a special <code>AI!<\/code> or <code>AI?<\/code> marker, save, Aider picks it up automatically.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aider --watch-files<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Marker placement (works across syntaxes: <code>#<\/code>, <code>\/\/<\/code>, <code>--<\/code>, <code>&lt;!--<\/code>):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def calculate_tax(price, rate):  # validate inputs, raise on negatives. AI!\n    return price * rate<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Save. Aider detects the marker, reads context, makes the change, commits, clears the marker. Use <code>AI?<\/code> for &#8220;explain this&#8221; rather than &#8220;edit this&#8221;. Stay in your editor; Aider works asynchronously.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Browser UI<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>aider --browser\n# or\naider --gui<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Streamlit-based UI on <code>http:\/\/127.0.0.1:8501<\/code>. Same model, same files, same slash commands, just rendered in a browser. Useful when sharing a session over a remote desktop or pairing with someone watching.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Voice and image input<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code># Voice input\nsudo apt install -y portaudio19-dev   # Ubuntu \/ Debian\nbrew install portaudio                # macOS\naider --voice-language en\n&gt; \/voice\n&gt; (speak your prompt)\n\n# Paste a screenshot from the clipboard\naider --model anthropic\/claude-sonnet-4-6\n&gt; \/paste\n&gt; explain this error in the screenshot<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Headless and CI mode<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>--message<\/code> and <code>--message-file<\/code> flags drive non-interactive runs. Combine with <code>--yes-always<\/code> for unattended pipelines:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># One-shot CI fix\naider \\\n  --message \"fix every failing pytest in tests\/\" \\\n  --yes-always \\\n  --auto-test --test-cmd \"pytest -x\" \\\n  --no-show-release-notes\n\n# Apply a precomputed prompt file\naider --message-file .ci\/upgrade-django.txt --yes-always\n\n# Replay a saved \/command script (deterministic session)\naider --load .aider\/commands\/refactor-auth.txt<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Real Q&amp;A captured during validation, against a 2-file test repo via OpenRouter Claude Haiku 4.5:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ aider --model openrouter\/anthropic\/claude-haiku-4.5 \\\n    --no-stream --no-show-release-notes --no-auto-commits --yes-always \\\n    --message \"What does the divide function do? One sentence.\" \\\n    calculator.py\n\nAider v0.86.2\nMain model: openrouter\/anthropic\/claude-haiku-4.5 with diff edit format\nWeak model: openrouter\/anthropic\/claude-haiku-4-5\nGit repo: .git with 2 files\nRepo-map: using 4096 tokens, auto refresh\nAdded calculator.py to the chat.\n\nThe `divide` function takes two numbers as arguments and returns the result of\ndividing the first number by the second.\n\nTokens: 2.8k sent, 27 received. Cost: $0.0029 message, $0.0029 session.<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Caching and history<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Prompt caching is a major cost lever on Anthropic and OpenAI. Turn it on, then keep the cache warm during pauses (Anthropic&#8217;s TTL is 5 minutes; the keep-alive pings extend it):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aider --cache-prompts --cache-keepalive-pings 12<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">History files default to <code>.aider.input.history<\/code> and <code>.aider.chat.history.md<\/code> at the repo root. The chat history is human-readable Markdown, easy to grep:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>grep -A4 \"refactor login\" .aider.chat.history.md\naider --restore-chat-history    # default false\naider --no-restore-chat-history # explicit blank start<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Aliases and the model metadata file<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Long model names get tedious. Define aliases in the config file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># .aider.conf.yml\nalias:\n  - \"sonnet:openrouter\/anthropic\/claude-sonnet-4.6\"\n  - \"opus:openrouter\/anthropic\/claude-opus-4.7\"\n  - \"fast:openrouter\/anthropic\/claude-haiku-4.5\"\n  - \"g25:openrouter\/google\/gemini-2.5-pro\"\n  - \"local:ollama_chat\/qwen2.5-coder:32b\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then pick from the CLI:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aider --model sonnet\naider --model opus --weak-model fast --editor-model sonnet<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For non-default models or self-hosted endpoints define metadata in <code>.aider.model.metadata.json<\/code> at the repo root or <code>$HOME<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"openai\/local-llama\": {\n    \"max_tokens\": 8192,\n    \"max_input_tokens\": 32000,\n    \"input_cost_per_token\": 0,\n    \"output_cost_per_token\": 0,\n    \"litellm_provider\": \"openai\",\n    \"supports_function_calling\": false\n  }\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Debug and introspection commands<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Three flags exit immediately after printing internal state. Useful when something is off:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># What does the model see in the repo map?\naider --show-repo-map\n\n# What system prompt does Aider build?\naider --show-prompts\n\n# Real first chunk captured on macOS:\nSYSTEM Act as an expert software developer.\nSYSTEM Always use best practices when coding.\nSYSTEM Respect and use existing conventions, libraries, etc that are already\nSYSTEM   present in the code base.\n...\n\n# Will the local Aider start cleanly without doing anything?\naider --exit<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Upgrading and version checks<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code># Verify the install\naider --version\n# Output: aider 0.86.2\n\n# Check for a new release (no install)\naider --just-check-update\n\n# Upgrade in place. Real output captured:\n$ aider --upgrade\nInstalling: ... -m pip install --upgrade --upgrade-strategy only-if-needed aider-chat\nInstallation complete.\nRe-run aider to use new version.\n\n# Try the bleeding edge\naider --install-main-branch<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Common errors and fixes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Error: &#8220;litellm.AuthenticationError&#8221;<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Provider key is missing or wrong. Verify the key is exported, the env var name matches the provider (<code>ANTHROPIC_API_KEY<\/code>, <code>OPENAI_API_KEY<\/code>, <code>GEMINI_API_KEY<\/code>, <code>OPENROUTER_API_KEY<\/code>), and the <code>.env<\/code> file is in the repo root that Aider runs from.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Error: &#8220;Failed to build numpy&#8221;<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Shows up when <code>pipx install aider-chat<\/code> picks a Python that the pinned NumPy refuses to compile against (notably Python 3.14). The fix is either <code>uv tool install aider-chat<\/code> (which selects a compatible Python automatically) or the <code>aider-install<\/code> bootstrapper.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Warning: &#8220;Unknown context window size and costs&#8221;<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The model name is not in LiteLLM&#8217;s metadata table. Aider still routes the request, but it cannot show accurate token costs. Add an entry in <code>.aider.model.metadata.json<\/code> or pass <code>--no-show-model-warnings<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Issue: portaudio missing on Linux or macOS<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>\/voice<\/code> requires the system PortAudio library. Install it with <code>sudo apt install -y portaudio19-dev<\/code> on Debian\/Ubuntu, <code>sudo dnf install -y portaudio-devel<\/code> on Rocky\/AlmaLinux\/Fedora, or <code>brew install portaudio<\/code> on macOS before launching Aider.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Error: &#8220;OpenRouter authentication did not complete&#8221;<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Aider tried to open a browser-based OAuth flow on a headless box. Either set the provider key directly (<code>OPENROUTER_API_KEY<\/code> in <code>.env<\/code>) or pass <code>--api-key openrouter=&lt;key&gt;<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Aider vs Claude Code vs Codex CLI vs Gemini CLI vs OpenCode<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>Aider<\/strong>: git-native, multi-provider, repo-map-aware, command-rich, atomic per-edit commits. Best when you want fine-grained control and provider flexibility.<\/li>\n\n\n<li><strong>Claude Code<\/strong>: deepest agent ecosystem, hooks, skills, plugins, MCP. See the <a href=\"https:\/\/computingforgeeks.com\/claude-code-cheat-sheet\/\" target=\"_blank\" rel=\"noreferrer noopener\">Claude Code cheat sheet<\/a>.<\/li>\n\n\n<li><strong>Codex CLI<\/strong>: tight focus, OpenAI-only, very strong at short surgical refactors. See the <a href=\"https:\/\/computingforgeeks.com\/codex-cli-cheat-sheet\/\" target=\"_blank\" rel=\"noreferrer noopener\">Codex CLI cheat sheet<\/a>.<\/li>\n\n\n<li><strong>Gemini CLI<\/strong>: free OAuth tier, 1M-token context, custom TOML commands. See the <a href=\"https:\/\/computingforgeeks.com\/gemini-cli-cheat-sheet\/\" target=\"_blank\" rel=\"noreferrer noopener\">Gemini CLI cheat sheet<\/a>.<\/li>\n\n\n<li><strong>OpenCode<\/strong>: open-source TUI, server-mode native. See the <a href=\"https:\/\/computingforgeeks.com\/opencode-cli-cheat-sheet\/\" target=\"_blank\" rel=\"noreferrer noopener\">OpenCode CLI cheat sheet<\/a>.<\/li>\n\n\n<li>For the multi-tool comparison, see <a href=\"https:\/\/computingforgeeks.com\/opencode-vs-claude-code-vs-cursor\/\" target=\"_blank\" rel=\"noreferrer noopener\">OpenCode vs Claude Code vs Cursor<\/a>.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Frequently asked questions<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Where is the Aider config file?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Aider searches for <code>.aider.conf.yml<\/code> in the git repo root, then the current working directory, then <code>$HOME<\/code>. The first one found wins. Pass <code>-c PATH<\/code> to override entirely.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How do I disable auto-commits?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Pass <code>--no-auto-commits<\/code> on the command line, or set <code>auto-commits: false<\/code> in <code>.aider.conf.yml<\/code>. Aider will still track edits, you just commit yourself with <code>\/commit<\/code> or external git.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What is architect mode in Aider?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Architect mode runs two models per turn. A planner model proposes the change in plain language, an editor model applies the change to files. Useful for larger refactors where structured output and reasoning come from different model strengths. The two-pass design measurably improves quality and usually saves money over running the architect model alone.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How do I use Aider with Ollama?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Run <code>ollama serve<\/code>, pull a coder-tuned model with <code>ollama pull qwen2.5-coder:32b<\/code>, then launch Aider with <code>aider --model ollama_chat\/qwen2.5-coder:32b<\/code>. Pair with the <a href=\"https:\/\/computingforgeeks.com\/ollama-commands-cheat-sheet\/\" target=\"_blank\" rel=\"noreferrer noopener\">Ollama commands cheat sheet<\/a> for model management.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How do I use Aider with OpenRouter?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Set <code>OPENROUTER_API_KEY<\/code> in <code>.env<\/code>, then prefix every model with <code>openrouter\/<\/code>: <code>aider --model openrouter\/anthropic\/claude-sonnet-4.6<\/code>. One key gives you Anthropic, OpenAI, Google, DeepSeek, Mistral, and dozens more, validated working in this guide.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Can Aider run in CI?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Yes. Use <code>--message<\/code> for a one-shot prompt, <code>--yes-always<\/code> to auto-confirm, <code>--auto-test --test-cmd \"pytest\"<\/code> for self-healing test runs, and <code>--no-show-release-notes<\/code> to keep logs clean. Token cost and a session-end summary print to stdout so you can capture them in your CI logs.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Does Aider support MCP servers?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Not as of Aider 0.86.x. MCP support is on the roadmap. For workflows that depend on MCP today, Claude Code, Cursor, and Cline are better fits.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Keep this open while you work<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Aider&#8217;s surface keeps growing release after release. When a new version ships check the freshness block at the top of this page, then re-read the section that changed. Pair this with the <a href=\"https:\/\/computingforgeeks.com\/setup-aider-ai-pair-programming\/\" target=\"_blank\" rel=\"noreferrer noopener\">Aider setup guide<\/a> for first-time install, the <a href=\"https:\/\/computingforgeeks.com\/claude-code-cheat-sheet\/\" target=\"_blank\" rel=\"noreferrer noopener\">Claude Code cheat sheet<\/a> if you alternate between agents, and the <a href=\"https:\/\/computingforgeeks.com\/gemini-cli-cheat-sheet\/\" target=\"_blank\" rel=\"noreferrer noopener\">Gemini CLI cheat sheet<\/a> when you want to compare notes.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>Aider is a git-native AI pair programming tool that runs in your terminal, edits your files, and writes a commit per change. The CLI exposes 175+ flags, four chat modes, 43 in-chat slash commands, and a YAML config schema with around 100 keys. The official docs split that surface across many pages. This cheat sheet &#8230; <a title=\"Aider Cheat Sheet &#8211; AI Pair Programming Commands and Workflows\" class=\"read-more\" href=\"https:\/\/computingforgeeks.com\/aider-cheat-sheet\/\" aria-label=\"Read more about Aider Cheat Sheet &#8211; AI Pair Programming Commands and Workflows\">Read more<\/a><\/p>\n","protected":false},"author":3,"featured_media":167357,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[39034,329,690],"tags":[17245,212,669],"cfg_series":[],"class_list":["post-167356","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai","category-automation","category-dev","tag-ai","tag-automation","tag-dev"],"_links":{"self":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/167356","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/comments?post=167356"}],"version-history":[{"count":1,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/167356\/revisions"}],"predecessor-version":[{"id":167366,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/167356\/revisions\/167366"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/media\/167357"}],"wp:attachment":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/media?parent=167356"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/categories?post=167356"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/tags?post=167356"},{"taxonomy":"cfg_series","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/cfg_series?post=167356"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}