MemoryLake
Back to all articles
Pain PointMay 22, 20268 min read

Why does Cursor forget my project rules?

You wrote thorough Project Rules. You set `alwaysApply: true` on the important ones. You added globs so the right rules fire for the right files. Then in the middle of a long session, Cursor cheerfully breaks a rule you wrote a paragraph about, in a file the glob clearly matches. The rules are technically there. The behavior says otherwise.

This is not a Cursor bug. It is how rule loading interacts with prompt budget, and there is a clean way around it.

The short answer

Cursor forgets your project rules because rules are appended to the prompt as static text and compete with code context for a finite budget. Glob-scoped rules only fire when the file path matches, and alwaysApply rules still lose weight as the prompt fills with retrieved code. The legacy .cursorrules format is also being deprecated in favor of .cursor/rules/*.mdc. The fix is to make rules queryable context rather than prompt-stuffed text.

Why Cursor forgets your project rules

Cursor's Rules system, especially the newer .cursor/rules/*.mdc format with YAML frontmatter (description, globs, alwaysApply), is a real attempt at scalable per-project guidance. The mechanics still leak.

1. Rules share prompt budget with code. Every rule that fires gets prepended to the prompt. The more files Cursor pulls in as context, the less effective room rules have. Important guidance ends up early in the prompt where models give it less weight than the recent code at the end.

2. Glob scoping is silent. A rule with globs: src/components/**/*.tsx will not fire when you edit a .stories.tsx file in the same folder unless you broaden the glob. The rule is technically present in the repo, just absent from this prompt, and Cursor will not warn you.

3. Long sessions evict context. Once a session loads many files, the model's effective working context drops, and earlier instructions, rules included, lose weight against the recent code. Style and rule drift on bigger refactors is a well-documented pattern in Cursor user feedback.

4. The legacy format is going away. .cursorrules in the project root is still supported but marked for deprecation in favor of .cursor/rules/*.mdc. Projects that have not migrated end up with rules that load inconsistently.

The result: a thoughtful rules setup that works on tiny tasks and slips on the bigger ones.

What you lose when Cursor forgets project rules

Every rule miss costs you review time, and the cost compounds across a real codebase:

  • Architectural guardrails fall. "No direct DB calls from React components" gets violated three files into a refactor, and you only notice in review.
  • Security rules slip. "Never log request bodies" gets broken in a new logger utility because the glob did not match.
  • Convention enforcement softens. "Use the shared useQuery wrapper, not raw fetch" gets ignored because the rules file lost weight late in a long prompt.

The fix is not "make every rule alwaysApply." That just pushes more text into every prompt and accelerates the eviction problem. The fix is to make rules retrievable on demand, scoped to the change at hand, instead of statically prepended.

Cursor's built-in workarounds

Cursor has shipped real machinery here. None of it fully closes the gap.

*Project Rules (`.cursor/rules/.mdc)** support frontmatter with description, globs, and alwaysApply, so you can scope rules by file path and decide whether each rule fires every time or only on match. This is the modern, recommended format and a clear improvement over the legacy .cursorrules` file.

Memories auto-generate short rules from chat history and scope them to the project. They are useful as a baseline but are summaries of inferred preferences, not authoritative contracts.

Native MCP support lets Cursor pull context from external servers through .cursor/mcp.json or the Settings UI. This is the cleanest escape hatch, because MCP returns context on demand instead of consuming prompt budget upfront.

You can read Cursor's own documentation on Rules in the official Cursor docs.

For light use, Rules and Memories handle it. For dense, rule-heavy codebases, the natives drift.

Where Cursor's built-in memory falls short

The deeper issue is that rules in a real codebase are layered: architecture rules, framework rules, security rules, team conventions, and decisions made in code review last week. Stuffing all of them into static .mdc files and hoping the prompt budget holds is brittle. It also locks the rules inside Cursor when many teams now run Cursor, Claude Code, Cline, and Copilot variants in parallel.

That is what a cross-tool memory layer fixes: one rule store, retrieved on demand, scoped to the change, and shared across every AI editor on the team.

How MemoryLake fixes Cursor forgetting project rules

MemoryLake is a cross-model memory layer that sits between you and every AI you use. Instead of relying on Rules files alone, you store rules in a MemoryLake Project, and Cursor retrieves the right slice per edit through MCP.

  • Retrieved on demand, not prompt-stuffed. Cursor calls the MemoryLake MCP endpoint per turn and gets only the rules relevant to the file under edit, so rules stop competing with code for prompt budget.
  • Versioned and auditable. MemoryLake's Git-style version control tracks every rule change, who made it, and why, which matters when a rule breaks behavior and the team needs to roll back.
  • Portable to every other AI coding tool. The same rule set works in Claude Code, Cline, Windsurf, and any MCP-aware editor. When a teammate switches tools, the rules follow.

MemoryLake scored 94.03% on the LoCoMo long-context benchmark, the top published result as of 2026, with millisecond retrieval and AES-256 end-to-end encryption.

Connect MemoryLake to Cursor in 3 steps

  1. Create a project and load your rules. Sign in to MemoryLake, open Project Management, click Create Project, and name it after the repo (for example, "Cursor - payments-service rules"). Import your .cursor/rules/*.mdc files into the Document Drive, and write your highest-value rules as structured entries in the Memories tab so they are retrievable by topic.
  2. Generate an MCP Server endpoint. Open the MCP Servers tab inside your project, click Add MCP Server, name it "Cursor integration", and click Generate. MemoryLake returns an API key ID, secret, and endpoint URL. Copy the secret immediately, since it is shown only once.
  3. Connect Cursor. Cursor has had native MCP support since 2025, which makes this the cleanest path. Add a MemoryLake server entry to .cursor/mcp.json at the repo root (or wire it through Cursor Settings > Features > MCP), paste the endpoint URL and Bearer token, and reload Cursor. Your .mdc rules can stay in place as a baseline; MemoryLake supplies the deeper, retrievable rule store on demand.

Frequently asked questions

Does Cursor follow project rules consistently?

Cursor's Project Rules (.cursor/rules/*.mdc) work well for short edits and small files, but as a session loads more code context, rule weight drops and behavior can drift, especially when rules are glob-scoped and the current file does not match.

How do I make Cursor remember my project rules?

Keep .cursor/rules/*.mdc as your baseline contract, and connect Cursor to an external memory layer like MemoryLake through MCP. MemoryLake retrieves the right rules per turn so they do not have to fit inside one prompt.

Why does Cursor break a rule I clearly wrote?

Usually one of three reasons: the rule's glob did not match the file you are editing, the rule got squeezed out of effective context as code accumulated in the prompt, or you are still on the deprecated .cursorrules file rather than the modern .cursor/rules/*.mdc format.

Is .cursorrules deprecated?

The legacy .cursorrules file in the project root is still supported but flagged for deprecation. Cursor recommends migrating to .cursor/rules/*.mdc, which supports YAML frontmatter, file globs, and alwaysApply for more granular control.

Can I share my rule set with Claude Code or Cline?

Not natively. Cursor's .mdc rules and Memories stay inside Cursor. MemoryLake stores rules in a model-neutral Project, accessible through MCP, so the same rules work in Claude Code, Cline, Windsurf, and any MCP-aware editor.