为什么聊天和智能体遵循不同的指令
首先来看项目规则。JetBrains 的文档将其描述为聊天的指南:“默认情况下,项目规则会自动添加到每个聊天会话中,因此 AI Assistant 会遵守提供的指南。”您可以在设置中创建规则,“这会创建一个包含 .md 文件的 .aiassistant/rules 文件夹。”
每条规则都有一个类型,决定了它何时适用:
- “Always(总是)– 自动应用于所有聊天会话。”
- “Manually(手动)– 仅在聊天中使用 @rule: 或 #rule: 显式调用,或通过‘添加附件’操作添加时适用。”
- “By model decision(由模型决定)– 当模型认为规则相关时适用。”对于这种类型,“您还必须提供一条指令,以便 AI Assistant 能够理解何时应应用该规则。”
- “By file patterns(按文件模式)– 当聊天中引用的文件与指定的文件模式(例如
*.kt或src/**)匹配时适用。” - “Off(关闭)– 规则处于非活动状态,不予应用。”
这些描述中的每一条都提到了聊天。这是刻意为之的。JetBrains 关于智能体指令的页面明确划清了界限:“项目规则在 IDE 中配置,且仅适用于 AI Assistant 聊天模式。”
智能体则使用指令文件。“可以使用项目中的指令文件来配置智能体,这些文件定义了它们在代码库中的行为方式,包括编码规范、架构约束和常见工作流。”具体使用哪个文件取决于智能体:“大多数智能体依赖 AGENTS.md 文件来获取可重用的指南,不过有些智能体使用自己的格式。例如,Claude Agent 从 CLAUDE.md 获取指令。”
智能体页面也证实了这一点。“Junie 从根项目目录中的 AGENTS.md 文件中读取指令,因此您可以将它们置于版本控制之下,并在整个项目中重用它们。”而对于另一个智能体:“Claude Agent 从根项目目录中的 CLAUDE.md 文件中读取指令。”
JetBrains 甚至阐明了预期的分工:“使用指令文件在工具和环境之间共享指南,并使用项目规则在 AI Assistant 中自定义行为。”其影响范围的差异也很重要。指令文件“由所选的编码智能体使用,并随您的代码仓库一起移动”,而项目规则用 JetBrains 的话来说是“在 IDE 中配置的”。
总而言之,一个项目可以有三个指令来源,具体应用哪一个取决于下拉菜单的选择。
Junie 的独立 CLI 还增加了一个复杂情况:它有自己的指南发现顺序,在检查根文件之前会先检查 .junie/AGENTS.md。这一路径在在不切断 rules 文件夹的情况下放置 Junie 指南中有所提及。本指南主要针对 AI Assistant 的聊天模式以及 IDE 内部的智能体。
人们尝试的其他方法
将所有内容都写成项目规则。 规则 UI 就在设置中,带有类型和文件模式,因此感觉它是存放指令的主要地方。对于聊天来说,它确实是主要地方。但智能体遵循的是指令文件。
将所有内容都写在 AGENTS.md 中。 这更便于跨工具共享,且 Junie 会读取它。但聊天模式应用的是项目规则,而 Claude Agent 读取的是 CLAUDE.md。
保留早期 Claude Code 设置中的一个 CLAUDE.md,并假设 Junie 会读取它。 Junie 的页面指定的是 AGENTS.md。如果您的团队正在这两种格式之间迁移,将 CLAUDE.md 迁移到 AGENTS.md 介绍了需要注意的事项。
将每条规则都设置为 Always(总是)。 Always 规则会“自动应用于所有聊天会话”,这对于简短的列表没问题,但对于冗长的列表来说成本很高。其他具有触发模式的工具也面临相同的权衡,正如为每个 Windsurf 规则选择触发模式所示。
因为聊天看到了您的规则,就假设智能体也看到了。 不同的模式,不同的来源。唯一可靠的确认方法就是去检查。
解决方法:将 AGENTS.md 作为共享源,然后为每种模式提供其读取的文件
目标是制定一套每种模式都遵循的团队规范,并在真正需要的地方进行仅限聊天的微调。
步骤 1:梳理目前项目中每种模式读取的内容
打开项目并列出以下三项。
规则文件夹:.aiassistant/rules 中的每个文件及其类型。记录哪些是 Always,哪些取决于文件模式,哪些是手动或由模型决定的,以及哪些是 Off。
根目录下的 AGENTS.md:是否存在,以及它涵盖了什么。JetBrains 的智能体指令页面建议,一个典型的文件应包括项目上下文、开发规则、仓库规范、常见任务、限制以及完成的定义(definition of done)。
根目录下的 CLAUDE.md:是否存在,以及它是否与 AGENTS.md 内容相同,还是已经产生了偏差。
然后进行对比。任何仅出现在一个地方的内容,都可能是某些模式无法接收到的指令。任何出现在两个地方但表述不同的内容,都是潜在的冲突隐患。
步骤 2:将团队规范放入 AGENTS.md,在 Claude Agent 中进行镜像,并在规则中保留仅限聊天的指南
将每种模式都应遵循的规范移至根目录下的 AGENTS.md:构建和测试命令、架构边界、命名规则、不能触碰的内容以及“完成”的定义。这是 JetBrains 推荐用于“在工具和环境之间共享指南”的文件,它随仓库一起移动,因此团队成员和其他智能体也能获取它。
如果团队中有人使用 Claude Agent,请让 CLAUDE.md 遵循相同的规范。选择一个文件作为单一事实来源,并将更新另一个文件作为同一变更的一部分。在每个文件的顶部写一小段注释,说明哪一个是权威版本,可以避免以后出现很多混乱。
然后将规则文件夹精简为真正特定于聊天的内容:回答应如何格式化、倾向于哪种解释、仅在对话中才有意义的提醒。对于每个保留的规则,请深思熟虑地选择类型。对于适用于每次聊天的少数规则,使用 Always。对于特定语言或文件夹的指南,使用文件模式(例如范围限定为 *.kt 的规则)。对于更广泛的规则,使用模型决定,并附带描述其何时适用的清晰指令。
如果某条规则与现在 AGENTS.md 中的内容重复,请从规则文件夹中删除该重复内容,或将其简化为一个指向。同一规范的两个副本最终会产生分歧。
步骤 3:在每种模式中进行验证,而不仅仅是一种
聊天模式有一个内置的检查机制。JetBrains 解释道:“要检查规则是否已应用,请展开 AI Assistant 回答开头的附件列表。”提出一个应该触发特定规则的问题,然后查看结果。
对于智能体,直接询问。让 Junie 开始一个简短的任务,并在开始前让它列出它正在遵循的项目规范。对 Claude Agent 执行相同的操作。如果其中任何一个遗漏了某项规范,说明它读取的文件中缺少该规范。
最后,在 Chat、Junie 和 Claude Agent 中运行相同的微小请求并进行对比。回答的风格会有所不同,因为聊天模式“提供回答和建议,但不会自动将更改应用到您的项目中”,而智能体“可以在您的项目中执行多步操作、修改多个文件,并在执行期间报告进度”。但它们遵循的规范应该是一致的。
在此期间,顺便检查一下 .aiignore。JetBrains 指出,“Junie 尊重现有的 .aiignore 文件,因此如果您的项目中配置了该文件,除非您明确允许,否则它不会处理其中列出的任何文件或目录。”确保它排除了应该排除的内容,且没有排除智能体需要的内容。
在 MemoryLake 中进行设置
对齐这三个文件涵盖了属于单个仓库的规范。有些上下文比这更宏大:跨越多个项目的决策、规范背后的原因、团队历经艰难学到的教训,以及在 JetBrains 之外的工具中所需的相同背景。MemoryLake 就是一个保存该层级的地方,让您团队使用的每个助手都以此为起点。
You write the entries yourself, in your own words. Nothing is read out of, written to, or deleted from your .aiassistant/rules folder, your instruction files, or any vendor's store.
步骤 1:创建 API 密钥
登录并在控制面板中生成一个密钥。无论在哪个 IDE 或模式下运行,该密钥都能让智能体读取您编写的条目。

步骤 2:上传您的第一批记忆
从步骤 1 中发现的、不应由单个仓库文件保存的内容开始:跨项目决策以及规范背后的原因。每个条目包含一个决策,并附带原因。

步骤 3:连接您的 AI 和智能体
连接您团队使用的助手和编码智能体。这样,在 AGENTS.md 之外也可以使用相同的背景,包括在那些既不读取它也不读取您的 rules 文件夹的工具中。

这在实践中带来了什么改变
第一个区别是,切换模式不再会改变规则。一旦规范存在于 AGENTS.md 和 CLAUDE.md 中,且 rules 文件夹仅包含特定于聊天的指南,那么从 Chat 切换到 Junie 再到 Claude Agent 都会保持相同的标准生效。
第二个区别是,仓库成为了事实来源。指令文件随代码一起移动,因此新团队成员、另一个 IDE 或另一个智能体都会采用相同的规范。这与 Claude Code 在没有 CLAUDE.md 时读取 AGENTS.md 背后的原理相同:共享文件优于特定于工具的设置。
第三个区别是,“智能体忽略了我们的规则”变得可以诊断。有了每种模式读取哪个文件的映射,您就可以判断是指令缺失、过时,还是根本没有加载。这一问题的更广泛版本在为什么 AI 智能体忽略您编写的指令文件中有所涵盖。
第四个区别是减少了隐性冲突。两个文件中同一规范的两个副本会产生偏差。一个权威文件,另一个对其进行镜像,可以让分歧保持可见。
JetBrains AI Assistant 指令的最佳实践
将项目规则视为聊天设置。 JetBrains 指出它们“仅适用于 AI Assistant 聊天模式”。
将团队规范保留在根目录下的 AGENTS.md 中。 Junie 会读取它,且它随仓库一起移动。
如果有人使用 Claude Agent,请在 CLAUDE.md 中镜像规范。 Claude Agent 从项目根目录读取 CLAUDE.md。
指定一个文件为权威版本。 在同一次变更中更新镜像文件。
深思熟虑地选择规则类型。 保持 Always 规则的数量较少;其余规则使用文件模式和模型决定。
检查聊天中的附件列表。 它会显示哪些规则已应用于回答。
让智能体陈述它们的规范。 这是确认智能体实际读取了什么内容的最快方法。其他工具也提供了类似的检查,例如辨别哪些 Tabnine 指南正在生效,同样的约束也可以防止 Cursor 遗忘项目规则。
结论
JetBrains AI Assistant 清楚地说明了每种模式从哪里获取指令。聊天模式应用来自 .aiassistant/rules 的项目规则。Junie 读取根目录下的 AGENTS.md。Claude Agent 读取根目录下的 CLAUDE.md。文档甚至说明了如何分工:指令文件用于“在工具 and 环境之间共享指南”,而项目规则用于“在 AI Assistant 中自定义行为”。
风险在于,这三个来源在一个下拉菜单背后会逐渐产生偏差。梳理每种模式读取的内容,将团队规范放入 AGENTS.md 并在 Claude Agent 中进行镜像,在规则中保留具有明确类型的特定于聊天的指南,并在每种模式中进行验证。
将大于单个仓库的上下文保存在每个工具都能触及的层级中,这样在聊天和智能体之间切换就不再意味着在不同的规则集之间切换。