agent-shell

title
agent-shell
type
toolbox
summary
Native Emacs mode for ACP-speaking coding agents, with one buffer interface across every agent
tags
emacs, agentic-coding, acp, elisp
language
Emacs Lisp
license
GPL-3.0
created
2026-07-29
updated
2026-07-29

agent-shell is a native Emacs mode for talking to coding agents over ACP, the Agent Client Protocol. Because the protocol does the abstracting, one buffer interface covers every agent that speaks it, and adding a new agent is a config entry rather than a new UI. It is written and maintained by xenodium, working solo.

The source for this page is the 0.63 release-notes post from 22 July 2026, so the feature list below is a snapshot: everything named as a variable or command is version-specific and worth checking against the repo before relying on it. The durable claims are the ACP foundation, the vendor-neutral stance, and the single-maintainer reality.

What it does

Agents are configured per kind, each with its own launch command and options. As of 0.63 the roster gained Oh My Pi (omp, see oh-my-pi) and xAI's Grok Build, alongside Claude, Cursor, Codex, Cline, Goose, Qwen and Copilot. Several of those entries changed in the same release: Cursor moved to the official Cursor CLI (agent acp, a subcommand only added in 2026, so an old CLI will not work), Codex moved to @agentclientprotocol/codex-acp, Claude regained rendering of thinking output after its ACP server started omitting it by default, Cline gained defcustoms for a default model and session mode, Goose stopped requiring an OpenAI key, and Qwen got explicit handling for OpenAI-compatible keys. That churn is the cost of tracking a dozen third-party ACP servers.

agent-shell-preferred-agent-config controls startup: set it to an identifier such as 'claude-code to skip the picker entirely, or to '(preselect . claude-code) to keep the picker with that agent as the default. agent-shell-session-choices-function customizes which options the new-shell prompt offers.

The rendering side is where most of 0.63 went. Tool calls and thinking are now grouped under a collapsed "Activity" section, since a session with heavy tool use is otherwise unreadable; agent-shell-activity-group-expand-by-default restores the chatty behavior, and agent-shell-activity-group-header-label-function picks between descriptive, count and tally headers. The markdown renderer introduced in 0.55 became extensible through agent-shell-markdown-render-functions, so third-party packages can claim specific constructs — the first integration renders LaTeX math as SVG. Theming moved into agent-shell-faces.el and agent-shell-markdown.el. Agent-supplied images render inline whether base64, remote URL, or a resource_link/resource content block, with audio and other binaries falling back to external links. Diff sections summarize added and removed lines in the heading, RET in a diff jumps to the file location the change would apply to, and multi-diff permission requests are supported.

Smaller pieces: MCP servers can be attached per agent kind through the config's :mcp-servers field; notifications arriving outside the normal prompt request/response turn now render instead of being dropped, with a per-agent adapter mechanism (Cursor first) to preprocess them; agent-shell-narrow-to-block narrows to the most recent N blocks; three copy commands pull markdown, the source block at point, or the link URL at point out of the buffer; the viewport can dismiss on send, keep queuing requests through C-u C-c C-c, and preserve an in-progress prompt across history navigation. agent-shell-artist-insert-text-drawing lets you sketch a text drawing into a prompt.

One entry is a genuine platform interaction rather than a UI tweak: agent-shell now keeps the machine awake while an agent turn is running and releases it the moment the turn ends, so a long turn is not cut short by idle sleep. The display may still blank, a closed lid still wins, it needs the system-sleep library from Emacs 31.1, and agent-shell-inhibit-system-sleep turns it off.

Project health

The maintainer reports the backlog directly: open issues peaked at 75 and pending PRs at 29 in mid-May, down to 13 and 4 by the time of the post, with roughly forty merged pull requests listed for this release alone. That is a healthy contributor flow around one person doing the merging, and the post says so — it is an indie project competing with funded teams, asking for sponsorship, and noting that Anthropic gives six months of Claude Max 20x to open-source projects at 5,000+ GitHub stars, which this one has not reached.

For this vault the appeal is the same as cc-mirror and claude-code-router from the other direction: rather than reshaping one agent, it puts every agent behind one interface, so switching is a config change. Per-agent :mcp-servers is the practical form of the service-access split in mcp-vs-skills, and claude-code and pi-coding-agent are both reachable from it.

Repo: https://github.com/xenodium/agent-shell — 1,658 stars, GPL-3.0, active since September 2025.