为什么 Amp 加载的内容超出了你的要求
三条包含规则,其中两条是无条件的
Amp 的发现机制非常精确,一旦你阅读了它,就很容易理解:
"当前工作目录(或编辑器工作区根目录)以及父目录(最高到$HOME)中的AGENTS.md文件总是会被包含。"
"当智能体读取子树中的文件时,子树中的 AGENTS.md 文件会被包含。""系统级引导文件,以及$HOME/.config/amp/AGENTS.md和$HOME/.config/AGENTS.md(如果存在),总是会被包含。"
因此,三条规则中有两条是无条件的。只有子树规则是有条件的,并且它是在智能体读取该子树中的文件时触发,而不是根据你配置的任何内容触发。
这意味着添加引导的默认方式——将其放在根目录的 AGENTS.md 中——也是最昂贵的方式。它在仓库中的每个任务中都会常驻。
个人和系统文件叠加在最上层
位置表列出了 Amp 寻找的几个地方:仓库文件,用于 "个人偏好、设备特定命令以及你在提交前在本地测试的引导" 的 $HOME/.config/amp/AGENTS.md 和 $HOME/.config/AGENTS.md,以及用于 "所有 Amp 会话的系统级或组织管理的引导" 的 /etc/ampcode/AGENTS.md、/Library/Application Support/ampcode/AGENTS.md 或 %ProgramData%\ampcode\AGENTS.md。
所有这些文件只要存在就总是会被包含。在某人设置了组织管理文件、你拥有个人文件且仓库拥有根文件的机器上,在智能体查看任何代码之前,就已经有三个文件常驻了。
一个可能会让你感到意外的备用方案
"如果目录中不存在AGENTS.md,但存在名为AGENT.md(没有S)或CLAUDE.md的文件,则该文件将被包含。"
这很有用——这意味着为其他工具设置的仓库无需任何修改即可在 Amp 中工作。但这也意味着你遗忘的陈旧 CLAUDE.md 也是生效的引导,而你以为已经删除了指令的目录可能仍然保留着一些指令。在寻找为什么旧规范不断出现的原因之前,这很值得了解。
Amp 本身推荐进行拆分
文档并没有将一个庞大的根文件视为预期的设计:
"在具有多个子项目的大型仓库中,我们建议保持顶层AGENTS.md的通用性,并在每个子项目的子树中创建更具体的AGENTS.md文件。"
这是答案的前半部分。globs 机制是后半部分,它处理了子树无法处理的情况:适用于文件类型而非目录的引导。
人们尝试过的方法
将所有内容放入根目录的 AGENTS.md。 这是默认做法,在文件增长到智能体无法可靠遵循所有内容之前一直有效。在每个任务中,每个规范都会与其他规范争夺注意力。
删除引导以节省上下文。 有效但有损。你删除的规则之所以存在,是因为曾经有人犯过错。
为所有内容创建子树文件。 当引导是目录结构时,这确实很好,这也是 Amp 推荐它的原因。但它对 "绝不使用 any 类型" 毫无作用,因为该规则适用于所有地方的 TypeScript 文件。
用纯文本编写条件并寄予希望。 在常驻文件中添加 "在处理 API 端点时,请遵循以下规则"。文本成本仍然相同,而且现在你依赖模型去应用一个你本可以用模式(pattern)表达的过滤器。
在没有 frontmatter 的情况下使用 @ 提及文件。 成功了一半。Amp 支持通过 @ 提及来引入其他文件,文档对默认行为的说明很明确:"如果没有指定 globs,则在被 @ 提及进时,该文件总是会被包含。" 因此,仅靠提及只会重新组织你的文件,而不会减少加载的内容。
用一个长对话线程处理所有事情。 相关的问题,相同的症状。Amp 自己的建议是:"每个任务使用一个线程。线程可以持续很长时间,但混合了无关工作的线程会给智能体提供更差的推理上下文。" 当线程确实变长时,文档中记录的做法是交接——"要求智能体‘Handoff and …’(交接并……),它就会启动一个带有关键上下文的新线程。"
解决方案:从 AGENTS.md 引用文件,然后使用 Glob 进行限制
步骤 1:按触发条件拆分根文件
阅读你的根 AGENTS.md,并将每个块分类到三个堆中。
通用。 构建和测试命令、仓库布局、评审和发布步骤,这些在任何地方都适用的规范。这保留在根文件中。Amp 的位置表准确地描述了根目录的这些内容:"架构、构建/测试命令、内部 API 概述、评审和发布步骤。"
目录结构。 仅在某个子项目内部起作用的引导。这会成为该子树中的 AGENTS.md,当智能体读取那里的文件时,Amp 会将其包含进来。
文件类型结构。 语言规范、测试模式、框架规则。这就是 glob 的用途,在成熟的仓库中,这通常是最大的一堆。
步骤 2:关联受 glob 限制的文件
三个步骤,完全按照文档的布局进行。
首先,在你的 AGENTS.md 中放入一个提及。它可以放在文件中的任何位置:See @docs/*.md。提及本身支持 Glob 模式,因此一行代码就可以引入整个规范文件目录。
其次,在 YAML frontmatter 中使用 globs 列表创建每个被引用的文件。文档中的示例创建了 docs/typescript-conventions.md,以一个列出 globs 为 '**/*.ts' 和 '**/*.tsx' 的 frontmatter 块开头,紧接着是规范本身——示例规则为 "绝不使用 any 类型"。
第三,针对每种语言或关注点重复此操作。文档给出了三种可供复制的结构:前端引导 globs: ["src/components/**", "**/*.tsx"],后端引导 globs: ["server/**", "api/**"],以及测试引导 globs: ["*.test.ts", "__tests__/*"]。
你获得的行为被清晰地阐述:"只有在 Amp 读取了匹配任何 glob 的文件时,带有 globs 的被提及文件才会被包含。" 注意触发条件——是 Amp 读取了匹配的文件,而不是你打开了文件。
有两个细节可以避免让你困惑一下午。提及的路径解析是相对于提及文件的,而不是你的工作目录:"相对路径是相对于包含该提及的智能体文件进行解析的。" 绝对路径和 @~/some/path 也适用。此外,glob 解析有其自身的规则:"除非以 ../ 或 ./ 开头,否则 glob 会隐式地加上 **/ 前缀,在这种情况下,它们指的是相对于被提及文件的路径。" 因此,*.test.ts 匹配任何地方的测试文件,而 ./fixtures/*.json 表示在声明它的文件旁边。
还有一个细节,如果你在纯文本中记录路径,这很重要:"代码块中的 @ 提及会被忽略,以避免误报。" 你可以在反引号内编写路径,而不会导入它。
步骤 3:验证加载的内容,然后将事实移出
Amp 提供了一种直接检查工作的方法:"要查看 Amp 正在使用的智能体文件,请从命令面板中选择 agents-md list。" 在几个不同的目录中运行它,并在智能体接触不同的文件类型后运行。这是确认 glob 是否如你所想发挥作用的最快方法。
然后进行实际缩小常驻集的操作。回顾根文件中剩下的内容,并询问每一行是指令还是事实。"在提交前运行 pnpm test" 是一条指令——简短、行为导向,属于 AGENTS.md。"API 在路径中进行了版本控制,因为有两个移动客户端固定了旧版本" 是一个事实。它没有适合的 glob,因为它与文件类型无关;它与你的项目有关,智能体在涉及该主题时就需要它,而不是在模式匹配时。
事实是导致指令文件膨胀到无法被遵循的根源,没有任何限制机制可以解决这个问题,因为限制的维度总是错误的。解决办法是将它们保存在智能体可以按需读取的地方。MemoryLake 的设置只需三个步骤。
步骤 1:创建 API 密钥
登录并从你的控制面板生成一个 API 密钥。它完全独立于 AGENTS.md 链之外,因此它所包含的任何内容都不会常驻在每个会话中,也不会受到不适合它的模式的限制。

