能力标签
Agent Shell
🛠
AI工具

Agent Shell

基于 Emacs Lisp · 开源 AI 工具,GitHub 社区精选
英文名:agent-shell
⭐ 1.2k Stars 🍴 167 Forks 💻 Emacs Lisp 📄 GPL-3.0 🏷 AI 8.2分
8.2AI 综合评分
EmacsAI工作流LLM代理Claude集成代码生成
✦ AI Skill Hub 推荐

Agent Shell 是 AI Skill Hub 本期精选AI工具之一。已获得 1.2k 颗 GitHub Star,综合评分 8.2 分,整体质量较高。我们强烈推荐将其纳入你的 AI 工具库,帮助提升工作效率。

📚 深度解析

Agent Shell 是一款基于 Emacs 的开源工具,在 GitHub 上收获 1k+ Star,是Emacs、AI工作流、LLM代理、Claude集成领域中的优质开源项目。开源工具的最大优势在于代码完全透明,你可以审计每一行代码的安全性,也可以根据自身需求进行二次开发和定制。

**为什么要使用开源工具而非商业 SaaS?**
对于个人开发者和有隐私需求的用户,本地部署的开源工具意味着数据不离本机,不受第三方服务商的数据政策约束。同时,开源工具通常没有使用次数限制和月度费用,一次安装即可长期使用,对于高频使用场景的总拥有成本(TCO)远低于订阅制商业工具。

**安装与环境准备**
Agent Shell 依赖 Emacs 运行环境。建议通过 pyenv(Python)或 nvm(Node.js)管理 Emacs 版本,避免全局环境污染。对于新手用户,推荐先创建虚拟环境(python -m venv venv && source venv/bin/activate),再安装依赖,这样即使出现问题也可以随时删除虚拟环境重新开始,不影响系统稳定性。

**社区与维护**
GitHub Issue 和 Discussion 是获取帮助的最快渠道。在提问前建议先检查 Closed Issues(已关闭的问题),大多数常见问题都已有解答。遇到 Bug 时,提供 pip list 的输出、完整错误堆栈和最小可复现示例,能显著提高开发者响应速度。AI Skill Hub 将持续追踪 Agent Shell 的版本更新,及时通知重要功能变化。

📋 工具概览

Emacs原生AI工作流工具,集成Claude等LLM代理能力。提供缓冲区交互界面,支持代码生成和自动化任务。适合Emacs用户、开发者和AI工作流爱好者使用。

Agent Shell 是一款基于 Emacs Lisp 开发的开源工具,专注于 Emacs、AI工作流、LLM代理 等核心功能。作为 GitHub 开源项目,它拥有活跃的社区支持和持续的版本迭代,代码完全透明可审计,支持本地部署以保护数据隐私。无论是个人使用还是集成到企业工作流,都能提供稳定可靠的解决方案。

GitHub Stars
⭐ 1.2k
开发语言
Emacs Lisp
支持平台
Windows / macOS / Linux
维护状态
正常维护,社区驱动
开源协议
GPL-3.0
AI 综合评分
8.2 分
工具类型
AI工具
Forks
167

📖 中文文档

以下内容由 AI Skill Hub 根据项目信息自动整理,如需查看完整原始文档请访问底部「原始来源」。

Emacs原生AI工作流工具,集成Claude等LLM代理能力。提供缓冲区交互界面,支持代码生成和自动化任务。适合Emacs用户、开发者和AI工作流爱好者使用。

Agent Shell 是一款基于 Emacs Lisp 开发的开源工具,专注于 Emacs、AI工作流、LLM代理 等核心功能。作为 GitHub 开源项目,它拥有活跃的社区支持和持续的版本迭代,代码完全透明可审计,支持本地部署以保护数据隐私。无论是个人使用还是集成到企业工作流,都能提供稳定可靠的解决方案。

📌 核心特色
  • 开源免费,支持本地部署,数据完全自主可控
  • 活跃的 GitHub 开源社区,持续迭代更新
  • 提供详细文档和使用示例,新手友好
  • 支持自定义配置,灵活适配不同使用环境
  • 可作为基础组件集成进现有技术栈或进行二次开发
🎯 主要使用场景
  • 本地部署运行,保护数据隐私,满足合规要求
  • 自定义集成到现有系统,扩展技术栈能力
  • 作为开源基础组件进行商业化二次开发
以下安装命令基于项目开发语言和类型自动生成,实际以官方 README 为准。
安装命令
# 克隆仓库
git clone https://github.com/xenodium/agent-shell
cd agent-shell

# 查看安装说明
cat README.md

# 按 README 完成环境依赖安装后即可使用
📋 安装步骤说明
  1. 访问 GitHub 仓库页面
  2. 按照 README 文档完成依赖安装
  3. 根据系统环境完成初始化配置
  4. 参考官方示例或文档开始使用
  5. 遇到问题可在 GitHub Issues 中查找解答
以下用法示例由 AI Skill Hub 整理,涵盖最常见的使用场景。
常用命令 / 代码示例
# 查看帮助
agent-shell --help

# 基本运行
agent-shell [options] <input>

# 详细使用说明请查阅文档
# https://github.com/xenodium/agent-shell
以下配置示例基于典型使用场景生成,具体参数请参照官方文档调整。
配置示例
# agent-shell 配置说明
# 查看配置选项
agent-shell --config-example > config.yml

# 常见配置项
# output_dir: ./output
# log_level: info
# workers: 4

# 环境变量(覆盖配置文件)
export AGENT_SHELL_CONFIG="/path/to/config.yml"
📑 README 深度解析 真实文档 完整度 8/100 查看 GitHub 原文 →
以下内容由系统直接从 GitHub README 解析整理,保留代码块、表格与列表结构。

简介

#+TITLE: Emacs Agent Shell #+AUTHOR: Álvaro Ramírez

