Efrit - AI-Powered Emacs Coding Assistant
A sophisticated AI coding agent that leverages Emacs' native programmability through direct Elisp evaluation.
Overview
Efrit is a conversational AI assistant that integrates seamlessly with Emacs, providing multiple interfaces for different types of tasks:
efrit-chat - Multi-turn conversational interface for complex discussions and code development
- Multi-turn conversational interface for complex discussions and code development efrit-do - Natural language command execution for quick tasks
- Natural language command execution for quick tasks efrit - Command interface for structured interactions
- Command interface for structured interactions efrit-agent-run - Advanced agent loop for multi-step automation
Key Features
Direct Elisp Evaluation : Leverages Emacs' native programmability without complex abstractions
: Leverages Emacs' native programmability without complex abstractions Multi-turn Conversations : Maintains context across multiple exchanges with configurable turn limits
: Maintains context across multiple exchanges with configurable turn limits Tool Integration : Can execute Emacs functions, manipulate buffers, and interact with the environment
: Can execute Emacs functions, manipulate buffers, and interact with the environment Safety-First Design : Confirmation systems and comprehensive error handling
: Confirmation systems and comprehensive error handling Dark Theme Friendly: Adaptive colors that work with any Emacs theme
Installation
Prerequisites
Emacs : Version 28.1 or later
: Version 28.1 or later Anthropic API Key : Get yours from Anthropic Console
: Get yours from Anthropic Console Internet Connection: Required for Claude API access
Quick Installation
Clone the repository: git clone https://github.com/steveyegge/efrit.git cd efrit Add to your Emacs configuration ( ~/.emacs.d/init.el ): ( add-to-list 'load-path " /path/to/efrit " ) ( require 'efrit ) Configure your API key in ~/.authinfo : machine api.anthropic.com login personal password YOUR_API_KEY_HERE Restart Emacs and test with M-x efrit-chat
Alternative Installation Methods
Emergency Emacs Setup (for quick testing):
emacs -q -l /path/to/efrit/efrit.el
Using straight.el:
( straight-use-package '(efrit :type git :host github :repo " steveyegge/efrit " )) ( require 'efrit )
Usage
Available Commands
M-x efrit-chat - Multi-turn conversational interface
- Multi-turn conversational interface M-x efrit-do - Natural language command execution
- Natural language command execution M-x efrit - Command interface
- Command interface M-x efrit-agent-run - Advanced agent loop
Key Bindings
C-c C-e e - efrit-chat
- efrit-chat C-c C-e d - efrit-do
- efrit-do C-c C-e c - efrit command interface
- efrit command interface C-c C-e a - efrit-agent-run
Examples
Visual Demonstrations
Multi-Buffer Creation with efrit-do
Starting with a simple request:
M-x efrit-do > write an ode in one buffer, and a sonnet in another, both about Vim
Conversational Context - Making Modifications
efrit-do maintains context, so you can refine previous work:
M-x efrit-do > Can you make them more snarky?
This demonstrates efrit-do's key feature: conversational continuity. It remembers what it just created and can modify, improve, or completely rewrite previous work based on your feedback.
More Usage Examples
Conversational Development:
M-x efrit-chat > Can you help me write a function to count lines in the current buffer? > Now modify it to exclude empty lines and comments
Quick Commands:
M-x efrit-do > open the scratch buffer and insert "hello world" > find all TODO comments in the current project
Multi-step Tasks:
M-x efrit-chat > Create a haiku in one buffer and a limerick in another buffer
Configuration
Basic Configuration
; ; Model and token settings ( setq efrit-model " claude-3-5-sonnet-20241022 " ) ( setq efrit-max-tokens 8192 ) ; ; Multi-turn conversation settings ( setq efrit-multi-turn-enabled t ) ( setq efrit-multi-turn-simple-max-turns 3 ) ; ; efrit-do buffer behavior ( setq efrit-do-show-errors-only t ) ; Only show buffer on errors ; ; Debug settings (optional) ( setq efrit-debug-enabled nil )
Advanced Configuration
; ; Timeouts and API settings ( setq efrit-multi-turn-timeout 300 ) ( setq efrit-api-timeout 30 ) ; ; Custom key bindings ( global-set-key ( kbd " C-c a " ) 'efrit-chat ) ( global-set-key ( kbd " C-c d " ) 'efrit-do )
Architecture
Core Philosophy
Efrit follows the principle of Elisp-centricity: rather than building complex tool abstractions, it provides the AI with direct access to Emacs' powerful Elisp evaluation capabilities. This approach offers unlimited flexibility while staying within Emacs' natural paradigm.
Core Components
efrit.el - Main entry point and package coordination
- Main entry point and package coordination efrit-chat.el - Multi-turn conversational interface with Claude API
- Multi-turn conversational interface with Claude API efrit-do.el - Natural language command interface
- Natural language command interface efrit-multi-turn.el - Multi-turn conversation state management
- Multi-turn conversation state management efrit-tools.el - Core functionality engine with Elisp evaluation
- Core functionality engine with Elisp evaluation efrit-debug.el - Optional debugging and logging system
- Optional debugging and logging system efrit-agent.el - Advanced agent loop for complex automation
Troubleshooting
Common Issues
"Cannot open load file: efrit"
Verify the path in your load-path is correct
is correct Ensure efrit.el exists in that directory
"API key not found"
Check ~/.authinfo file exists and has correct format
file exists and has correct format Test with: M-x auth-source-search RET machine api.anthropic.com RET
Connection timeout
Check internet connection and API key validity
Try increasing efrit-api-timeout
Debug Mode
Enable debug logging for troubleshooting:
( setq efrit-debug-enabled t )
Then check: M-x efrit-debug-show
Development
Building and Testing
# Build make compile # Run tests make test # Install system-wide make install
Contributing
See CONTRIBUTING.md for detailed guidelines on:
Development setup
Code standards and conventions
Testing procedures
Submitting changes
Version History
v0.2.0 (2025-01-07) - Major Stability Release
✅ Fixed API integration issues and HTTP 400 errors
✅ Enhanced token limits (1024 → 8192 tokens)
✅ Improved message ordering and dark theme compatibility
✅ Added multi-turn conversation system with configurable limits
✅ Consolidated documentation and cleaned up codebase
✅ Production-ready with comprehensive error handling
License
Licensed under the Apache License, Version 2.0. See LICENSE for details.
Efrit: Where AI meets the power of Emacs.