步骤 2:上传你的第一批记忆
放入事实:架构决策及其背后的原因、领域词汇、服务所有权、为什么存在临时解决方案、你在代码评审中不断给出的答案。任何关于项目本身而非关于文件类型的事实。

将行为保留在 AGENTS.md 中,在模式真正适用时通过 glob 进行限制。这两层承担着不同的工作。
步骤 3:连接你的 AI 和智能体
将 Amp 指向该存储。你的根文件变得足够简短,可以被可靠地遵循,你的受 glob 限制的文件保持精简且行为导向,而项目知识在问题需要时才会到达——这与通过记忆层减少 token 使用背后的道理相同。

这在实践中改变了什么
第一个改变是,添加引导不再是一种权衡。如今,一个新的规范要么放入常驻文件中并对每个任务征税,要么被排除在外。受限文件为任何具有文件类型结构的内容消除了这种选择。
第二个改变是,无需你编写更好的文本,遵循度就会提高。较短的常驻指令集比长指令集更容易被一致地遵循,这就是为什么即使在上下文预算不紧张的情况下,拆分也是值得做的。
第三个改变是,切换工具的成本变得更低。Amp 已经将 AGENT.md 和 CLAUDE.md 作为备用方案进行读取,因此指令层几乎是可移植的——正如将 CLAUDE.md 迁移到 AGENTS.md中所描述的结构。而事实层是只有当你将其保持在工具之外时才具有可移植性的部分。
限制 Amp 指令范围的最佳实践
- 保持根文件通用。 架构、构建和测试命令、评审和发布步骤。这是 Amp 自身对大型仓库的建议。
- 对目录结构的引导使用子树文件。 当智能体读取子树中的文件时,它们就会加载。
- 对文件类型结构的引导使用
globs。 语言规范、测试模式、框架规则。 - 记住,单纯的
@提及仍然是无条件的。 如果没有globs,被提及的文件总是会被包含。 - 注意两条解析规则。 提及路径相对于提及文件进行解析;除非以
./或../开头,否则 glob 会获得隐式的**/前缀。 - 检查陈旧的备用方案。 在没有
AGENTS.md的目录中,遗留的AGENT.md或CLAUDE.md是生效的引导。 - 使用
agents-md list进行验证。 从不同的目录运行它,并在接触不同的文件类型后运行。 - 每个任务一个线程,并在其增长时进行交接。 这是 Amp 的引导,这关乎上下文质量,而非整洁度。
结论
Amp 的指令系统对于每个文件何时加载有着异常明确的规定,而其模式之一——从 AGENTS.md 引用的受 glob 限制的文件——将指令从固定成本转变为条件成本。它只需要几行 frontmatter,是根文件已经膨胀的仓库中唯一最具杠杆效应的改变。
它无法解决的是没有模式的内容。项目事实不是文件类型结构的,限制对它们来说是错误的工具。将指令与知识分离开来,限制指令,并将知识放在智能体可以获取的地方,而无需在每个会话中为此支付租金。