Copilot Memory 与自定义指令的区别:记忆存在哪里、怎么删除
GitHub Copilot Memory 是公开预览中的仓库级记忆,由 GitHub 托管——它并不是你在磁盘上找到的那个文件夹。本攻略逐帧讲清每种记忆各自的存放位置、怎么查看和删除、如何为自己和组织开关云端记忆,并附一份可直接复制的自定义指令模板,用来写记忆永远替代不了的规则。12 步,全部对照 docs.github.com 与 VS Code 的记忆文档核对过。
太长不看
- 记忆不是仓库里的文件夹。GitHub Copilot Memory 由 GitHub 托管,作用域限定在单个仓库;查看和删除的入口是 Repository → Settings → Code & automation → Copilot → Memory。大家在磁盘上找到的那个文件夹,属于 VS Code 另一套本地记忆工具。
- 本地三档作用域,云端一档。VS Code 的记忆工具把 User、Session 和 Repository 笔记存在你本机,路径分别是 /memories/、/memories/session/ 和 /memories/repo/;GitHub Copilot Memory 用一个托管的、跨 agent 的仓库作用域取而代之,coding agent、code review 和 Copilot CLI 都会读它。
- 默认值由套餐决定。Copilot Pro 和 Pro+ 默认开启 Copilot Memory;Copilot Business 和 Enterprise 默认关闭,要由企业或组织所有者开启;如果两个组织都给你授权,按最严格的那档生效。
- 记忆会过期,指令不会。记忆由 Copilot 写入,会对照产生它的代码校验,28 天不用就自动删除。不能丢的规则——测试命令、安全要求——请写进 .github/copilot-instructions.md,这也是本页最后给模板的原因。
I tried out all the memory features in GitHub Copilot (User / Session / Repository / Copilot Memory)
演示视频:Yuzubon — ゆずぼん15:00
Instruction Files & /chronicle — Teaching Copilot Your Codebase
演示视频:Casey Irvine17:37
The latest in managing and auditing GitHub Copilot agents
演示视频:GitHub4:12
Managing and curating Copilot Memory (official docs, public preview)
官方文档:docs.github.com
Copilot Memory 还在公开预览,设置入口仍在调整。本页的启用路径、28 天过期规则和仓库记忆页面,均取自 docs.github.com 的“Managing and curating Copilot Memory”操作指南与 VS Code 的“Use memory with agents”参考文档;本地记忆文件夹路径来自录屏本身,属于 Windows 特有,macOS 和 Linux 下请在同一个 VS Code global storage 目录里找对应路径。
截图均已注明来源录屏,每一步都深链到对应时间点。文字步骤、对比表和模板为本页原创,未搬运任何字幕。
12 步全流程:从磁盘上的文件夹到可提交的指令模板
Copilot 记住了什么,存在哪里
- 1
先找到记忆文件夹,再动任何设置
VS Code 的记忆工具只在你本机写普通 Markdown 文件,不会把它们发给 GitHub。Windows 下路径是 %APPDATA%\Code\User\globalStorage\github.copilot-chat\memory-tool\memories\,截图里的 coding-style.md 就在这个目录中。macOS 对应 ~/Library/Application Support/Code/User/globalStorage/,Linux 对应 ~/.config/Code/User/globalStorage/,后面接的 github.copilot-chat/memory-tool/memories 路径一致。这些文件不会被提交,同事读不到;删掉文件就等于删掉记忆。

文件资源管理器停在 memory-tool 文件夹:VS Code 本地记忆工具背后的那些 Markdown 文件。看原视频 3:26 - 2
用户记忆是最先加载的那个文件
在对话里提一个偏好——比如 “I prefer early returns and longer, descriptive variable names”——记忆工具就会建一个用户记忆文件,并在回复里说明。截图里 coding-style.md 从 globalStorage › github.copilot-chat › memory-tool › memories 打开,聊天面板显示 “Reviewed memory file coding-style.md” 并确认文件已创建。用户记忆是唯一会自动注入每轮对话的作用域:VS Code 文档给出的上限是前 200 行。写十行有用的,别写两百行。

