GrayCode
一个面向 VS Code 的 AI 编程助手扩展 多模型渠道 · 工具调用 · MCP · 设计/计划/审查工作流 · 永久记忆 · 多模态上下文 目录
关于 GrayCodeGrayCode 是运行在 VS Code 里的 AI 编程助手,它能在聊天中理解你当前的工作区,读取和修改文件,搜索代码,执行命令,查看符号引用,管理任务计划,也可以通过 MCP 接入外部工具。它适合让 AI 帮你阅读陌生项目、解释模块关系、定位 Bug,或者直接改代码并通过 VS Code Diff 预览后再接受或拒绝。你可以把需求先沉淀为设计文档,再生成执行计划,最后按计划实现,也可以对已有改动进行 Review 并生成结构化审查记录。在长对话中它可以按设置自动总结上下文,降低重复解释成本。通过 MCP、Skills、Sub-Agents 可以扩展专用能力,而永久记忆功能让 AI 跨会话记住项目约定、设计决策和个人偏好,并默认在新会话中进行记忆唤起。 快速开始
第一次可以试试:「请阅读这个项目的结构,告诉我主要模块分别负责什么,并给出上手建议」,或者「请帮我定位为什么某个功能异常。先搜索相关代码,分析原因,确认方案后再修改」。 核心能力多渠道模型支持 —— GrayCode 支持 Gemini(Google Gemini API 及兼容格式服务,支持原生 Function Calling、多模态、思考配置、图片数量上限等)、OpenAI Compatible(OpenAI Chat Completions 及兼容接口,适合 OpenAI、DeepSeek、各类中转与兼容服务)、OpenAI Responses(使用 工具调用与代码操作 —— AI 可以调用内置工具完成真实操作:读写文件、创建目录、删除文件,用结构化内容替换、插入/删除行、搜索替换等方式修改代码,搜索文件名和文件内容,执行终端命令并返回输出,使用 VS Code LSP 获取符号、跳转定义、查找引用,生成/处理图片,创建 Design / Plan / Review / Progress 文档,维护 TODO 列表、检索历史对话、发出 Windows 通知。设置页面中的工具名称与说明随界面语言切换(中/英/日),模型调用时仍使用 设计、计划、审查工作流 —— GrayCode 内置面向复杂任务的文档工具:Design 把需求、约束、方案、接口和风险整理到 智能上下文 —— GrayCode 会根据设置把当前环境信息发送给模型:工作区文件树、当前打开的标签页、当前活动文件、VS Code 诊断信息、固定文件/固定目录、输入框里拖拽或引用的文件、文件夹、选中代码,以及当前时间、系统环境、工作区路径等动态信息。也支持"单次动态上下文"和"保留动态上下文"策略,适合需要跨多轮持续引用同一批文件的任务。 💡 推荐设置: 如果你习惯连续输入多轮(长对话、持续让 AI 改代码),可以在设置 → 提示词的模式编辑中把动态上下文策略选为「保留旧动态上下文原位」。这样有助于保持请求前缀稳定,提高 Anthropic Prompt Caching、DeepSeek KVCache 等缓存的命中率;完整原理和适用场景见下文「动态上下文策略」。 多模态与附件 —— 输入框支持添加文件、图片、音频、视频、文档等附件。文本附件(如 txt)按 MIME 类型解码为文本块发送;PDF 在 OpenAI Responses 下转为 MCP 扩展 —— 支持 Model Context Protocol,可连接外部 MCP Server(stdio、sse、streamable-http)。连接后,MCP 工具可以和内置工具一起提供给模型使用。 Skills 与 Sub-Agents —— Skills 是用户自定义知识模块,AI 可通过 永久记忆(OptMem) —— GrayCode 内置了 OptMem 永久记忆系统,让 AI 跨会话记住重要信息。默认提示词会要求 AI 在每次新会话开始时先调用 对话与体验 —— 多对话标签页,支持同时保留多个工作现场。对话历史自动保存,可查看、恢复、迁移旧历史。消息队列让 AI 忙碌时可以继续输入,后续自动排队——排队消息在 LLM 执行完当前动作后即自动发出,无需等待整轮结束;后台子代理 / 后台命令完成时回执同样「完成即插入」,不再硬等模型回合结束(主会话工具循环/流式中直接发消息会插入当前回合立即投递)。工具执行状态、token 使用、思考内容、响应耗时等信息可视化。自动存档点可按策略为关键消息或工具执行创建恢复点。声音提醒和 Windows 通知适合长时间任务完成或等待确认时提醒你。中英日文界面与外观设置。用量统计页面从对话历史回溯聚合 token 用量,支持总览 + 按对话/按模型/按日期三个维度,含条形图可视化、缓存写入/命中与成本估算,支持时间范围筛选。Mermaid 图表渲染让 Markdown 代码块中的 Mermaid 语法自动渲染为流程图、时序图等图表。 流式渲染体验 —— AI 输出经过精细的流式渲染:平滑输出以自适应速率匀速放字(积压多自动加速、供应商卡顿时打字渐缓而非冻结,外观设置可调档位:直通 / 灵敏 / 标准 / 丝滑),字符级淡入流水线让高生成速度下呈现连绵字符流,已完成段落即时渲染 Markdown 格式(列表/代码块不再等整段输出结束);流式期间长代码块自然展开方便跟随阅读,结束后保留展开态不塌缩。输入区底部 TPS 实时可视化条显示当前生成速度曲线(EMA 平滑、可关闭)。启动时开屏动画以描线动画绘制 Gray logo(可关闭)。 使用时间统计 —— GrayCode 自动统计你的 IDE 活跃时间:以 60 秒心跳 + 用户活动事件(编辑、光标、滚动、切换编辑器、终端、窗口聚焦)采集活跃状态,连续 5 分钟无活动自动暂停;AI 工作期间(模型流式生成、工具执行、子代理生成、后台任务)同样记为活跃。用量统计页与设置 → 用量统计中的「使用时间」区块展示今日已用、当前连续工作时长与范围内合计,近 7/30 天的每日使用时长条形图,90 天及以上的按月聚合(点击月份展开每日明细),以及最近 7 天 × 24 小时作息热力网格(悬停查看该小时活跃分钟数),范围支持近 7 天 / 30 天 / 90 天 / 1 年 / 全部。AI 也可通过 树状分支对话 —— 重新生成(reroll)与编辑用户消息不再破坏历史:旧回答保留为候选分支,同一父节点下可管理多个候选(上限 10 个),支持左右切换候选并重建当前活跃路径,每个候选可继续向下对话形成独立子分支;消息区顶部的候选切换器(‹ 2/3 ›)与完整分支树面板可查看/切换/重命名/软删除分支(软删可恢复,保留期默认 30 天,设置页可一键清理)。分支树面板提供「分支导航 / 完整消息」双模式:导航模式折叠连续线性消息只保留分支点,完整模式为轨道式泳道布局可查看全部节点。编辑用户消息时可选「保持当前分支」原地保存——只改写目标消息文本,后续消息、检查点与分支全部保留,不重新生成。分支切换默认仅切聊天,检测到分支执行过写工具或持有工作区存档时提示是否连同工作区存档一起恢复(恢复前统一拦截未保存文件并确认,不再静默丢弃未保存内容);存档与分支节点双向关联(工具执行自动绑定),分支删除时按引用计数清理不再使用的存档。用量统计包含全部分支(非活跃候选的消耗也计入)。 子代理(Sub-Agents) —— 可配置专用子代理限定工具集与提示词;子代理支持嵌套(子代理可再派生子代理,深度上限 2,权限继承父级);支持前台/后台两种模式,后台子代理通过任务栏查看与取消,完成后的回流卡片支持默认折叠 / 中展开 / 完全展开三段式视图;用户发送新消息时前台子代理自动转为后台继续运行而不会被中断;子代理之间及与主对话之间可通过 模型渠道配置所有渠道都支持或部分支持 API URL / API Key、模型列表(可手动添加或从服务端拉取)、工具模式(function_call 使用原生工具调用能力,xml 把工具说明注入为 XML 格式适合不稳定或不支持原生工具的模型,json 把工具说明注入为 JSON 代码块格式)、preferStream / stream 控制是否优先流式输出、timeout 请求超时时间、自动重试(失败后重试次数和间隔)、自定义 Headers(给中转站或自建服务添加额外请求头)、自定义 Body(追加或覆盖请求体字段,支持简单键值和完整 JSON)、上下文阈值(到达一定 token 占比后裁剪或总结上下文)、strict tools(在支持的渠道上让工具参数更严格地遵守 schema)、Token 计数方式(可使用渠道默认方式、Gemini countTokens API、自定义 OpenAI 格式计数 API、OpenAI Responses、Anthropic count_tokens 或本地估算)。 Gemini 常用配置包括 API URL(默认可使用 Gemini API 地址)、API Key(可选择是否使用 OpenAI Compatible 适用于 OpenAI Chat Completions 以及兼容服务,例如部分第三方中转、自建网关或兼容 OpenAI 格式的模型服务。常用配置包括 temperature、max_tokens、top_p、frequency_penalty、presence_penalty、Reasoning 参数(如 effort、summary)、自定义 Headers / Body 适配中转站特殊参数、DeepSeek OpenAI Responses 适用于 Responses API,它和 Chat Completions 的主要差异是使用 input、instructions 和 output 风格结构。常用配置包括 API URL(通常填写基础地址,不必手动拼完整 Anthropic 适用于 Claude API。常用配置包括 API URL / API Key、可选择是否使用 常用工作流让 AI 改代码 —— 用自然语言描述要改的功能或 Bug,让 AI 先阅读相关文件并说明修改方案,AI 调用文件工具生成 Diff,在 VS Code Diff 视图检查修改,点击接受或拒绝变更,让 AI 执行测试或你自己执行验证。建议提示:「先定位相关代码并说明方案,等我确认后再修改。修改后运行相关测试」。 复杂需求:Design → Plan → Implement —— 适合较大的功能改动。切到 Design 模式让 AI 生成设计文档,确认设计后切到 Plan 模式让 AI 生成实施计划和 TODO,回到 Code 模式按计划逐项实现,实现过程中让 Progress 记录里程碑和风险,最后切到 Review 模式做审查。推荐提示:「请先为这个需求创建 design 文档,不要直接写代码。需要列出范围、方案、影响面、风险和验收标准」。 只问问题不改代码 —— 切换到 Ask 模式,或直接说明:「只分析和解释,不要修改任何文件,也不要执行命令」。 审查已有改动 —— 切换到 Review 模式:「请审查当前工作区改动,重点看正确性、边界情况、测试覆盖和可维护性,输出结构化 review 文档」。 长对话续航 —— 当上下文变长时可以开启自动总结,手动让 AI 总结当前上下文,使用 Plan / Progress 文档保存任务状态,使用"保留动态上下文"发送让关键上下文跨回合固定。 内置工具一览工具是否可用取决于设置开关、依赖状态、当前渠道能力和工作区权限策略。
设置页面说明点击聊天面板右上角设置按钮可以看到渠道(管理模型渠道、模型列表、API 参数、工具模式、重试、自定义 Headers/Body 等)、工具(启用/禁用工具,调整工具配置,设置单回合最大工具调用次数)、自动执行(控制哪些工具可自动执行,哪些必须人工确认)、MCP(添加、连接、管理 MCP Server)、存档点(配置自动 checkpoint、四层排除规则与清理恢复点,支持预览排除结果)、总结(配置自动总结阈值、总结模型和总结提示词)、图像生成(配置图片生成服务和相关参数)、依赖(检查和安装部分工具依赖)、上下文(控制文件树、打开标签页、诊断、固定文件等上下文注入)、提示词(管理 Prompt 模式、传统模板、预设条目 Prompt Entries、动态上下文模板/策略、模板变量和模式级工具策略)、Token 计数(配置不同渠道的 token 计数方法)、Sub-Agents(配置专用子代理、工具范围和提示词)、声音(配置任务完成、错误、警告等提示音)、外观(配置界面语言、加载文字、开屏动画、TPS 实时可视化条、流式平滑档位、选中代码入口等 UI 偏好)、用量统计(内嵌「使用时间」区块与 Token 用量摘要卡片,含「查看完整统计」整页入口)、记忆(配置永久记忆系统 OptMem,自定义 AI 记忆使用提示词)、通用(代理、数据存储路径迁移、设置导入/导出等通用功能)。 上下文与提示词Prompt 模式 —— 默认内置五种模式:Code(日常编码、修改文件、运行测试)、Design(需求分析和方案设计,偏向先产出设计文档)、Plan(任务拆解、TODO、执行计划)、Ask(只问答、解释、分析,尽量不修改文件)、Review(审查代码和改动,产出 review 记录)。你可以在设置 → 提示词中修改、复制、删除或新增模式。每个模式都可以独立配置组装方式(传统模板或预设条目)、静态系统提示词、动态上下文模板、动态上下文保留策略、模式级工具策略(继承默认工具集,或只允许某些工具)。聊天输入框底部的模式选择器会使用这些模式;保存提示词设置后输入区会刷新模式列表。 传统模板与预设条目 —— GrayCode 目前支持两种提示词组装方式。传统模板(Legacy)适合简单、兼容旧配置、只需要一段系统提示词和一段动态上下文的场景,template 作为系统提示词,dynamicTemplate 作为临时动态上下文消息插入请求。预设条目(Prompt Entries)适合想精确控制 system/user/assistant 上下文顺序或想指定真实聊天历史插入位置的场景,按条目顺序组装,Chat History 条目表示真实对话历史插入点。 传统模板是最容易理解的模式:系统提示词模板用于长期稳定的规则和角色说明,适合放环境说明、工具说明、总体行为规范;动态上下文模板每轮请求临时生成不写入真实聊天历史,适合放文件树、打开标签页、诊断、TODO、固定文件等会变化的信息。如果你只是想改 AI 的角色、语气或默认做事方式,使用传统模板即可。 预设条目更像一个"请求骨架编辑器"。在设置 → 提示词中把组装方式切到预设条目后可以新增、复制、删除、启用/禁用、拖拽排序条目。条目分为普通 Prompt 条目(会按所选角色发送给模型,可写内容和变量)和 Chat History 条目(固定的真实聊天历史插入点,不会作为普通消息发送,不可删除、不可禁用,但可以拖动调整位置)。普通 Prompt 条目有三种角色:system(合并进系统提示词,典型用途是全局规则、工具说明、输出格式、长期约束)、user(作为临时用户上下文插入请求不保存到真实历史,典型用途是当前任务上下文、文件树、TODO、补充材料)、assistant(作为临时助手消息插入请求不保存到真实历史,典型用途是少量示例回复、期望格式示例、预置中间状态)。Chat History 的位置很关键:放在所有条目后面时模型会先看预设规则和上下文再看真实历史,放在中间可以实现"历史前置上下文 → 真实历史 → 历史后置约束",放在前面适合把一些强约束放到真实历史之后再次强调。预设条目支持从传统模板转换,适合把旧的一大段 prompt 拆成多个小块后续更容易维护。 动态上下文策略 —— 动态上下文是"每次请求临时生成的上下文",例如文件树、打开标签页、当前活动文件、诊断、TODO、固定文件等,它通常不会写入真实对话历史避免历史越来越脏。GrayCode 支持两种动态上下文保留策略:single(每轮只插入当前最新的一份动态上下文;旧回合的动态上下文不会固定回放,适合大多数普通聊天避免重复上下文占 token)、preserve(保留每个回合缓存过的动态上下文并尽量插回原来的历史位置;新回合上下文插入到新回合位置;请求前缀保持稳定有利于 LLM Prompt Cache 命中,适合多轮连续编辑同一批文件、需要模型记住每轮当时看到的上下文、用户输入次数多的长对话)。使用建议:日常问答、短任务用 single;长任务、多轮实现、审查过程中需要保持上下文位置稳定时可以用 preserve(即「保留旧动态上下文原位」)。请求前缀稳定后有助于提高 Anthropic Prompt Caching、DeepSeek KVCache 等缓存的命中率,并可能降低后续请求的延迟和成本,实际收益取决于模型服务及请求内容。preserve 会增加历史 token 压力,如果发现上下文过长可以切回 single 或开启自动总结。动态上下文策略可以在提示词模式里配置;输入区也提供「发送并保留旧动态上下文原位」入口用于临时覆盖本次发送策略。 上下文感知设置 —— 设置 → 上下文控制"哪些信息可以成为动态上下文":是否发送工作区文件树、文件树最大深度、是否发送打开的标签页列表、打开标签页最大数量、是否发送当前活动编辑器路径、是否发送 VS Code 诊断以及诊断严重程度和数量限制、自定义忽略模式避免把 node_modules、日志、构建产物等塞进上下文。这些开关决定变量能不能生成内容;提示词模板或预设条目里是否引用变量则决定这些内容最终会不会被放进请求。 模板变量 —— 系统提示词、动态上下文模板和预设条目内容都支持 固定文件和上下文徽章 —— 输入区支持添加上下文徽章:文件或目录、当前编辑器选区、附件、固定文件、Skill。这样可以明确告诉模型"这轮要重点看什么"。 MCP Skills and Sub-AgentsMCP —— 在设置 → MCP 中添加服务器:stdio(填写命令、参数和环境变量)、sse(填写 SSE URL 和请求头)、streamable-http(填写 HTTP URL 和请求头)。连接成功后服务端暴露的工具会进入模型可用工具集合。某些模型对 JSON Schema 字段较挑剔,可以开启 schema 清理。 Skills —— Skills 是可复用知识模块,适合放项目约定、Commit 规范、常用排查手册、特定框架或业务知识。启用后 AI 会看到可用 Skill 列表,并可用 Sub-Agents —— Sub-Agents 适合把任务拆给"专门角色",例如测试分析代理、文档整理代理、安全审查代理、前端样式代理。每个子代理可以设置自己的提示词和允许使用的工具范围;为避免子代理重复或错误地改写跨会话数据,永久记忆工具不会进入子代理可用工具列表。主模型调用子代理时可传入 SubAgent Monitor —— GrayCode 提供独立的 SubAgent Monitor 面板用于实时查看和管理子代理运行状态:多 run 标签页可同时监控多个子代理,实时输出自动跟随贴底时随内容增长自动滚动,暂停/继续/退出控制可中途干预子代理执行,历史 run 只读回看(已完成或已取消的 run 标记为「历史运行 · 仅可查看」),「加载更早消息」支持翻看完整 transcript,后台派发的子代理完成后以紧凑卡片回流到主聊天内联结果正文并支持跳转 Monitor 查看完整记录。 数据存储与同步VS Code Settings Sync —— 大部分设置已经迁移到 VS Code Settings 的 自定义存储路径 —— 在设置 → 通用中可以配置数据存储路径并迁移数据。迁移后需要重新加载窗口生效。 旧版本迁移 —— 从旧版本升级时 GrayCode 会尝试把旧的 设置导入/导出 —— 在设置 → 通用中可以将渠道配置、MCP 服务器、Skills 和 VSCode 设置导出为 JSON 文件或从文件导入恢复。支持跳过已存在项和覆盖全部两种导入模式。设置导出不包含对话历史、存档点、永久记忆原始数据和工作区文件;这些数据需要通过存储路径迁移或单独备份。也可通过命令面板执行 安装与更新要求 VS Code 从 VSIX 安装 —— 可以前往 GitHub Releases 获取对应版本的 从源码构建并安装 —— 当前仓库使用并提交
本地开发推荐:VS Code 调试配置 —— 打开本仓库后在 VS Code 的 Run and Debug 中选择 手动启动 —— 终端 A 运行 常用脚本 —— 项目结构
常见问题为什么 AI 没有调用工具? 可以检查当前渠道是否启用了工具,工具模式是否适合当前模型(原生不稳定时可尝试 xml 或 json),设置 → 工具中该工具是否启用,工具是否缺少依赖,当前 Prompt 模式是否限制了工具策略。 为什么工具执行前需要确认? 在设置 → 自动执行中可以控制每个工具是否自动执行。删除文件、执行命令、写入工作区外路径等敏感操作建议保留确认。 为什么读取工作区外文件失败? read_file / write_file 对工作区外路径有独立访问策略。到设置 → 工具中展开对应工具,修改工作区外访问策略。 read_file 如何一次读取多个文件? 读取单个文件时继续使用 为什么模型上下文太长? 可以开启自动总结,调低上下文阈值,减少文件树、打开标签页、诊断等动态上下文,减少固定文件数量,对 Gemini 多模态历史设置图片数量上限。 修改后在哪里接受 Diff? 当工具生成文件修改时 VS Code 会打开 Diff 预览。编辑器标题区域和快捷键可用于接受/拒绝:接受当前块( Windows 通知或声音没有出现? 请检查设置 → 声音是否启用对应事件,Windows 系统通知是否允许 VS Code 发送通知,Webview 是否已经被浏览器策略解锁音频播放。 贡献欢迎通过 Issues 提交问题,也欢迎提交 Pull Request。建议在提交前运行 许可证本项目采用 MIT License。 |