Magent 前端边界
Magent 只支持一个会话式前端: agent-shell 。它通过进程内 ACP adapter 连接
Magent runtime。会话式文档和示例必须直接使用 agent-shell,或者使用 Magent 唯一的
兼容命令 magent-start~。显式 registered command 也可以通过 ~magent-action
暴露受信任的 M-x wrapper;这些 wrapper 不构成另一套会话 frontend。
公共接口
agent-shell integration 是完整的会话接口。Magent 不再维护并行的 workspace、compose
buffer、command menu 或自定义 output-buffer frontend。新的会话行为放在 agent-shell
或 ACP adapter,共享 runtime 行为放在 runtime API;显式 command registration 和
invocation 则属于 magent-action.el 。
受支持的模块
magent-agent-shell.el提供 Magent agent-shell 配置、兼容入口 ~magent-start~,以及 隔离的 context compatibility block;交互 buffer 和 prompt 行为仍由 agent-shell 负责。magent-acp.el实现进程内 ACP request、notification、response、permission 和session/updateadapter。magent-action.el负责 registered slash/interactive command discovery 和 invocation lifecycle;magent-action-session.el提供 isolated durable persistence,但不构成 frontend。magent-runtime-api.el是 frontend-neutral runtime/session API。magent-runtime-queue.el负责会话内 FIFO、会话间并发和 session-scoped cancellation。
受支持的流程
- 使用
M-x magent-start启动 Magent;也可以先调用magent-agent-shell-ensure-config注册配置,再从M-x agent-shell中选择 Magent。 - agent-shell 调用
magent-acp.el中的进程内 ACP client。 - ACP 分别规范化 text 和 resource blocks。本地
file://resource 会提供 scoped request path;history 重建时 resource body 始终保持 user-role context。 - ACP 按 runtime session 的精确 scope 解析 registered slash input,并通过
magent-action.el调用;普通 prompt 直接进入magent-runtime-api.el。Command 拥有的 turn 和 workflow step 同样使用该 API;direct handler 可以不进入通用 agent turn 而直接完成。 - runtime API 在排队前一次创建并冻结带
:ui-visibility 'none的magent-request-context~;queue 每次只启动一个 active turn,并把该 context 原样交给 ~magent-agent-run-turn。 - agent loop 发出 Magent-native observer events;
magent-acp.el将其转换成发给 agent-shell 的 ACPsession/update消息。 - ACP prompt request 会保持 pending,直到对应的普通 turn 或 command invocation completed、failed 或 cancelled。
配置
magent-agent-shell-session-strategy用于选择受支持前端的 new、latest 或 prompt session 流程;无论使用 Magent 兼容入口还是从通用 agent-shell 选择器中选择 Magent, 该设置都会生效。默认值是 ~prompt~,会列出当前 scope 中的新 session 和已保存 session。- ACP 暴露一个原生
modelsession option,包含 gptel 已注册的所有 backend 和 model。显示名使用provider:model~;opaque id 能区分不同 provider 下的同名 model。选择模型只会保存 session-local route,不会修改 gptel 的全局 backend 或 model 变量。~Auto会清除该 route,并显示当前由 agent/default 解析出的模型。
Model route 会在 runtime submission 创建时完成解析并冻结。用户可见 turn 的优先级为 session route、agent 显式模型、gptel 默认值;child agent 则优先使用自身显式模型, 否则继承冻结的 parent route。route object 还保留 agent profile 与 phase 字段,作为 未来 per-agent/per-phase policy 的 API 接口;当前 runtime 并未实现 phase router。 切换 session 模型只影响后续 submission,不影响 active work、已经 queued 的 work, 也不影响 provider-native tool continuation。
Session 生命周期
Magent 实现 ACP session/new~、~session/list~、~session/load~、~session/resume 和
session/fork~。~agent-shell-fork 会创建新的 durable session,以 source conversation
作为初始历史,同时使用完全独立的 ledger。source 与 fork 拥有不同 id,并从创建点起
独立演进。
Fork 按精确 scope fail closed:请求 cwd 必须解析到 source session 的 scope,source 也不能拥有 active 或 queued work。selected agent、model route、effort、thinking mode 和 automatic capability 设置等稳定 frontend option 会被继承;session approval override、 child-agent job 和 one-shot skill 会被显式重置。历史中引用的 spilled tool output 会复制到 fork 自己的私有 session storage。
开发边界
Frontend-neutral 行为放在 magent-runtime-api.el~,ACP conversion 放在
~magent-acp.el~,交互 frontend 行为留在 agent-shell。~magent-agent-shell.el 只保留
Magent config 与显式分组的 context compatibility advice。不要在 core runtime 内
引入第二套交互 frontend。
Skill discovery 同样保持 frontend-neutral。
magent-skills-list-descriptors 和 magent-skills-resolve-descriptor 会针对精确
session scope 返回 metadata,但不暴露 prompt body 或 executable handler。因为
agent-shell 只有一套 slash menu,ACP 会把 instruction skill 展平为 $name~,再把
~/$name 作为普通 magent-runtime-submit :skills turn 分派。未来 frontend 可以把
registered Action command projections 与 skill descriptors 展示为两个独立入口;
它不应从 Action registry 反推 skills。
当前限制
- 受支持的 frontend 硬依赖
agent-shell和acp。 - Magent 目前仍需为通用 agent-shell picker 显式注册 config,并临时 advice 四个私有 context function,以处理 remote-safe 与空行 context。
- runtime execution 在同一会话内按 FIFO 串行执行,不同会话(包括同一项目)可并发。完成和取消均指向精确 submission;忙碌或等待批准的会话不会阻塞其他会话。
- cancellation 是 session-scoped:取消一个 ACP session 会取消该 session 的 active 和 queued submissions,但不会移除其他 session 的 queued work。
- 受支持的 frontend 已支持 per-request instruction skill overrides、scope-aware
/$skillprojection 和 Elisp-native Action command projections;目前不暴露 per-request agent overrides。 - ACP session config 暴露
Automatic capabilities;关闭后,该 session 后续 turn 不再 自动解析 contextual capabilities,但显式选择的 instruction skills 仍然生效。 - Model route 当前只保存在 session 内存中;尚未实现跨 Emacs 持久化。加载已保存的 session 后会回到 ~Auto~。
- 不支持在 active turn 执行期间 fork,也不支持跨 project scope fork。
进度与计划投影
Assistant message item 按顺序保留进度、工具和最终答复边界,reasoning 显示设置 不影响可见的进度说明。Runtime 的 plan-update 事件携带 entries,由 magent-acp 转换为原生 plan update;保存的 plan item 使用同一路径恢复,由 agent-shell 负责显示。取消或失败的工具在恢复时显示失败;普通 turn 没有最终答复时,pending prompt 返回明确错误,不再隐藏地请求模型补写总结。