Skip to content
Agents of Humanity
Public preview. Results are preliminary (criteria v1.0, 30 Sept 2026). Tell us what we got wrong
Open sourceself-hostedApache-2.0

Aider

Aider-AI (Paul Gauthier) · github.com/Aider-AI/aider

Aider is an Apache-2.0, local-first terminal coding agent that keeps all state in local plain-text files and git and works with any LiteLLM-supported model, including local ones. The main gaps are the absence of an agent identity, limited tamper evidence and state history, fixed base prompts and approval classes, and opt-in analytics that are preselected 'Yes' for a sampled subset with no disclosed retention.

Strengths
  • Local-first state in readable Markdown/YAML/git with nothing held by the provider (P2, P5, T1)
  • Apache-2.0 runtime with no account or licence check (P3)
  • Full context logging and effective-settings view (T2)
  • No provider-side steering or remote flags (T4, M5)
Gaps
  • No agent identity; attribution is an unauthenticated git label (V2)
  • Analytics retention undisclosed and prompt preselects Yes for sampled users (T3, C4)
  • Chat-history record has no integrity data and no state versioning/rollback (A2, V3)
  • Base prompts, approval classes and shell-command confirmation not owner-changeable (M1, C2, M4)
Evidence

All 26 findings

aider-chat v0.86.2 (latest PyPI release, 2026-02-12), commit 253f0368b873ba30d8ee26e463718f0c03614ddf; Python CLI on Linux/macOS/Windows; default configuration; browser GUI, Docker image and optional extras not separately graded. Evaluated 2026-09-30.

Portable · Can you leave, take the whole agent with you, and keep it alive?

80%
  • P1
    Owner-usable round trip

    All agent state is local files (repo-level .aider.* files, ~/.aider/, .aider.conf.yml, .env) whose locations are documented, so it can be copied immediately with no provider approval. There is no export/import feature or documented 'copy this and run it elsewhere' procedure; restoring means reinstalling aider, copying files from several locations (repo and home directory) and re-supplying API keys by hand.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Document a single export/restore procedure (or ship an export/import command) covering every aider file in the repo and home directory.
    Partial
  • P2
    Complete export

    Nothing defining the agent is held by the provider: configuration, conventions/instruction files, chat and input history, model settings/metadata overrides, OAuth-obtained OpenRouter key (~/.aider/oauth-keys.env) and git history are all local files. Model API keys are the owner's own and are re-linked by setting environment variables; the OpenRouter onboarding uses OpenRouter's PKCE flow with a localhost callback, and keys can also be set directly. No schedules or identity exist (G11).

    Pass
  • P3
    Runs without the provider

    Runtime is Apache-2.0 with no licence check, account or activation. The only provider-related network calls (PostHog analytics, PyPI version check) are optional and failures are caught; core editing works against any owner-configured model endpoint. Hands-on provider-blocked run not performed (desk review).

    Pass
  • P4
    Model independence

    Any LiteLLM-supported model, including local Ollama/LM Studio open-weight models, can be used, and code editing uses text-based edit formats rather than vendor tool calling. However, /voice is hard-wired to OpenAI's hosted whisper-1 and refuses to start without OPENAI_API_KEY, so voice input is lost off that vendor.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Let the owner configure the transcription model/endpoint (including a local Whisper) for /voice.
    Partial
  • P5
    Exit survives termination

    Aider is local-first software with no provider account; all agent state lives on the owner's machine and is unaffected by any provider action or shutdown.

    Pass

Transparent · Can you see everything the agent is, and everything shaping it?

75%
  • T1
    Readable without the provider

    State is Markdown (.aider.chat.history.md), plain-text input history, YAML/JSON config and model settings, dotenv files and git; base prompts and logic are Python source shipped in the package. The repo-map tag cache is derived from source files that remain in the repo. No encryption is used.

    Pass
  • T2
    What runs is what you see

    --llm-history-file logs every message list sent to the LLM (including system prompts and history summaries), --show-prompts prints system prompts, and /settings or --verbose prints effective merged settings plus main/editor/weak model identities. Model aliases resolve through bundled, readable tables; there is no provider-operated context layer.

    Pass
  • T3
    No shadow data

    Aider AI LLC receives analytics events (feature/command use, model names, token counts, errors, with PostHog exception autocapture) tied to a random UUID when analytics is enabled. On a fresh install 10% of users are asked with 'Yes' preselected (G10). The privacy policy and analytics page disclose no retention period for this data. Local item-by-item visibility exists only if the owner sets --analytics-log. Installs that are never asked send nothing.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Publish a bounded retention period for analytics events.
    • Or make analytics prompt default to No so the default path holds nothing.
    Fail
  • T4
    No hidden steering

    Source shows no paid placement or sponsored tools. Default model selection is a disclosed, source-visible mapping from the API keys present, and the OpenRouter OAuth offer when no keys exist is disclosed at the prompt and can be declined or replaced by any --model. Aider sets OR_SITE_URL/OR_APP_NAME headers for OpenRouter app attribution, which does not steer the agent's choices.

    Pass

