Copilot Memory · 图文攻略

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. 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 路径一致。这些文件不会被提交,同事读不到;删掉文件就等于删掉记忆。

    Windows File Explorer opened at the VS Code memory tool folder AppData Roaming Code User globalStorage github.copilot-chat memory-tool memories holding the coding-style.md memory file
    文件资源管理器停在 memory-tool 文件夹:VS Code 本地记忆工具背后的那些 Markdown 文件。看原视频 3:26
  2. 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 行。写十行有用的,别写两百行。

    VS Code editor showing coding-style.md beside Copilot Chat confirming the user memory file was created from a prompt about early returns and long descriptive variable names
    刻意写短的用户记忆,聊天面板确认了它写入的文件。看原视频 3:56
  3. 3

    会话记忆:不用反复解释的那份计划

    会话记忆在 Plan 模式里最有用。选中 Plan 再提需求,agent 会把实现计划存到 /memories/session/plan.md,只对当前这段对话可见——VS Code 文档说 Session 就是“仅当前对话”。切回 Agent 模式后直接引用这份计划,不用重新打一遍。会话记忆也是寿命最短的作用域:最后一次访问后 14 天就被清掉,所以别把下个月还要用的决定放在这里。

    Copilot Chat in VS Code set to Plan mode with a request to add an update function to a TODO app, the request that makes the agent write a plan into session memory
    Copilot Chat 切到 Plan 模式,正在提“给 TODO 应用加一个 update 函数”的需求——就是这一步让 agent 把计划写进会话记忆。看原视频 7:06

仓库记忆与 GitHub 云端层

  1. 4

    仓库记忆默认留在本地,除非你主动开启

    说一句 “in this repository, remember that every new function needs a test”,agent 就会把它写进 /memories/repo/——仍然在你磁盘上,同事看不到,GitHub 服务器上也还没有,直到你改一个设置。截图里正在输入这条请求。大家口中的 “Copilot memory folder” 通常就是指这个作用域:文件夹确实存在,但它在 VS Code 的 global storage 里,不在仓库里,所以在项目里搜是搜不到的。

    Copilot Chat in VS Code receiving the prompt asking it to remember a repository rule about writing tests, a write that stays in the local repository memory scope
    让 Copilot 记住一条仓库规则——这次写入落在本地仓库作用域。看原视频 10:00
  2. 5

    打开云端开关后,只有新记忆会搬过去

    Copilot Memory 是这套体系里由 GitHub 托管的那一半,在 VS Code 里需要单独开启:把 github.copilot.chat.copilotMemory.enabled 写进 .vscode/settings.json。VS Code 文档把 copilotMemory 列为可选开启项,与本地记忆工具相互独立。一旦设为 true,原本写进 /memories/repo/ 的内容就改发到 GitHub。有两点不变:已有的本地仓库记忆不会迁移,工具只负责创建——要查看或删除托管记忆,必须去 GitHub。

    VS Code with .vscode settings.json open and modified next to a Copilot Chat session, the setting that switches repository memories to GitHub Copilot Memory cloud storage
    .vscode/settings.json 里的这处修改,把仓库记忆从本地文件夹改指向 GitHub。看原视频 13:10
  3. 6

    在仓库里查看和删除记忆,而不是在你的设置里

    官方文档指的就是这个页面:Repository → Settings → Code & automation → Copilot → Memory,标注为 Preview。记忆按最新在前排列,显示正文和标签;垃圾桶图标删单条,复选框可批量删。删除很重要,因为一条错的记忆比没有记忆更糟。Copilot 会拿每条记忆去对照产生它的引用,代码一变就忽略它,但基于误读写出的记忆仍然能通过这项检查。记忆本身也会在 28 天后自动过期。

    GitHub repository settings showing the Copilot memory page in public preview with one stored testing memory tagged testing and vscode beside the trash icon that deletes it
    GitHub 仓库设置里的 Copilot memory 页面,存着一条记忆,旁边就是删除按钮。看原视频 12:09

为团队开启,然后写指令

  1. 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,按最严格的那档生效。

    GitHub enterprise AI Controls page showing the Agents, Copilot and MCP pages in the sidebar where a Copilot Memory enablement policy is set for every organization
    企业版 AI Controls——Copilot Memory 的开启策略就放在这一组页面里。看原视频 1:06
  2. 8

    自定义指令从 .github 文件夹开始

    记忆由 Copilot 写;指令由你写,而且要提交。干活的就两个文件:.github/copilot-instructions.md 管整个仓库的规则,.github/instructions/NAME.instructions.md 只管部分路径,后者会拿 Copilot 正在改的文件去匹配。截图是微软自己的 VS Code 仓库,.github 里 copilot-instructions.md 和 instructions/、agents/、skills/、prompts/、hooks/ 并排——直接照抄一个公开跑了好几个月的仓库的结构。

    GitHub file listing of the .github folder in microsoft/vscode showing copilot-instructions.md next to the instructions, agents, skills, prompts and hooks folders used by GitHub Copilot
    microsoft/vscode 的 .github 文件夹,copilot-instructions.md 就在 instructions 目录旁边。看原视频 1:40
  3. 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 对得上任务时,也能按需拉进来。两个字段都省掉,就只有手动挂载才会加载。

    GitHub blob view of ai-customization.instructions.md in microsoft/vscode showing the description and applyTo front matter that scopes a path-specific instruction file to one source folder
    一份真实的指令文件,applyTo 通配符把它锁在单个文件夹上。看原视频 5:20

自定义指令模板

  1. 10

    个人指令同样是一个文件

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

    VS Code showing the personal copilot-instructions.md inside the dot copilot home folder, with profile defaults covering output style, working style and AI disclosure rules
    .copilot 主目录里的个人 copilot-instructions.md,含 output、working style 和 disclosure 三段。看原视频 4:10
  2. 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 都会读到它。

    GitHub Copilot CLI terminal stating that no copilot instructions were found and prompting to run the init command that generates a copilot-instructions.md file for the project
    Copilot CLI 提示仓库还没有指令文件,并给出 /init。看原视频 10:00
  3. 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 确实被用上了。

    GitHub Copilot CLI terminal showing the slash instructions command underneath a loading environment line that counts eighteen custom instructions before a session starts
    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.
一份按路径生效的指令文件:三个 front matter 字段,后面是只对一个文件夹生效的规则。

别把自己的偏好写进仓库文件

任何关于你而不是关于项目的东西——回复长度、语气、你希望 diff 怎么解释——都该放进个人指令。Copilot CLI 和 agent host 会读 ~/.copilot/copilot-instructions.md;在 github.com 上打开 Copilot Chat,点头像,选 Personal instructions,GitHub 在那里还提供带 [format] 这类占位符的模板。个人指令优先级高于仓库指令和组织指令,所以在这里设过的偏好不用在每个仓库重复一遍。

最后两条规则对所有块都适用:绝不要把 secret、token 或客户数据放进会提交的指令文件;也绝不要让仓库指令和某条记忆互相矛盾——两者冲突时,Copilot 会尽量同时遵循两份上下文,结果不可预测。如果某条记忆一直和你写的规则对不上,删掉记忆,而不是把规则放宽。

Copilot Memory 常见问题

继续探索