刻意写短的用户记忆,聊天面板确认了它写入的文件。看原视频 3:56 - 3
会话记忆:不用反复解释的那份计划
会话记忆在 Plan 模式里最有用。选中 Plan 再提需求,agent 会把实现计划存到 /memories/session/plan.md,只对当前这段对话可见——VS Code 文档说 Session 就是“仅当前对话”。切回 Agent 模式后直接引用这份计划,不用重新打一遍。会话记忆也是寿命最短的作用域:最后一次访问后 14 天就被清掉,所以别把下个月还要用的决定放在这里。

Copilot Chat 切到 Plan 模式,正在提“给 TODO 应用加一个 update 函数”的需求——就是这一步让 agent 把计划写进会话记忆。看原视频 7:06
仓库记忆与 GitHub 云端层
- 4
仓库记忆默认留在本地,除非你主动开启
说一句 “in this repository, remember that every new function needs a test”,agent 就会把它写进 /memories/repo/——仍然在你磁盘上,同事看不到,GitHub 服务器上也还没有,直到你改一个设置。截图里正在输入这条请求。大家口中的 “Copilot memory folder” 通常就是指这个作用域:文件夹确实存在,但它在 VS Code 的 global storage 里,不在仓库里,所以在项目里搜是搜不到的。

让 Copilot 记住一条仓库规则——这次写入落在本地仓库作用域。看原视频 10:00 - 5
打开云端开关后,只有新记忆会搬过去
Copilot Memory 是这套体系里由 GitHub 托管的那一半,在 VS Code 里需要单独开启:把 github.copilot.chat.copilotMemory.enabled 写进 .vscode/settings.json。VS Code 文档把 copilotMemory 列为可选开启项,与本地记忆工具相互独立。一旦设为 true,原本写进 /memories/repo/ 的内容就改发到 GitHub。有两点不变:已有的本地仓库记忆不会迁移,工具只负责创建——要查看或删除托管记忆,必须去 GitHub。

.vscode/settings.json 里的这处修改,把仓库记忆从本地文件夹改指向 GitHub。看原视频 13:10 - 6
在仓库里查看和删除记忆,而不是在你的设置里
官方文档指的就是这个页面:Repository → Settings → Code & automation → Copilot → Memory,标注为 Preview。记忆按最新在前排列,显示正文和标签;垃圾桶图标删单条,复选框可批量删。删除很重要,因为一条错的记忆比没有记忆更糟。Copilot 会拿每条记忆去对照产生它的引用,代码一变就忽略它,但基于误读写出的记忆仍然能通过这项检查。记忆本身也会在 28 天后自动过期。

GitHub 仓库设置里的 Copilot memory 页面,存着一条记忆,旁边就是删除按钮。看原视频 12:09
为团队开启,然后写指令
- 7
企业与组织所有者需要先开启
套餐决定谁来做什么。个人 Copilot Pro 和 Pro+ 订阅者默认开着 Copilot Memory,可以在 Settings → Copilot → Features 里关掉。Copilot Business 和 Enterprise 正相反:默认关闭,要等所有者开启——企业所有者走 AI Controls → Copilot → Features,选择 Let organizations decide、Enabled everywhere 或 Disabled everywhere;组织所有者走 Organization settings → Code, planning and automation → Copilot → Policies → Features → Copilot Memory → Enabled。如果两个组织都给你分配了 license,按最严格的那档生效。

企业版 AI Controls——Copilot Memory 的开启策略就放在这一组页面里。看原视频 1:06 - 8
自定义指令从 .github 文件夹开始
记忆由 Copilot 写;指令由你写,而且要提交。干活的就两个文件:.github/copilot-instructions.md 管整个仓库的规则,.github/instructions/NAME.instructions.md 只管部分路径,后者会拿 Copilot 正在改的文件去匹配。截图是微软自己的 VS Code 仓库,.github 里 copilot-instructions.md 和 instructions/、agents/、skills/、prompts/、hooks/ 并排——直接照抄一个公开跑了好几个月的仓库的结构。

