It's been a little while since my last agent-shell update, so let's go through the latest highlights as of v0.55.
agent-shell?agent-shell is a native Emacs mode to interact with AI agents powered by ACP (Agent Client Protocol).
If you noticed slower project activity in April, this is why. I'm getting better at the new 24-hour job, so I've resumed working on agent-shell.
I'm still chipping away at the backlog that built up while I was away, but if there's anything in particular you'd like me to look at, feel free to ping.
With Anthropic's SDK subscription support changing, Google's Gemini CLI deprecation, and Antigravity's unclear support for the Agent Client Protocol (ACP), vendor-neutral tools matter more than ever.
Luckily, agent-shell is built on ACP, which sidesteps the problem. When a vendor changes course, you can swap providers and keep using your preferred tool. No need to reshape that hard-earned muscle memory.
On that note, the list of agents supported by agent-shell continues to grow.
Here's a list of the latest agents now supported by agent-shell.

Speaking of vendor-neutral tools being more important than ever, there are a couple of ways to help keep agent-shell going. Some cost money, others just a click. All are appreciated ;)
agent-shell has been attracting quite a few users. It's nice to hear folks are using agent-shell on a daily basis. They are often relieved agent-shell exists as an alternative to AI-tools commonly mandated at work. Those tools have well-funded engineering teams behind them, while agent-shell is just me, an indie dev ;) Time spent on agent-shell is time away from work that pays the bills, so if it's useful to you, please consider sponsoring the project.
Every individual sponsorship genuinely helps keep the project going. And if your employer benefits from your agent-shell use, they're typically in a position to contribute at a scale individuals can't, so nudge them to chip in too.
Hey, I'm looking at you, folks at Google, GitHub, GitLab, NVIDIA, Oracle, Red Hat, Yelp, Venmo, ARM, Spotify, Augment Code, Hinge, Mercury, Nubank, Veeva… Some of you are using agent-shell. Nudge your employer ;)
Anthropic offers 6 months of free Claude Max 20x for qualifying open-source projects with at least 5,000+ GitHub stars. Starring agent-shell costs nothing and can save me some money. We're only a 5th of the way there ;) so if you don't mind a couple of clicks, the project can really use another GitHub star.
Speaking of GitHub stars, agent-shell is now my most popular Emacs package, recently overtaking chatgpt-shell.
agent-shell now ships with a brand new, more performant inline markdown renderer. This is the biggest internal change in some time. Enabled by default via agent-shell-markdown-render-function (moving away from the overlay-based renderer in shell-maker).
Table content is now accessible. Point can land on any cell, which wasn't possible with the previous overlay implementation. In addition, tables are now also navigable: TAB and S-TAB move between cells.

Source-block syntax highlighting is now on by default. The per-snippet copy button is now keyboard-accessible too (previously mouse-click only, due to the overlay implementation).

Blockquotes now render in both shell and viewport. More importantly, you can select text in either a viewport page (or the shell itself), press r (for reply) and the selection becomes a blockquote in a fresh prompt.
Viewport

Shell