Auditable · Can you reconstruct exactly what the agent did, and trust the record?

67%
  • A1
    Complete action record

    Every user input, assistant reply, tool message (including 'Running <command>', applied edits, confirmations) is appended to .aider.chat.history.md, which is not pruned. LLM file edits are auto-committed to git with full diffs by default. A write failure prints a warning to the owner. There are no schedules or provider-side actions (G11).

    Pass
  • A2
    Tamper-evident, owner-checkable

    Git commits of aider's file edits are hash-chained, so edits to past commits are detectable with open tools, but the chat-history record (commands run, confirmations, conversation) has no integrity data, and nothing anchors the git chain outside the machine that holds it, so a full rewrite is undetectable by default.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Hash-chain or sign the chat/action log.
    • Let the owner anchor checkpoints outside the record holder (e.g., an owner-held or witnessed digest).
    Partial
  • A3
    Agent cannot rewrite its record

    The model cannot directly write the history file: edits to files not in chat, new-file creation and every shell command need owner confirmation, and shell commands cannot be auto-approved even with --yes-always. But the record is an ordinary writable file in the same user context, so an owner-approved shell command or edit can alter or delete it; protection rests on the approval prompt, not on separation.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Write the action record from a component the agent's file edits and shell commands cannot reach, or make it append-only.
    Partial

Verifiable · Can you prove what it runs, who it is, and what changed?

