简短答案
Cursor 忘记您的文件结构是因为它的代码库索引是近似的,而不是权威的:模型看到的是检索到的片段,而不是完整的目录树,规则文件并未完全编码文件夹约定。一旦会话增长,结构指导在提示中的最近代码面前失去权重,因此 Cursor 回退到通用的 React/Node 默认值。解决方案是将您的真实结构暴露为可查询的记忆。
为什么 Cursor 会忘记您的文件结构
Cursor 索引您的代码库,并使用检索将相关片段输入到提示中。该管道的三个现实解释了结构漂移。
1. 模型看到的是片段,而不是树。 代码库索引返回相关文件内容,而不是完整的目录图。模型通常可以根据它所看到的内容猜测您的结构,但对于在此会话中未接触的文件夹,它会回退到默认值。
2. 规则描述行为,而不是拓扑。 项目规则 (.cursor/rules/*.mdc) 擅长于“使用 Zustand 进行全局状态”,而不擅长于“组件位于 src/features/<feature>/components/,钩子在同一文件夹中,测试文件以 .test.tsx 后缀命名。”用散文编码拓扑是脆弱的,并且与代码争夺提示预算。
3. 上下文在负载下被驱逐。 一旦会话加载了许多文件,模型的有效工作上下文下降,早期的结构线索失去权重。Cursor 用户常常报告在较大重构中出现文件放置漂移,原因就是这个。
结果是:当周围的代码使约定显而易见时,Cursor 正确放置文件,而当没有时则漂移到通用默认值。
当 Cursor 忘记文件结构时您会失去什么
每个放错位置的文件都会让您多一次移动和修复的周期,成本在整个代码库中累积:
- 文件落在错误的文件夹中。 一个新的钩子被放在
src/hooks/中,而不是与其组件并排,打破了您的共置约定。 - 导入指向虚构路径。 Cursor 发明了
@/lib/dateUtils,因为别名和文件夹名称听起来正确,即使您的实际工具位于@/utils/date/format.ts。 - 测试文件最终孤立。 您将
.test.tsx保持在源文件旁边;Cursor 创建了__tests__/,因为这是它见过的默认值。
解决方案不是“写一个更长的 README。”Cursor 不会总是加载它。解决方案是将您的结构暴露为可查询的记忆,以便 Cursor 在写入新文件之前可以询问。
Cursor 的内置解决方法
Cursor 已发布了一些触及此问题的功能。它们都没有弥补这个差距。
代码库索引 驱动检索,并为 Cursor 提供了对事物所在位置的工作感知。随着熟悉度的提高,它会改善,而在代码库的冷部分会退化。它是设计上的近似,因为模型从未一次看到完整的树。
*项目规则 (`.cursor/rules/.mdc`)** 允许您用散文和文件通配符声明拓扑规则。它们有帮助,但文件夹约定在规则中表达起来很尴尬,并且规则与其他内容共享提示预算。
原生 MCP 支持 使 Cursor 可以通过 .cursor/mcp.json 或设置 UI 与外部服务器通信。这是暴露实时目录和约定数据的最干净路径,因为 MCP 按需返回,而不是将其塞入提示中。
您可以在 官方 Cursor 文档 中阅读 Cursor 自己的 MCP 设置指南。
对于小型代码库,索引和规则就足够了。对于真正的分层代码库,结构会漂移。
Cursor 的内置记忆不足之处
更深层次的问题是,文件结构是一种契约,而不是描述。团队一致认为功能位于 src/features/<feature>/,钩子共置,类型放在 types.ts 兄弟文件中。该契约需要是可查询的,而不仅仅是存在于 README 中或分散在三十个规则文件中。当队友在 Claude Code、Cline 或 Windsurf 中编辑同一代码库时,相同的契约需要适用。
这就是跨工具记忆层解决的问题:一个结构记忆,可以按需检索,跨每个 AI 编辑器共享。
MemoryLake 如何修复 Cursor 忘记文件结构
MemoryLake 是一个跨模型的记忆层,位于您与使用的每个 AI 之间。您不再仅依赖规则和代码库索引,而是将您的结构契约存储在 MemoryLake 项目中,Cursor 通过 MCP 检索每次编辑的正确切片。
- 拓扑作为可查询的记忆。 文件夹约定、命名模式和导入别名映射作为结构化的记忆存在,Cursor 可以按需读取,而不是被塞入规则文件中的散文。
- 比原始提示多 10,000 倍的上下文。 MemoryLake 的检索引擎从数十亿个代码库决策的标记中读取,并仅呈现与当前文件相关的结构切片。您不再与代码争夺提示预算。
- 可移植到其他 AI 编码工具。 相同的结构记忆在 Claude Code、Cline、Windsurf 和任何支持 MCP 的编辑器中都能工作。当队友使用不同的工具时,契约依然有效。
MemoryLake 在 LoCoMo 长上下文基准测试中得分 94.03%,这是截至 2026 年的最高已发布结果,具有毫秒级检索和 AES-256 端到端加密。
在 3 个步骤中将 MemoryLake 连接到 Cursor
- 创建项目并加载您的结构。 登录 MemoryLake,打开项目管理,点击创建项目,并以代码库命名(例如,“Cursor - web-app 结构”)。将您的文件夹映射、别名配置和一个规范的示例功能放入文档驱动器中。在记忆标签中捕获契约(“功能位于
src/features/<feature>/,钩子共置,测试使用.test.tsx”)。 - 生成 MCP 服务器端点。 在项目内打开 MCP 服务器标签,点击添加 MCP 服务器,命名为“Cursor 集成”,然后点击生成。MemoryLake 返回一个 API 密钥 ID、密钥和端点 URL。立即复制密钥,因为它只显示一次。
- 连接 Cursor。 Cursor 自 2025 年以来就支持原生 MCP,这使得这是最干净的路径。在代码库根目录的
.cursor/mcp.json中添加 MemoryLake 服务器条目(或通过 Cursor 设置 > 功能 > MCP 连接),粘贴端点 URL 和 Bearer 令牌,然后重新加载 Cursor。Cursor 现在可以在写入或移动任何文件之前查询您的结构记忆。