{
  "name": "Aider",
  "repo": "https://github.com/Aider-AI/aider",
  "headless": [
    {"finding": "Non-interactive one-shot mode: --message / --msg / -m takes the prompt, processes the reply, applies edits and exits.", "source": "https://aider.chat/docs/scripting.html", "quote": "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."},
    {"finding": "The prompt can also come from a file with --message-file / -f, or from env vars AIDER_MESSAGE / AIDER_MESSAGE_FILE.", "source": "https://aider.chat/docs/config/options.html", "quote": "Specify a file containing the message to send the LLM, process reply, then exit (disables chat mode) Environment variable: AIDER_MESSAGE_FILE"},
    {"finding": "Files to edit are passed as positional arguments (or --file); read-only context files via --read.", "source": "https://aider.chat/docs/scripting.html", "quote": "aider --message \"make a script that prints hello\" hello.js"},
    {"finding": "Working directory: no --cwd flag is documented; aider works on the git repo of the current directory, so a script must cd into the directory first (docs examples do this).", "source": "https://aider.chat/docs/llms/openai-compat.html", "quote": "# Change directory into your codebase\ncd /to/your/project"},
    {"finding": "Auto-approval: --yes-always (env AIDER_YES_ALWAYS) answers yes to confirmations. --yes was renamed to --yes-always.", "source": "https://aider.chat/docs/config/options.html", "quote": "--yes-always\nAlways say yes to every confirmation\nEnvironment variable: AIDER_YES_ALWAYS"},
    {"finding": "Rename of --yes to --yes-always is recorded in the release notes.", "source": "https://aider.chat/HISTORY.html", "quote": "Renamed --yes to --yes-always."},
    {"finding": "Exception in source code: prompts marked explicit_yes_required (for example 'Run shell command?') are answered 'n' when yes is set, so --yes-always does not run LLM-suggested shell commands.", "source": "https://github.com/Aider-AI/aider/blob/main/aider/io.py", "quote": "if self.yes is True:\n            res = \"n\" if explicit_yes_required else \"y\""},
    {"finding": "Other one-shot exit modes useful for scripting: --commit, --lint, --test (run tests, fix, then exit).", "source": "https://aider.chat/docs/config/options.html", "quote": "--test\nRun tests, fix problems found and then exit"},
    {"finding": "Python scripting API (Coder.create / coder.run) exists but is unsupported.", "source": "https://aider.chat/docs/scripting.html", "quote": "The python scripting API is not officially supported or documented, and could change in future releases without providing backwards compatibility."},
    {"finding": "TTY: no statement found that a TTY is required. The release notes say input falls back to plain input() with --no-pretty; --no-pretty and --no-fancy-input switch off rich terminal output and input.", "source": "https://aider.chat/HISTORY.html", "quote": "User input prompts now fall back to simple input() if --no-pretty or a Windows console is not available."},
    {"finding": "JSON output: not found. No documented machine-readable or JSON output mode for results; output is terminal text (optional --no-pretty, --no-stream). The only JSON is the opt-in analytics JSONL log (see usage).", "source": "https://aider.chat/docs/config/options.html", "quote": "--pretty\nEnable/disable pretty, colorized output (default: True)"}
  ],
  "confinement": {
    "shell": [
      {"finding": "No allow or deny list and no command policy found in the docs. The LLM can suggest shell commands, each one confirmed by a prompt; --no-suggest-shell-commands turns this off.", "source": "https://aider.chat/docs/config/options.html", "quote": "--suggest-shell-commands\nEnable/disable suggesting shell commands (default: True)"},
      {"finding": "That switch controls both suggesting and offering to run shell commands.", "source": "https://aider.chat/HISTORY.html", "quote": "Now --[no-]suggest-shell-commands controls both prompting for and offering to execute shell commands."},
      {"finding": "In source, suggested shell commands need an explicit yes (explicit_yes_required=True), which --yes-always does not give; they run with cwd set to the repo root.", "source": "https://github.com/Aider-AI/aider/blob/main/aider/coders/base_coder.py", "quote": "prompt = \"Run shell command?\" ... explicit_yes_required=True,"},
      {"finding": "Commands the user configures (--test-cmd, --lint-cmd, with --auto-test/--auto-lint) run without per-command approval; auto-lint is on by default.", "source": "https://aider.chat/docs/config/options.html", "quote": "--auto-lint\nEnable/disable automatic linting after changes (default: True)"}
    ],
    "fileWrites": [
      {"finding": "Edits go to files added to the chat (positional args/--file). --read marks files read-only.", "source": "https://aider.chat/docs/config/options.html", "quote": "--read FILE\nspecify a read-only file (can be used multiple times)"},
      {"finding": "Scope inside the repo can be narrowed with --subtree-only and .aiderignore (gitignore syntax).", "source": "https://aider.chat/docs/faq.html", "quote": "use the --subtree-only switch. This will tell aider to ignore the repo outside of the directory you start in."},
      {"finding": ".aiderignore excludes parts of the repo; --aiderignore names the file.", "source": "https://aider.chat/docs/faq.html", "quote": "You can also create a .aiderignore file to tell aider to ignore parts of the repo that aren’t relevant to your task."},
      {"finding": "--dry-run makes no file changes.", "source": "https://aider.chat/docs/config/options.html", "quote": "Perform a dry run without modifying files (default: False)"},
      {"finding": "Git auto-commits each change by default (--auto-commits), so /undo or git can revert. Unreleased main-branch notes say that with auto-commits off, files outside the git repo can be added.", "source": "https://aider.chat/HISTORY.html", "quote": "When auto-commits are disabled, aider can add files outside the git repo and promote read-only files to editable"},
      {"finding": "No OS-level restriction of writes to the working directory found in the docs. Protected paths: none documented beyond --read and .aiderignore.", "source": "https://aider.chat/docs/config/options.html", "quote": "--aiderignore AIDERIGNORE\nSpecify the aider ignore file (default: .aiderignore in git root)"}
    ],
    "network": [
      {"finding": "No built-in network sandbox (seatbelt, landlock) documented. Official Docker images exist and run in-chat /run commands inside the container, but no network limit is documented.", "source": "https://aider.chat/docs/install/docker.html", "quote": "When you use the in-chat /run command, it will be running shell commands inside the docker container."},
      {"finding": "Docker invocation mounts only the current directory.", "source": "https://aider.chat/docs/install/docker.html", "quote": "docker run -it --user $(id -u):$(id -g) --volume $(pwd):/app paulgauthier/aider --openai-api-key $OPENAI_API_KEY"},
      {"finding": "Outbound features that can be turned off: URL detection/scraping (--no-detect-urls), Playwright (--disable-playwright), update check (--no-check-update), analytics (--no-analytics / --analytics-disable).", "source": "https://aider.chat/docs/config/options.html", "quote": "--disable-playwright\nNever prompt for or attempt to install Playwright for web scraping (default: False)."}
    ]
  },
  "usage": [
    {"finding": "After each LLM reply, aider prints tokens sent/received (plus cache write/hit) and, when the model has pricing metadata, the money cost for the message and the session, as text on stdout.", "source": "https://github.com/Aider-AI/aider/blob/main/aider/coders/base_coder.py", "quote": "tokens_report = f\"Tokens: {format_tokens(self.message_tokens_sent)} sent\" ... f\"Cost: ${format_cost(self.message_cost)} message,\" f\" ${format_cost(self.total_cost)} session.\""},
    {"finding": "Release notes confirm token and cost reporting, including with streaming.", "source": "https://aider.chat/HISTORY.html", "quote": "Enhanced token usage and cost reporting. Now works when streaming too."},
    {"finding": "In-chat /tokens command reports the token use of the current context (it can be run via coder.run('/tokens') or --load).", "source": "https://aider.chat/docs/usage/commands.html", "quote": "/tokens\nReport on the number of tokens used by the current chat context"},
    {"finding": "Machine-readable form: --analytics-log writes JSONL events. In source, the 'message_send' event carries prompt_tokens, completion_tokens, total_tokens, cost and total_cost. --no-analytics logs locally without sending.", "source": "https://aider.chat/docs/more/analytics.html", "quote": "aider --analytics-log filename.jsonl --no-analytics"},
    {"finding": "Fields of the message_send event (source code).", "source": "https://github.com/Aider-AI/aider/blob/main/aider/coders/base_coder.py", "quote": "\"message_send\", ... prompt_tokens=prompt_tokens, completion_tokens=completion_tokens, total_tokens=prompt_tokens + completion_tokens, cost=self.message_cost, total_cost=self.total_cost,"},
    {"finding": "Full LLM conversation log file: --llm-history-file; chat transcript defaults to .aider.chat.history.md.", "source": "https://aider.chat/docs/config/options.html", "quote": "--llm-history-file LLM_HISTORY_FILE\nLog the conversation with the LLM to this file"},
    {"finding": "Costs are estimates; with a subscription (Copilot) aider still prints estimated costs.", "source": "https://aider.chat/docs/llms/github.html", "quote": "Calls made through aider are billed through your Copilot subscription (aider will still print estimated costs)."}
  ],
  "parallel": [
    {"finding": "No subagents or parallel-agent feature found in the docs. Architect mode runs two models one after the other (architect, then editor), not in parallel.", "source": "https://aider.chat/docs/usage/modes.html", "quote": "An architect model will propose changes and an editor model will translate that proposal into specific file edits."},
    {"finding": "Parallelism only by running several independent aider processes (for example a shell loop or separate directories). The docs show sequential looping over files. Running sessions at once in the same repo: not documented.", "source": "https://aider.chat/docs/scripting.html", "quote": "for FILE in *.py ; do\n    aider --message \"add descriptive docstrings to all the functions\" $FILE\ndone"}
  ],
  "providers": [
    {"finding": "Documented providers: OpenAI, Anthropic, Gemini, GROQ, LM Studio, xAI, Azure, Cohere, DeepSeek, Ollama, OpenAI-compatible APIs, OpenRouter, GitHub Copilot, Vertex AI, Amazon Bedrock, plus others through LiteLLM.", "source": "https://aider.chat/docs/llms.html", "quote": "OpenAI Anthropic Gemini GROQ LM Studio xAI Azure Cohere DeepSeek Ollama OpenAI compatible APIs OpenRouter GitHub Copilot Vertex AI Amazon Bedrock Other LLMs"},
    {"finding": "Uses LiteLLM for hundreds of models (the env var list includes Mistral, Together AI, Fireworks, Cerebras, Hugging Face, NVIDIA NIM, Perplexity, watsonx and more).", "source": "https://aider.chat/docs/llms/other.html", "quote": "Aider uses the litellm package to connect to hundreds of other models."},
    {"finding": "Local: Ollama is supported.", "source": "https://aider.chat/docs/llms/ollama.html", "quote": "Aider can connect to local Ollama models."},
    {"finding": "Local: LM Studio is supported (a dummy API key is required).", "source": "https://aider.chat/docs/llms/lm-studio.html", "quote": "Aider can connect to models served by LM Studio."},
    {"finding": "Any OpenAI-compatible endpoint (such as vLLM; vLLM is not named on this page) via OPENAI_API_BASE and the model prefix openai/.", "source": "https://aider.chat/docs/llms/openai-compat.html", "quote": "Aider can connect to any LLM which is accessible via an OpenAI compatible API endpoint."}
  ],
  "subscriptionLogin": [
    {"finding": "GitHub Copilot subscription only: there is no built-in OAuth/device login. The user copies an oauth_token from a JetBrains IDE's Copilot login file and passes it as OPENAI_API_KEY with OPENAI_API_BASE=https://api.githubcopilot.com.", "source": "https://aider.chat/docs/llms/github.html", "quote": "Copy the oauth_token value – that string is your OPENAI_API_KEY."},
    {"finding": "No subscription login found for ChatGPT, Claude Pro/Max or Google account. The documented authentication is API keys (CLI switches, env vars, .env, YAML).", "source": "https://aider.chat/docs/config/api-keys.html", "quote": "Aider lets you specify API keys in a few ways: On the command line As environment variables In a .env file In your .aider.conf.yml config file"}
  ],
  "license": {"finding": "Apache License 2.0 (LICENSE.txt; GitHub API reports SPDX Apache-2.0).", "source": "https://github.com/Aider-AI/aider/blob/main/LICENSE.txt", "quote": "Apache License\n                           Version 2.0, January 2004"},
  "latestRelease": [
    {"finding": "Newest GitHub Release: v0.86.0, published 2025-08-09T17:42:19Z.", "source": "https://github.com/Aider-AI/aider/releases/tag/v0.86.0", "quote": "v0.86.0 2025-08-09T17:42:19Z (GitHub releases API: tag_name, published_at)"},
    {"finding": "Newer version tag v0.86.2 (commit dated 2026-02-12T00:42:24Z) has no GitHub Release object. It is the current PyPI version of aider-chat, uploaded 2026-02-12T00:42:52.", "source": "https://pypi.org/project/aider-chat/0.86.2/", "quote": "aider-chat 0.86.2, upload_time 2026-02-12T00:42:52 (PyPI JSON API)"},
    {"finding": "The changelog lists Aider v0.86.1 as its newest numbered entry (no dates given), above it a 'main branch' unreleased section; it has no v0.86.2 entry.", "source": "https://aider.chat/HISTORY.html", "quote": "Aider v0.86.1"}
  ],
  "maintenance": {"finding": "Newest commit on default branch main: 2026-05-22T14:02:20Z (merge of PR #5173). Repo is not archived. Commits have slowed: last release tag 2026-02, last commit about 5 months before the check date.", "source": "https://github.com/Aider-AI/aider/commit/5dc9490bb35f9729ef2c95d00a19ccd30c26339c", "quote": "Merge pull request #5173 from Cyberfilo/feat/anthropic_models-list-add-opus-4-5"},
  "language": {"finding": "Python (about 1.33 MB of about 1.66 MB of code per GitHub languages API).", "source": "https://api.github.com/repos/Aider-AI/aider/languages", "quote": "\"Python\": 1333453"},
  "install": [
    {"finding": "Recommended install via aider-install (Python 3.8-3.13).", "source": "https://aider.chat/docs/install.html", "quote": "python -m pip install aider-install\naider-install"},
    {"finding": "Alternatives: one-line script, uv, pipx.", "source": "https://aider.chat/docs/install.html", "quote": "curl -LsSf https://aider.chat/install.sh | sh ... uv tool install --force --python python3.12 --with pip aider-chat@latest ... pipx install aider-chat"}
  ],
  "checkedOn": "2026-10-27",
  "gaps": [
    {"finding": "Machine-readable/JSON output of a run's result: not found (only the analytics JSONL log and text output).", "source": "https://aider.chat/docs/config/options.html", "quote": "not found"},
    {"finding": "Whether a TTY is required: not stated in the docs; only the input() fallback note in the release history.", "source": "https://aider.chat/HISTORY.html", "quote": "not found"},
    {"finding": "Working-directory flag: none documented; cwd/git root is used.", "source": "https://aider.chat/docs/config/options.html", "quote": "not found"},
    {"finding": "Shell allow/deny lists, OS-level write confinement and network sandboxing: none documented.", "source": "https://aider.chat/docs/install/docker.html", "quote": "none documented"},
    {"finding": "Subagents or parallel agents: none documented. Safety of several aider processes at once in one repo: not documented.", "source": "https://aider.chat/docs/usage/modes.html", "quote": "not found"},
    {"finding": "Subscription OAuth/device login for ChatGPT, Claude Pro/Max or Google: not found.", "source": "https://aider.chat/docs/llms.html", "quote": "not found"},
    {"finding": "Release dates are not printed in HISTORY.html. v0.86.2 has a tag but no GitHub Release or changelog entry; its date comes from PyPI and the tag commit.", "source": "https://github.com/Aider-AI/aider/releases", "quote": "not found"},
    {"finding": "Pages consulted: aider.chat/docs/scripting.html, /docs/config/options.html, /docs/config/api-keys.html, /docs/config/dotenv.html, /docs/usage.html, /docs/usage/commands.html, /docs/usage/modes.html, /docs/usage/lint-test.html, /docs/git.html, /docs/faq.html, /docs/more/analytics.html, /docs/install.html, /docs/install/docker.html, /docs/llms.html, /docs/llms/{ollama,lm-studio,openai-compat,github,other}.html, /HISTORY.html, /sitemap.xml; GitHub API repo, releases, tags, commits, languages; raw LICENSE.txt, README.md, aider/coders/base_coder.py, aider/io.py; pypi.org/pypi/aider-chat/json. /docs/config/aiderignore.html returned 404.", "source": "https://aider.chat/docs/", "quote": "n/a"}
  ]
}
