Hey, good question. Everyone really builds their own Frankenstein setup here. I’ll share what usually works and what I see from users.
Portable base setup (minimum pain when switching tools)
- Keep an
AGENTS.mdat the repo root. Codex, Claude Code, Cursor, and some others respect it. It’s a good place for what the project is, how to build and test it, and coding conventions. Cursor reads it automatically. - Keep commands and scripts in
package.jsonorMakefileorjustfile, not in prompts. Then haveAGENTS.mdlink to them, so there’s less drift.
Cursor-specific, but compatible in spirit
- Use
.cursor/rules/*.mdcfor more structured rules with globs. They apply automatically based on file type. Docs: Rules | Cursor Docs - Use Memories for facts that should survive across sessions: Overview | Cursor Docs
- Use MCP servers for external state: Model Context Protocol (MCP) | Cursor Docs. This can also include memory servers like Mnemosyne: A local, persistent memory MCP server for Cursor if you want shared persistent memory across agents and tools.
Practical observation
Most users who actually stop rewriting the same stuff keep a single source of truth in the repo, like AGENTS.md plus links to scripts and docs. Then they keep tool-specific files as a thin layer on top. Markdown in Obsidian or Notion is nice for personal notes, but as agent context it gets outdated fast. I’ve also seen this CLI for drift checks, which helps catch when instructions don’t match the real code: Built a small CLI to detect AGENTS.md drift (missing commands, dead paths, conflicting nested files)
Curious what others are doing. Is anyone actually running an MCP memory server in production across tools?