Session restoration got a meaningful overhaul (#605 by @nhojb), now exposed via agent-shell-session-restore-verbosity, with four levels:
minimal (default): title only, so restore is fast and quiet (needs session/resume support).last: render the last prompt turn (needs session/load support).first-last: render the first and last prompt turns (needs session/load support).full: replay the whole conversation (needs session/load support).Feature availability is agent-specific, requiring either session/resume or session/load request support. agent-shell degrades as needed, ultimately falling back to creating a new session.
Note that anything but minimal verbosity is fairly new, so please report bugs or rough edges.
Relatedly, agent-shell-session-strategy now defaults to 'prompt, and 'new-deferred has been retired.
You can now fork the current session, starting a new shell that shares the conversation history so far and diverges from there. Invoke via M-x agent-shell-fork.
You can now restart the current shell anew (drop history) via M-x agent-shell-restart or reload (keep history) via agent-shell-reload.
The new agent-shell-new-downloads-shell and agent-shell-new-temp-shell commands create agents anchored at either ~/Downloads or a temp directory. Both are also reachable via C-u M-x agent-shell.

acp.el #20 by @martenlienen landed support for ACP connections over TRAMP, now making it possible to drive remote agents from agent-shell. Pair it with agent-shell-tramp for the user-facing integration.
Viewport interaction (setq agent-shell-prefer-viewport-interaction t) continues to be my primary way to interact with agents. It is focused (see only the latest interaction), fast (single-key bindings: y = yes, c = continue, m = more…), and offers a richer editing experience (dedicated prompt-crafting buffer).
The viewport is just a viewport to shell content. You can have your cake and eat it too, by jumping to the related shell buffer if needed.
From a viewport, you can press r to reply to the latest agent response. In the past, you could only reply to idle agents. You can now press r to reply to busy agents too, automatically queuing requests on submission.
A new (basic) agent-shell-list-edit-mode lets you edit list-style content inside the viewport.

Some commands prompt you to pick one of your active shell buffers (e.g. M-x agent-shell-send-region-to). The picker now shows extra context for each buffer to help you choose.

The same mechanism is now used by the new M-x agent-shell-switch-buffer command. More on the underlying API later.
Folding got smarter (#608 by @codeluggage):
M-x agent-shell-ui-toggle-fragment toggles the fragment at or near point (DWIM).M-x agent-shell-ui-toggle-all-fragments cycles globally between all-expanded and all-collapsed.Together they replace the previous agent-shell-ui-toggle-fragment-at-point, which is now an internal primitive.
c joins the viewport reply gangYou can now press c from a viewport to quickly send a "continue" request, joining the rest of the single-key reply shortcuts:
c: replies "continue" (new)y: replies "yes"m: replies "more"a: replies "again"1 … 9: replies with the corresponding numbered choicer: opens the reply compose bufferR: same as r, with the agent response quoted
Tool call status is now rendered as a compact icon-based label by default (agent-shell--inverse-icon-status-kind-label). agent-shell-styles.el ships several alternatives, picked via agent-shell-status-kind-label-function.

To get the previous word-based label back:
(setq agent-shell-status-kind-label-function
#'agent-shell--inverse-label-status-kind-label)
You can now set a default model and session mode for Codex via agent-shell-openai-default-model-id and agent-shell-openai-default-session-mode-id (#405 by @robjgray). Both must match an ID from Codex's "Available models" / "Available modes" listings.

Headers had a few rendering hiccups on Emacs 31. These are now fixed (#588 and #590 by @nhojb, #463 by @ftlio). Warnings from deprecated when-let usage were also cleared.
wl-paste is now a supported clipboard handler for pasting images on Wayland (#461 by @martenlienen).
Similarly, pasting clipboard images now works on Windows via PowerShell (#572 by @repelliuss).
The graphical header got minor tweaks here and there. For example, thought level is now displayed in the header. It can be changed via M-x agent-shell-viewport-set-session-thought-level as well as menus (#601 by @martenlienen).



agent-shell now supports ACP session config options (#553 by @greggroth and #613 by @catern). Bind C-c C-s (or call agent-shell-set-session-config-option) to pick from the options the agent advertises. Broadcasted as config-option-update and available externally via agent-shell-subscribe-to.
You can now skip interrupt confirmations by unsetting agent-shell-confirm-interrupt (#424 by @emil-e).
You can now resume an existing session by its ID via M-x agent-shell-resume-session (#332). Primarily useful for external integrations.
You can now use agent-shell-outgoing-request-decorator to tag or transform outgoing requests.
agent-shell-subscribe-to now broadcasts idle events (#509 by @arthurgleckler).
agent-shell-shell-buffer returns the underlying shell buffer for the current context.
agent-shell-goto-last-interaction jumps to the latest prompt/response pair, while agent-shell-interaction-at-point returns the interaction at point as data.
agent-shell-status returns 'busy, 'blocked, or 'ready status for any shell buffer.
The agent-supplied session title is now exposed via the session-title-changed event (delivered via agent-shell-subscribe-to) (#559 by @smagnuso). Can be handy for buffer names, bookmarks, or recent listings.
The agent-shell family of third-party packages keeps growing. Recent additions:
agent-shell via knockknock.el.agent-shell events.agent-shell status overlay via a floating dashboard.agent-shell.Thank you to all contributors for these improvements!
agent-circus to README.org (@rpoisel)agent-shell-idle-alert-functions (@arthurgleckler)R (@martenlienen)agent-shell-list (@vermiculus)/ completion regression in viewport buffers (@Gleek)agent-shell-restore-context defcustom (@nhojb)agent-shell-hermes-acp-command (@TamsynUlthara).agent-shell/ to .git/info/exclude instead of .gitignore (@phairoh)agent-shell-hermes--ascii-art (@TamsynUlthara).agent-shell/ directory at risk when switching git branchesagent-shell-viewport-reply-1 errors with "Text is read-only"agent-shell-mode-hook timing makes subscribing to events difficultxclip clipboard handler silently saves text as PNG in terminal modesession/prompt responseimage-type: Invalid image type 'svg on calling agent-shellfont-get :size returns 0agent-shell-diff-accept-all / -reject-all now focus the originating shellwl-paste-image-handler breaks pasting textinsert editing mode while pressing up/down arrowsagent-shell-get-config does not work in an agent-shell-command-prefix functionrequest_permission arrives before tool_call_update populates rawInputBeyond what's showcased, I've poured much love and effort into polishing the agent-shell experience. Interested in the nitty-gritty? Have a look through my regular commits.
If agent-shell is useful to you, please consider sponsoring the project. I'm now back to working on agent-shell daily.
LLM tokens aren't free, and neither is the time dedicated to building this stuff (especially as an indie dev). I also have bills to pay ;)
Unless I can make this work sustainable, I will have to shift my focus to work on something else that is.
powered by LMNO.lol