AI.news
主页教程研究工具模型AI创业讨论新闻每日简报WIKI🚀 创业库★ 投稿
AI+医疗机器人教育金融能源健康娱乐思考

agent-shell 0.55 updates

It's been a little while since my last agent-shell update, so let's go through the latest highlights as of v0.55.

What's agent-shell?

agent-shell is a native Emacs mode to interact with AI agents powered by ACP (Agent Client Protocol).

Picking up where I left off

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.

Anthropic, Google, and why ACP matters

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.

Supported agents

Here's a list of the latest agents now supported by agent-shell.

agent-shell needs your support

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 ;)

GitHub stars for Anthropic credit

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.

Star History Chart

New markdown renderer

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).

Access/navigate table content

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.

Improved source block support (enabled by default)

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).

New blockquotes support

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

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.

Session forking

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.

Restart/reload session

You can now restart the current shell anew (drop history) via M-x agent-shell-restart or reload (keep history) via agent-shell-reload.

Downloads/Temp shells

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.

TRAMP support

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 improvements

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.

Queueing

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.

List editing mode

A new (basic) agent-shell-list-edit-mode lets you edit list-style content inside the viewport.

Improved buffer selection

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.

Improved folding

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 gang

You 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"
  • 19: replies with the corresponding numbered choice
  • r: opens the reply compose buffer
  • R: same as r, with the agent response quoted

More compact status rendering

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)

Codex defaults

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.

Emacs 31 fixes

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.

Wayland clipboard support

wl-paste is now a supported clipboard handler for pasting images on Wayland (#461 by @martenlienen).

Windows clipboard support

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).

Session config options

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.

Interrupt confirmation

You can now skip interrupt confirmations by unsetting agent-shell-confirm-interrupt (#424 by @emil-e).

Public functions

Resume sessions by ID

You can now resume an existing session by its ID via M-x agent-shell-resume-session (#332). Primarily useful for external integrations.

Outgoing request decorator

You can now use agent-shell-outgoing-request-decorator to tag or transform outgoing requests.

Subscribe to idle events

agent-shell-subscribe-to now broadcasts idle events (#509 by @arthurgleckler).

Getting shell buffers

agent-shell-shell-buffer returns the underlying shell buffer for the current context.

Last vs interaction at point

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.

Shell status

agent-shell-status returns 'busy, 'blocked, or 'ready status for any shell buffer.

Session title

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.

New third-party packages

The agent-shell family of third-party packages keeps growing. Recent additions:

Pull requests

Thank you to all contributors for these improvements!

Bug fixes

  • #202: Header icon is double the expected size
  • #278: Heartbeat causes high CPU usage with many agent buffers
  • #366: .agent-shell/ directory at risk when switching git branches
  • #400: agent-shell-viewport-reply-1 errors with "Text is read-only"
  • #401: Garbled characters output when using non-English languages
  • #412: Diff buffer management is messy
  • #414: agent-shell-mode-hook timing makes subscribing to events difficult
  • #417: Unhandled notifications with kiro
  • #426: Starting conversation before agent has initialized leaves "dangling" text
  • #431: Heartbeat timer keeps running after failed/abandoned authentication in OpenAI
  • #435: xclip clipboard handler silently saves text as PNG in terminal mode
  • #441: Background agent notifications treated as stale after session/prompt response
  • #443: image-type: Invalid image type 'svg on calling agent-shell
  • #455: agent-shell enters frozen/hanging state when receiving unknown notifications
  • #462: Header text invisible when font-get :size returns 0
  • #465: Session load crashes on non-text user message chunks (e.g. images)
  • #466: agent-shell-diff-accept-all / -reject-all now focus the originating shell
  • #468: wl-paste-image-handler breaks pasting text
  • #481: History input rolls back in insert editing mode while pressing up/down arrows
  • #485: Shells created in other workspaces no longer display
  • #493: Tables rendered in agent-shell break cursor (point) navigation
  • #533: Can't install agent-shell from MELPA
  • #548: Copied highlighted text from agent output includes trailing backtick
  • #563: "Cannot modify map in-place" when starting agents
  • #577: agent-shell-get-config does not work in an agent-shell-command-prefix function
  • #587: Long region preview's "Expand…" button is sent literally to the agent
  • #617: OpenCode: consent prompt shows empty input when request_permission arrives before tool_call_update populates rawInput

Lots of polish

Beyond 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.

Make the work sustainable

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.

Sponsor agent-shell

powered by LMNO.lol

privacy policy · terms of service