33%
  • V1
    Obtainable source, matching build

    All of aider's source is available under Apache-2.0 and the default PyPI wheel is pure Python that can be diffed against the tag. But releases are uploaded with a token via twine with no provenance attestation (PyPI provenance endpoint returns 404), no documented verification procedure exists, and compiled dependency wheels are not tied to source by the project.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Publish via PyPI Trusted Publishing with attestations, or reproducible builds.
    • Document how an owner verifies the installed package against the tagged source.
    Partial
  • V2
    Owner-rooted identity

    Aider has no agent identity. Commits are labelled by appending '(aider)' to the owner's git name and adding a 'Co-authored-by: aider (<model>) <aider@aider.chat>' trailer; these are unauthenticated strings, the trailer email is on the provider's domain, and recipients cannot verify that an action came from the owner's agent.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Give the agent an owner-held key (e.g., sign aider commits with an owner-configured key) and document how others verify it.
    • Allow attribution under an owner-controlled identity rather than aider.chat.
    Fail
  • V3
    Change history and rollback

    Each session writes a timestamped header with aider version, models, edit format and repo-map settings to the chat history, so runtime and model changes are visible over time. But .aider* files are added to .gitignore by default, config, conventions and memory files have no product change history or attribution, and nothing restores a prior agent state (/undo only reverts aider's own code commits).

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Version agent state (config, conventions, history, model settings) with attribution of who changed it.
    • Offer a one-step restore of prior agent state.
    Partial

Modifiable · Can you change anything, and can only you change it?

70%
  • M1
    Instructions and logic

    Owner layers are editable via conventions files (--read), .aider.conf.yml, model settings files and --commit-prompt, but the base system prompts for each edit format are hard-coded in Python source with no option to replace them, so replacing them needs source edits (G3).

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Expose the base system prompts and edit-format prompts as owner-replaceable files or settings.
    Partial
  • M2
    Memory

    The only cross-session memory is the Markdown chat history (re-used only with --restore-chat-history, off by default) and input history; both are documented, human-readable files the owner can edit or delete item by item. No hidden profiles are kept.

    Pass
  • M3
    Tools

    There is no plugin, MCP or tool interface; owner-supplied tools can only be used as shell commands the model suggests (with approval) or as --lint-cmd/--test-cmd. Built-ins can largely be switched off (--no-suggest-shell-commands, --no-auto-lint, --no-detect-urls, --no-git, ask mode).

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Provide a documented interface for owner-built tools the model can call.
    • Allow every built-in to be removed individually.
    Partial
  • M4
    Owner has the final say

    Most protections can be changed (confirmations via --yes-always, --no-verify-ssl, --no-gitignore, .aiderignore). Shell-command confirmation is locked: with --yes-always, shell commands are auto-declined (explicit_yes_required) and there is no setting to auto-run them.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Offer an owner setting (with a warning) to auto-approve shell commands.
    Partial
  • M5
    No unilateral change

    Aider runs locally with no remote flags; model settings and aliases are bundled with each release. The version check only offers an upgrade behind a confirmation prompt and can be disabled (--no-check-update); owners can pin any version via pip. A daily download of LiteLLM's third-party model-metadata JSON can change token-limit metadata but is not provider-controlled and can be overridden with .aider.model.metadata.json.

    Pass

Controllable · Is your word final?

58%
  • C1
    Boundaries

    File scope is per path (files in chat, --read read-only files, .aiderignore, --subtree-only) and enforced in code, and the agent cannot change its settings without an approval. Shell commands and URL fetching are on/off with per-invocation approval only, with no per-command or per-domain allow/deny lists. No spend capability or outbound messaging exists (G11).

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Add per-command and per-domain allow/deny lists for shell commands and web access.
    Partial
  • C2
    Approval gates

    Aider gates a fixed set of classes (shell commands, new files, edits to files not in chat, adding URLs, pip installs, architect edits); the owner cannot require approval for edits to files already in the chat or define other gated classes.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Let the owner gate any action class, including edits to in-chat files.
    Partial
  • C3
    Immediate halt

    Ctrl-C stops the foreground LLM response and a second Ctrl-C within 2 s exits. The chat-history summarizer runs in a non-daemon background thread that sends chat content to the weak model; it is not cancelled by Ctrl-C, and sys.exit waits for it to finish.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Make one control cancel background summarization and all in-flight calls immediately.
    Partial
  • C4
    Data serves only the owner

    Model traffic goes only to the owner-chosen endpoint. Non-content analytics are asked for explicitly but with 'Yes' preselected for the sampled 10% and can be disabled permanently; the PyPI version check is disclosed and switchable; a daily metadata fetch from GitHub (no content) has no off switch. The privacy policy lets changes take effect when posted (material changes on notice) and permits legal disclosure without owner notice. No training, advertising or sale use is described.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Default the analytics prompt to No.
    • Commit to asking consent before changing data terms and to notify owners of legal disclosures.
    • Add a switch for the model-metadata fetch.
    Partial
  • C5
    Credential custody

    Credentials are the owner's own API keys in environment variables, .env, config files or ~/.aider/oauth-keys.env, all visible and removable by the owner, and the provider holds no copy. Aider uses them only to call the owner-selected model.

    Pass
  • C6
    Full deletion

    With no provider-side agent copy, deletion is local, but there is no single delete action or documented procedure: the owner must remove .aider* files in each repo plus ~/.aider/ and home-directory config/env files by hand, with no confirmation. Analytics retention is graded in T3.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Provide one command that removes all aider state and reports completion.
    Partial
Provenance

How this assessment was produced

One run, in a fresh container with stock Claude Code and no custom instructions, memory, hooks or plugins. The evaluator received only the prompt below.

Prompt given to the evaluator
Load the AFH sovereignty skill at https://agentsforhumanity.dev/skill.md and follow it to write a desk review of Aider (https://github.com/Aider-AI/aider).

During the run the skill was read from a local copy of this site with identical content; only the host in its URLs differed. The transcript records the exact prompt.

Model
claude-opus-5-5
Harness
Claude Code 2.1.285
Ran
2026-09-30 13:59:33 UTC · 39 turns
Criteria hash
a9a46c32d9065380a3eeb09185cedd4734856fdc63b7ca509a15a1bbede75c6c
Full transcript
Download (JSONL, gzip) · every tool call, page read and reply
Run protocol
2026-09-30-v1

Every agent evaluated once, each in its own fresh Podman container running stock Claude Code with Claude Opus 5.5. The container has no CLAUDE.md, AGENTS.md, memory, settings, hooks, plugins or MCP servers. The evaluator received only the one-line prompt and nothing else, and no published scores were available to compare against during the run.

Human review
pending
Check it with your own agent
Verify this assessment
Load the AOH sovereignty skill at https://agentsofhumanity.ai/skill.md and follow it in verify mode for https://agentsofhumanity.ai/evaluations/aider.json.

Or grade it from scratch. See Check any score yourself.

Something wrong or out of date?

Vendors and the public can dispute any finding with evidence. Disputes and their resolutions are published.

Dispute a finding