microsoft/vscode 的 .github 文件夹,copilot-instructions.md 就在 instructions 目录旁边。看原视频 1:40 - 9
按路径生效的规则靠 applyTo 圈定
.instructions.md 文件靠 YAML front matter 决定什么时候加载。name 是界面上显示的标签,description 告诉 agent 这个文件适用于哪些任务,applyTo 是相对仓库根目录的 glob——截图里是一条真实 VS Code 指令文件上的 applyTo: src/vs/workbench/contrib/chat/browser/aiCustomization/**。当 applyTo 匹配到 agent 创建或修改的文件时,VS Code 会自动挂上这个文件;description 对得上任务时,也能按需拉进来。两个字段都省掉,就只有手动挂载才会加载。

一份真实的指令文件,applyTo 通配符把它锁在单个文件夹上。看原视频 5:20
自定义指令模板
- 10
个人指令同样是一个文件
在写仓库模板之前,先搞清你自己的默认值该放哪,因为它的优先级更高。Copilot CLI 和 agent host 会读 ~/.copilot/copilot-instructions.md,截图里是一个能用的例子,含 ## Output、## Working style 和 ## AI disclosure 三段——注意它有多短。在 github.com 上对应的是 Copilot Chat → 你的头像 → Personal instructions,GitHub 还提供内置模板和 [format] 这类占位符。优先级顺序是个人、仓库、组织,而且所有匹配到的内容都会发送,所以别让其中两份互相打架。

.copilot 主目录里的个人 copilot-instructions.md,含 output、working style 和 disclosure 三段。看原视频 4:10 - 11
先用 /init 生成初稿,再把它换掉
不必从空文件开始。仓库里没有指令文件时,Copilot CLI 会打印 “No copilot instructions found. Run /init to generate a copilot-instructions.md file for this project”——截图就是这个提示。跑一次 /init,再对照下面的模板改。命令清单要写准,凡是 agent 读代码就能知道的内容都删掉,绝对不要粘 secret、token 或客户数据:这个文件会提交,每个同事、每个 agent 都会读到它。

Copilot CLI 提示仓库还没有指令文件,并给出 /init。看原视频 10:00 - 12
确认一次会话到底加载了哪些文件
没法审计的模板就是猜。在 Copilot CLI 里,/instructions 会列出这次会话加载的每一个指令文件——截图中命令上方就是 “Loading environment: 18 custom instructions, 3 extensions, 26 hooks, 27 skills, 4 MCP servers” 这一行——每个文件都能只在本会话里临时关掉,不用删除。VS Code 里对应的是 Chat: Open Customizations 背后的 Agent Customizations 编辑器;至于仓库指令,可以展开聊天回复顶部的引用列表,确认 .github/copilot-instructions.md 确实被用上了。

Copilot CLI 里的 /instructions 命令,看一次会话加载了什么上下文最快的方式。看原视频 7:10
Copilot Memory、自定义指令与仓库指令对比
有三样不同的东西都被叫做 “Copilot memory”。只有第一样是 agent 写的,另外两样是你提交并维护的文件。这张表不是用来分高下的——它说明两个功能为什么并存:没人写下来的惯例交给记忆,能摆出证据的规则交给指令。
| 对比项 | Copilot Memory(托管) | 自定义指令(.github/copilot-instructions.md) | 路径指令(.github/instructions/*.instructions.md) |
|---|---|---|---|
| 是什么 | Copilot 在仓库里干活时推断出来的事实,以“主题 + 支撑它的引用”形式保存。 | 你写一次、对仓库里每个请求都生效的规则。 | 你为仓库里某个路径、某种语言或某个文件夹写的规则。 |
| 谁写的 | Copilot 自动写,触发条件是开启了该功能的用户干活。 | 你手写,用 Markdown。 | 你手写,用带 YAML front matter 的 Markdown。 |
| 存在哪里 | 在 GitHub 上,作用域限定单个仓库。查看和删除入口是 Repository → Settings → Copilot → Memory;你的工作区里没有对应文件。 | 在仓库里,位于项目根目录的 .github/copilot-instructions.md。 | 在仓库的 .github/instructions/ 下,一个作用域一个文件。 |
| 何时加载 | 自动加载,但必须先拿引用对照当前分支校验通过。 | 该仓库的每个请求都会带上,对话、agent 和 code review 都适用。 | 只有当 applyTo 通配符匹配到相关文件,或 agent 判断 description 与任务相关时才加载。 |
| 能留多久 | 28 天;被校验并再次使用的记忆会重写,从而延长寿命。 | 直到有人改动或删除文件为止——它和代码一起纳入版本管理。 | 直到有人改动或删除文件为止。 |
| 谁能看到 | 该仓库里开启了 Copilot Memory 的所有人;记忆永远不会离开这个仓库。 | 所有能访问该仓库的人,外加每个读取它的 agent 和审查者。 | 所有能访问该仓库的人。 |
| 怎么修改 | 在仓库设置里删除——记忆工具只会创建,不能查看或删除。 | 像改其他文件一样提 Pull Request。 | 像改其他文件一样提 Pull Request。 |
| 最适合 | 没人写进文档的惯例、审查者反复提同一种改法、这个代码库的安全模式。 | 技术栈与版本、准确的构建和测试命令、目录地图、安全与审查规则。 | monorepo 里的框架规则、测试文件惯例、某个文件夹的风格、某种语言的惯用法。 |
一份覆盖 Copilot 真正需要的六件事的自定义指令模板
GitHub 官方的建议是:文件要短、要具体——技术栈是什么、怎么跑、代码放哪、哪些规范是硬性的、什么不要做。下面这些块可以直接复制再删减——凡是 agent 读仓库就能推出来的行都删掉,因为臃肿的指令文件会稀释真正重要的规则。保存到仓库根目录的 .github/copilot-instructions.md。
# .github/copilot-instructions.md
## Project and stack
- Next.js 15 app router, TypeScript strict, Node 22.
- Package manager: pnpm. Never run npm or yarn install.
## Commands
- Build: pnpm build
- Lint: pnpm lint
- Test everything: pnpm test
- Test one file: pnpm test -- path/to/file.test.ts
## Layout
- Routes: src/app/**
- UI components: src/components/**
- Data access: src/lib/db.ts and src/lib/repositories/**
- Tests live next to the file they cover: *.test.ts
## Conventions
- Named exports only; no default exports from src/lib.
- Handle errors at the boundary and return early instead of nesting.
- Import order: node builtins, external packages, then @/ aliases.
## Testing and review
- Every behaviour change ships with a test in the same pull request.
- Run the single-file test before requesting review.
- Commit messages follow Conventional Commits.
## Do not
- Do not edit files under src/generated/**.
- Do not add a dependency without calling it out in the pull request.
- Do not log secrets, tokens or full request bodies.- 1项目与技术栈——用一行写清框架、语言模式和包管理器。这个块能拦住 agent 在 npm、pnpm、yarn 之间瞎猜,给你生成一个你没让它生成的 lockfile。
- 2命令——准确的构建、lint、测试和单文件测试命令,从你的 CI 配置里抄,别凭记忆写。测试命令写错,是你最赔不起的一行。
- 3目录结构——路由、组件、数据访问和测试分别在哪。直接指目录,不要用散文描述架构;路径能核对,段落不能。
- 4规范——命名、错误处理、import 顺序和你团队真正在执行的格式规则。每条规则都要能二值判断:代码要么遵守,要么没遵守。
- 5测试与审查——哪些改动必须带测试、审查要验证什么、提交信息和分支的约定。这个块能把本该靠记忆兜住的东西变成硬保证。
- 6禁止事项——反模式。生成的文件、不吭声就加依赖、无关重构、日志里出现 secret。想一次性拦住一整类烂 PR,负面规则最省事。
用第二个文件把范围收窄
把针对文件夹的规则挪到 .github/instructions/ 下各自的文件里,仓库文件就能保持简短。起作用的是 front matter:applyTo 把文件自动挂到匹配的路径上,description 让 agent 在对的任务里把它拉进来。VS Code 文档写明支持的字段是 name、description 和 applyTo。
---
name: 'React components'
description: 'Use when creating or updating components under src/components.'
applyTo: 'src/components/**/*.tsx'
---
# React components
- One component per file, named after the file.
- Props are typed with an explicit interface; no React.FC.
- Colocate styles with the component; no global class names.别把自己的偏好写进仓库文件
任何关于你而不是关于项目的东西——回复长度、语气、你希望 diff 怎么解释——都该放进个人指令。Copilot CLI 和 agent host 会读 ~/.copilot/copilot-instructions.md;在 github.com 上打开 Copilot Chat,点头像,选 Personal instructions,GitHub 在那里还提供带 [format] 这类占位符的模板。个人指令优先级高于仓库指令和组织指令,所以在这里设过的偏好不用在每个仓库重复一遍。
最后两条规则对所有块都适用:绝不要把 secret、token 或客户数据放进会提交的指令文件;也绝不要让仓库指令和某条记忆互相矛盾——两者冲突时,Copilot 会尽量同时遵循两份上下文,结果不可预测。如果某条记忆一直和你写的规则对不上,删掉记忆,而不是把规则放宽。
