{"slug": "agent-shell-0-73-updates", "title": "agent-shell 0.73 updates", "summary": "Agent-shell 0.73, a native Emacs mode for interacting with AI agents via the Agent Client Protocol, introduces chat mode as the default interface, a new 'latest' expansion option for grouped activity, and improved prompt queuing and composition. The update also adds better Markdown list rendering and TAB navigation for source blocks, links, and images, with the full changelog spanning from v0.63.3 to v0.73.2.", "body_md": "Another month, another [agent-shell](https://github.com/xenodium/agent-shell) update. If you missed the last one, have a look at the [0.63 update](https://xenodium.com/agent-shell-0-63-updates). While this post showcases the latest highlights, the [full list of changes](https://github.com/xenodium/agent-shell/compare/v0.63.3...v0.73.2) is far chunkier than what we'll cover.\n\n`agent-shell`\n\n?[agent-shell](https://github.com/xenodium/agent-shell) is a native [Emacs](https://www.gnu.org/software/emacs/) mode to interact with AI agents powered by ACP ([Agent Client Protocol](https://agentclientprotocol.com/)).\n\nSince inception in September last year (yikes nearly a year), `agent-shell`\n\nhas featured a shell-like experience, powered by [comint mode](https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Prompts.html). There's also [viewport mode](https://xenodium.com/agent-shell-0-25-updates#viewport%2Fcompose-(experimental)) (via `agent-shell-prefer-viewport-interaction`\n\n), if you prefer a more focused experience, and now we have `chat mode`\n\n.\n\nChat mode fuses `comint`\n\nmode with a more traditional chat-like labelling experience.\n\nWe're living on the edge here, so chat mode is now enabled by default. Ok not really that edgy, it's fairly safe (powered [overlays](https://www.gnu.org/software/emacs/manual/html_node/elisp/Overlays.html)) and can be disabled entirely via `(setq agent-shell-chat-mode-enabled nil)`\n\n. Chat mode itself is a minor mode, so you can always toggle it on and off via `M-x agent-shell-chat-mode`\n\n.\n\nIn the last post, we talked about making `agent-shell`\n\nless chatty with more grouping for the likes of tool calls and agent thinking, all collapsed by default. If that's far too quiet, you can expand by default via `(setq agent-shell-activity-group-expand-by-default t)`\n\n. If you found these two settings either too quiet or too chatty, we now have a third alternative via `(setq agent-shell-activity-group-expand-by-default 'latest)`\n\n. When set, only the latest grouped activity is expanded by default, and automatically collapsed when the agent moves on to something else.\n\nI've become quite fond of this feature (thank you [@nhojb](https://github.com/nhojb) for the [PR](https://github.com/xenodium/agent-shell/pull/740)), so yes. It's also enabled by default.\n\nQueuing received some improvements. The related commands have been consolidated under `agent-shell-prompt-queue.el`\n\n. You can queue prompts while the agent is busy, then view, resume, or drop pending prompts via `M-x agent-shell-prompt-queue`\n\n, `M-x agent-shell-prompt-queue-resume`\n\n, and `M-x agent-shell-prompt-queue-remove`\n\n. The pending queue is now shown after each new submission.\n\n`M-x agent-shell-prompt-compose`\n\nopens a dedicated buffer for crafting a prompt, and it's now more independent of the shell. You can invoke it from any buffer (it resolves to the right shell), `C-c C-c`\n\nsends and returns you to whatever you were doing (fire and forget), and `C-u C-c C-c`\n\nsubmits the prompt and immediately lets you craft another queued prompt.\n\nShell initialization may take a second or two, depending on what agent you're using, which meant you had to wait for initialization before you could start typing into your new shell. Unnecessary, so that's no longer the case. Shell prompts are now offered as soon as possible, so one can get typing.\n\nWhile Markdown lists are easily digestible without special rendering, we can do better than that, so we now give them a better treatment with normalized padding, indentation, and of course, civilized bullets.\n\nTAB navigation made it into `agent-shell`\n\nfairly early on. I love being able to TAB my way into any section in the buffer and press RET to toggle folding. That's great and all, but we can make the navigation experience richer by welcoming the likes of Markdown source blocks, links, and images to the navigation party. Why these in particular? They are all actionable by RET too, of course.\n\nWhile you'd rightly assume RET opens links to local text files in Emacs and delegates to browsers when needed, Markdown source blocks and images get a similar treatment. While their respective RET actions may not be as obvious, we can certainly make them much more discoverable, so we now add hints. Landing point on an actionable item now echoes a hint of what you can do and which key does it (say, \"Press RET to copy\" on a source block, \"Press + to enlarge\" on an image, and so on). Hints are also shown on mouse over events.\n\nWhile `agent-shell`\n\noffers `agent-shell-markdown-image-max-width`\n\nfor customizing image sizes, it's fairly restrictive. Not all images are the same, so why force them all to fit within the same constraint? `agent-shell-markdown-image-max-width`\n\ncontinues to offer a preferred default, but you can now scale images differently by getting the agent to annotate Markdown images with [Pandoc-style link attributes](https://pandoc.org/MANUAL.html#extension-link_attributes).\n\nThe attribute block goes right after the image, taking a `width`\n\nand/or `height`\n\nin pixels or percentages:\n\n```\n![alt](image.png){width=300}\n![alt](image.png){width=50% height=200}\n```\n\nI may be sweating the small stuff here, but this was really grinding my gears. We have lovely Markdown table rendering, which I'm glad we do as LLMs aren't always great at producing perfectly aligned tables. In the best of cases, the LLMs align the table perfectly, but it's just too wide for our Emacs window. Luckily, our lovely rendering also wraps cells to make them fit into our window. The thing is, all that lovely rendering goes out the door the moment you either resize your Emacs frame or merely split your window, resulting in a monstrosity like this:\n\nI know. I'm sweating the small stuff here, but hey we don't have to live like this. Emacs has all the hooks in the world, so let's track window changes and rejoin the civilized world.\n\nOn a much smaller scale, I also wanted auto resize for images, so here you have it…\n\nWhile we can influence image size at render time, this can still generate undesirable image dimensions, so we can now rescale all images in buffer on demand.\n\nSometimes a hammer really isn't the right tool, so we can now also rescale an image at point.\n\nOpening a local file (from a link, image, or `@file`\n\nmention) now routes through `agent-shell-file-display-action`\n\n, a standard `display-buffer`\n\naction you can customize. The default reuses a window already showing the file, or takes over the current one.\n\nIf you'd like a different window arrangement, you could do something like:\n\n```\n(setq agent-shell-file-display-action\n      '(display-buffer-pop-up-window))\n```\n\nFollowing a local file link now pushes your origin onto [xref](https://www.gnu.org/software/emacs/manual/html_node/emacs/Xref.html)'s marker stack, so `xref-go-back`\n\n(`M-,`\n\n) brings you right back to where you were in your `agent-shell`\n\n, just like other Emacs jumps.\n\nFoldable fragments now use `agent-shell-ui-fragment-map`\n\nand bind `agent-shell-ui-toggle-fragment`\n\n. If you're not a fan of the RET binding to toggle folding, you can now use your preferred binding.\n\nIf `TAB`\n\nis your jam, you can do something like:\n\n```\n(with-eval-after-load 'agent-shell-ui\n  (define-key agent-shell-ui-fragment-map\n              (kbd \"TAB\") #'agent-shell-ui-toggle-fragment))\n```\n\nIf you prefer styling agent thoughts differently, a new `agent-shell-thought-body`\n\nface lets you do just that.\n\nStreaming performance also received some love. Thanks to [@suhail-singh](https://github.com/suhail-singh) for the [profiling and improvements](https://github.com/xenodium/agent-shell/issues/744), and to [@Scott-Guest](https://github.com/Scott-Guest) and [@claytharrison](https://github.com/claytharrison) for the trace analysis and benchmarking in [#757](https://github.com/xenodium/agent-shell/issues/757).\n\nThe \"Available config options\" section now displays possible values.\n\n`agent-shell-agent-configs`\n\ncan now be set to a function, letting you compute the available agent configurations dynamically rather than hard-coding a static list. The function is called on every access, so it stays current across code reloads.\n\nMaybe you'd like to list only available agents. Here's a rough snippet.\n\n```\n(setq agent-shell-agent-configs\n      (lambda ()\n        (seq-filter\n         (lambda (maker)\n           (when-let* ((client (ignore-errors\n                                 (funcall (map-elt (funcall maker) :client-maker)\n                                          (current-buffer))))\n                       (command (map-elt client :command)))\n             (executable-find command)))\n         (agent-shell-default-agent-config-makers))))\n```\n\n`agent-shell-subscribe-to`\n\nnow broadcasts an `agent-message-chunk`\n\nevent, handy for external integrations that want to observe streamed output.\n\n`executable-find`\n\nnow works correctly on remote hosts ([#742](https://github.com/xenodium/agent-shell/pull/742) by [@CeleritasCelery](https://github.com/CeleritasCelery)), smoothing out TRAMP-driven remote agents.\n\n[agent-shell-hq](https://github.com/SreenivasVRao/agent-shell-hq) joins the family, offering an interface for managing multiple `agent-shell`\n\nsessions.\n\nIf you peeked at the [commit logs](https://github.com/xenodium/agent-shell/compare/v0.63.3...v0.73.2), you'll notice I've been working daily on `agent-shell`\n\n, keeping up with project inflow. Since last month, 27 issues have been closed and 13 pull requests merged. As of today, the backlog sits at 11 open issues and 5 open PRs (versus 13 and 4 last time around). If there's something you'd like me to prioritize, feel free to ping.\n\nVendor-neutral tooling matters more than ever, and there are a couple of ways to help keep `agent-shell`\n\ngoing. Some cost money, others just a click. All are appreciated ;)\n\n`agent-shell`\n\nis just me, an indie dev, while the tools it competes with have well-funded teams behind them. Time spent on `agent-shell`\n\nis time away from work that pays the bills, so if it's useful to you, please consider [sponsoring](https://github.com/sponsors/xenodium) the project. And if your employer benefits from your `agent-shell`\n\nuse, nudge them to chip in too, they can typically contribute at a scale individuals can't.\n\nGitHub stars help with exposure, attracting new users and potential sponsors. [Starring agent-shell](https://github.com/xenodium/agent-shell/) costs nothing and can potentially help bring in more funding, so if you don't mind a couple of clicks, the project can really use [another GitHub star](https://github.com/xenodium/agent-shell/).\n\nThank you to all contributors for these improvements!\n\n`when-active`\n\noption to `agent-shell-activity-group-expand-by-default`\n\n(`agent-shell`\n\nLiking `agent-shell`\n\n? Would like to see it evolve? Consider [sponsoring](https://github.com/sponsors/xenodium) the effort.", "url": "https://wpnews.pro/news/agent-shell-0-73-updates", "canonical_source": "https://xenodium.com/agent-shell-0-73-updates", "published_at": "2026-08-14 23:41:51.417580+00:00", "updated_at": "2026-08-14 23:41:53.395062+00:00", "lang": "en", "topics": ["ai-tools", "developer-tools", "ai-agents"], "entities": ["agent-shell", "Emacs", "Agent Client Protocol", "xenodium", "nhojb"], "alternates": {"html": "https://wpnews.pro/news/agent-shell-0-73-updates", "markdown": "https://wpnews.pro/news/agent-shell-0-73-updates.md", "text": "https://wpnews.pro/news/agent-shell-0-73-updates.txt", "jsonld": "https://wpnews.pro/news/agent-shell-0-73-updates.jsonld"}}