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

Why does Cursor forget my architectural decisions?

You decided three months ago to use a single Postgres database instead of microservice-per-database. You wrote the ADR. The team agreed. Today Cursor cheerfully suggests spinning up a second database for a new service, and references "best practices" you spent a week arguing past. The decision is in the repo. Cursor does not load it.

This is not a Cursor bug. It is the limit of how Rules, Memories, and ADRs interact with retrieval, and there is a clean way around it.

The short answer

Cursor forgets your architectural decisions because Project Rules describe behavior rather than rationale, Memories are short summaries derived from chat, and ADRs in /docs only show up in the prompt when retrieval surfaces them. The model defaults to industry-standard architectures whenever decision context is missing. The fix is to expose decisions as queryable memory Cursor reads before proposing architecture.

Why Cursor forgets your architectural decisions

Cursor indexes your repo and retrieves relevant chunks per turn. Architectural decisions slip through that pipeline for three reasons.

1. The why is harder to retrieve than the what. Codebase indexing surfaces code well and prose less reliably. An ADR in /docs/adr/0017-single-postgres.md only enters the prompt when retrieval scores it relevant to the current query, and "I am adding a new service" rarely scores a decision doc highly.

2. Project Rules carry the rule, not the reason. A rule that says "use a single Postgres" is enforceable. A rule that explains "we chose a single Postgres because two-phase commits across services were unacceptable for our consistency model" does not fit in .mdc frontmatter, so the rationale gets lost, and the model fights the rule whenever the surface task seems to call for a second DB.

3. Memories are summaries, not decision records. Cursor's Memories auto-generate short rules from chat. They are not a decision log. The reasoning that informed an architectural choice, the trade-offs considered, the constraints that mattered, do not survive as structured Memory.

The result: Cursor follows decisions when they happen to be in context and overrides them when they are not.

What you lose when Cursor forgets architectural decisions

Every forgotten decision costs you a re-argument and sometimes a re-implementation, and the cost compounds across a service's lifetime:

  • Settled debates reopen. "We chose Postgres over Mongo because of JSONB queries and transactional integrity" becomes invisible, and Cursor suggests Mongo again three months later.
  • Constraints get violated. "We do not call internal services from edge functions because of cold start budget" gets ignored in a generated edge handler.
  • New services drift from the standard. Cursor reaches for the most common pattern on the web for new services, not the one your platform team standardized on.

The fix is not "make every ADR also a .mdc rule." That floods the rules folder with prose nobody maintains. The fix is to expose decisions as queryable memory with their rationale intact.

Cursor's built-in workarounds

Cursor has shipped real features here. None of them fully close the gap.

*Project Rules (`.cursor/rules/.mdc)** can encode the rule from an ADR, with frontmatter and globs to control when it fires. They are good for the enforceable conclusion. They are weak at the rationale, since alwaysApply` rules share prompt budget and longer rule prose gets trimmed.

Memories capture short, auto-generated guidance from chat. They are good for "we use Zod for runtime validation" and bad for "we chose Zod over Yup in 2024 for the static-type inference, and we revisit this decision quarterly."

Native MCP support lets Cursor connect to external memory through .cursor/mcp.json or the Settings UI. This is the cleanest path for architectural decisions, because MCP can expose the full ADR with rationale on demand instead of compressing it into a rule.

You can read Cursor's own MCP setup guide in the official Cursor docs.

For small repos, Rules and indexing handle it. For systems with a real architecture, decisions slip.

Where Cursor's built-in memory falls short

The deeper issue is that architectural decisions are reasoning artifacts, not rules. They need to be retrievable in full, with their why, their alternatives, and their date, the moment Cursor proposes something that would violate them. They also need to apply across every AI editor the team uses, since one teammate on Claude Code can otherwise re-introduce the pattern you spent a sprint removing.

That is what a cross-tool memory layer fixes: one decision record, retrievable on demand, shared across every AI editor on the team.

How MemoryLake fixes Cursor forgetting architectural decisions

MemoryLake is a cross-model memory layer that sits between you and every AI you use. Instead of trusting that ADRs in /docs will be retrieved when they matter, you store decisions in a MemoryLake Project, and Cursor pulls the relevant one per turn through MCP.

  • Decisions as queryable memory. Each ADR lives as a structured Memory with rule, rationale, alternatives, and date. Cursor retrieves the full record, not a compressed line.
  • Git-style version control over decisions. When an ADR gets superseded, MemoryLake's version control tracks the supersession, so old decisions cannot quietly resurface.
  • Portable to every other AI coding tool. The same decision memory works in Claude Code, Cline, Windsurf, and any MCP-aware editor. A teammate on a different tool cannot re-introduce a deprecated pattern by mistake.

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 decisions. Sign in to MemoryLake, open Project Management, click Create Project, and name it after the system (for example, "Cursor - payments-platform architecture"). Drop your ADRs and design docs into the Document Drive. Capture the headline conclusions and rationales as structured entries in the Memories tab so each decision is retrievable by topic, with the why intact.
  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. Cursor can now query the decision record before proposing architecture or wiring a new service.

Frequently asked questions

Does Cursor remember architectural decisions across sessions?

Cursor's Project Rules and Memories persist per-project guidance, but they store rules and short summaries, not the full reasoning behind a decision. ADRs in /docs only enter the prompt when retrieval surfaces them, which is unreliable for decision questions.

How do I make Cursor follow my architectural decisions?

Combine high-signal Project Rules with an external memory layer like MemoryLake, connected through MCP. MemoryLake stores each decision with rule, rationale, alternatives, and date, so Cursor can retrieve the full record before proposing architecture.

Why does Cursor suggest patterns I explicitly rejected?

Usually because the decision document was not retrieved into context for this turn. Codebase indexing tends to score code chunks higher than prose, so an ADR in /docs often misses the prompt unless the query happens to mention the topic explicitly.

Can Cursor read my ADRs in /docs?

Cursor can read them when retrieval surfaces them, but ADRs are prose and compete with code for relevance scoring. Encoding the headline decision as a structured Memory in MemoryLake makes it retrievable by topic rather than dependent on chance keyword overlap.

Can the same decision memory work in Claude Code or Cline?

Yes. MemoryLake stores decisions in a model-neutral Project, accessible through MCP, so the same record works in Claude Code, Cline, Windsurf, and any MCP-aware editor. A teammate on a different tool cannot reintroduce a deprecated pattern by accident.