Skip to content

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.txtPROBE llms.txt: HTTP 404 at https://aider.chat/llms.txt
  • [probe] https://aider.chat/docs/usage.html.mdPROBE docs-md: HTTP 404 at https://aider.chat/docs/usage.html.md
  • [probe] https://aider.chat/openapi.jsonPROBE 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.htmlAider 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.htmlcoder = 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.htmlaider --message "make a script that prints hello" hello.js
  • [claimed-docs] https://aider.chat/docs/scripting.htmlcoder.run("make a script that prints hello world")
  • [claimed-docs] https://aider.chat/docs/config.htmlAider 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=43672712I 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.htmlpython -m pip install aider-install aider-install
  • [claimed-docs] https://aider.chat/docs/install.htmlcurl -LsSf https://aider.chat/install.sh | sh
  • [claimed-docs] https://aider.chat/docs/scripting.htmlAider 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.htmlAider 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.htmlAider 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.htmlofficial 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.htmlAider 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.htmlcoder = 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.htmlaider --message "make a script that prints hello" hello.js
  • [claimed-docs] https://aider.chat/docs/scripting.htmlcoder.run("make a script that prints hello world")
  • [probe] https://aider.chat/llms.txtPROBE llms.txt: HTTP 404 at https://aider.chat/llms.txt
  • [probe] https://aider.chat/docs/usage.html.mdPROBE docs-md: HTTP 404 at https://aider.chat/docs/usage.html.md
  • [probe] https://aider.chat/openapi.jsonPROBE 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.htmlAider 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.htmlcoder = 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.htmlaider --message "make a script that prints hello" hello.js
  • [claimed-docs] https://aider.chat/docs/scripting.htmlcoder.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.jsonPROBE 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.txtPROBE 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.txtPROBE llms.txt: HTTP 404 at https://aider.chat/llms.txt
  • [probe] https://aider.chat/docs/usage.html.mdPROBE docs-md: HTTP 404 at https://aider.chat/docs/usage.html.md
  • [probe] https://aider.chat/openapi.jsonPROBE 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.htmlAider 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.htmlcoder = 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.htmlaider --message "make a script that prints hello" hello.js
  • [claimed-docs] https://aider.chat/docs/scripting.htmlcoder.run("make a script that prints hello world")
  • [claimed-docs] https://aider.chat/docs/usage/browser.htmlUse 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.htmlUse 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.jsonPROBE 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.htmlWhenever 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.htmlWhenever 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.htmlAider 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.htmlAider 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.htmlpython -m pip install aider-install aider-install
  • [claimed-docs] https://aider.chat/docs/install.htmlcurl -LsSf https://aider.chat/install.sh | sh
  • [claimed-docs] https://aider.chat/docs/llms.htmlAider can work also with local models, for example using [Ollama]
  • [claimed-docs] https://aider.chat/docs/llms.htmlAider 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.htmlAider 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.htmlAider 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=39995725I'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=39995725Aider 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.htmlAider 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.htmlcoder = 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=43672712I 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=43672712Over 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=43672712It'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.htmlAider 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.htmlcoder = 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.htmlYou 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=39995725I'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=39995725I 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=43672712Over 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.htmlAider 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.htmlcoder = 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.htmlUse 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.htmlAI! triggers aider to make changes to your code.
  • [claimed-docs] https://aider.chat/docs/usage/watch.htmlRather 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=39995725I'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=39995725I 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=39995725Aider 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.htmlAider 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.htmlcoder = 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.htmlaider --message "make a script that prints hello" hello.js
  • [claimed-docs] https://aider.chat/docs/scripting.htmlcoder.run("make a script that prints hello world")
  • [claimed-docs] https://aider.chat/docs/usage.htmlTo 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.htmlIf 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.htmlIf 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.htmlAI! triggers aider to make changes to your code.
  • [claimed-docs] https://aider.chat/docs/usage/watch.htmlAI? triggers aider to answer your question.
  • [claimed-docs] https://aider.chat/docs/usage/watch.htmlRather 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.htmlYou 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=43672712Aider 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.htmlAider 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.htmlcoder = 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.htmlaider --message "make a script that prints hello" hello.js
  • [claimed-docs] https://aider.chat/docs/scripting.htmlcoder.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.htmlWhenever 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.htmlYou 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.htmlGo back in the git history to review the changes that aider made to your code
  • [claimed-docs] https://aider.chat/docs/git.htmlIf 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=39995725It 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