ACE Context Engine — VS Code 扩展
为 CLI Coding Agent(Claude Code / Codex / Gemini / OpenCode / Kimi / Qwen / ZCode / Grok / Qoder / Reasonix 等)提供 IDE 上下文感知能力(通过 MCP 协议)。本扩展是 ACE 的 VS Code 端采集器。
扩展采集当前 IDE 状态(当前文件、光标、选中代码、诊断、Git 状态、最近修改等),经本地 daemon 以 MCP 提供给各 Coding Agent。Agent 在合适场景主动调用 ACE 工具,拿到真实编辑状态,不再凭空猜测"你在看什么"。
功能特性
- IDE 上下文采集:当前文件 / 光标 / 选中代码 / 打开的标签页 / 工作区 / 错误诊断 / Git 状态 / 最近修改 / 符号结构
- 双向通道(只读查询):Agent 不依赖光标、按符号名跨文件查询——13 个 method(定义 / 引用 / 悬停 / 实现 / 签名 / 调用层级 / 类型层级 / 符号搜索 / IDE 导航 / Code Action 建议),见「双向通道」一节
- 自动拉起 daemon:扩展激活即拉起本地 daemon(HTTP
:8787),崩溃自动重启(指数退避),零手动操作
- 多 Agent 共享:多个 Coding Agent 连同一 daemon,上下文单一权威;多项目按
projectRoot / select_project 隔离
- 一键接入所有 Agent:命令面板一条命令,把 MCP 配置 + 使用提示词写入本机所有已安装的 Agent
- OAuth 自动授权:兼容 Claude Code 等对 HTTP MCP 强制 OAuth 的客户端,免配置
快速开始(一键接入)
- 安装扩展并打开任意项目。
- 打开命令面板(
Ctrl+Shift+P)→ 运行 ACE: 一键接入所有 Agent。
- 扩展会自动:
- 为已安装的每个 Agent 写入全局 MCP 配置(指向
http://localhost:8787/mcp);
- 写入该 Agent 的全局提示词文件(
CLAUDE.md / AGENTS.md,带 <!-- ACE_START --> 标记块,可重复运行不重复追加);
- 在
~/.local/bin/ 写入全局 ace 命令(stdio 兜底)。
运行结果打印在 ACE 输出面板:每个 Agent 是"已配置 / 未检测到"一目了然。
提示:配置已写入,重启对应的 Coding Agent 会话后生效。
手动配置
一键命令之外,手动接入只需两步:写 MCP 配置 + 写提示词。所有 Agent 共用同一个 daemon 地址 http://localhost:8787/mcp。
1. MCP 配置
在 Agent 的全局 MCP 配置文件中注册 ace(各 Agent 的 MCP 配置文件与提示词文件在同一目录,见「提示词(使用指引)」表格):
{
"mcpServers": {
"ace": { "type": "http", "url": "http://localhost:8787/mcp" }
}
}
Claude Code 也可用命令行:claude mcp add ace --type http --url http://localhost:8787/mcp(用户级)。
TOML 系(Codex / Grok / Reasonix)与 OpenCode / ZCode 的结构字段略有差异,推荐直接使用一键命令自动写入,避免手误。
2. 提示词
把使用指引写入 Agent 的全局提示词文件(~/.claude/CLAUDE.md / ~/.codex/AGENTS.md 等,路径见「提示词(使用指引)」表格),以 <!-- ACE_START --> / <!-- ACE_END --> 标记块包裹。一键接入时已自动写入,重复运行会更新而非重复追加;内容参考「工具清单(AI Agent 使用指引)」一节。
3. stdio 模式(兜底,无 HTTP daemon 时)
若某 Agent 只支持 stdio:一键接入时扩展已在 ~/.local/bin/ 写入全局 ace 命令,配置为:
{ "type": "stdio", "command": "~/.local/bin/ace" }
stdio 模式下多会话自动 relay 共享上下文,cwd 自动路由项目。
双向通道(只读查询 / 导航 / Code Action)
Agent 以任意符号名跨文件查询,不依赖光标定位;Server 经 WS 下发 request,扩展复用 VS Code LSP 执行查询后回 response:
| method |
说明 |
definition / references / hover |
符号的定义位置 / 引用位置 / 类型与签名 |
workspace_symbols / document_symbols |
全局符号搜索 / 任意文件 outline |
implementations |
接口 / 抽象类的实现位置 |
signature |
函数 / 方法的参数列表 |
call_hierarchy / type_hierarchy |
直接调用关系 / 直接父类子类 |
open_file / reveal / select |
IDE 导航(打开 Tab / 跳转行列 / 选中区间,focus=false 后台打开不抢焦点) |
code_actions |
只读修复建议列表(标题 + 类型 + 是否首选,不含 edits,不应用修复) |
范围红线:全程只读查询 + IDE 导航定位 + 只读建议,不做写操作 / 代码执行 / 应用修复。能力跟随 VS Code 已装语言扩展(内置 JS/TS 等),非声明语言返回明确提示而非静默空。
提示词(使用指引)
一键接入时,扩展已把使用指引写入各 Agent 的全局提示词文件:
| Agent |
提示词文件 |
| Claude Code |
~/.claude/CLAUDE.md |
| Codex CLI |
~/.codex/AGENTS.md |
| Gemini CLI |
~/.gemini/AGENTS.md |
| OpenCode |
~/.config/opencode/AGENTS.md |
| Kimi Code |
~/.kimi-code/AGENTS.md |
| Qwen Code |
~/.qwen/AGENTS.md |
| ZCode |
~/.zcode/AGENTS.md |
| Grok CLI |
~/.grok/AGENTS.md |
| Qoder |
~/.qoder/AGENTS.md |
| Reasonix |
~/.reasonix/AGENTS.md |
内容以 <!-- ACE_START --> / <!-- ACE_END --> 标记块写入,重复运行一键命令会更新而非重复追加。你也可以手动把使用指引写入上述文件(内容参考「工具清单」一节),效果相同。
工具清单(AI Agent 使用指引)
以下指引面向 AI Coding Agent:你有 ACE 提供的 IDE 上下文感知工具(MCP),在合适的场景主动调用合适的工具,由 AI 决策,而不是等用户明确指定。工具名即 MCP 工具名;双向通道的协议 method 名(definition / references / hover 等)即对应工具去掉 get_ 前缀,见上节。
工具与用途
| 工具 |
用途 |
get_current_context |
完整 IDE 上下文:当前文件 / 光标 / 选中代码 / 标签页 / 诊断 / Git / 最近修改 |
get_active_file |
当前激活文件(路径 / 语言 / 光标 / 选中) |
get_selection |
当前选中的代码 |
get_cursor_position |
光标位置 |
get_open_tabs |
打开的标签页列表 |
get_workspace |
工作区信息(根路径 / 框架 / 包管理器) |
get_errors |
当前错误诊断(severity = error) |
get_recent_changes |
最近修改历史(按文件折叠) |
get_git_context |
Git 状态:分支 / 变更文件 / diff |
get_recent_events |
最近的 IDE 事件(打开 / 编辑 / 诊断更新 / Git 变更) |
get_symbol |
文件符号结构:传 file 查任意文件(函数 / 类 / 方法定义位置),缺省当前文件 |
search_symbol |
跨文件全局按名称搜索符号定义位置 |
get_definition |
符号的定义位置(可跨文件):传 symbol 按名查询(不依赖光标),缺省当前光标符号 |
get_references |
符号的引用位置(跨文件):传 symbol 按名查询,缺省当前光标符号 |
get_hover |
符号的类型 / 签名 / 文档:传 symbol 按名查询,缺省当前光标符号 |
get_implementations |
接口 / 抽象类的实现位置(跨文件,需传 symbol) |
get_signature |
函数 / 方法的签名文本(含参数,需传 symbol) |
get_call_hierarchy |
函数的直接调用关系(incoming 谁调用了它 / outgoing 它调用了谁,需传 symbol,可选 direction) |
get_type_hierarchy |
类 / 接口的直接父类 / 子类(supertypes / subtypes,需传 symbol,可选 direction) |
open_file |
在 IDE 中打开文件(需传 file;打开 Tab / 抢焦点,传 focus=false 后台打开不打扰) |
reveal_location |
打开文件并跳转指定行列(需传 file,可选 line / column,0-based) |
select_code |
打开文件并选中指定区间(需传 file + start / end,文档 offset) |
get_code_actions |
只读修复建议列表(需传 file + line;配合 get_errors 返回 IDE 建议的修复方案,不应用) |
get_context_summary |
某日(默认今天)开发上下文摘要,跨会话延续开发意图 |
select_project |
绑定当前项目(多项目时,之后调用默认路由到该项目) |
list_projects |
查看已接入上下文的所有项目 |
触发场景 → 应调用
| 场景 |
应调用 |
| 用户说"优化这里"、"看下这个"、"当前文件"、"刚才改了什么" 等模糊指代 |
get_current_context(若需选中代码则 get_selection) |
| 用户提到"报错"、"修复这个错误"、贴了错误码 |
get_errors,配合 get_active_file 定位 |
| 需要了解最近的开发改动 / 进度 |
get_recent_changes |
| 需要分支、未提交改动、diff |
get_git_context |
| 用户提到跨文件函数 / 类 / 组件 |
search_symbol(全局按名搜)或 get_symbol { file }(查任意文件结构) |
| 用户问某符号"在哪定义 / 被谁引用 / 什么类型" |
get_definition / get_references / get_hover(传 symbol 按名查询,不依赖光标) |
| 用户问接口"有哪些实现 / 有哪些类实现了它" |
get_implementations { symbol } |
| 用户问函数"签名 / 参数是什么" |
get_signature { symbol } |
| 用户问"X 调用了谁 / 谁调用了 X" |
get_call_hierarchy { symbol, direction }(incoming / outgoing) |
| 用户问"X 的父类 / 子类是什么" |
get_type_hierarchy { symbol, direction }(supertypes / subtypes) |
| 用户说"帮我打开 X 文件 / 看下 X" |
open_file { file }(传 focus=false 后台打开不打扰) |
| 用户说"帮我跳到 X 文件第 N 行 / 定位到这个位置" |
reveal_location { file, line, column }(0-based) |
| 用户说"帮我选中 X 文件这段代码" |
select_code { file, start, end }(文档 offset) |
| 用户看到报错、想知道 IDE 建议的修复方案 |
get_code_actions { file, line }(配合 get_errors,只读建议不应用) |
| 新会话开头想延续之前的开发意图 |
get_context_summary |
| 涉及多个项目 |
先 list_projects 查看,再 select_project 绑定目标项目 |
使用原则
- 模糊指代先取上下文,不猜测:用户说"这里 / 这个 / 当前"时,先调用工具获取真实状态,再回答或动手。
- 最小调用:优先用
get_current_context 一次拿全;按需再定向调用其他工具,不批量轰炸。
- 无上下文时:若工具返回"尚无 IDE 上下文",说明扩展未连接(或未打开文件),如实告知用户,不臆造。
- 多项目:同时接入多个项目时,工具默认路由到
select_project 绑定的项目;需指定时用 projectRoot 参数。
排错
| 现象 |
处理 |
Agent 报 SDK auth failed / Invalid OAuth error response |
daemon 是 HTTP 模式,Claude Code 等强制 OAuth。确认扩展已激活、daemon 在 :8787 运行(curl http://localhost:8787/mcp 有响应);daemon 已内置 OAuth 自动授权,无需手动配 token |
| 工具返回"尚无 IDE 上下文" |
扩展未连接 / 未打开文件。确认扩展已安装激活、工作区已打开 |
| 一键接入显示"未检测到"某 Agent |
该 Agent 未安装,或其全局配置目录不存在。手动配置见上文 |
| daemon 未自动拉起 |
确认扩展包内 dist/extension.js 与 mcp-server/dist/index.js 都存在(vsix 已内置);或用 ACE_SERVER_PATH 指定 server 路径 |
| 端口被占用 |
daemon 默认 :8787,可用环境变量 ACE_HTTP_PORT 改端口(需同步改各 Agent 配置) |
配置
| 变量 |
默认 |
说明 |
ACE_HTTP_PORT |
8787 |
daemon HTTP 端口(MCP over HTTP) |
ACE_WS_PORT |
47821 |
WebSocket 端口(收扩展推送) |
ACE_WS_URL |
ws://localhost:47821 |
扩展侧连接地址 |
ACE_MEMORY_PATH |
~/.ace/memory.json |
Agent Memory 落盘路径 |
ACE_SERVER_PATH |
— |
显式指定 daemon 脚本路径 |