[[https://melpa.org/#/agent-shell][file:https://melpa.org/packages/agent-shell-badge.svg]]

👉 [[https://github.com/sponsors/xenodium][Support this work via GitHub Sponsors]] by [[https://github.com/xenodium][@xenodium]] (check out my [[https://xenodium.com][blog]])

[[file:agent-shell.png]]

  • This project needs your funding

As you pay for those useful LLM tokens, consider [[https://github.com/sponsors/xenodium][sponsoring]] development and maintenance of this project. With your help, I can make this effort more [[https://github.com/sponsors/xenodium][sustainable]].

Thank you!

[[https://xenodium.com/][Alvaro]]

  • agent-shell

A native Emacs shell to interact with LLM agents powered by ACP ([[https://agentclientprotocol.com][Agent Client Protocol]]).

With agent-shell, you can interact with any ACP-driven agent like:

  • [[https://code.claude.com/docs/en/overview][Claude Agent]] (Anthropic)
  • [[https://github.com/agentclientprotocol/codex-acp][Codex]] (OpenAI)
  • [[https://github.com/google-gemini/gemini-cli][Gemini CLI]] (Google)
  • [[https://goose-docs.ai/docs/getting-started/installation][Goose]]
  • [[https://docs.x.ai/docs/overview][Grok Build]] (xAI)
  • [[https://cursor.com/docs/cli][Cursor]]
  • [[https://www.kimi.com/code][Kimi Code CLI]]
  • [[https://www.codebuddy.ai][CodeBuddy]]
  • [[https://kiro.dev][Kiro CLI]]
  • [[https://github.com/QwenLM/qwen-code][Qwen Code]]
  • [[https://docs.augmentcode.com/cli/overview][Auggie]]
  • [[https://github.com/mistralai/mistral-vibe][Mistral Vibe]]
  • [[https://factory.ai][Factory Droid]]
  • [[https://github.com/svkozak/pi-acp][Pi]]
  • [[https://github.com/can1357/oh-my-pi][Oh My Pi]]
  • [[https://opencode.ai][Opencode]]
  • [[https://antigravity.google/docs/ide/extensions][Antigravity]] (Google)

[[https://www.youtube.com/watch?v=R2Ucr3amgGg][agent-shell - YouTube]]

[[https://www.youtube.com/watch?v=R2Ucr3amgGg][file:yt.png]]

[[https://www.youtube.com/watch?v=ymMlftdGx4I][agent-shell + Claude Skills - YouTube]]

[[https://www.youtube.com/watch?v=ymMlftdGx4I][https://img.youtube.com/vi/ymMlftdGx4I/0.jpg]]

[[https://www.youtube.com/watch?v=HJQ86HuSIJI][agent-shell + Claude Skills + Charts - YouTube]]

[[https://www.youtube.com/watch?v=HJQ86HuSIJI][https://img.youtube.com/vi/HJQ86HuSIJI/0.jpg]]

[[https://www.youtube.com/watch?v=7fdHeUoRRgg][Bending Emacs Episode 14: Prototyping iOS apps with agent-shell, artist-mode, and Claude Skills - YouTube]]

[[https://www.youtube.com/watch?v=7fdHeUoRRgg][https://img.youtube.com/vi/7fdHeUoRRgg/0.jpg]]

  • News

Do take a look at all these blog posts as they showcase most =agent-shell= features.

  • [[https://xenodium.com/agent-shell-0-63-updates][agent-shell 0.63 updates]].
  • [[https://xenodium.com/agent-shell-0-55-updates][agent-shell 0.55 updates]].
  • [[https://xenodium.com/agent-shell-0-47-1-updates][agent-shell 0.47 updates]].
  • [[https://xenodium.com/agent-shell-0-25-updates][agent-shell 0.25 updates]].
  • [[https://xenodium.com/agent-shell-016-improvements-melpa][agent-shell 0.17 improvements + MELPA]].
  • [[https://xenodium.com/agent-shell-0-5-improvements][agent-shell 0.5 improvements]].
  • [[https://xenodium.com/introducing-agent-shell][Introducing Emacs agent-shell (powered by ACP)]].
  • [[https://xenodium.com/introducing-acpel][Introducing acp.el]].
  • Related projects

=agent-shell= relies on [[https://github.com/xenodium/acp.el][acp.el]] to communicate with agents via ACP ([[https://agentclientprotocol.com/][Agent Client Protocol]]).

We now have a handful of additional packages to extend the =agent-shell= experience:

  • [[https://github.com/xenodium/emacs-skills][emacs-skills]]: Claude Agent skills for Emacs.
  • [[https://github.com/ElleNajt/agent-shell-to-go][agent-shell-to-go]]: Interact with =agent-shell= sessions from your mobile or any other device via Slack.
  • [[https://github.com/Embedded-Focus/agent-circus][agent-circus]]: Run AI coding agents in sandboxed Docker containers.
  • [[https://github.com/cmacrae/agent-shell-sidebar][agent-shell-sidebar]]: A sidebar add-on for =agent-shell=.
  • [[https://github.com/dcluna/agent-shell-bookmark][agent-shell-bookmark]]: Bookmark support for agent-shell sessions.
  • [[https://github.com/gveres/agent-shell-workspace][agent-shell-workspace]]: Dedicated tab-bar workspace for managing multiple =agent-shell= sessions.
  • [[https://github.com/jethrokuan/agent-shell-manager][agent-shell-manager]]: Tabulated view and management of =agent-shell= buffers.
  • [[https://github.com/nineluj/agent-review][agent-review]]: Code review interface for =agent-shell=.
  • [[https://github.com/ultronozm/agent-shell-attention.el][agent-shell-attention.el]]: Mode-line attention tracker for =agent-shell=.
  • [[https://github.com/xenodium/agent-shell-knockknock][agent-shell-knockknock]]: Notifications for =agent-shell= via [[https://github.com/konrad1977/knockknock][knockknock.el]].
  • [[https://github.com/zackattackz/agent-shell-notifications][agent-shell-notifications]]: Desktop notifications for =agent-shell= events.
  • [[https://github.com/ElleNajt/meta-agent-shell][meta-agent-shell]]: Multi-agent coordination system for =agent-shell= with inter-agent communication, task tracking, and project-level dispatching.
  • [[https://github.com/cxa/agent-shell-macext][agent-shell-macext]]: macOS-specific enhancements for =agent-shell=.
  • [[https://github.com/lllShamanlll/agent-shell-org-transcript][agent-shell-org-transcript]]: Org-mode transcripts for =agent-shell= sessions, with org-roam integration.
  • [[https://github.com/eddof13/ob-agent-shell][ob-agent-shell]]: Org Babel backend for executing =agent-shell= source blocks.
  • [[https://github.com/Marx-A00/agent-recall][agent-recall]]: Search, browse, and resume =agent-shell= conversation transcripts.
  • [[https://github.com/lgmoneda/agent-shell-pet][agent-shell-pet]]: Codex-like pets that broadcast agent-shell session states.
  • [[https://github.com/alberti42/agent-shell-math-renderer][agent-shell-math-renderer]]: Render LaTeX math equations as SVGs in =agent-shell=.
  • [[https://github.com/junyi-hou/agent-shell-tramp][agent-shell-tramp]]: Tramp integration for =agent-shell=.
  • [[https://github.com/nohzafk/agent-shell-hud][agent-shell-hud]]: Real-time =agent-shell= status overlay via a floating dashboard.
  • [[https://github.com/timfel/agent-shell-desktop.el][agent-shell-desktop]]: Desktop save mode integration for =agent-shell=. Saves and resumes shells by folder, config, and session id.
  • [[https://github.com/ultronozm/agent-shell-links.el][agent-shell-links.el]]: Bookmarks and Org links for =agent-shell= sessions.
  • [[https://github.com/wandersoncferreira/agent-shell-dashboard][agent-shell-dashboard]]: A landing page for =agent-shell=.
  • [[https://github.com/SreenivasVRao/agent-shell-hq][agent-shell-hq]]: A heads-up display and peek interface for managing multiple =agent-shell= sessions, organized by project.
  • [[https://github.com/Jamie-Cui/agent-shell-permission-transient][agent-shell-permission-transient]]: A compact Transient interface for responding to queued agent-shell permission requests.
  • [[https://github.com/tychoish/agent-shell-queue][agent-shell-queue]]: A flexible prompt/shell queue for =agent-shell= sessions.
  • Articles
  • 20Y: [[https://20y.hu/~slink/journal/agent-shell/index.html][Agentic development workflow in Emacs]]
  • Skye: [[https://skyefreeman.com/blog/2026/04/15/how-im-using-llms-with-emacs][How I'm using LLM's via Emacs]].
  • sincebyte: [[https://neoemacs.com/posts/agent-shell-cursor-agent-cli/][Agent Shell Cursor Agent Cli]].
  • Naputo: [[https://blog.n-daisuke897.com/posts/2026-03-01-agent-shell-session-selection/][How to Select Sessions When Starting the agent-shell ACP Client Running on Emacs]]
  • vandee: [[https://www.vandee.art/blog/2026-01-23-my-agent-practice-with-opencode-in-emacs.html][My Agent Practice with OpenCode in Emacs]].
  • Fedora Project Wiki: [[https://fedoraproject.org/wiki/SIGs/AI-ML#agent-shell][AI/ML Special Interest Group]].
  • Icons

Thanks to [[https://github.com/lobehub/lobe-icons][Lobe Icons]] for the lovely icons.

  • Setup

** External dependencies

*** Claude Agent SDK

For Anthropic's [[https://code.claude.com/docs/en/overview][Claude Agent]] (formerly known as the Claude Code), follow [[https://github.com/agentclientprotocol/claude-agent-acp][claude-agent-acp instructions]], typically something like:

#+begin_src bash npm install -g @agentclientprotocol/claude-agent-acp #+end_src

Note: The =-g= flag is required to install the binary globally so it's available in your PATH. After installation, verify it's available by running =which claude-agent-acp= in your terminal.

Optionally: You may also need [[https://code.claude.com/docs/en/overview][Claude Agent]] itself if you want to use a Claude subscription (run the CLI outside of Emacs at least once to log in to your subscription and then use =agent-shell= from Emacs). Follow Claude Agent's [[https://code.claude.com/docs/en/overview#get-started][get started]] for installation.

*** Codex

For OpenAI's Codex, install [[https://github.com/agentclientprotocol/codex-acp][@agentclientprotocol/codex-acp]] (=npm install -g @agentclientprotocol/codex-acp=) and ensure the =codex-acp= executable is in PATH.

*** Gemini CLI

For Google's [[https://github.com/google-gemini/gemini-cli][Gemini CLI]], be sure to get a recent release supporting the =--experimental-acp= flag.

*** Goose

For Goose CLI, install [[https://goose-docs.ai/docs/getting-started/installation][goose]] and ensure the =goose= executable is in PATH.

*** Grok Build (xAI)

For [[https://docs.x.ai/docs/overview][Grok Build]], install the Grok CLI so =grok= is on =PATH= (the installer typically puts it at =~/.grok/bin=). Authenticate once via the CLI login flow (credentials live in =~/.grok/auth.json=).

Grok Build speaks ACP over stdio:

#+begin_src bash grok agent stdio #+end_src

Optional flags (set via =agent-shell-xai-acp-command=):

#+begin_src bash grok agent -m grok-build stdio grok agent --always-approve stdio #+end_src

See also the [[https://zed.dev/acp/agent/grok-build][Zed ACP registry listing]] for Grok Build.

*** Cursor

For Cursor agent, install the official [[https://cursor.com/docs/cli][Cursor CLI]] and ensure the =agent= executable is in PATH. =agent-shell= uses its official ACP server (=agent acp=).

A recent Cursor CLI is required (the =acp= subcommand was added in 2026). Older CLIs won't expose =agent acp=.

*** Kimi Code CLI

For Kimi Code CLI, install with:

#+begin_src bash curl -L code.kimi.com/install.sh | bash #+end_src

See https://www.kimi.com/code for details.

*** CodeBuddy

For CodeBuddy agent, install the CodeBuddy CLI and ensure ACP mode is available. For example:

#+begin_src bash codebuddy --acp #+end_src

See https://www.codebuddy.ai/docs/zh/ide/Getting-Started/Installation for details.

*** Kiro CLI

For Kiro CLI, install with:

#+begin_src bash curl -fsSL https://cli.kiro.dev/install | bash #+end_src

See https://kiro.dev/docs/cli/acp/ for details.

*** Qwen Code

For Qwen Code, install with:

#+begin_src bash npm install -g @qwen-code/qwen-code@latest #+end_src

See https://github.com/QwenLM/qwen-code for details.

*** Auggie

For Auggie CLI, install with:

#+begin_src bash npm install -g @augmentcode/auggie #+end_src

See https://docs.augmentcode.com/cli/overview for details. *** Mistral Vibe

For Mistral Vibe, install with:

#+begin_src bash uv tool install mistral-vibe #+end_src

See https://github.com/mistralai/mistral-vibe for details.

*** Factory Droid

For Factory Droid, install Droid:

#+begin_src bash curl -fsSL https://app.factory.ai/cli | sh #+end_src

See https://factory.ai for details.

*** Pi

For Pi coding agent, install the =pi-acp= adapter:

#+begin_src bash npm install -g pi-acp #+end_src

See https://github.com/svkozak/pi-acp for details. *** Oh My Pi (=omp=)

For the =omp= agent, install with:

#+begin_src bash bun install -g @oh-my-pi/pi-coding-agent #+end_src

See https://github.com/can1357/oh-my-pi for details.

*** Antigravity

For Antigravity, download the =agy_acp_server= binary for your platform from the [[https://github.com/agentclientprotocol/registry/tree/main/antigravity-acp][ACP registry entry]] and make sure it's on your =PATH= (or set =agent-shell-antigravity-acp-command= to an absolute path).

Alternatively, you can bootstrap the antigravity tool with the following function:

#+begin_src emacs-lisp (defun agent-shell-antigravity-bootstrap (&optional force) "Download and install the latest Antigravity ACP server binary." (interactive "P") (let* ((arch (pcase (car (split-string system-configuration "-")) ((or "x86_64" "amd64") "x86_64") ((or "aarch64" "arm64") "aarch64") (a a))) (os (pcase system-type ('darwin "darwin") ('windows-nt "windows") (_ "linux"))) (platform (format "%s-%s" os arch)) (install-dir (agent-shell-cache-dir "antigravity" platform)) (bin-name (file-name-nondirectory (car agent-shell-antigravity-acp-command))) (bin-path (expand-file-name bin-name install-dir))) (unless (and (not force) (file-executable-p bin-path)) (message "Antigravity: bootstrapping server for %s..." platform) (make-directory install-dir t) (let* ((reg-url "https://raw.githubusercontent.com/agentclientprotocol/registry/main/antigravity-acp/agent.json") (reg (with-temp-buffer (url-insert-file-contents reg-url) (json-parse-buffer :object-type 'alist))) (archive-url (map-nested-elt reg `(distribution binary ,(intern platform) archive))) (zip (expand-file-name "server.zip" install-dir))) (url-copy-file archive-url zip t) (call-process "unzip" nil nil nil "-o" "-q" zip "-d" install-dir) (delete-file zip) (set-file-modes bin-path #o755))) (setq agent-shell-antigravity-acp-command (cons bin-path (cdr agent-shell-antigravity-acp-command))) (message "Antigravity: using ACP server at %s" bin-path) bin-path)) #+end_src

See https://antigravity.google/docs/ide/extensions for details.

*** Opencode + local ollama models

For opencode coding agent, install with:

#+begin_src bash curl -fsSL https://opencode.ai/install | bash #+end_src

See https://opencode.ai/ for details.

For local ollama models, sudo permission is needed to initialize ~ollama.service~. The following will install ollama and a local Qwen2.5:7b model.

#+begin_src bash curl -fsSL https://ollama.com/install.sh | sh ollama pull qwen2.5:7b #+end_src

If you are behind a network proxy, ~ollama pull~ will timeout. You then need to add proxy settings inside ~/etc/systemd/system/ollama.service~

See https://ollama.com/ for details

** Installation

=agent-shell= is powered by built-in =comint-shell=, via [[https://github.com/xenodium/shell-maker][shell-maker]], available on [[https://melpa.org/#/shell-maker][MELPA]].

Both [[https://melpa.org/#/agent-shell][agent-shell]] and its dependency [[https://melpa.org/#/acp][acp.el]] are now available on MELPA.

You can install via:

#+begin_src emacs-lisp (use-package agent-shell :ensure t :ensure-system-package ;; Add agent installation configs here ((claude . "brew install claude-code") (claude-agent-acp . "npm install -g @agentclientprotocol/claude-agent-acp"))) #+end_src

This will automatically install the required dependencies ([[https://melpa.org/#/acp][acp.el]] and [[https://melpa.org/#/shell-maker][shell-maker]]).

*** Optional: image utilities

Pasting images from the clipboard (=agent-shell-send-clipboard-image= or =yank= or =C-y=) and capturing screenshots (=agent-shell-send-screenshot=) rely on external tools. Install the ones for your platform:

| Platform | Clipboard paste | Screenshot capture | |-----------------+------------------------------------------+------------------------------| | macOS | =brew install pngpaste= | =screencapture= (preinstalled) | | Linux (Wayland) | =wl-paste= (e.g. =apt install wl-clipboard=) | =import= (from ImageMagick) | | Linux (X11) | =apt install xclip= | =import= (from ImageMagick) | | Windows | =powershell= | (not bundled) |

Handlers are detected at runtime via =executable-find=. See =agent-shell-clipboard-image-handlers= and =agent-shell-screenshot-command= to customize.

*** Doom Emacs

If you are using Doom Emacs and would like to use the =package!= macro:

#+begin_src emacs-lisp (package! shell-maker) (package! acp) (package! agent-shell) #+end_src

Run =doom sync= and restart.

Include =require= before configuration:

#+begin_src emacs-lisp (require 'acp) (require 'agent-shell) ;; rest of config... #+end_src

** Configuration

Configure authentication for the agent providers you want to use.

*** Environment variables

Pass environment variables to the spawned agent process by customizing the agent-shell-*-environment variable with agent-shell-make-environment-variables. The helper accepts key/value pairs and exports them when the agent starts.

#+begin_src emacs-lisp (setq agent-shell-anthropic-claude-environment (agent-shell-make-environment-variables "ANTHROPIC_API_KEY" (auth-source-pass-get 'secret "anthropic-api-key") "HTTPS_PROXY" "http://proxy.example.com:8080")) #+end_src

**** Inheriting environment variables

By default, the agent process starts with a minimal environment. To inherit environment variables from the parent Emacs process, use the :inherit-env t parameter in agent-shell-make-environment-variables:

#+begin_src emacs-lisp (setenv "ANTHROPIC_API_KEY" (auth-source-pass-get 'secret "anthropic-api-key"))

(setq agent-shell-anthropic-claude-environment (agent-shell-make-environment-variables :inherit-env t)) #+end_src

This ensures that environment variables like PATH, HOME, and others from your Emacs session are available to the agent process, while still allowing you to override or add specific variables.

**** Loading environment variables from files

You can load environment variables from .env files using the :load-env parameter. This supports both single and multiple files:

#+begin_src emacs-lisp ;; Load from a single .env file (setq agent-shell-anthropic-claude-environment (agent-shell-make-environment-variables :load-env "~/.env" "CUSTOM_VAR" "custom_value"))

;; Load from multiple .env files (setq agent-shell-anthropic-claude-environment (agent-shell-make-environment-variables :load-env '("~/.env" ".env.local") :inherit-env t)) #+end_src

The .env files should contain variables in the format KEY=value, with one variable per line. Comments (lines starting with #) and empty lines are ignored.

*** Anthropic Claude

For login-based authentication (default):

#+begin_src emacs-lisp (setq agent-shell-anthropic-authentication (agent-shell-anthropic-make-authentication :login t)) #+end_src

For API key authentication:

#+begin_src emacs-lisp ;; With string (setq agent-shell-anthropic-authentication (agent-shell-anthropic-make-authentication :api-key "your-anthropic-api-key-here"))

;; With function (setq agent-shell-anthropic-authentication (agent-shell-anthropic-make-authentication :api-key (lambda () (auth-source-pass-get 'secret "anthropic-api-key")))) #+end_src

For OAuth token authentication (the =CLAUDE_CODE_OAUTH_TOKEN= we get from =claude setup-token=):

#+begin_src emacs-lisp ;; With string (setq agent-shell-anthropic-authentication (agent-shell-anthropic-make-authentication :oauth "your-oauth-token-here"))

;; With function (setq agent-shell-anthropic-authentication (agent-shell-anthropic-make-authentication :oauth (lambda () (auth-source-pass-get "secret" "anthropic-oauth-token")))) #+end_src

For alternative Anthropic-compatible API endpoints, configure via environment variables:

#+begin_src emacs-lisp (setq agent-shell-anthropic-claude-environment (agent-shell-make-environment-variables "ANTHROPIC_BASE_URL" "https://api.moonshot.cn/anthropic" "ANTHROPIC_MODEL" "kimi-k2-turbo-preview" "ANTHROPIC_SMALL_FAST_MODEL" "kimi-k2-turbo-preview")) #+end_src

*** Antigravity

For login-based authentication (default, Google account):

#+begin_src emacs-lisp (setq agent-shell-antigravity-authentication (agent-shell-antigravity-make-authentication :login t)) #+end_src

For API key authentication:

#+begin_src emacs-lisp ;; With string (setq agent-shell-antigravity-authentication (agent-shell-antigravity-make-authentication :api-key "your-gemini-api-key-here"))

;; With function (setq agent-shell-antigravity-authentication (agent-shell-antigravity-make-authentication :api-key (lambda () (auth-source-pass-get 'secret "gemini-api-key")))) #+end_src

For Gemini Enterprise authentication:

#+begin_src emacs-lisp (setq agent-shell-antigravity-authentication (agent-shell-antigravity-make-authentication :business t)) #+end_src

For Gemini Enterprise Agent Platform authentication:

#+begin_src emacs-lisp (setq agent-shell-antigravity-authentication (agent-shell-antigravity-make-authentication :agent-platform t)) #+end_src

For no authentication (when managed externally):

#+begin_src emacs-lisp (setq agent-shell-antigravity-authentication (agent-shell-antigravity-make-authentication :none t)) #+end_src

*** Google Gemini

For login-based authentication (default):

#+begin_src emacs-lisp (setq agent-shell-google-authentication (agent-shell-google-make-authentication :login t)) #+end_src

For API key authentication:

#+begin_src emacs-lisp ;; With string (setq agent-shell-google-authentication (agent-shell-google-make-authentication :api-key "your-google-api-key-here"))

;; With function (setq agent-shell-google-authentication (agent-shell-google-make-authentication :api-key (lambda () (auth-source-pass-get 'secret "google-api-key")))) #+end_src

For Vertex AI authentication:

#+begin_src emacs-lisp (setq agent-shell-google-authentication (agent-shell-google-make-authentication :vertex-ai t)) #+end_src

*** OpenAI Codex

For login-based authentication (default):

#+begin_src emacs-lisp (setq agent-shell-openai-authentication (agent-shell-openai-make-authentication :login t)) #+end_src

For API key authentication:

#+begin_src emacs-lisp ;; With string (setq agent-shell-openai-authentication (agent-shell-openai-make-authentication :api-key "your-openai-api-key-here"))

;; With function (setq agent-shell-openai-authentication (agent-shell-openai-make-authentication :api-key (lambda () (auth-source-pass-get 'secret "openai-api-key")))) #+end_src

*** Goose

By default, authentication is handled by Goose's built-in configuration. This needs no =agent-shell= configuration.

Optionally, pass an OpenAI API key from =agent-shell= instead:

#+begin_src emacs-lisp ;; With string (setq agent-shell-goose-authentication (agent-shell-make-goose-authentication :openai-api-key "your-openai-api-key-here"))

;; With function (setq agent-shell-goose-authentication (agent-shell-make-goose-authentication :openai-api-key (lambda () (auth-source-pass-get 'secret "openai-api-key")))) #+end_src

*** Qwen Code

For OAuth login-based authentication:

#+begin_src emacs-lisp (setq agent-shell-qwen-authentication (agent-shell-qwen-make-authentication :login t)) #+end_src

For an OpenAI-compatible provider (for example OpenRouter), pass the API key and set the base URL and model via =agent-shell-qwen-environment=:

#+begin_src emacs-lisp ;; With string (setq agent-shell-qwen-authentication (agent-shell-qwen-make-authentication :openai-api-key "your-openai-api-key-here"))

;; With function (setq agent-shell-qwen-authentication (agent-shell-qwen-make-authentication :openai-api-key (lambda () (auth-source-pass-get 'secret "openrouter-api-key"))))

(setq agent-shell-qwen-environment (agent-shell-make-environment-variables "OPENAI_BASE_URL" "https://openrouter.ai/api/v1" "OPENAI_MODEL" "x-ai/grok-4.3")) #+end_src

*** Cursor

By default authentication is handled externally: run =agent login= once outside Emacs and agent-shell uses that existing login (it sends no ACP authenticate request). This needs no configuration.

Optionally, have agent-shell drive login-based authentication (=cursor_login=):

#+begin_src emacs-lisp (setq agent-shell-cursor-authentication (agent-shell-cursor-make-authentication :login t)) #+end_src

For API key authentication (passed via the =CURSOR_API_KEY= environment variable):

#+begin_src emacs-lisp ;; With string (setq agent-shell-cursor-authentication (agent-shell-cursor-make-authentication :api-key "your-cursor-api-key-here"))

;; With function (setq agent-shell-cursor-authentication (agent-shell-cursor-make-authentication :api-key (lambda () (auth-source-pass-get 'secret "cursor-api-key")))) #+end_src

For auth token authentication (passed via the =CURSOR_AUTH_TOKEN= environment variable):

#+begin_src emacs-lisp (setq agent-shell-cursor-authentication (agent-shell-cursor-make-authentication :auth-token "your-cursor-auth-token")) #+end_src

For no authentication (already authenticated externally):

#+begin_src emacs-lisp (setq agent-shell-cursor-authentication (agent-shell-cursor-make-authentication :none t)) #+end_src

*** Auggie

For login-based authentication (default):

#+begin_src emacs-lisp (setq agent-shell-auggie-authentication (agent-shell-make-auggie-authentication :login t)) #+end_src

For no authentication (when using alternative authentication methods):

#+begin_src emacs-lisp (setq agent-shell-auggie-authentication (agent-shell-make-auggie-authentication :none t)) #+end_src

*** Mistral Vibe

For API key authentication:

#+begin_src emacs-lisp ;; With string (setq agent-shell-mistral-authentication (agent-shell-mistral-make-authentication :api-key "your-mistral-api-key-here"))

;; With function (reusing the API key configured in vibe) (setq agent-shell-mistral-authentication (agent-shell-mistral-make-authentication :api-key (lambda () (string-trim (shell-command-to-string "source ~/.vibe/.env; echo $MISTRAL_API_KEY"))))) #+end_src

*** Opencode + local ollama Qwen2.5

If ~opencode~ is not found by ~agent-shell~, you can add it to the search path

#+begin_src emacs-lisp (use-package agent-shell :ensure t :config (add-to-list 'exec-path "~/.opencode/bin/")) #+end_src

To register the local Qwen2.5:7b model in opencode, two files needs to be edited:

~/.config/opencode/opencode.json~ #+BEGIN_SRC js { "$schema": "https://opencode.ai/config.json", "permission": { "edit": "ask", "bash": "ask", "webfetch": "allow" }, "provider": { "ollama": { "name": "qwen2.5:7b", "npm": "@ai-sdk/openai-compatible", "options": { "baseURL": "http://localhost:11434/v1" }, "models": { "qwen2.5:7b": { "name": "Qwen2.5 7b" } } } } } #+END_SRC

and a dummy auth file ~/.local/share/opencode/auth.json~

#+begin_src js { "ollama": { "type": "api", "key": "ollama" } } #+end_src

Huge thanks for /gdindi/ for finding and and describing this in https://github.com/xenodium/agent-shell/issues/526

*** Customizing Available Agents

By default, =agent-shell= includes configurations for all supported agents (Claude Agent, Gemini CLI, Codex, Goose, Grok Build, Cursor, CodeBuddy, Qwen Code, and Auggie). You can customize which agents are available through the =agent-shell-agent-configs= variable.

** Usage

*** Quick Start

=M-x agent-shell= - Start or reuse any of the known agents.

You can select and start any of the known agent shells (see =agent-shell-agent-configs=) via the =agent-shell= interactive command and enables reusing existing shells when available. With a prefix argument (=C-u M-x agent-shell=), it forces starting a new shell session, thus instantiating multiple agent shells.

*** Viewport interaction

Viewport is an alternative interface for composing prompts and viewing one request/response interaction at a time. It uses a separate buffer named after its associated shell with =" [viewport]"= appended. This buffer switches between =agent-shell-viewport-edit-mode= while composing and =agent-shell-viewport-view-mode= while reading.

Use one of these entry points to create and initialize the viewport buffer:

  • From an agent shell, type =C-c C-o= (=agent-shell-other-buffer=). At the live prompt this opens the viewport for composing; from an earlier interaction it opens the viewport at that interaction. Use =C-c C-o= again to return to the shell (=o= also works from viewport view mode).
  • Run =M-x agent-shell-prompt-compose= to compose in a dedicated buffer. With the default configuration, =C-c C-c= sends or queues the prompt and dismisses the compose window.
  • Set =agent-shell-prefer-viewport-interaction= to make the normal =agent-shell= command and related commands prefer the viewport:

#+begin_src emacs-lisp (setopt agent-shell-prefer-viewport-interaction t) #+end_src

In edit mode, =C-c C-c= sends or queues the prompt and switches to view mode when viewport interaction is preferred. Use =C-u C-c C-c= to send or queue while keeping the compose buffer open, =C-c C-p= to peek at the latest interaction without losing the draft, =C-c C-k= to cancel, and =C-c C-h= for help.

In view mode, use =r= to compose a reply, =R= to quote the response in a reply, =b= / =f= to move between interactions, =p= / =n= to move between items, =?= for help, and =q= to bury the viewport.

#+begin_quote [!NOTE]

Do not invoke =agent-shell-viewport-edit-mode= or =agent-shell-viewport-view-mode= directly in an agent shell buffer. They are major modes installed by the entry points above on the separate viewport buffer, not commands for converting the shell buffer. #+end_quote

*** Steering a running turn

A prompt sent while the agent is working is queued and submitted once the turn ends. Agents that support steering can take it into the turn already running instead, so a wrong direction can be corrected without waiting for it to finish. Steering is an ACP extension (=_session/steering=) rather than part of the spec, advertised by the agent at initialization: the Claude and Codex packages implement it, other agents keep queueing.

Steering is always explicit. =M-x agent-shell-prompt-queue= queues, as it always has. =M-x agent-shell-prompt-steer= steers the running turn, and errors when the agent cannot steer. With no turn running there is nothing to steer into, so it submits the prompt instead. When the agent declines a steer, the running turn is interrupted and the shell says so, rather than letting the agent carry on in a direction you believe you already corrected.

What the agent does with the steered prompt is up to the agent: Claude interrupts what it is generating and responds to it, while Codex finishes the message in flight first.

Steering is not additive. An agent that interrupts may drop the instruction it was working on, so a steer can replace what the agent was already doing rather than adding to it. Queue instead when the agent should finish first.

*** Specific Agent Commands

Start a specific agent shell session directly:

  • =M-x agent-shell-antigravity-start-agent= - Start an Antigravity agent session
  • =M-x agent-shell-anthropic-start-claude-code= - Start a Claude Agent session
  • =M-x agent-shell-auggie-start-agent= - Start an Auggie agent session
  • =M-x agent-shell-codebuddy-start-agent= - Start a CodeBuddy agent session
  • =M-x agent-shell-openai-start-codex= - Start a Codex agent session
  • =M-x agent-shell-google-start-gemini= - Start a Gemini agent session
  • =M-x agent-shell-goose-start-agent= - Start a Goose agent session
  • =M-x agent-shell-xai-start-grok= - Start a Grok Build (xAI) agent session
  • =M-x agent-shell-cursor-start-agent= - Start a Cursor agent session
  • =M-x agent-shell-kiro-start-agent= - Start a Kiro CLI agent session
  • =M-x agent-shell-mistral-start-vibe= - Start a Mistral Vibe agent session
  • =M-x agent-shell-qwen-start= - Start a Qwen Code agent session
  • =M-x agent-shell-droid-start-agent= - Start a Factory Droid agent session
  • =M-x agent-shell-pi-start-agent= - Start a Pi coding agent session

*** Setting a default agent for all new shells

You can set a default agent to use for all new shells started via =agent-shell= like so:

#+begin_src emacs-lisp (setq agent-shell-preferred-agent-config (agent-shell-anthropic-make-claude-code-config)) #+end_src

Or by identifier (e.g. Grok Build):

#+begin_src emacs-lisp (setq agent-shell-preferred-agent-config 'grok-build) #+end_src

*** Configuring MCP servers

You can configure MCP servers directly via =agent-shell=. This allows you to avoid having to repeat configurations across every agent that you use.

#+begin_src emacs-lisp (setq agent-shell-mcp-servers '(((name . "notion") (type . "http") (headers . []) (url . "https://mcp.notion.com/mcp")))) #+end_src

** Running agents in Devcontainers / Docker containers (Experimental)

=agent-shell= provides rudimentary support for running agents and shell commands in containers.

Use =agent-shell-command-prefix= to prefix the command that starts the agent, or a shell command that should be run so it is executed inside the container.

*** Static command list

#+begin_src emacs-lisp (setq agent-shell-command-prefix '("devcontainer" "exec" "--workspace-folder" ".")) #+end_src

*** Function-based configuration

For dynamic per-agent containers, provide a function that takes the current agent-shell buffer and returns the command list:

#+begin_src emacs-lisp (setq agent-shell-command-prefix (lambda (buffer) (let ((config (agent-shell-get-config buffer))) (pcase (map-elt config :identifier) ('claude-code '("docker" "exec" "claude-dev" "--")) ('gemini-cli '("docker" "exec" "gemini-dev" "--")) (_ '("devcontainer" "exec" ".")))))) #+end_src

*** Per-session containers

You can use different containers for different shell sessions, even of the same agent type:

#+begin_src emacs-lisp (setq agent-shell-command-prefix (lambda (buffer) ;; Different container based on project (if (string-match "project-a" (buffer-name buffer)) '("docker" "exec" "project-a-dev" "--") '("docker" "exec" "project-b-dev" "--")))) #+end_src

Note that any =:environment-variables= you may have passed to =acp-make-client= will not apply to the agent process running inside the container. It's expected to inject environment variables by means of your devcontainer configuration / Dockerfile.

Next, set an =agent-shell-path-resolver-function= that resolves container paths in the local working directory, and vice versa. Agent shell provides the =agent-shell-devcontainer-resolve-path= function for use with devcontainers specifically: it reads the =workspaceFolder= specified in =.devcontainer/devcontainer.json=, or uses the default value of =/workspaces/<repository-name>= otherwise.

#+begin_src emacs-lisp (setq agent-shell-path-resolver-function #'agent-shell-devcontainer-resolve-path) #+end_src

Note that this allows the agent to access files on your local file-system. While care has been taken to restrict access to files in the local working directory, it's probably possible for a malicious agent to circumvent this restriction.

Optional: to prevent the agent running inside the container to access your local file-system altogether and to have it read/modify files inside the container directly, in addition to setting the resolver function, disable the "read/write text file" client capabilities:

#+begin_src emacs-lisp (setq agent-shell-text-file-capabilities nil) #+end_src

*** Data storage location

By default, agent-shell stores per-project data (transcripts, screenshots, etc.) under a =.agent-shell/= directory in the project root, and automatically adds that directory to =.gitignore= the first time it is created. This is a one-time operation: removing the entry from =.gitignore= will not cause it to be re-added. If you configure =agent-shell-dot-subdir-function= to store data outside the project =.agent-shell/= directory, agent-shell will not update the project's =.gitignore=.

You can change where this data is stored by setting =agent-shell-dot-subdir-function= to a custom function. The function receives one argument, SUBDIR (e.g. ="screenshots"=), and must return the absolute path to that subdirectory (without creating it).

For example, to store data under =user-emacs-directory= instead of the project tree, flattening the project path into a directory name:

#+begin_src emacs-lisp (defun my/agent-shell-dot-subdir (subdir) (let* ((cwd (string-remove-suffix "/" (agent-shell-cwd))) (sanitized (replace-regexp-in-string "/" "-" (string-remove-prefix "/" cwd)))) (expand-file-name subdir (locate-user-emacs-file (concat "agent-shell/" sanitized)))))

(setopt agent-shell-dot-subdir-function #'my/agent-shell-dot-subdir) #+end_src

This stores data at a path like =~/.emacs.d/agent-shell/home-user-src-myproject/screenshots/=.

*** Screenshots from clipboard

You can send a screenshot from your clipboard to your shell with =agent-shell-send-clipboard-image=. Call with =C-u= to =agent-shell-send-clipboard-image-to= to select from your shells. agent-shell relies on external programs to write an image from clipboard to file as configured in =agent-shell-clipboard-image-handlers=. Preconfigured handlers are - =wl-paste= for Wayland desktops, - =xclip= for Xorg, - =pngpaste= for MacOS. - =powershell= for Windows.

*** Inhibiting minor modes during file writes

Some minor modes (for example, =aggressive-indent-mode=) can interfere with an agent's edits. Agent Shell can temporarily disable selected per-buffer minor modes while applying edits.

#+begin_src emacs-lisp (setopt agent-shell-write-inhibit-minor-modes '(aggressive-indent-mode)) #+end_src

*** Keeping the system awake during long turns

Long agent turns can outlast the system idle-sleep timeout, suspending the machine (and the agent) before the turn completes. On Emacs 31.1 or later, =agent-shell-inhibit-system-sleep= (enabled by default) keeps the system awake for the duration of each turn and releases the block once the turn finishes, so the system is only kept awake while there is work in progress (the display is still allowed to blank). This relies on the built-in [[https://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/system-sleep.el][=system-sleep=]] library and has no effect on earlier Emacs versions. It does not prevent "hard" sleep such as closing a laptop lid.

To turn it off:

#+begin_src emacs-lisp (setopt agent-shell-inhibit-system-sleep nil) #+end_src

All of the above settings can be applied on a per-project basis using [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html][directory-local variables]].

** Key bindings

  • =RET= - Submits prompt.
  • =M-J= - Iserts newline.
  • =C-c C-c= - Interrupt current agent operation
  • =TAB and Shift-TAB= - Navigate interactive elements

To customize =RET= binding behaviour, you can use something like:

#+begin_src emacs-lisp :lexical no (use-package agent-shell :bind (:map agent-shell-mode-map ("RET" . newline) ("M-RET" . shell-maker-submit))) #+end_src

Or if you prefer C-c C-c to send and C-c C-k to interrupt, use the following:

#+begin_src emacs-lisp :lexical no (use-package agent-shell :bind (:map agent-shell-mode-map ("RET" . newline) ("C-c C-c" . shell-maker-submit) ("C-c C-k" . agent-shell-interrupt))) #+end_src

*** Session controls

When the active agent advertises the corresponding session option, you can switch it from the shell buffer:

  • =C-c C-v= - Set model.
  • =C-c C-m= - Set session mode.
  • =C-c C-t= - Set thought level (reasoning effort).
  • =C-<tab>= - Cycle session mode.

The current selections are shown in the header right after the agent name; click any segment to open a popup menu. The thought level segment only appears for models that expose it (e.g. Claude Sonnet/Opus with effort levels; Codex's reasoning_effort).

From the viewport (=agent-shell-viewport-view-mode= / =agent-shell-viewport-edit-mode=), the same controls are bound to:

  • View mode: =v= (model), =s= (mode), =t= (thought level).
  • Edit mode: =C-c C-v=, =C-c C-m=, =C-c C-t=.

*** Evil Evil users may want to rebind ~RET~ for inserting a new line in =insert mode= and sending the prompt in =normal mode=.

Also, when viewing diffs (before accepting changes) it may be annoying having to enter =insert mode= to send keys (~y/n/p/q/etc~). If this is your case, you can make these buffers start in Emacs mode (you can always go to Evil modes if you need to with ~C-z~). #+begin_src emacs-lisp (use-package agent-shell :config ;; Evil state-specific RET behavior: insert mode = newline, normal mode = send (evil-define-key 'insert agent-shell-mode-map (kbd "RET") #'newline) (evil-define-key 'normal agent-shell-mode-map (kbd "RET") #'comint-send-input)

;; Configure agent-shell-diff buffers to start in Emacs state (add-hook 'diff-mode-hook (lambda () (when (string-match-p "\\agent-shell-diff\\" (buffer-name)) (evil-emacs-state))))) #+end_src

  • Customizations

#+BEGIN_SRC emacs-lisp :results table :colnames '("Custom variable" "Description") :exports results (let ((rows)) (mapatoms (lambda (symbol) (when (and (string-match "^agent-shell" (symbol-name symbol)) (custom-variable-p symbol)) (push `(,symbol ,(car (split-string (or (documentation-property symbol 'variable-documentation) (get (indirect-variable symbol) 'variable-documentation) (get symbol 'variable-documentation) "") "\n"))) rows)))) (sort rows (lambda (a b) (string< (symbol-name (car a)) (symbol-name (car b)))))) #+END_SRC

#+RESULTS: | Custom variable | Description | |-----------------------------------------------+---------------------------------------------------------------------------------| | agent-shell-activity-group-expand-by-default | When activity group sections should be expanded. | | agent-shell-agent-configs | The known agent configurations. | | agent-shell-anthropic-authentication | Configuration for Anthropic authentication. | | agent-shell-anthropic-claude-acp-command | Command and parameters for the Anthropic Claude client. | | agent-shell-anthropic-claude-environment | Environment variables for the Anthropic Claude client. | | agent-shell-anthropic-default-model-id | Default Anthropic model ID. | | agent-shell-anthropic-default-session-mode-id | Default Anthropic session mode ID. | | agent-shell-antigravity-acp-command | Command and parameters for the Antigravity ACP server. | | agent-shell-antigravity-authentication | Configuration for Antigravity authentication. | | agent-shell-antigravity-environment | Environment variables for the Antigravity ACP server. | | agent-shell-artist-mode-hook | Hook run after entering or leaving ‘agent-shell-artist-mode’. | | agent-shell-auggie-acp-command | Command and parameters for the Auggie client. | | agent-shell-auggie-authentication | Configuration for Auggie authentication. | | agent-shell-auggie-environment | Environment variables for the Auggie client. | | agent-shell-buffer-name-format | Format to use when generating agent shell buffer names. | | agent-shell-busy-indicator-frames | Frames for the busy indicator animation. | | agent-shell-chat-mode-enabled | Whether a new agent shell enables ‘agent-shell-chat-mode’ by default. | | agent-shell-chat-mode-hook | Hook run after entering or leaving ‘agent-shell-chat-mode’. | | agent-shell-cline-acp-command | Command and parameters for the Cline agent client. | | agent-shell-cline-default-model-id | Default Cline model ID. | | agent-shell-cline-default-session-mode-id | Default Cline session mode ID. | | agent-shell-cline-environment | Environment variables for the Cline agent client. | | agent-shell-clipboard-image-handlers | Handlers for saving clipboard images to a file. | | agent-shell-codebuddy-acp-command | Command and parameters for the CodeBuddy agent client. | | agent-shell-codebuddy-environment | Environment variables for the CodeBuddy agent client. | | agent-shell-command-prefix | Prefix to apply when executing agent commands and shell commands. | | agent-shell-completion-mode-hook | Hook run after entering or leaving ‘agent-shell-completion-mode’. | | agent-shell-confirm-interrupt | Whether to prompt for confirmation before interrupting. | | agent-shell-container-command-runner | Prefix to apply when executing agent commands and shell commands. | | agent-shell-context-sources | Sources to consider when determining C-c C-w automatic context. | | agent-shell-cursor-acp-command | Command and parameters for the Cursor agent client. | | agent-shell-cursor-authentication | Configuration for Cursor authentication. | | agent-shell-cursor-environment | Environment variables for the Cursor agent client. | | agent-shell-cwd-function | When non-nil, a function called to determine the shell’s CWD. | | agent-shell-display-action | Display action for agent shell buffers. | | agent-shell-dot-subdir-function | Function used by ‘agent-shell--dot-subdir’ to resolve subdirectory paths. | | agent-shell-droid-acp-command | Command and parameters for the Factory Droid ACP client. | | agent-shell-droid-authentication | Configuration for Factory Droid authentication. | | agent-shell-droid-default-model-id | Default Droid AI model ID. | | agent-shell-droid-default-reasoning-effort | Default reasoning effort. | | agent-shell-droid-default-session-mode-id | Default Droid AI session mode ID. | | agent-shell-droid-environment | Environment variables for the Factory Droid ACP client. | | agent-shell-embed-file-size-limit | Maximum file size in bytes for embedding with ContentBlock::Resource. | | agent-shell-file-completion-enabled | Non-nil automatically enables file completion when starting shells. | | agent-shell-file-display-action | Display action for files opened from a link, image, or ‘@file’ mention. | | agent-shell-github-acp-command | Command and parameters for the GitHub Copilot agent client. | | agent-shell-github-default-model-id | Default GitHub Copilot model ID. | | agent-shell-github-default-session-mode-id | Default GitHub Copilot session mode ID. | | agent-shell-github-environment | Environment variables for the GitHub Copilot agent client. | | agent-shell-google-authentication | Configuration for Google authentication. | | agent-shell-google-gemini-acp-command | Command and parameters for the Gemini client. | | agent-shell-google-gemini-environment | Environment variables for the Google Gemini client. | | agent-shell-goose-acp-command | Command and parameters for the Goose client. | | agent-shell-goose-authentication | Configuration for Goose authentication. | | agent-shell-goose-environment | Environment variables for the Goose client. | | agent-shell-header-style | Style for agent shell buffer headers. | | agent-shell-hermes-acp-command | Command and parameters for the Hermes agent client. | | agent-shell-hermes-default-session-mode-id | Default ACP session mode for the Hermes agent. | | agent-shell-hermes-environment | Environment variables for the Hermes agent client. | | agent-shell-highlight-blocks | Whether or not to highlight source blocks. | | agent-shell-inhibit-system-sleep | Non-nil to keep the system awake while an agent is busy. | | agent-shell-kimi-acp-command | Command and parameters for the Kimi Code CLI client. | | agent-shell-kimi-default-model-id | Default Kimi model ID. | | agent-shell-kimi-default-session-mode-id | Default Kimi Code session mode ID. | | agent-shell-kimi-environment | Environment variables for the Kimi Code CLI client. | | agent-shell-kiro-acp-command | Command and parameters for the Kiro CLI client. | | agent-shell-kiro-default-model-id | Default Kiro model ID. | | agent-shell-kiro-default-session-mode-id | Default Kiro session mode ID. | | agent-shell-kiro-environment | Environment variables for the Kiro CLI client. | | agent-shell-list-edit-mode-hook | Hook run after entering or leaving ‘agent-shell-list-edit-mode’. | | agent-shell-markdown-render-function | Function called to render markdown in the current narrowed buffer. | | agent-shell-mcp-servers | List of MCP servers to initialize when creating a new session. | | agent-shell-mistral-acp-command | Command and parameters for the Mistral Vibe client. | | agent-shell-mistral-authentication | Configuration for Mistral AI authentication. | | agent-shell-mistral-default-model-id | Default Mistral AI model ID. | | agent-shell-mistral-default-session-mode-id | Default Mistral AI session mode ID. | | agent-shell-mistral-environment | Environment variables for the Mistral Vibe client. | | agent-shell-mock-agent-acp-command | Command and parameters for the mock ACP agent. | | agent-shell-omp-acp-command | Command and parameters for the Oh My Pi (omp) ACP client. | | agent-shell-omp-environment | Environment variables for the Oh My Pi (omp) client. | | agent-shell-openai-authentication | Configuration for OpenAI authentication. | | agent-shell-openai-codex-acp-command | Command and parameters for the OpenAI Codex client. | | agent-shell-openai-codex-environment | Environment variables for the OpenAI Codex client. | | agent-shell-openai-default-model-id | Default Codex model ID. | | agent-shell-openai-default-session-mode-id | Default Codex session mode ID. | | agent-shell-opencode-acp-command | Command and parameters for the OpenCode client. | | agent-shell-opencode-authentication | Configuration for OpenCode authentication. | | agent-shell-opencode-default-model-id | Default OpenCode model ID. | | agent-shell-opencode-default-session-mode-id | Default OpenCode session mode ID. | | agent-shell-opencode-environment | Environment variables for the OpenCode client. | | agent-shell-outgoing-request-decorator | Function to decorate outgoing ACP requests before they are sent. | | agent-shell-path-resolver-function | Function for resolving remote paths on the local file-system, and vice versa. | | agent-shell-permission-icon | Icon displayed when shell commands require permission to execute. | | agent-shell-pi-acp-command | Command and parameters for the Pi ACP client. | | agent-shell-pi-environment | Environment variables for the Pi client. | | agent-shell-prefer-viewport-interaction | Non-nil makes ‘agent-shell’ prefer viewport interaction over shell interaction. | | agent-shell-preferred-agent-config | Default agent to use for all new shells. | | agent-shell-prompt-bar-input-mode-hook | Hook run after entering or leaving ‘agent-shell-prompt-bar-input-mode’. | | agent-shell-prompt-bar-mode | Non-nil if Agent-Shell-Prompt-Bar mode is enabled. | | agent-shell-prompt-bar-mode-hook | Hook run after entering or leaving ‘agent-shell-prompt-bar-mode’. | | agent-shell-qwen-acp-command | Command and parameters for the Qwen Code client. | | agent-shell-qwen-authentication | Configuration for Qwen Code authentication. | | agent-shell-qwen-environment | Environment variables for the Qwen Code client. | | agent-shell-screenshot-command | The program to use for capturing screenshots. | | agent-shell-section-functions | Abnormal hook run after overlays are applied (experimental). | | agent-shell-session-choices-function | Function to transform the choices offered when starting a shell. | | agent-shell-session-restore-verbosity | How much prior context to show when restoring a session. | | agent-shell-session-strategy | How to handle sessions when starting a new shell. | | agent-shell-show-busy-indicator | Non-nil to show the busy indicator animation in the header and mode line. | | agent-shell-show-config-icons | Whether to show icons in agent config selection. | | agent-shell-show-context-usage-indicator | Whether and how to show the context usage indicator. | | agent-shell-show-session-id | Non-nil to display the session ID in the header and session selection. | | agent-shell-show-usage-at-turn-end | Whether to display usage information when agent turn ends. | | agent-shell-show-welcome-message | Non-nil to show welcome message. | | agent-shell-status-kind-label-function | Function to render status and kind labels. | | agent-shell-text-file-capabilities | Whether agents are initialized with read/write text file capabilities. | | agent-shell-thought-process-expand-by-default | Whether thought process sections should be expanded by default. | | agent-shell-thought-process-icon | Icon displayed during the AI’s thought process. | | agent-shell-tool-use-expand-by-default | Whether tool use sections should be expanded by default. | | agent-shell-transcript-file-path-function | Function to generate the full transcript file path. | | agent-shell-ui-mode-hook | Hook run after entering or leaving ‘agent-shell-ui-mode’. | | agent-shell-user-message-expand-by-default | Whether user message sections should be expanded by default. | | agent-shell-viewport-dismiss-on-send | Non-nil dismisses the viewport compose window after sending. | | agent-shell-write-inhibit-minor-modes | List of minor mode commands to inhibit during ‘fs/write_text_file’ edits. | | agent-shell-xai-acp-command | Command and parameters for the Grok Build ACP client. | | agent-shell-xai-default-model-id | Default Grok Build model ID. | | agent-shell-xai-default-session-mode-id | Default Grok Build session mode ID. | | agent-shell-xai-enviro

🎯 aiskill88 AI 点评 A 级 2026-05-20

创新的Emacs集成方案,直接在编辑器中实现AI代理交互。代码质量好、社区活跃,是Emacs用户的优秀生产力增强工具。

📚 实用指南(长尾问题)
适合谁
  • 需要让 Claude / Cursor 操作本地工具的 AI 工程师
  • 构建多智能体协作系统的 Agent 开发者
  • 构建企业知识库 / RAG 检索应用的团队
最佳实践
  • 配置 MCP 服务器时建议使用 stdio 传输 + JSON-RPC,避免暴露公网
  • 生产部署优先使用 Docker Compose 隔离依赖,并挂载 volume 持久化数据
  • Agent 任务先做 dry-run 验证工具调用链,再开启自主执行
常见错误
  • API key 直接提交到 git 仓库(请用 .env 并加入 .gitignore)
  • MCP 配置路径拼错或权限不足,重启 Claude Desktop 才生效
  • 容器内无法访问宿主机 localhost — 使用 host.docker.internal
部署方案
  • Docker:agent-shell 提供官方镜像,docker compose up 一键启动
  • CLI:直接 npm install -g / pip install,命令行调用
  • 云端托管:可放在 Vercel / Railway / Fly.io 等 PaaS 平台
相关搜索
agent-shell 中文教程agent-shell 安装报错怎么办agent-shell MCP 配置agent-shell Docker 部署agent-shell Agent 工作流agent-shell 与同类工具对比agent-shell 最佳实践agent-shell 适合谁用

⚡ 核心功能

👥 适合谁
  • 需要让 Claude / Cursor 操作本地工具的 AI 工程师
  • 构建多智能体协作系统的 Agent 开发者
  • 构建企业知识库 / RAG 检索应用的团队
⭐ 最佳实践
  • 配置 MCP 服务器时建议使用 stdio 传输 + JSON-RPC,避免暴露公网
  • 生产部署优先使用 Docker Compose 隔离依赖,并挂载 volume 持久化数据
  • Agent 任务先做 dry-run 验证工具调用链,再开启自主执行
⚠️ 常见错误
  • API key 直接提交到 git 仓库(请用 .env 并加入 .gitignore)
  • MCP 配置路径拼错或权限不足,重启 Claude Desktop 才生效
  • 容器内无法访问宿主机 localhost — 使用 host.docker.internal

👥 适合人群

AI 技术爱好者研究人员和学生开发者和工程师技术创业者

🎯 使用场景

  • 本地部署运行,保护数据隐私,满足合规要求
  • 自定义集成到现有系统,扩展技术栈能力
  • 作为开源基础组件进行商业化二次开发

⚖️ 优点与不足

✅ 优点
  • +GPL-3.0 协议,可免费商用
  • +完全开源免费,无授权费用
  • +本地部署,数据完全自主可控
  • +开发者社区支持,遇问题可查可问
⚠️ 不足
  • 安装和初始配置可能需要一定技术基础
  • 功能完整性通常不如成熟商业产品
  • 技术支持主要依赖开源社区,响应速度不稳定
⚠️ 使用须知

AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。

建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。

📄 License 说明

⚠️ GPL 3.0 — 强 Copyleft,衍生作品须开源,含专利保护条款,不可闭源使用。

🔗 相关工具推荐

📚 相关教程推荐
📰 相关 AI 新闻
🍿 AI 圈相关吃瓜
🗺️ 相关解决方案
🧩 你可能还需要
基于当前 Skill 的能力图谱,自动补全的工具组合

❓ 常见问题 FAQ

需要Emacs编辑器、Claude API密钥及网络连接
💡 AI Skill Hub 点评

经综合评估,Agent Shell 在AI工具赛道中表现稳健,质量优秀。如果你已有明确的使用需求,可以直接上手体验;如果还在评估阶段,建议对比同类工具后再做决策。

📚 深入学习 Agent Shell
查看分步骤安装教程和完整使用指南,快速上手这款工具
🌐 原始信息
原始名称 agent-shell
原始描述 开源AI工作流:A native Emacs buffer to interact with LLM agents powered by ACP。⭐1.2k · Emacs Lisp
Topics EmacsAI工作流LLM代理Claude集成代码生成
GitHub https://github.com/xenodium/agent-shell
License GPL-3.0
语言 Emacs Lisp
🔗 原始来源
🐙 GitHub 仓库  https://github.com/xenodium/agent-shell 🌐 官方网站  https://xenodium.com

收录时间:2026-05-19 · 更新时间:2026-05-30 · License:GPL-3.0 · AI Skill Hub 不对第三方内容的准确性作法律背书。

📺 订阅 AI Skill Hub Daily Telegram 频道
每天 8 条精选 AI Skill、MCP、Agent 与自动化工具推送
加入频道 →