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. 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, 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 continues to grow. Here's a list of the latest agents now supported by . Speaking of vendor-neutral tools being more important than ever, there are a couple of ways to help keep going. Some cost money, others just a click. All are appreciated ;) has been attracting quite a few users. It's nice to hear folks are using on a daily basis. They are often relieved exists as an alternative to AI-tools commonly mandated at work. Those tools have well-funded engineering teams behind them, while is just me, an indie dev ;) Time spent on 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 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 . 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, 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 (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: and 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 (for reply) and the selection becomes a blockquote in a fresh prompt. Session restoration got a meaningful overhaul ( #605 by @nhojb ), now exposed via , with four levels: Feature availability is agent-specific, requiring either or request support. degrades as needed, ultimately falling back to creating a new session. Note that anything but verbosity is fairly new, so please report bugs or rough edges . Relatedly, now defaults to , and 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 . You can now restart the current shell anew (drop history) via or reload (keep history) via . The new and commands create agents anchored at either or a temp directory. Both are also reachable via . acp.el #20 by @martenlienen landed support for ACP connections over TRAMP, now making it possible to drive remote agents from . Pair it with agent-shell-tramp for the user-facing integration. Viewport interaction continues to be my primary way to interact with agents. It is focused (see only the latest interaction), fast (single-key bindings: = yes, = continue, = 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 to reply to the latest agent response. In the past, you could only reply to idle agents. You can now press to reply to busy agents too, automatically queuing requests on submission. A new (basic) lets you edit list-style content inside the viewport. Some commands prompt you to pick one of your active shell buffers (e.g. ). The picker now shows extra context for each buffer to help you choose. The same mechanism is now used by the new command. More on the underlying API later. Folding got smarter ( #608 by @codeluggage ): Together they replace the previous , which is now an internal primitive. You can now press from a viewport to quickly send a "continue" request, joining the rest of the single-key reply shortcuts: Tool call status is now rendered as a compact icon-based label by default ( ). ships several alternatives, picked via . To get the previous word-based label back: You can now set a default model and session mode for Codex via and ( #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 usage were also cleared. 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 as well as menus ( #601 by @martenlienen ). agent-shell now supports ACP session config options ( #553 by @greggroth and #613 by @catern ). Bind (or call ) to pick from the options the agent advertises. Broadcasted as and available externally via . You can now skip interrupt confirmations by unsetting ( #424 by @emil-e ). You can now resume an existing session by its ID via ( #332 ). Primarily useful for external integrations. You can now use to tag or transform outgoing requests. now broadcasts events ( #509 by @arthurgleckler ). returns the underlying shell buffer for the current context. jumps to the latest prompt/response pair, while returns the interaction at point as data. returns , , or status for any shell buffer. The agent-supplied session title is now exposed via the event (delivered via ) ( #559 by @smagnuso ). Can be handy for buffer names, bookmarks, or recent listings. The family of third-party packages keeps growing. Recent additions: Thank you to all contributors for these improvements! Beyond what's showcased, I've poured much love and effort into polishing the 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 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 ✨ CodeBuddy ( new by @illidan127 ) Factory Droid GitHub Copilot CLI Hermes ( new by @yitang ) Kimi Code ( new by @nicolaisingh ) Mistral Vibe (default): title only, so restore is fast and quiet (needs support). : render the last prompt turn (needs support). : render the first and last prompt turns (needs support). : replay the whole conversation (needs support). toggles the fragment at or near point (DWIM). cycles globally between all-expanded and all-collapsed. : replies "continue" (new) : replies "yes" : replies "more" : replies "again" … : replies with the corresponding numbered choice : opens the reply compose buffer : same as , with the agent response quoted agent-shell-knockknock : Notifications for via knockknock.el . agent-shell-notifications : Desktop notifications for events. agent-shell-hud : Real-time status overlay via a floating dashboard. agent-shell-pet : Codex-like pets that broadcast agent-shell session states. agent-shell-tramp : Tramp integration for . agent-circus : Run AI coding agents in sandboxed Docker containers. #308 : Fix heartbeat nil value crash in timer and busy indicator ( @ElleNajt ) #340 : Add documentation about the OAuth Anthropic authentication ( @chemtov ) #397 : Add detailed context usage indicator mode ( @emil-e ) #398 : Expose outgoing-request-decorator as a defcustom ( @emil-e ) #405 : Codex defaults for session mode and model ( @robjgray ) #408 : Use diff-command for diffing ( @timfel ) #413 : Track and manage diff buffers for each permission request ( @emil-e ) #418 : Add defvar for agent-shell-mode-hook + test ( @emil-e ) #420 : Replace all references to "Claude Code Agent" with "Claude Agent" ( @jinnovation ) #421 : Add agent-shell-clear ( @Makesesama ) #424 : Add agent-shell-confirm-interrupt option ( @emil-e ) #425 : README: Update all references to Claude Code ( @jinnovation ) #429 : Viewport attachment fixes ( @nhojb ) #438 : Fix for structured input from toolCall.rawInput.plan ( @timfel ) #442 : Add related project to README.org ( @rpoisel ) #445 : Use project-name instead of default-directory in header ( @bcc32 ) #446 : Droid: use native acp client and support default model and mode ( @kohnish ) #450 : Fix restart using wrong default-directory ( @zackattackz ) #453 : Ensure that viewport compiles ( @martenlienen ) #457 : Prefer cache directory over tmp for caching ( @martenlienen ) #460 : Unhandled method returns an error, unblocking client ( @0x6362 ) #461 : Add wl-paste as a Wayland image handler ( @martenlienen ) #463 : Fix header text invisible when font-get :size returns 0 ( @ftlio ) #469 : Do not create a file if no image in Wayland clipboard ( @martenlienen ) #473 : Caching project files completions for improved performance ( @Gleek ) #477 : Handle non-text content in user_message_chunk during session load ( @Gleek ) #483 : Add CodeBuddy agent support ( @illidan127 ) #489 : Snapshot session strategy in any case ( @timfel ) #492 : Update claude-agent-acp repository ( @Gleek ) #498 : Normalize missing MCP transport collection fields for ACP compatibility ( @CsBigDataHub ) #503 : Add agent-shell-macext to related projects ( @cxa ) #509 : Add ( @arthurgleckler ) #513 : Quote reply to the complete response with ( @martenlienen ) #515 : Make detection of binary files more robust ( @martenlienen ) #523 : Add agent-shell-org-transcript to Related projects ( @lllShamanlll ) #528 : Add support for Kimi Code CLI using ACP ( @nicolaisingh ) #529 : Sort the session list based on recency ( @smagnuso ) #530 : Add simple blinking circle as busy indicator ( @rudolf-adamkovic ) #532 : Fix removing queued messages ( @Gleek ) #536 : Add programmatic query API: agent-shell-query and agent-shell-shell-buffer ( @eddof13 ) #539 : Add ob-agent-shell to related projects in readme ( @eddof13 ) #545 : Keep buffer name on agent-shell-reload and -restart ( @timfel ) #550 : Add agent-recall to related projects ( @Marx-A00 ) #551 : Avoid gitignore update for external data dirs ( @Silex ) #552 : Use helper function from shell-maker rather than eob ( @smagnuso ) #553 : Add ACP session config options support ( @greggroth ) #554 : Fix error when cancelling session selection prompt ( @Gleek ) #555 : Add some niceties useful for ( @vermiculus ) #559 : Expose topic in agent-shell ( @smagnuso ) #561 : Update Pi coding agent logo to look more official ( @jeff-phil ) #565 : Enable @ and / completion when reading queued prompts ( @Gleek ) #571 : Fix unkillable buffer after major-mode change ( @Scott-Guest ) #572 : Add clipboard image support for Windows ( @repelliuss ) #574 : Add agent-shell-pet link to README ( @lgmoneda ) #582 : Add a few additional forward declarations ( @tychoish ) #583 : Add Hermes Agent support ( @yitang ) #588 : Fix header foreground color (emacs 31) ( @nhojb ) #589 : Only trim response region when region is active ( @martenlienen ) #590 : Fix context-limit header color (emacs-31) ( @nhojb ) #595 : Fix completion regression in viewport buffers ( @Gleek ) #600 : Do not emit permission-request for auto-handled permissions ( @Gleek ) #601 : Expose thought level (reasoning effort) in header, mode line and keymaps ( @martenlienen ) #602 : Update README with Opencode and Ollama setup instructions ( @dvictori ) #605 : Add defcustom ( @nhojb ) #608 : Toggle folding for everything & comfortably fold at point ( @codeluggage ) #609 : Prevent accidental auto-scrolling in viewport buffers on tool calls ( @martenlienen ) #611 : Fix ( @TamsynUlthara ) #613 : Improve completion for set-session-config-option ( @catern ) #618 : Fix header not showing session mode name ( @deftsp ) #621 : Reindent Elisp files ( @bcc32 ) #623 : Add agent-shell-hud to related packages ( @nohzafk ) #625 : Fix source-block face background not rendering when theme loads after package ( @phairoh ) #627 : Hermes: add default-session-mode-id to match other agents ( @yitang ) #629 : Write to instead of ( @phairoh ) #632 : Render tool call parameters for non-standard tools like MCP calls ( @martenlienen ) #633 : Add GitHub Actions workflow for ERT tests ( @phairoh ) #634 : Update art generated by ( @TamsynUlthara ) #639 : Preserve window position when restarting ( @Gleek ) #202 : Header icon is double the expected size #278 : Heartbeat causes high CPU usage with many agent buffers #366 : directory at risk when switching git branches #400 : errors with "Text is read-only" #401 : Garbled characters output when using non-English languages #412 : Diff buffer management is messy #414 : 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 : clipboard handler silently saves text as PNG in terminal mode #441 : Background agent notifications treated as stale after response #443 : : Invalid image type on calling agent-shell #455 : agent-shell enters frozen/hanging state when receiving unknown notifications #462 : Header text invisible when returns 0 #465 : Session load crashes on non-text user message chunks (e.g. images) #466 : / now focus the originating shell #468 : breaks pasting text #481 : History input rolls back in 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 : does not work in an function #587 : Long region preview's "Expand…" button is sent literally to the agent #617 : OpenCode: consent prompt shows empty input when arrives before populates