- Overview
- Installation
- Supported Backends
- Usage & Commands
- Debugging & Introspection
- Understanding AI Context
- Customization Options
- File Structure Overview
- Related Projects
- Legal Notice
AI mode for Emacs is a comprehensive package that integrates powerful artificial intelligence capabilities directly into your Emacs workflow. This package transforms Emacs into an AI-enhanced development environment, providing intelligent assistance for coding, writing, and general text manipulation tasks. The modular architecture ensures maintainability, testability, and extensibility.
- Interactive AI Chat: Directly engage with AI models for real-time problem-solving, code review, and general assistance within Emacs, with session management and auto-save capabilities.
- Intelligent Code Completion: Receive interactive, multi-candidate code suggestions and completions. It supports real-time previews, navigation through candidates, dynamic context adjustment, and integration of user instructions.
- Code Modification & Refactoring: Streamline development by leveraging AI to intelligently modify, improve, and refactor existing code.
- Code Analysis & Documentation: Generate comprehensive explanations, documentation, and insightful analysis for code blocks and functions, enhancing readability and maintainability.
- Automated Bug Detection & Fixing: Utilize AI to detect common issues and suggest fixes directly within your buffer.
- Multi-Backend Support: Seamlessly integrate with various AI providers, including OpenAI, Anthropic, Hugging Face, and Google Generative AI, for diverse model access.
- Customizable Commands: Tailor AI operations to your specific development needs by defining custom commands and integrating them seamlessly into your Emacs setup.
- Flexible Context Management: Manage global, buffer-local, and temporary context pools, ensuring the AI receives precise and relevant information, including project-wide context via indexing.
- Real-time Previews & Progress Indicators: Get instant visual feedback for completions and track the progress of ongoing AI requests.
- Structured Request Auditing: Detailed logging of AI requests, contexts, and responses for debugging, performance analysis, and security auditing.
Whether you're debugging complex code, exploring new technologies, or enhancing your documentation, AI mode provides the tools to accelerate your productivity and enhance your Emacs experience.
The easiest and recommended way to install this package is through MELPA. To configure MELPA, add the following lines to your ~/.emacs
file:
(package-initialize)
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/"))
Then, run the command:
M-x package-install RET ai-mode RET
M-x package-install RET ai-mode-openai RET # If you plan to use OpenAI API
M-x package-install RET ai-mode-anthropic RET # If you plan to use Anthropic
M-x package-install RET ai-mode-google-genai RET # If you plan to use Google Generative AI
You might want to refresh the package contents if you haven't done so recently by running:
M-x package-refresh-contents RET
If you prefer to manage packages manually or use a different package manager, clone the ai-mode
repository and its related backend repositories into a common directory, for example, ~/.emacs.d/plugins/
:
$ mkdir -p ~/.emacs.d/plugins
$ cd ~/.emacs.d/plugins
$ git clone https://github.com/ai-mode/ai-mode
$ git clone https://github.com/ai-mode/ai-mode-openai # If you plan to use OpenAI API
$ git clone https://github.com/ai-mode/ai-mode-anthropic # If you plan to use Anthropic
$ git clone https://github.com/ai-mode/ai-mode-deepseek # If you plan to use DeepSeek
$ git clone https://github.com/ai-mode/ai-mode-hf # If you plan to use Hugging Face
$ git clone https://github.com/ai-mode/ai-mode-google-genai # If you plan to use Google Generative AI
$ git clone https://github.com/ai-mode/ob-ai # If you plan to use Org Babel integration
Then, add the ~/.emacs.d/plugins/
directory to your Emacs load-path
in your ~/.emacs
or init.el
file. For use-package
, you can configure it by adding the following to your init.el
(or .emacs
):
(add-to-list 'load-path (expand-file-name "~/.emacs.d/plugins/"))
;; You can then use use-package as usual for ai-mode and its backends,
;; as they will be discoverable on your load-path.
AI Mode's functionality is highly customizable. While this package provides the core framework, integration with specific AI models (like OpenAI, Anthropic, etc.) is handled by separate backend packages.
To enable a specific backend, you typically load its package and then register its model-providing function with ai-mode
. This makes its models available for use in ai-mode
and ai-chat
. Remember to configure any necessary API keys as per the backend's documentation.
Here's an example of a comprehensive use-package
configuration for ai-mode
, including how to enable various backends and the ai-debug
package:
(use-package ai-mode
:defer t
:config (progn
(global-ai-mode)
;; Set global keybindings for code completion
(global-set-key (kbd "C-<tab>") 'ai-completions-complete-code-at-point-with-limited-context)
(global-set-key (kbd "C-M-<tab>") 'ai-completions-complete-at-point-with-full-context)
;; Enable completions mode for programming buffers
(add-hook 'prog-mode-hook #'ai-completions-mode)
))
;; Example of enabling specific backends
;; Ensure you have installed the respective packages first (e.g., ai-mode-openai, ai-mode-google-genai).
;; OpenAI Backend
(use-package ai-mode-openai
:after (ai-mode ai-model-management)
:config (progn
(add-to-list 'ai-model-management-providers 'ai-mode-openai--get-models)
;; Set your OpenAI API key:
;; (setq ai-mode-openai--api-key "YOUR_OPENAI_API_KEY")
))
;; Google Generative AI Backend
(use-package ai-mode-google-genai
:after (ai-mode ai-model-management)
:config (progn
(add-to-list 'ai-model-management-providers 'ai-mode-google-genai--get-models)
;; Set your Google Generative AI API key:
;; (setq ai-mode-google-genai--api-key "YOUR_GOOGLE_GENAI_API_KEY")
))
;; Anthropic Backend
(use-package ai-mode-anthropic
:load-path "~/.emacs.d/plugins/ai-mode-anthropic" ;; Example for local install
:after (ai-mode ai-model-management)
:config (progn
(add-to-list 'ai-model-management-providers 'ai-mode-anthropic--get-models)
;; Set your Anthropic API key:
;; (setq ai-mode-anthropic--api-key "YOUR_ANTHROPIC_API_KEY")
))
;; Other backends (DeepSeek, Hugging Face) can be configured similarly.
;; AI Debug Package
(use-package ai-debug
:after (ai-mode)
:config (progn
;; Configure debug features, e.g., disable content truncation for full view
(setq ai-debug-truncate-content nil)
(setq ai-debug-max-content-length 2000)
))
AI mode integrates with a variety of AI providers through dedicated backend packages. To utilize a specific backend, ensure you have installed its corresponding package and configured any necessary API keys.
- AI Mode OpenAI: OpenAI GPT backend for
ai-mode
. - AI Mode Anthropic: Anthropic Claude backend for
ai-mode
. - AI Mode DeepSeek: DeepSeek backend for
ai-mode
. - AI Mode Hugging Face: Hugging Face models backend for
ai-mode
. - AI Mode Google Generative AI: Google Generative AI backend for
ai-mode
.
AI Mode provides a rich set of interactive commands, many of which are accessible through the ai-command-map
prefix (default: C-c i
).
AI Mode offers intelligent code completion at the cursor position. You can use the primary entry point ai-completions-complete-code-at-point
to initiate a completion session, which can be further refined with context-specific commands.
Command | Description |
---|---|
ai-completions-complete-code-at-point |
Start code completion at the cursor position. This is the primary entry point for code completion. |
ai-completions-complete-at-point-with-limited-context |
Perform completion with a limited context around the cursor. |
ai-completions-complete-at-point-with-full-context |
Perform completion using the entire file content as context. |
When a completion session is active, the following interactive commands are available to navigate and manage candidates:
Binding | Command | Description |
---|---|---|
\e\e\e |
ai-completions--abort |
Abort the current completion session. |
\C-g |
ai-completions--abort |
Abort the current completion session. |
C-n |
ai-completions--select-next-or-abort |
Show the next candidate completion. If no more candidates, request new ones from the AI. |
<down> |
ai-completions--select-next-or-abort |
Show the next candidate completion. If no more candidates, request new ones from the AI. |
C-p |
ai-completions--select-prev-or-abort |
Show the previous candidate completion. |
<up> |
ai-completions--select-prev-or-abort |
Show the previous candidate completion. |
[return] |
ai-completions--select-current |
Select and insert the currently displayed candidate completion. |
RET |
ai-completions--select-current |
Select and insert the currently displayed candidate completion. |
C-i |
ai-completions--increase-current-context |
Increase the size of the code context sent to the AI for more relevant suggestions. |
C-f |
ai-completions--maximize-current-context |
Maximize the code context (entire file) sent to the AI for completion. |
C-a |
ai-completions--add-instruction |
Add a temporary, user-provided instruction to the current AI query. |
The ai-chat
package provides a full-featured interactive chat interface with AI models, built on Emacs's comint-mode
for a familiar and extensible experience. It supports asynchronous interaction with various AI backends, allowing you to ask questions, review code, or get general assistance in real-time.
How to Use:
- Start a chat: Invoke
M-x ai-chat
or use the default keybindingC-c i c c
. This opens a dedicated*ai-chat*
buffer. - Send messages: Type your message at the
AI>
prompt and pressC-return
to send it to the AI. - Manage Sessions: Chat sessions can be automatically or manually saved and loaded for continuity.
- Progress Indicators: Visual indicators are displayed in the mode line to show when an AI request is in progress.
Customization:
ai-chat
offers several customizable variables to tailor the chat experience. These are listed in the Customization Options section.
Keybindings (within the *ai-chat*
buffer):
Binding | Command | Description |
---|---|---|
C-return |
ai-chat-return |
Send the current input to the AI. |
RET |
ai-chat-insert-new-line |
Insert a new line in the input area without sending the message. |
C-c C-e |
ai-chat-clear-buffer |
Clear the chat buffer and start a new session. |
C-c + |
ai-chat-increase-context-size |
Increase the number of historical messages used for context. |
C-c - |
ai-chat-decrease-context-size |
Decrease the number of historical messages used for context. |
C-c C-b |
ai-chat-change-backend |
Change the active AI backend/model for the chat session. |
C-c C-s |
ai-chat-save-session |
Manually save the current chat session to a file. |
C-c C-l |
ai-chat-load-session |
Load a previously saved chat session from history files. |
C-c C-a |
ai-chat-toggle-auto-save |
Toggle automatic saving of chat sessions. |
C-c C-c |
ai-chat-interrupt |
Interrupt the current AI request. |
These commands apply AI operations to selected regions or the entire buffer, modifying, improving, or generating code. When invoked, you might be prompted to select a specific command (e.g., "modify", "generate code", "fix", "improve", "optimize", "doc", "explain", "simplify", "spellcheck", "elaborate") from ai-command-management-commands-config-map
.
Command | Description |
---|---|
ai-perform |
Apply the chosen AI operation (based on command type) to the selected content or buffer. The result action (replace, show, eval, insert-at-point) is determined by the command's configuration. |
ai-perform-coordinator |
Decides whether to start a new "replace" operation based on a chosen command type or continue an existing one (e.g., for iterative modification or code generation in place). |
ai-show |
Execute the chosen AI operation and display the AI's response in a special read-only buffer (e.g., *AI response* ). Filters for command types configured for show result action. |
ai-execute |
Execute the chosen AI operation and display the AI's response in a buffer, then ask for user permission to evaluate the generated Emacs Lisp code. Filters for command types configured for eval result action. |
These commands manage global and buffer-local system instructions and temporary context that guide the AI's overall behavior during interactions.
Command | Description |
---|---|
ai-context-add-to-pool (C-c i k a) |
Manually add a data item (e.g., snippet, user input, file context) to the temporary context pool for the current interaction. |
ai-context-add-region (C-c i k r) |
Creates a snippet from the active region and adds it to the temporary context pool. |
ai-context-add-file (C-c i k f) |
Adds the entire content of the current file to the temporary context pool. |
ai-context-clear-pool (C-c i k c) |
Clear the temporary context pool for the current interaction. |
ai-context-remove-from-pool (C-c i k x) |
Remove selected item from context pool via minibuffer selection. |
ai-context-switch-project-mode (C-c i k s) |
Interactively switch the project context inclusion mode (disabled, full files, or summary index). |
ai-context-add-buffer-prompts (C-c i k b) |
Add content (from region or user input) as buffer-specific instructions, affecting only the current buffer. |
ai-context-clear-buffer-prompts (C-c i k B) |
Clear all buffer-specific instructions for the current buffer. |
ai-context-add-to-memory (C-c i k m) |
Add content (from region or user input) to the global memory context, accessible across all buffers. |
ai-context-clear-memory (C-c i k M) |
Clear all entries from the global memory context. |
ai-mode-indexing-update-project-files-summary-index (C-c i i u) |
Generate and update the AI-powered summary index for all project files. |
ai-mode-indexing-switch-indexing-strategy (C-c i i s) |
Interactively switch the project indexing strategy (parallel-independent or sequential). |
ai-mode-indexing-select-index-version (C-c i i v) |
Interactively select and load a specific historical project index version. |
ai-mode-indexing-list-index-versions (C-c i i l) |
List all available project index versions for the current project. |
ai-mode-indexing-delete-old-index-versions (C-c i i d) |
Delete old project index versions beyond the configured retention depth. |
ai-mode-indexing-toggle-indexing-context (C-c i i t) |
Toggle inclusion of existing context when indexing new files. |
ai-mode-indexing-reindex-project-with-context (C-c i i R) |
Reindex the entire project with existing context enabled. |
ai-completions--add-instruction (C-a during completion) |
Add a temporary, user-provided instruction to the current AI completion query. |
These commands provide fine-grained control over how AI requests are executed and how their results are handled.
Command | Keybinding (default) | Description |
---|---|---|
ai-execution-toggle-caching |
C-c i e c |
Toggle prompt caching for AI requests. When enabled, AI providers that support it may cache prompts to reduce token usage and improve response times for repetitive queries. |
ai-execution-toggle-patch-mode |
C-c i e p |
Toggle unified patch mode for replace actions. When enabled, AI models generate a standard diff -u patch, which is then applied to the buffer. When disabled, the AI's response directly replaces the selected content. |
ai-request-audit-toggle (M-x) |
M-x ai-request-audit-toggle |
Toggle the comprehensive request auditing system on/off. When enabled, detailed request/response data is saved to disk for debugging and review. |
ai-request-audit-cleanup-project (M-x) |
M-x ai-request-audit-cleanup-project |
Delete all audit records for the current project. |
ai-telemetry-toggle (M-x) |
M-x ai-telemetry-toggle |
Toggle general telemetry collection (usage statistics, performance metrics) on/off. |
ai-telemetry-toggle-log-buffer (M-x) |
M-x ai-telemetry-toggle-log-buffer |
Toggle logging of AI requests and responses to the *AI-request-log* buffer. |
ai-telemetry-toggle-prompt-buffer (M-x) |
M-x ai-telemetry-toggle-prompt-buffer |
Toggle writing the full prompt sent to the AI to the *AI prompt* buffer (useful for debugging prompt composition). |
ai-usage-toggle (M-x) |
M-x ai-usage-toggle |
Toggle token usage statistics collection on/off. |
AI Mode is highly extensible, allowing you to define your own custom AI commands and integrate them seamlessly into your workflow. This is primarily done by creating instruction files in your .ai/commands
directory within your project or home directory.
The ai-command-management-commands-config-map
is an association list that maps a descriptive command name (string) to a property list (plist
) defining its behavior. Each plist
can contain the following keys:
:template
(string, optional): A template string for the query. Variables in the template are denoted by{{:key}}
, corresponding to keywords in the assembled context.:instructions
(string, optional): Specific instructions for the AI for this command type. These are general guidelines for the AI's behavior when this command is invoked.:user-input
(boolean, optional):t
if the command requires additional user input. Ift
,ai-mode
will prompt the user for text.:action-type
(string, optional): The high-level action type (e.g., "modify", "complete", "explain") used for structuring the request to the AI. This influences the XML-like container generated for the AI.:result-action
(symbol): Crucial for defining how the AI's response is handled.show
: Display the response in a dedicated read-only buffer (e.g.,*AI response*
).replace
: Replace the active region (or the entire buffer if no region is active) with the AI's response.eval
: Display the response in a buffer and prompt the user to evaluate it as Emacs Lisp code.insert-at-point
: Insert the AI's response at the current cursor position.
:needs-buffer-context
(boolean, optional):t
if the full buffer content is required for context, even if only a region is active. This ensures the AI has a broader understanding.
File-based Command Modifiers: Commands defined in instruction files can use modifiers in their names to control behavior without code changes. Modifiers are separated by '__':
Examples:
user__explain_code__show.md
- requires user input, shows resultbuffer__refactor_function__replace.md
- uses full buffer context, replaces selectionlarge__smart_completion__complete.md
- uses large context for completionproject__analyze_architecture__show.md
- includes project context
Available modifiers:
Action Modifiers (control how results are handled):
show
[S] - Display in a buffereval
[E] - Display and offer to evaluatereplace
[R] - Replace selection/bufferinsert
[I] - Insert at cursor positioncomplete
[C] - Code completion
Behavior Modifiers (control input and context requirements):
user
[U] - Requires user inputbuffer
[B] - Uses full buffer contextproject
[P] - Uses project contextglobal
[G] - Uses global context
Context Size Modifiers (control amount of surrounding context):
small
[s] - Limited context (5/5 lines)large
[L] - Extended context (20/20 lines)full
[F] - Full context (unlimited)
Display Indicators: Commands in completion lists show indicators in brackets:
[C]
- Configured command (fromai-command-management-commands-config-map
)[D]
- Has default instructions (from package)[G]
- Has global instructions (from ~/.ai/)[L]
- Has local instructions (from project .ai/)[UBPSLEGRCIF]
- Active modifiers (combinations possible)
Example display: "[C][DG] explain" or "[UBS] user__buffer__explain_code__show"
Example: Adding a Custom "Translate" Command
Let's say you want to add a command to translate a selected text to a specific language.
(add-to-list 'ai-command-management-commands-config-map
'("translate to French" . (:instructions "Translate the given text into formal French."
:user-input t ; Optional: if you want user to provide the text or additional context
:result-action replace ; Replace selected text with translation
:action-type "modify"))) ; AI should modify the input text
After adding this to your Emacs configuration and restarting or evaluating the Lisp, ai-perform
(or other general commands) will offer "translate to French" as an option. When selected, the AI will receive instructions to translate the content (either from the active region or user input) and the result will replace the original text.
You can also create a dedicated instruction file for this command in your .ai/commands
directory (e.g., ~/.emacs.d/.ai/commands/translate_to_French.md
) to provide more detailed, multi-line instructions to the model.
Command | Description |
---|---|
ai-command-management-edit-command-instructions (C-c i m e) |
Interactively edit instruction files for commands. Prompts to select an existing command or enter a new one, then selects a location (global or local project) to edit/create the instruction file. |
ai-command-management-describe-command-modifiers (C-c i m d) |
Interactively describe the modifiers applied to a selected file-based command, explaining their effect on command behavior and context. |
ai-command-management-create-modified-command (C-c i m c) |
Interactively create a new file-based command name by composing a base name with various action, behavior, and context modifiers. Offers to create an instruction file. |
Command | Keybinding (default) | Description |
---|---|---|
ai-chat |
C-c i c c |
Start an interactive chat session with the AI. |
ai-change-model |
C-c i c m |
Interactively select and switch the active AI model/backend for current requests. |
ai-core-show-audit |
M-x ai-core-show-audit |
Show a list of all historical AI requests for the current project, including their status, command, and execution time. |
AI Mode provides a suite of visual debugging and introspection tools to help you understand the context being sent to AI models, troubleshoot issues, and gain deeper insights into the extension's behavior. These tools are particularly useful for debugging prompts, understanding context construction, and verifying data flow.
These commands, primarily accessed via the C-c i d
(for ai-debug-visual
) and C-c i D
(for ai-debug-show-sources
) prefixes, open dedicated buffers that use magit-section-mode
for an interactive, collapsible display of information.
Command | Keybinding (default) | Description |
---|---|---|
ai-debug-visual |
C-c i d |
Displays a comprehensive debug view of the current AI execution context, including model configuration, buffer context, completion parameters, and the messages being sent to the AI. This is the main entry point for debugging active AI operations. |
ai-debug-show-sources |
C-c i D |
Displays all available AI context sources, such as global system prompts, global memory, buffer-bound prompts, and the temporary context pool. Useful for understanding how different parts of the context are assembled. |
ai-debug-show-file-commands |
C-c i f |
Displays all loaded file-based commands from default, global, and local sources, including their modifiers and content. |
ai-debug-show-system-prompts |
C-c i s |
Displays all loaded system prompts from default, global, and local sources, with their content. |
ai-debug-show-raw-structures-interactive |
C-c i R |
Displays all typed structures in raw sequential format as they are prepared for the AI model. Useful for understanding the exact order and structure of context elements. |
ai-debug-completion-limited-context |
C-c i C-d l |
Shows the context specifically for code completion with limited preceding and following context sizes. Useful for debugging how completion handles truncated views of your code. |
ai-debug-completion-full-context |
C-c i C-d f |
Shows the context specifically for code completion using the entire file content as context. Useful for debugging full-buffer completion strategies. |
Once a debug buffer (e.g., *AI Debug Context*
, *AI Context Sources*
) is open, you can interact with it using magit-section-mode
keybindings:
Binding | Command | Description |
---|---|---|
TAB |
magit-section-toggle |
Expand or collapse the section at point. |
C-c t |
ai-debug-toggle-truncation |
Toggle content truncation within the debug buffer. When enabled, long strings and lists are shortened to improve performance and readability; disable it to see full content. |
C-r |
ai-debug-refresh-buffer |
Refresh the content of the current debug buffer with the latest AI context information. |
When you interact with AI Mode, a comprehensive context is assembled and sent to the AI model. This context ensures the AI has all the necessary information to provide relevant and accurate responses. The context is built from various sources:
- Code-Related Context:
- Active Region/File Content: If a region is selected, its content is sent (enclosed in
<selection>
tags). Otherwise, the entire buffer content may be included (enclosed in<file-context>
tags). - Preceding and Following Context: Lines of code immediately before (
<preceding-context>
) and after (<following-context>
) the cursor/region are included to provide surrounding code awareness. - File Metadata: Information such as the current file's path, buffer name, and programming language (
<file-metadata>
within<additional-context source="file-metadata">
).
- Active Region/File Content: If a region is selected, its content is sent (enclosed in
- Interaction-Related Context:
- Model Information: Details about the selected AI model (e.g., name, provider) (
<model>
within:model-context
in the execution context). - User Input: Explicit prompts or questions you provide (
<user-input>
withsource="user-input"
). - Additional Context Pool: Content manually added to the temporary context pool by you (e.g., using
ai-context-management--add-to-context-pool
). This is grouped by source (<additional-context source="context-pool">
).
- Model Information: Details about the selected AI model (e.g., name, provider) (
- Instructional Context:
- Global System Instructions: General instructions that apply to all AI interactions (managed by
ai-context-management--global-system-prompts
) (<agent-instructions source="global-system-prompts">
). - Global Memory: Persistent information stored in global memory for all sessions (managed by
ai-context-management--global-memo-context
) (<memory-content source="global-memory">
within<memory>
). - Buffer-Bound Prompts: Instructions specifically tied to the current buffer (managed by
ai-context-management--buffer-bound-prompts
) (<agent-instructions source="buffer-bound-prompts">
). - Action-Specific Instructions: Prompts and examples loaded from
.ai/commands
files for specific actions (e.g., "explain", "modify", "complete") (<agent-instructions source="command-specific-instructions">
,<agent-instructions source="command-examples">
). - Action Object Rules: Instructions on how to interpret and generate structured action objects (
<modify-action-object-rules>
,<complete-action-type-object-rules>
, etc., within<agent-instructions source="action-object-rules">
). - Result Action Rules: Instructions on how the AI's response should be formatted and applied (
<agent-instructions source="result-action-format">
).
- Global System Instructions: General instructions that apply to all AI interactions (managed by
- Project Context:
- Full Project Files: All filtered files in the current project (
<file-content>
within<files>
within<project-context>
). Enabled byai-context-management--project-context-mode
set tofull-project
. - Project AI Summary Index: AI-generated summaries of project files from the cached index (
<file-summary>
within<files>
within<project-ai-summary>
). Enabled byai-context-management--project-context-mode
set toproject-ai-summary
.
- Full Project Files: All filtered files in the current project (
This layered approach ensures that AI has a deep understanding of your code, environment, and intentions for each interaction.
AI Mode provides several important customizable variables to tailor its behavior to your workflow. These can be adjusted using M-x customize-group RET ai RET
or by setting them directly in your Emacs configuration file (e.g., init.el
).
Variable | Description | Default |
---|---|---|
General AI Mode Settings | ||
ai-keymap-prefix |
The prefix keybinding for AI commands (e.g., C-c i ). |
"C-c i" |
ai-command-management-command-prompt |
Prompt for selecting the command. | "Command or query: " |
ai-model-management-change-execution-backend-prompt |
Prompt for selecting the AI backend/model. | "Select execution backend: " |
ai-context-management--user-input-method |
Function to use for collecting user input. | ai-user-input-ctrl-enter |
ai-mode-line-progress-indicator-enabled |
If non-nil, enables progress indicators in the mode line for general AI requests. | t |
ai-mode-line-progress-indicator-style |
Style of progress indicator for general AI requests: spinner , dots , or message . |
spinner |
ai-context-management--default-preceding-context-size |
Number of lines to include in the preceding context for most AI operations. | 20 |
ai-context-management--default-following-context-size |
Number of lines to include in the following context for most AI operations. | 20 |
ai-prompt-management--instruction-watching-enabled |
Enable file watching for instruction files to auto-reload cache. | t |
ai-context-management--extended-instructions-enabled |
If non-nil, enables loading of extended instructions for AI prompts (e.g., basic, action-specific, examples). | t |
ai-context-management--current-buffer-additional-context |
If non-nil, includes the current buffer's entire content as additional context, especially when a region is active. This can be useful for whole-file understanding, but can increase token usage. | t |
ai-command-management-commands-config-map |
An association list mapping AI commands to their configurations. | (See definition in ai-command-management.el ) |
ai-execution--prompt-caching-enabled |
Enable prompt caching for AI requests. | nil |
ai-execution--replace-action-use-patch |
Use unified patch format for replace actions instead of direct replacement. | nil |
ai-project-ignore-file-name |
Name of the AI ignore file, typically in the project root. | ".ai-ignore" |
ai-project-global-ignore-patterns |
Global hardcoded ignore patterns that are always applied. | (See definition in ai-project.el ) |
ai-project-global-ignore-files |
List of global ignore files to be processed (e.g., ~/.global-gitignore ). |
(See definition in ai-project.el ) |
Project Context & Indexing Settings | ||
ai-context-management--project-context-mode |
Project context inclusion mode: disabled , full-project (all filtered files), or project-ai-summary (AI-generated summaries). |
disabled |
ai-mode-indexing--include-existing-context |
Include context from already indexed files when indexing new files. | t |
ai-mode-indexing--strategy |
Strategy for file indexing: parallel-independent (no context sharing) or sequential (with accumulating session context). |
parallel-independent |
ai-mode-indexing--index-retention-depth |
Number of index versions to retain before cleanup. | 5 |
ai-mode-indexing--call-timeout |
Timeout in seconds between individual file indexing calls during project summary generation. | 0.1 |
Code Completion Specific Settings | ||
ai-completions--current-precending-context-size |
Current number of lines used as context before the cursor for AI code completion sessions. | 20 |
ai-completions--current-forwarding-context-size |
Current number of lines used as context after the cursor for AI code completion sessions. | 20 |
ai-completions--context-size-step |
Step size to increase or decrease context size during completion. | 10 |
ai-completions--continue-commands |
A list of commands allowed during an active completion session without aborting it. | (not save-buffer ...) |
ai-completions--abort-commands |
A list of commands that will abort an active completion session. | (not ai-completions--select-next-or-abort ...) |
AI Chat Specific Settings | ||
ai-chat-prompt |
Prompt text for the AI chat buffer. | AI> |
ai-chat-buffer-context-size |
Number of historical messages to display and include as context in AI chat. | 5 |
ai-chat-history-directory |
Directory where AI chat session history files are stored. | ~/.ai-chat-history |
ai-chat-auto-save-enabled |
Whether to automatically save chat sessions after each interaction. | nil |
ai-chat-progress-indicator-enabled |
Enable progress indicator for AI chat requests. | t |
ai-chat-progress-indicator-style |
Style of progress indicator to use for AI chat requests (spinner , dots , message ). |
spinner |
ai-chat-change-backend-prompt |
Prompt for selecting the query backend in AI chat. | "Select query backend: " |
ai-chat-language-mapping |
Maps external language names to Emacs mode names for syntax highlighting in chat code blocks. | (("elisp" . "emacs-lisp") ...) |
Logging & Debugging Settings | ||
ai-telemetry-enabled |
Enable telemetry collection for AI mode. | t |
ai-telemetry-write-log-buffer |
If non-nil, enables logging of AI requests and responses to *AI-request-log* buffer. |
nil |
ai-logging-verbose-log |
If non-nil, enables verbose logging for AI utilities. | nil |
ai-telemetry-write-to-prompt-buffer |
If non-nil, writes the full prompt sent to the AI to *AI prompt* buffer. |
nil |
ai-network--default-request-timeout |
Default timeout for HTTP requests in seconds. | 60 |
ai-debug-truncate-content |
Whether to truncate long content in debug buffers for performance. | t |
ai-debug-max-content-length |
Maximum length of content to display when truncation is enabled in debug buffers. | 2000 |
ai-debug-max-recursion-depth |
Maximum recursion depth for nested content display in debug buffers. | 2 |
ai-debug-max-list-items |
Maximum number of list items to display in debug buffers. | 100 |
ai-debug-max-plist-lines |
Maximum number of property list lines to display in debug buffers. | 40 |
ai-usage-enabled |
Enable usage statistics collection for AI mode. | t |
ai-request-audit-enabled |
Enable structured request auditing for AI mode. | t |
ai-request-audit-max-records |
Maximum number of audit records to keep per project. | 100 |
ai-request-audit-cleanup-old-records |
Automatically cleanup old audit records when max-records is exceeded. |
t |
The ai-mode
package is composed of several .el
files, each responsible for a specific set of functionalities. This modular design enhances maintainability and allows for independent development and testing of features.
File | Description |
---|---|
Eask |
Manages package metadata, dependencies, and source files for ai-mode building and installation. |
ai.el |
The core package file. It defines the main ai group and provides the foundational namespace for the entire AI mode system. |
ai-chat.el |
Implements the interactive AI chat interface using comint-mode , handling dialogues, session history, and AI response display. |
ai-command-management.el |
Defines, parses, loads, and dispatches AI commands. Manages instruction file loading, caching, and modifier parsing. |
ai-common.el |
Contains core AI primitives and general data structures like typed-struct . Provides basic operations on these structures, such as creation and update. |
ai-completions.el |
Implements AI-powered code completion, managing suggestion requests, session management, and applying completions. |
ai-context-management.el |
Centralizes the collection, structuring, and storage of context for AI requests, including buffer-specific context, region snippets, and assembly of full execution contexts. |
ai-core.el |
Serves as the central orchestrator and primary location for fundamental AI-mode logic, coordinating calls between different modules. |
ai-debug.el |
Provides visual tools for debugging and introspecting AI states, including prompt composition, execution context, and model configuration. |
ai-execution.el |
Manages AI request execution and asynchronous interaction with AI backends, handling success and failure callbacks. |
ai-logging.el |
Provides logging utilities for AI mode, including message logging, verbose control, and request/response logging. |
ai-mode-adapter-api.el |
Provides a standardized, type-safe API for ai-mode to interact with external AI backends, handling message preparation and content extraction. |
ai-mode-indexing.el |
Manages the project indexing system for AI, encompassing file summary generation, persistence, and versioning. |
ai-mode-line.el |
Provides mode line utilities and indicators for AI mode, including progress tracking, status displays, and integration with doom-modeline. |
ai-mode.el |
Defines the ai-mode minor mode, manages the overall UI interaction flow, feature integration, and top-level settings. |
ai-model-management.el |
Responsible for configuring, selecting, and managing available AI models and their providers. |
ai-network.el |
Manages network communication and connectivity for AI mode, including HTTP request handling, connection pooling, retry logic, timeout management, and network-related error handling for AI service interactions. |
ai-progress.el |
Manages progress tracking business logic for long-running AI operations, including progress state management, cancellation support, and data structures for tracking AI request progress. |
ai-project.el |
Contains project management utilities for AI mode, including project root detection, file filtering by ignore patterns, and creating project-related data structures. |
ai-prompt-management.el |
Manages the creation, assembly, rendering, and caching of prompts and instructions for AI models. |
ai-request-audit.el |
Provides a structured request auditing system for AI mode, including structured storage of request/response data, unique request identification and tracking, and project-based audit organization. |
ai-response-processors.el |
Contains functions for processing and handling responses from AI models, including text extraction, formatting, display, and callback creation for various response insertion and replacement strategies. |
ai-structs.el |
Contains formal definitions of all common data structures (e.g., typed-struct and its derived types) used throughout AI-mode. This file is primarily for data structure definitions. |
ai-telemetry.el |
Handles the collection and reporting of telemetry data for usage statistics and performance monitoring. |
ai-usage.el |
Handles usage statistics and token counting for AI mode, including token usage tracking and reporting, and session statistics management. |
ai-user-input.el |
Provides user input utilities for AI mode, including various methods for collecting multiline input from users. |
ai-utils.el |
Contains general-purpose utility functions that do not fit into other specific categories, such as logging, HTTP request handling, basic buffer manipulation, and string templating. |
This project is an independent open-source initiative and is not affiliated with, endorsed by, or sponsored by Anthropic, PBC, OpenAI, Inc., DeepSeek, Hugging Face, Inc., or Google LLC.
Claude is a trademark of Anthropic, PBC. OpenAI, GPT, and ChatGPT are trademarks or registered trademarks of OpenAI, Inc. DeepSeek is a trademark of DeepSeek. Hugging Face and the Hugging Face logo are trademarks or registered trademarks of Hugging Face, Inc. Google and Gemini are trademarks of Google LLC. All other trademarks mentioned in this documentation are the property of their respective owners.
The use of AI APIs (such as Anthropic's, OpenAI's, Google's, DeepSeek's, and Hugging Face's) is subject to their respective terms of service and usage policies. Users are responsible for ensuring their usage complies with all applicable terms and regulations.