How Aider’s scores are calculated
The full audit trail, recomputed from the verdict data at build time through the same code that produced the leaderboard: verdict × quality × story weight per cell, cells sum to dimension scores, dimensions blend into the PA Score. Every number on the product page is reproducible from this page alone; for why the formula looks like this, see the methodology.
verdict factors: full ×1.0 · partial ×0.6 · disputed ×0.3 · none ×0.0 · n/a excluded from both sides · cell points = weight × quality × factor · cell max = weight × 10
PA Score31/100
Agent-ready 29.9 × 0.30 = 8.97
API quality 0.0 × 0.20 = 0.00
Openness 34.8 × 0.20 = 6.96
Built-in AI 68.7 × 0.15 = 10.30
Automation 28.7 × 0.15 = 4.30
(8.97 + 0.00 + 6.96 + 10.30 + 4.30) ÷ (0.30 + 0.20 + 0.20 + 0.15 + 0.15) = 30.54 ÷ 1.00 = 30.5
Scores are stored to 1 decimal; the product page’s pills round to whole numbers for display. Each dimension below shows the stories, verdicts, and cited evidence behind its number.
Agent-ready29.9/100×0.30 of the PA blend
Outside-in: can YOUR agent reach and drive this product — API, MCP, CLI, headless runs, agent docs.
Point an agent at llms.txt or agent-oriented docsweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [probe] https://aider.chat/llms.txt“PROBE llms.txt: HTTP 404 at https://aider.chat/llms.txt”
- [probe] https://aider.chat/docs/usage.html.md“PROBE docs-md: HTTP 404 at https://aider.chat/docs/usage.html.md”
- [probe] https://aider.chat/openapi.json“PROBE openapi: all candidate paths 404 (https://aider.chat/openapi.json, https://aider.chat/swagger.json, https://aider.chat/api/openapi.json, https://aider.chat/.well-known/openapi.json)”
Run the product headlessly / in CI for automationweight 2
2 (weight) × 8 (quality) × 1.0 (full) = 16.0 of 20 max
- [claimed-docs] https://aider.chat/docs/scripting.html“Aider takes a `--message` argument, where you can give it a natural language instruction. It will do that one thing, apply the edits to the files and then exit.”
- [claimed-docs] https://aider.chat/docs/scripting.html“coder = Coder.create(main_model=model, fnames=fnames) # This will execute one instruction on those files and then return coder.run("make a script that prints hello world")”
- [claimed-docs] https://aider.chat/docs/scripting.html“aider --message "make a script that prints hello" hello.js”
- [claimed-docs] https://aider.chat/docs/scripting.html“coder.run("make a script that prints hello world")”
- [claimed-docs] https://aider.chat/docs/config.html“Aider has many options which can be set with command line switches. Most options can also be set in an `.aider.conf.yml` file... Or by setting environment variables like `AIDER_xxx`”
- [community] https://news.ycombinator.com/item?id=43672712“I only use Aider interactively, but I really should consider Aider in the 'scriptable' sense more... I might add another step after each PR is created where another agent(s) review and compare the results.”
Plug MCP servers into this product so it can use their toolsweight 3
3 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 30 max
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Connect an agent via an official MCP serverweight 3
3 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 30 max
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Use an official CLIweight 2
2 (weight) × 9 (quality) × 1.0 (full) = 18.0 of 20 max
- [claimed-docs] https://aider.chat/docs/install.html“python -m pip install aider-install aider-install”
- [claimed-docs] https://aider.chat/docs/install.html“curl -LsSf https://aider.chat/install.sh | sh”
- [claimed-docs] https://aider.chat/docs/scripting.html“Aider takes a `--message` argument, where you can give it a natural language instruction. It will do that one thing, apply the edits to the files and then exit.”
- [claimed-docs] https://aider.chat/docs/config.html“Aider has many options which can be set with command line switches. Most options can also be set in an `.aider.conf.yml` file... Or by setting environment variables like `AIDER_xxx`”
- [claimed-docs] https://aider.chat/docs/config.html“Aider has many options which can be set with command line switches. Most options can also be set in an .aider.conf.yml file... Or by setting environment variables like AIDER_xxx”
- [probe] https://aider.chat/docs/usage.html“official CLI documented at https://aider.chat/docs/usage.html”
Drive the product through a documented public APIweight 3
3 (weight) × 6 (quality) × 0.6 (partial) = 10.8 of 30 max
- [claimed-docs] https://aider.chat/docs/scripting.html“Aider takes a `--message` argument, where you can give it a natural language instruction. It will do that one thing, apply the edits to the files and then exit.”
- [claimed-docs] https://aider.chat/docs/scripting.html“coder = Coder.create(main_model=model, fnames=fnames) # This will execute one instruction on those files and then return coder.run("make a script that prints hello world")”
- [claimed-docs] https://aider.chat/docs/scripting.html“aider --message "make a script that prints hello" hello.js”
- [claimed-docs] https://aider.chat/docs/scripting.html“coder.run("make a script that prints hello world")”
- [probe] https://aider.chat/llms.txt“PROBE llms.txt: HTTP 404 at https://aider.chat/llms.txt”
- [probe] https://aider.chat/docs/usage.html.md“PROBE docs-md: HTTP 404 at https://aider.chat/docs/usage.html.md”
- [probe] https://aider.chat/openapi.json“PROBE openapi: all candidate paths 404 (https://aider.chat/openapi.json, https://aider.chat/swagger.json, https://aider.chat/api/openapi.json, https://aider.chat/.well-known/openapi.json)”
Issue scoped/least-privilege API credentials for an agentweight 2
n/a — not applicable to this product: excluded from numerator and denominator
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Build against official SDKsweight 2
2 (weight) × 5 (quality) × 0.6 (partial) = 6.0 of 20 max
- [claimed-docs] https://aider.chat/docs/scripting.html“Aider takes a `--message` argument, where you can give it a natural language instruction. It will do that one thing, apply the edits to the files and then exit.”
- [claimed-docs] https://aider.chat/docs/scripting.html“coder = Coder.create(main_model=model, fnames=fnames) # This will execute one instruction on those files and then return coder.run("make a script that prints hello world")”
- [claimed-docs] https://aider.chat/docs/scripting.html“aider --message "make a script that prints hello" hello.js”
- [claimed-docs] https://aider.chat/docs/scripting.html“coder.run("make a script that prints hello world")”
Subscribe to events via webhooksweight 2
n/a — not applicable to this product: excluded from numerator and denominator
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Agent-ready = 50.8 ÷ 170 × 100 = 29.9
API quality0.0/100×0.20 of the PA blend
The programmable surface once an agent is there — machine-readable spec, interactive docs, sandbox, versioning discipline.
Explore an interactive API reference with runnable examplesweight 2
n/a — not applicable to this product: excluded from numerator and denominator
- [probe] https://aider.chat/openapi.json“PROBE openapi: all candidate paths 404 (https://aider.chat/openapi.json, https://aider.chat/swagger.json, https://aider.chat/api/openapi.json, https://aider.chat/.well-known/openapi.json)”
- [probe] https://aider.chat/llms.txt“PROBE llms.txt: HTTP 404 at https://aider.chat/llms.txt”
Download a machine-readable API spec (OpenAPI or equivalent)weight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [probe] https://aider.chat/llms.txt“PROBE llms.txt: HTTP 404 at https://aider.chat/llms.txt”
- [probe] https://aider.chat/docs/usage.html.md“PROBE docs-md: HTTP 404 at https://aider.chat/docs/usage.html.md”
- [probe] https://aider.chat/openapi.json“PROBE openapi: all candidate paths 404 (https://aider.chat/openapi.json, https://aider.chat/swagger.json, https://aider.chat/api/openapi.json, https://aider.chat/.well-known/openapi.json)”
Test against a sandbox environment without touching production dataweight 1
n/a — not applicable to this product: excluded from numerator and denominator
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Rely on versioned APIs with a documented deprecation policyweight 2
n/a — not applicable to this product: excluded from numerator and denominator
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
API quality = 0.0 ÷ 20 × 100 = 0.0
Openness34.8/100×0.20 of the PA blend
Can you leave, inspect, or self-host — data export, open source, portability.
Do everything through the API that I can do in the UIweight 2
2 (weight) × 4 (quality) × 0.6 (partial) = 4.8 of 20 max
- [claimed-docs] https://aider.chat/docs/scripting.html“Aider takes a `--message` argument, where you can give it a natural language instruction. It will do that one thing, apply the edits to the files and then exit.”
- [claimed-docs] https://aider.chat/docs/scripting.html“coder = Coder.create(main_model=model, fnames=fnames) # This will execute one instruction on those files and then return coder.run("make a script that prints hello world")”
- [claimed-docs] https://aider.chat/docs/scripting.html“aider --message "make a script that prints hello" hello.js”
- [claimed-docs] https://aider.chat/docs/scripting.html“coder.run("make a script that prints hello world")”
- [claimed-docs] https://aider.chat/docs/usage/browser.html“Use aider’s new experimental browser UI to collaborate with LLMs to edit code in your local git repo.”
- [claimed-docs] https://aider.chat/docs/usage/commands.html“**/architect** Enter architect/editor mode using 2 different models. If no prompt provided, switches to architect/editor mode.”
- [claimed-docs] https://aider.chat/docs/usage/commands.html“**/web** Scrape a webpage, convert to markdown and send in a message”
- [claimed-docs] https://aider.chat/docs/usage/voice.html“Use the in-chat `/voice` command to start recording, and press `ENTER` when you’re done speaking. Your voice coding instructions will be transcribed, as if you had typed them into the aider chat session.”
- [probe] https://aider.chat/openapi.json“PROBE openapi: all candidate paths 404 (https://aider.chat/openapi.json, https://aider.chat/swagger.json, https://aider.chat/api/openapi.json, https://aider.chat/.well-known/openapi.json)”
Export all of my data in open formats and leaveweight 3
3 (weight) × 5 (quality) × 0.6 (partial) = 9.0 of 30 max
- [claimed-docs] https://aider.chat/docs/git.html“Whenever aider edits a file, it commits those changes with a descriptive commit message. This makes it easy to undo or review aider’s changes.”
- [claimed-docs] https://aider.chat/docs/git.html“Whenever aider edits a file, it commits those changes with a descriptive commit message. This makes it easy to undo or review aider's changes.”
- [claimed-docs] https://aider.chat/docs/git.html“`/git` will let you run raw git commands to do more complex management of your git history.”
- [claimed-docs] https://aider.chat/docs/git.html“/git will let you run raw git commands to do more complex management of your git history.”
- [claimed-docs] https://aider.chat/docs/config.html“Aider has many options which can be set with command line switches. Most options can also be set in an `.aider.conf.yml` file... Or by setting environment variables like `AIDER_xxx`”
- [claimed-docs] https://aider.chat/docs/config.html“Aider has many options which can be set with command line switches. Most options can also be set in an .aider.conf.yml file... Or by setting environment variables like AIDER_xxx”
Read the product's source under an open licenseweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
no evidence cited — the verdict rests on absence of evidence, re-checked on refresh
Self-host the core productweight 3
3 (weight) × 7 (quality) × 1.0 (full) = 21.0 of 30 max
- [claimed-docs] https://aider.chat/docs/install.html“python -m pip install aider-install aider-install”
- [claimed-docs] https://aider.chat/docs/install.html“curl -LsSf https://aider.chat/install.sh | sh”
- [claimed-docs] https://aider.chat/docs/llms.html“Aider can work also with local models, for example using [Ollama]”
- [claimed-docs] https://aider.chat/docs/llms.html“Aider can work also with local models, for example using Ollama. It can also access local models that provide an Open AI compatible API.”
- [claimed-docs] https://aider.chat/docs/config.html“Aider has many options which can be set with command line switches. Most options can also be set in an `.aider.conf.yml` file... Or by setting environment variables like `AIDER_xxx`”
Openness = 34.8 ÷ 100 × 100 = 34.8
Built-in AI68.7/100×0.15 of the PA blend
Inside-out: how agentic the product itself is for its users — built-in assistants, autonomous features.
Get AI-generated insights and suggestions from my data inside the productweight 2
2 (weight) × 7 (quality) × 1.0 (full) = 14.0 of 20 max
- [claimed-docs] https://aider.chat/docs/usage/commands.html“**/ask** Ask questions about the code base without editing any files.”
- [claimed-docs] https://aider.chat/docs/usage/commands.html“**/map** Print out the current repository map”
- [claimed-docs] https://aider.chat/docs/repomap.html“Aider uses a **concise map of your whole git repository** that includes the most important classes and functions along with their types and call signatures.”
- [community] https://news.ycombinator.com/item?id=39995725“I've used aider to understand new codebases using technologies I don't know and it did a fantastic job; much faster than grep/find + google.”
- [community] https://news.ycombinator.com/item?id=39995725“Aider can answer questions I can't search for via LSP, like 'what code would process the following URL' and similar.”
Set up automations that run autonomously in the backgroundweight 2
2 (weight) × 4 (quality) × 0.6 (partial) = 4.8 of 20 max
- [claimed-docs] https://aider.chat/docs/scripting.html“Aider takes a `--message` argument, where you can give it a natural language instruction. It will do that one thing, apply the edits to the files and then exit.”
- [claimed-docs] https://aider.chat/docs/scripting.html“coder = Coder.create(main_model=model, fnames=fnames) # This will execute one instruction on those files and then return coder.run("make a script that prints hello world")”
- [community] https://news.ycombinator.com/item?id=43672712“I only use Aider interactively, but I really should consider Aider in the 'scriptable' sense more... I might add another step after each PR is created where another agent(s) review and compare the results.”
- [community] https://news.ycombinator.com/item?id=43672712“Over the last two days, I've built out support for autonomy in Aider (a lot like Claude Code) that hybridizes with the rest of the app, uploaded to PyPI as 'navigator-mode'.”
- [community] https://news.ycombinator.com/item?id=43672712“It's... decidedly expensive to run an LLM this way right now (Gemini 2.5 Pro is your best bet) with Aider's navigator/autonomy mode, but costs are expected to fall over time.”
Delegate tasks to a built-in AI assistant inside the productweight 3
3 (weight) × 9 (quality) × 1.0 (full) = 27.0 of 30 max
- [claimed-docs] https://aider.chat/docs/scripting.html“Aider takes a `--message` argument, where you can give it a natural language instruction. It will do that one thing, apply the edits to the files and then exit.”
- [claimed-docs] https://aider.chat/docs/scripting.html“coder = Coder.create(main_model=model, fnames=fnames) # This will execute one instruction on those files and then return coder.run("make a script that prints hello world")”
- [claimed-docs] https://aider.chat/docs/usage/commands.html“**/ask** Ask questions about the code base without editing any files.”
- [claimed-docs] https://aider.chat/docs/usage/commands.html“**/architect** Enter architect/editor mode using 2 different models. If no prompt provided, switches to architect/editor mode.”
- [claimed-docs] https://aider.chat/docs/usage/commands.html“/ask Ask questions about the code base without editing any files. If no prompt provided, switches to ask mode.”
- [claimed-docs] https://aider.chat/docs/usage/lint-test.html“You can configure aider to run your test suite after each time the AI edits your code using the --test-cmd <test-command> and --auto-test switch.”
- [community] https://news.ycombinator.com/item?id=39995725“I've used aider to understand new codebases using technologies I don't know and it did a fantastic job; much faster than grep/find + google.”
- [community] https://news.ycombinator.com/item?id=39995725“I revisited Aider a couple of days ago, after going in circles with AutoGPT - which seemed to either forget or go lazy after a few prompts. Then Aider delivered from the first prompt.”
- [community] https://news.ycombinator.com/item?id=43672712“Over the last two days, I've built out support for autonomy in Aider (a lot like Claude Code) that hybridizes with the rest of the app, uploaded to PyPI as 'navigator-mode'.”
Operate the product with natural-language commandsweight 2
2 (weight) × 8 (quality) × 1.0 (full) = 16.0 of 20 max
- [claimed-docs] https://aider.chat/docs/scripting.html“Aider takes a `--message` argument, where you can give it a natural language instruction. It will do that one thing, apply the edits to the files and then exit.”
- [claimed-docs] https://aider.chat/docs/scripting.html“coder = Coder.create(main_model=model, fnames=fnames) # This will execute one instruction on those files and then return coder.run("make a script that prints hello world")”
- [claimed-docs] https://aider.chat/docs/usage/voice.html“Use the in-chat `/voice` command to start recording, and press `ENTER` when you’re done speaking. Your voice coding instructions will be transcribed, as if you had typed them into the aider chat session.”
- [claimed-docs] https://aider.chat/docs/usage/watch.html“AI! triggers aider to make changes to your code.”
- [claimed-docs] https://aider.chat/docs/usage/watch.html“Rather than using /add to add a file inside the aider chat, you can simply put an #AI comment in it and save the file.”
- [community] https://news.ycombinator.com/item?id=39995725“I've used aider to understand new codebases using technologies I don't know and it did a fantastic job; much faster than grep/find + google.”
- [community] https://news.ycombinator.com/item?id=39995725“I revisited Aider a couple of days ago, after going in circles with AutoGPT - which seemed to either forget or go lazy after a few prompts. Then Aider delivered from the first prompt.”
- [community] https://news.ycombinator.com/item?id=39995725“Aider is the only tool I use for coding now with ChatGPT... It still suffers from ChatGPT laziness sometimes, you can see it retrying several times to get a correct output before giving up.”
Built-in AI = 61.8 ÷ 90 × 100 = 68.7
Automation28.7/100×0.15 of the PA blend
Depth of automation primitives — rules, scheduling, bulk operations, webhooks.
Perform bulk operations across many items at onceweight 2
2 (weight) × 5 (quality) × 0.6 (partial) = 6.0 of 20 max
- [claimed-docs] https://aider.chat/docs/scripting.html“Aider takes a `--message` argument, where you can give it a natural language instruction. It will do that one thing, apply the edits to the files and then exit.”
- [claimed-docs] https://aider.chat/docs/scripting.html“coder = Coder.create(main_model=model, fnames=fnames) # This will execute one instruction on those files and then return coder.run("make a script that prints hello world")”
- [claimed-docs] https://aider.chat/docs/scripting.html“aider --message "make a script that prints hello" hello.js”
- [claimed-docs] https://aider.chat/docs/scripting.html“coder.run("make a script that prints hello world")”
- [claimed-docs] https://aider.chat/docs/usage.html“To edit files, you need to “add them to the chat”. Do this by naming them on the aider command line. Or, you can use the in-chat `/add` command to add files.”
- [claimed-docs] https://aider.chat/docs/usage/watch.html“If you run aider with `--watch-files`, it will watch all files in your repo and look for any AI coding instructions you add using your favorite IDE or text editor.”
Define rules that trigger actions automatically on eventsweight 3
3 (weight) × 5 (quality) × 0.6 (partial) = 9.0 of 30 max
- [claimed-docs] https://aider.chat/docs/usage/watch.html“If you run aider with `--watch-files`, it will watch all files in your repo and look for any AI coding instructions you add using your favorite IDE or text editor.”
- [claimed-docs] https://aider.chat/docs/usage/watch.html“AI! triggers aider to make changes to your code.”
- [claimed-docs] https://aider.chat/docs/usage/watch.html“AI? triggers aider to answer your question.”
- [claimed-docs] https://aider.chat/docs/usage/watch.html“Rather than using /add to add a file inside the aider chat, you can simply put an #AI comment in it and save the file.”
- [claimed-docs] https://aider.chat/docs/usage/lint-test.html“You can configure aider to run your test suite after each time the AI edits your code using the --test-cmd <test-command> and --auto-test switch.”
- [community] https://news.ycombinator.com/item?id=43672712“Aider has a web mode and a 'watch mode', where you can use your normal editor and if you leave a comment like '# make this darker ai!', Aider will step in and apply the change.”
Schedule recurring jobs or workflowsweight 2
2 (weight) × 0 (quality) × 0.0 (none) = 0.0 of 20 max
- [claimed-docs] https://aider.chat/docs/scripting.html“Aider takes a `--message` argument, where you can give it a natural language instruction. It will do that one thing, apply the edits to the files and then exit.”
- [claimed-docs] https://aider.chat/docs/scripting.html“coder = Coder.create(main_model=model, fnames=fnames) # This will execute one instruction on those files and then return coder.run("make a script that prints hello world")”
- [claimed-docs] https://aider.chat/docs/scripting.html“aider --message "make a script that prints hello" hello.js”
- [claimed-docs] https://aider.chat/docs/scripting.html“coder.run("make a script that prints hello world")”
Version, review, and roll back my automationsweight 1
1 (weight) × 8 (quality) × 1.0 (full) = 8.0 of 10 max
- [claimed-docs] https://aider.chat/docs/git.html“Whenever aider edits a file, it commits those changes with a descriptive commit message. This makes it easy to undo or review aider’s changes.”
- [claimed-docs] https://aider.chat/docs/usage.html“You can always use the `/undo` command to undo AI changes that you don’t like.”
- [claimed-docs] https://aider.chat/docs/git.html“`/git` will let you run raw git commands to do more complex management of your git history.”
- [claimed-docs] https://aider.chat/docs/git.html“Go back in the git history to review the changes that aider made to your code”
- [claimed-docs] https://aider.chat/docs/git.html“If aider authored the changes in a commit, they will have “(aider)” appended to the git author and git committer name metadata.”
- [community] https://news.ycombinator.com/item?id=39995725“It gets commit messages wrong. Commit messages should signal intent, not what the patch does. 'changing an enum' is a horrible commit message.”
Automation = 23.0 ÷ 80 × 100 = 28.7