Aidermacs
AI Pair Programming in Emacs with Aider
Install / Use
/learn @MatthewZMD/AidermacsQuality Score
Category
Development & EngineeringSupported Platforms
README
Aidermacs: AI Pair Programming in Emacs
Aidermacs brings AI-powered development to Emacs by integrating Aider, one of the most powerful open-source AI pair programming tools. If you're missing Cursor but prefer living in Emacs, Aidermacs provides similar AI capabilities while staying true to Emacs workflows.
<img style='height: auto; width: 80%; object-fit: contain' src="./introscreen.png">Key Features
- Intelligent model selection with multiple backends
- Built-in Ediff integration for AI-generated changes
- Enhanced file management from Emacs
- Great customizability and flexible ways to add content
Community Speaks
Here's what the community is saying about Aidermacs:
"Are you using aidermacs? For me superior to cursor." - u/berenddeboer
"This is amazing... every time I upgrade my packages I see your new commits. I feel this the authentic aider for emacs" - u/wchmbo
"Between Aidermacs and Gptel it's wild how bleeding edge Emacs is with this stuff. My workplace is exploring MCP registries and even clients that are all the rage (E.g Cursor) lag behind what I can do with mcp.el and gptel for tool use." - u/no_good_names_avail
"This looks amazing... I have been using ellama with local llms, looks like that will work here too. Great stuff!!" - u/lugpocalypse
"Honestly huge fan of this. Thank you for the updates!" - u/ieoa
Quick Start
- Requirements
- Emacs ≥ 26.1
- Aider or its community fork Aider Community Experimentation.
- Transient
- Download Aidermacs through Melpa or Non-GNU Elpa, or clone manually
- Modify this sample config and place it in your Emacs
init.el:
(use-package aidermacs
:bind (("C-c a" . aidermacs-transient-menu))
:config
; Set API_KEY in .bashrc, that will automatically picked up by aider or in elisp
(setenv "ANTHROPIC_API_KEY" "sk-...")
; defun my-get-openrouter-api-key yourself elsewhere for security reasons
(setenv "OPENROUTER_API_KEY" (my-get-openrouter-api-key))
:custom
; See the Configuration section below
(aidermacs-default-chat-mode 'architect)
(aidermacs-default-model "sonnet"))
- Open a project and run
M-x aidermacs-transient-menuorSPC a a(or your chosen binding). - Add files and start coding with AI!
Spacemacs
For Spacemacs users:
- Add
aidermacsto yourdotspacemacs-additional-packageslist in your.spacemacsfile:
dotspacemacs-additional-packages '(
(aidermacs :variables
aidermacs-default-chat-mode 'architect
aidermacs-default-model "sonnet")
)
- Add the keybinding to your
dotspacemacs/user-configfunction in.spacemacs:
(defun dotspacemacs/user-config ()
;; Set leader key for Aidermacs
(spacemacs/set-leader-keys "aa" 'aidermacs-transient-menu) ; Example binding SPC a a
)
- Open a project and run
M-x aidermacs-transient-menuorSPC a a(or your chosen binding). - Add files and start coding with AI!
Usage
Getting Started
The main interface to Aidermacs is through its transient menu system (similar to Magit). Access it with:
M-x aidermacs-transient-menu
Or bind it to a key in your config:
(global-set-key (kbd "C-c a") 'aidermacs-transient-menu)
Once the transient menu is open, you can navigate and execute commands using the displayed keys. Here's a summary of the main menu structure:
Core
a: Start/Open Session (auto-detects project root).: Start in Current Directory (good for monorepos)l: Clear Chat Historys: Reset Sessionx: Exit Session
Persistent Modes
1: Code Mode2: Chat/Ask Mode3: Architect Mode4: Help Mode
Utilities
^: Show Last Commit (if auto-commits enabled)u: Undo Last Commit (if auto-commits enabled)R: Refresh Repo Maph: Session Historyo: Change Main Modelv: Send Voice CommandW: Fetch Web Content?: Aider Meta-level Help
File Actions
f: Add File (C-u: read-only)F: Add Current Filed: Add From Directory (same type)w: Add From Windowm: Add From Dired (marked)j: Drop FileJ: Drop Current Filek: Drop From Dired (marked)K: Drop All FilesS: Create Session ScratchpadG: Add File to SessionA: List Added Files
Code Actions
c: Code Changee: Question Coder: Architect Changeq: General Questionp: Question This Symbolg: Accept Proposed Changesi: Implement TODOt: Write TestT: Fix Test!: Debug Exception
The All File Actions and All Code Actions entries open submenus with more specialized commands. Use the displayed keys to navigate these submenus.
File Management and AI Interaction
When using Aidermacs, you have the flexibility to decide which files the AI should read and edit. Here are some guidelines:
- Editable Files: Add files you want the AI to potentially edit. This grants the AI permission to both read and modify these files if necessary.
- Read-Only Files: If you want the AI to read a file without editing it, you can add it as read-only. In Aidermacs, all add file commands can be prefixed with
C-uto specify read-only access. - Session Scratchpads: Use the session scratchpads (
S) to paste notes or documentation that will be fed to the AI as read-only. - External Files: The "Add file to session" (
G) command allows you to include files outside the current project (or files in.gitignore), as Aider doesn't automatically include these files in its context.
The AI can sometimes determine relevant files on its own, depending on the model and the context of the codebase. However, for precise control, it's often beneficial to manually specify files, especially when dealing with complex projects.
Aider encourages a collaborative approach, similar to working with a human co-worker. Sometimes the AI will need explicit guidance, while other times it can infer the necessary context on its own.
Prompt Files Minor Mode
Aidermacs provides a minor mode that makes it easy to work with prompt files and other Aider-related files. When enabled, the minor mode provides these convenient keybindings:
C-c C-norC-<return>: Send line/region line-by-lineC-c C-c: Send block/region as wholeC-c C-z: Switch to Aidermacs buffer
The minor mode is automatically enabled for:
.aider.prompt.orgfiles (create withM-x aidermacs-open-prompt-file).aider.chat.mdfiles.aider.chat.history.mdfiles.aider.input.historyfiles
Configuration
Pre-Run Hook
You can use the aidermacs-before-run-backend-hook to run custom setup code before starting the Aider backend. This is particularly useful for:
- Setting environment variables
- Injecting secrets
- Performing any other pre-run configuration
Example usage to securely set an OpenAI API key from password-store:
(add-hook 'aidermacs-before-run-backend-hook
(lambda ()
(setenv "OPENAI_API_KEY" (password-store-get "code/openai_api_key"))))
An copy of process-environment is used when running the hook and starting Aider, ensuring environment variables set in the hook only affect the Aider backend. This approach keeps sensitive information out of your dotfiles while still making it available to Aidermacs.
Default Model Selection
You can customize the default AI model used by Aidermacs. The model is determined in the following order of priority:
- The value of the Emacs variable
aidermacs-default-modelif you have set it (e.g., viasetq). - The value of the
AIDER_MODELenvironment variable, if set. - A built-in default value (e.g.,
"sonnet").
To set it in Emacs:
(setq aidermacs-default-model "sonnet")
This enables easy switching between different AI models without modifying the aidermacs-extra-args variable.
Note: This configuration will be overwritten by the existence of an .aider.conf.yml file (see details).
Dynamic Model Selection
Aidermacs offers intelligent model selection for solo (non-Architect) mode, automatically detecting and integrating with multiple AI providers:
- Automatically fetches available models from supported providers (OpenAI, Anthropic, DeepSeek, Google Gemini, OpenRouter)
- Caches model lists for quick access
- Supports both popular pre-configured models and dynamically discovered ones
- Handles API keys and authentication automatically from your .bashrc
- Provides model compatibility checking
The dynamic model selection is only for the solo (non-Architect) mode.
To change models in solo mode:
- Use
M-x aidermacs-change-modelor press `
