Magent: 让 Emacs 成为 LLM Coding Agent 的 Runtime(Emacs-Native LLM Coding Agent)

对于长期使用 Emacs 的人来说,编辑器里已经存在很多有价值的活状态:尚未保存的 buffer、major mode、point 和 region、project、Magit、Org、xref、LSP、process buffer……如果 agent 只能看到磁盘文件,它其实丢掉了 Emacs 工作流里相当重要的一部分上下文

基于这个想法写了 Magent,一个使用 Emacs Lisp 实现的、Emacs-native 的 LLM coding agent

项目目前已经可以用于一些简单的项目开发(复杂任务未经过长期测试),欢迎大家一起参与讨论

文档在这里:Magent 文档总览 | Magent Documentation

Quick Start

Magent delegates all LLM communication to gptel. Configure your provider, model, and API key through gptel:

;; gptel handles provider/model/key configuration 
(setq gptel-model 'claude-sonnet-4-20250514) 
(setq gptel-api-key "sk-ant-...") ; or use ANTHROPIC_API_KEY env var

See gptel documentation for full provider setup (Anthropic, OpenAI, Ollama, etc.).

Magent 是啥?

Magent 更接近“gptel + stateful agent runtime”,而不是 gptel 的替代品,也不是外部 CLI agent 的简单包装。

各部分的职责是:

Magent 架构的好处是:已经配置好的 gptel provider 可以直接复用,同时 agent 又能真正进入 Emacs 的运行时环境

为什么还要在 Emacs 里实现 Agent Runtime?

先说明一点:Magent 并不独占访问 Emacs 状态的能力。

给 Claude Code、Codex 或其他外部 agent 接入一个 emacs_eval skill、MCP server 或类似桥接层,同样可以让它查看 buffer、major mode … 单从最终能完成的任务来看,两种方案没太大区别

Magent 选择的区别在于 runtime 边界

方案 Agent Runtime Emacs 的角色 Provider Transport
外部 Agent + Emacs Bridge 运行在外部进程中 UI 和工具 Endpoint 由外部 Agent 负责
Magent Agent Runtime 和工作流状态保留在 Emacs 中 Runtime、UI 和工具执行环境 交给 gptel

Magent 通过 gptel-request 调用模型,但以下部分都在 Emacs Lisp 中运行:

  • agent loop 和工具调用;
  • permission、approval 和 audit;
  • project-scoped session;
  • turn、tool call、取消和失败状态;
  • skills、capabilities 和 custom agents;

Magent 想探索的不是“怎样让外部 agent 多一个 Emacs 工具”,而是另一个问题:

如果把 Emacs 本身当作 agent runtime,而不只是 agent 的客户端,会形成怎样的工作流?

目前有哪些功能

1. Coding Agent 工具链

目前内置了 15 个工具,包括:

  • 文件读取、创建和精确编辑;
  • grep、glob 和 shell;
  • emacs_eval;
  • websearch;
  • Org 格式的 repository summary;
  • skill 调用;
  • child-agent 的创建、通信、等待、查看和关闭

2. 项目级 Session

Magent 的 session 默认按 project 隔离

在一个 Git 项目中打开 Magent,后续对话、agent 选择、skills 和 child-agent jobs 都属于这个项目。退出或重启 Emacs 后,可以从持久化的 session 中恢复

3. 权限与审计

不同 agent 可以有不同的工具权限:

  • allow:直接允许;
  • deny:拒绝;
  • ask:执行前询问;
  • 文件操作还可以按 glob pattern 设置规则

4. Skills 和 Slash Commands

Magent 的 skill 是文件化的,可以来自:

  • 包内置的 skills/;
  • 用户目录;
  • 项目本地 .magent/skills/

当前内置的 agent-shell slash commands 包括:

/explain
/fix
/init
/review
/summarize
/test
/compact
/clear

FYI 这些 commands 和 emacs 工作流相关,目前还没太想好后面应该怎么做,所以请 expect breaking change

9 个赞

感觉这个说法有点矛盾:

  • 0.1.0 在我看来是处于初级开发阶段,相当于软件的 alpha 阶段,功能严重不足,仅限高级用户尝鲜
  • 可用于实际开发,基本上已经处于 beta 后期了,接近或者已经 RC

所以,要么版本号提升到让人信服的程度,或者这只是早期开发的阶段

:rofl: 好的,那我改下表述

只要是和AI相关的文章,我总是自动点赞.

1 个赞

活状态 第一次听到这个概念,涨见识了

1 个赞

哈哈哈哈哈 胡编乱造的