A Doom Emacs module for agent-shell — interact with LLM coding agents (Claude, Gemini, Codex, Poolside, and more) from Emacs via the Agent Client Protocol (ACP).
Clone this repo into your Doom modules directory:
git clone https://github.com/phairoh/doom-agent-shell \
~/.config/doom/modules/tools/agent-shellEnable the module in your init.el under :tools, with at least one provider flag:
:tools
(agent-shell +claude) ; or +gemini, +codex, +goose, etc.Run doom sync and restart Emacs.
The first provider flag sets the default agent. Additional flags only enable
doom doctor checks for those providers.
| Flag | Provider |
|---|---|
+claude | Anthropic Claude |
+gemini | Google Gemini CLI |
+codex | OpenAI Codex |
+goose | Goose (Block) |
+mistral | Mistral Vibe |
+auggie | Augment Code Auggie |
+qwen | Qwen Code |
+cursor | Cursor |
+github | GitHub Copilot |
+opencode | OpenCode |
+pool | Poolside pool |
Run doom doctor after installation to verify dependencies are detected.
claudeCLI (Claude Code) — run it once outside Emacs to log inclaude-agent-acp:npm install -g @agentclientprotocol/claude-agent-acp
geminiCLI: https://github.com/google-gemini/gemini-cli
codex-acp:npm install -g @zed-industries/codex-acp
vibe-acp:uv tool install mistral-vibe
auggie:npm install -g @augmentcode/auggie
qwen:npm install -g @qwen-code/qwen-code@latest
cursor-agent-acp:npm install -g @blowmage/cursor-agent-acp
copilotCLI: install GitHub Copilot CLI
opencode: https://opencode.ai
poolCLI:curl -fsSL https://downloads.poolside.ai/pool/install.sh | sh pool login
| Keybinding | Description |
|---|---|
SPC A a | Open or reuse an agent shell |
SPC A n | Start a new agent shell |
SPC A t | Toggle agent shell window |
Use C-u SPC A a to force the agent picker when a default is set.
| Keybinding | Description |
|---|---|
SPC A s | Send region or error at point to shell |
SPC A f | Send current file to shell |
SPC A c | Compose a multi-line prompt |
SPC A i | Paste clipboard image into shell |
| Keybinding | Description |
|---|---|
RET | Submit prompt (normal mode) |
RET | Insert newline (insert mode) |
C-c C-c | Interrupt current agent operation |
TAB / S-TAB | Navigate interactive elements |
C-<tab> | Cycle session mode |
C-c C-o | Switch between shell and viewport |
- Normal mode
RETsubmits the prompt. - Insert mode
RETinserts a newline (use normal modeRETto send). - Diff buffers (
*agent-shell-diff*) open in Emacs state soy/n/p/qpass through directly. PressC-zto enter evil if needed.
Authentication is handled by each provider’s CLI (run claude login,
pool login, etc. outside Emacs first). For API key based providers,
set authentication in your private config.el:
;; Claude — API key instead of subscription login
(setq agent-shell-anthropic-authentication
(agent-shell-anthropic-make-authentication :api-key "your-key-here"))
;; Gemini — API key
(setq agent-shell-google-authentication
(agent-shell-google-make-authentication :api-key "your-key-here"))See agent-shell for full authentication documentation for each provider.
This module includes agent-shell-pool.el, a provider extension for
Poolside’s pool CLI. Pool is ACP-compatible and handles authentication
via pool login. It is not part of the upstream agent-shell package.