Aider 0.86.2: our test log

Aider 0.86.2 implemented a missing function with a local 3B model in 3 of 3 trials (27 to 32 s each); it did not install on Python 3.13 without a C++ compiler, and it left a stray placeholder comment in the file.

Tested by us on 2026-10-25. Local open-weight model, not the vendor's hosted models. A smoke test on a CPU-only box, not a benchmark.

Result at a glance

Aider test record
FieldValue
ResultPassed
Version tested0.86.2
Date and time2026-10-25, 22:19 to 22:47 CDT (America/Chicago)
TaskIn a throwaway folder, give the tool a small bug and ask a local model to fix it through the tool's own file-editing. mathutil.py contained clamp(value, low, high) whose body was raise NotImplementedError; test_mathutil.py asserts three clamp cases. Pass means test_mathutil.py prints ok after one aider run.
Model usedQwen2.5-3B-Instruct (Q4_K_M) through Ollama 0.40.11
HardwareLinux x86_64 virtual machine (Debian 13), 8 vCPU (Intel Xeon, 1 thread per core), 15 GiB RAM, no GPU
Install (uv, Python 3.12, cold)6.5 s, 555 MB, 110 packages
Edit task trials passed3 of 3
Edit task wall time26.8 to 32.2 s
Load average before trials4.5 to 8.1

What we found

  • 3 of 3 trials produced a working clamp (max(low, min(value, high))) and the test printed ok, in 26.8 to 32.2 s each on a 3B local model, using the whole-file edit format.
  • Each result also contained the literal comment "# ... entire content of the file ..." that the model copied from the edit-format instructions. Functionally harmless, but it is junk in your file and shows a small model following the template too literally.
  • Aider asks the model to emit a diff-style block for every file in the chat; the 3B model produced an empty block for the test file, and aider logged it as an applied edit. The test file was unchanged (verified with git).

What we ran, step by step

Commands run, wall-clock time and exit code
StepWall timeExit codeNotes
Install on Python 3.12 with uv6.5 s0aider 0.86.2, 555 MB on disk, 110 installed packages. Load 0.62.
Install on Python 3.13 (first attempt)n/a1Failed after 5.8 s: a dependency had to be built from source and meson reported 'Unknown compiler(s): [[c++], [g++], [clang++], [nvc++], ...]'. This machine has gcc but no C++ compiler. On Python 3.12 the same install worked without compiling, so the failure is about a missing prebuilt wheel for 3.13 plus no C++ toolchain.
Edit task trial 129.1 s0python3 test_mathutil.py printed ok afterwards. Load 4.51.
Edit task trial 232.2 s0python3 test_mathutil.py printed ok afterwards. Load 6.47.
Edit task trial 326.8 s0python3 test_mathutil.py printed ok afterwards. Load 8.14.
Verification rerun after resetting the repo16 s0git status showed only mathutil.py modified; the test passed. Aider still prints "Applied edit to test_mathutil.py" because the model sent an empty block for it.
Exact commands (paths shortened)
# Install on Python 3.12 with uv
uv venv -q -p 3.12 work/aider312 && VIRTUAL_ENV=work/aider312 uv pip install --no-cache -q aider-chat

# Install on Python 3.13 (first attempt)
uv pip install aider-chat  # on Python 3.13.5

# Verification rerun after resetting the repo
git checkout -- mathutil.py && aider ... && git status --short

Raw output (excerpts)

The aider command (all trials)
OPENAI_API_KEY=x OPENAI_API_BASE=http://127.0.0.1:11434/v1 aider --model openai/qwen2.5-3b --edit-format whole --no-show-model-warnings --no-check-update --analytics-disable --no-auto-commits --no-gitignore --no-pretty --no-stream --yes-always --no-detect-urls --map-tokens 0 --message 'Implement clamp in mathutil.py so test_mathutil.py passes. Return value limited to [low, high].' mathutil.py
mathutil.py after the run (identical in each trial)
def clamp(value, low, high):
    """Return value limited to the range [low, high]."""
    return max(low, min(value, high))

