Good news, everyone – copilot.el0.7 is out!And it’s a big one.Ever since I took over the maintenance of copilot.el in the spring of 2025, I’vehad one north star: close the gap between Emacs and the editors that enjoyfirst-party Copilot support. VS Code and (Neo)vim got the rich, officialexperience – chat, agents, the whole shebang – while we Emacs folks were stuckwith humble ghost-text completion. That never sat right with me. Emacs deservesbetter.For a bit of perspective on the pace: in its first three years the project nevershipped a single tagged release. 0.7 is the seventh I’ve cut since taking over.We’ve been busy.For a long time that gap felt unbridgeable. We were essentially reverse-engineeringan undocumented protocol and replicating it in Elisp, always one step behind. Butthen Microsoft open-sourced@github/copilot-language-server,and everything changed. Suddenly we had a documented, first-party LSP server totalk to – the very same backend that powers Copilot in VS Code. The migrationto it in0.4 was theturning point. From that moment on, catching up to the other editors stoppedbeing a fantasy and became a (long) TODO list.We’ve been chipping away at that list ever since. A few months ago, in0.5, we addedbasic support for Copilot Chat – the first time the package did anything beyondcompletion.0.6 broughtNext Edit Suggestions (NES) and the experimental beginnings of agent mode. Andnow 0.7 fills in pretty much all of the remaining blanks.So what’s actually in it? Quite a lot. Let me walk you through the highlights.Agent Mode, For RealChat is nice, but talking to an assistant that can’t do anything gets oldfast. Enter agent mode:(setopt copilot-chat-use-agent-mode t)With this on, Copilot can run tools to actually get work done – run shellcommands, create and edit files, read your diagnostics, fetch web pages. Ask itto “add a test for foo and run it” and it’ll write the test, invoke your testrunner, read the output, and iterate, all without you leaving the chat buffer.Of course, letting an AI run commands and rewrite your files unsupervised is arecipe for excitement of the wrong kind, so every tool call asks forconfirmation first. File edits show you a diff preview before you approve them,and if you trust a particular tool you can pick always to stop being asked forthe rest of the conversation. Long-running terminal commands now runasynchronously too, so Emacs stays responsive while that test suite chugs along– and C-g aborts a command that’s overstaying its welcome.Workspace AwarenessAn agent that can only see the current buffer isn’t much of an agent. So 0.7teaches copilot.el to answer the server’s workspace requests: Copilot can nowsearch your project by file glob or by text/regex (viaripgrep, so your .gitignore isrespected), read files, and list directories across the whole tree. That’s whatmakes “where is X handled in this codebase?” actually work.For the truly ambitious there’s also opt-in semantic search:(setopt copilot-chat-enable-semantic-search t)Flip that on and the server builds an embeddings index of your workspace, so youcan ask whole-codebase questions instead of pointing at specific files. It’s offby default, since indexing isn’t free, but it’s there when you want it.MCP SupportModel Context Protocol is how you give anassistant extra superpowers, and copilot.el now speaks it. Pointcopilot-mcp-servers at the servers you want and their tools show up in chat,right alongside the built-in ones:(setopt copilot-mcp-servers '(:fetch (:command "uvx" :args ["mcp-server-fetch"]) :memory (:command "npx" :args ["-y" "@modelcontextprotocol/server-memory"])))M-x copilot-chat-list-mcp-tools shows you which servers connected and whatthey offer (and complains loudly when one fails to start, which beats the oldsilent treatment).A Chat You Can Actually UseThe chat buffer grew up too. A few of the quality-of-life additions: Slash commands (C-c /) – /explain, /fix, /tests, /doc, andfriends, fetched live from the server. Acting on code blocks – C-c C-i inserts the code block at point intoyour source buffer, C-c M-w copies it to the kill ring. No morecopy-paste gymnastics out of a read-only buffer. Attaching context – copilot-chat-add-file-reference (C-c C-f) andcopilot-chat-add-region-reference let you hand Copilot specific files orselections along with your question.Odds and EndsA grab bag of smaller, but handy, additions: M-x copilot-quota shows how much of your chat, completion, andpremium-request allowance is left – useful now that the fancy models eat intoa quota. Copilot will tell you when a suggestion closely matches public code andcollect those matches, with their licenses and reference URLs, in a buffer youcan open via M-x copilot-list-code-citations. A pile of bug fixes, including agent-mode tool confirmations that were flat-outbroken against newer servers, and chat finally picking a sensible defaultmodel on its own.As always, see the fullchangelogfor the complete rundown.EpilogueAgent mode, MCP, and semantic search are all opt-in, so nothing here changesyour setup unless you ask for it. But I’d love for you to ask for it! Turn onagent mode, point it at a real task, and tell me where it shines and where itfalls on its face. This kind of feature only gets good with people kicking thetires and filing detailed reports, so please doopen issues and let meknow how it goes. Your feedback is what shapes the next release.I’d be remiss not to acknowledge it: there’s a decent chance that by now half ofyou have wandered off to Claude Code or some other agentic CLI, and that pouringthis much time and energy into Copilot support for Emacs is, objectively, aquestionable use of a human life. Fair enough.But here’s the thing – Emacs has always excelled at providing amazing supportfor niche technologies long after the rest of the world has moved on. We’re thepeople who’ll lovingly maintain a mode for a language nobody has written anycode in since 2003. Keeping Copilot first-class in Emacs is squarely in thatgrand tradition, and I, for one, intend to see it through. :-)That’s all I have for you today. Keep hacking!