# ... entire content of the file ...
test_mathutil.py
from mathutil import clamp
assert clamp(5, 0, 10) == 5
assert clamp(-3, 0, 10) == 0
assert clamp(99, 0, 10) == 10
print("ok")
Aider output, trial 1 (tail)
```



mathutil.py

```diff
@@ -1,3 +1,5 @@
 def clamp(value, low, high):
     """Return value limited to the range [low, high]."""
-    raise NotImplementedError
+    return max(low, min(value, high))
+
+# ... entire content of the file ...
```



This implementation ensures that the `clamp` function returns the value limited 
to the range `[low, high]`.

Tokens: 757 sent, 178 received.
Applied edit to test_mathutil.py
Applied edit to mathutil.py
---
ok

Gotchas and things that broke

  • aider-chat did not install on Python 3.13 here: a dependency had no prebuilt wheel for 3.13 and needed a C++ compiler we do not have. Python 3.12 worked. If you use uv, pass -p 3.12, or install a C++ toolchain.
  • Small local models cannot use aider's diff edit formats reliably; we forced --edit-format whole, which resends the entire file.
  • We disabled analytics, update checks and the repository map to keep the run local and short; defaults were not measured.

What we did not test

  • Any hosted model (aider is mostly used with them).
  • Repo-map, git auto-commit, multi-file edits, voice and the browser UI.
  • A single toy task; three trials is a smoke test, not a benchmark.

Reproduce it

Versions change. These commands install whatever is latest on the day you run them unless a version is pinned, so expect different results later. The version we measured is in the table above.

uv venv -p 3.12 .venv && VIRTUAL_ENV=.venv uv pip install aider-chat
# serve a local model at http://127.0.0.1:11434/v1 (we used Qwen2.5-3B-Instruct Q4_K_M, name qwen2.5-3b)
# create mathutil.py and test_mathutil.py as shown, git init and commit them, then run the command above

How to read this test

Every number on this page was measured on this one machine, which also ran other jobs, so timings are indicative and vary run to run. A pass means our small task worked once or as stated, a fail means it did not work as we ran it; neither says how the tool behaves with a vendor's frontier model, on a GPU, or at scale. Where a tool could not run without an account or a GPU, we say so instead of guessing.

See the testing rig for the hardware, the local model and the rules we follow, and the test hub for every other test.

  • Claude Code: Claude Code 2.1.310 edited calc.py through its Edit tool with a local 3B model on the second prompt (85.9 s); the first, vaguer prompt made no edit.
  • Cline CLI: Cline CLI 3.0.73 edited calc.py correctly with a local 3B model, then failed on every follow-up command with 'Invalid input' until the session was aborted at 68 s.
  • Codex CLI: Codex CLI 0.164.0 changed calc.py by running a sed command in its sandbox with a local 3B model; an earlier plain-language edit request ran no edit.
  • Continue CLI: Continue CLI 1.5.47 answered a question and fixed a one-line bug with a local 3B model through a YAML config; a 1.6 s, 81 MB install.
  • goose: goose 1.56.0 edited calc.py on the second headless run with a local 3B model (19.4 s); the first run called the edit tool but its text did not match, so the file did not change.
  • opencode: opencode 1.19.4 edited calc.py on the second headless run with a local 3B model; the first run tried the wrong path (src/calc.py) and failed.

All test logs · How we test

FAQ

Does Aider work with a local model?

Yes for one small edit: 3 of 3 trials on a 3B model with the whole-file edit format. Expect it to be much less reliable with its default diff formats on small models; we did not test that.

Which Python does Aider need?

In our run Python 3.12 worked; 3.13 failed because a dependency needed compiling and the machine had no C++ compiler.

Sources

Markdown version for agents: /tests/aider.md