I use Claude Code for long sessions in the terminal, ChatGPT when I'm on my phone, Gemini for research where the big context window matters, and Cursor when I want inline suggestions in the editor. Four tools. Each knows things about how I work. None of them know what the others know.
Every time I switch, I re-explain the project. Same architecture, same conventions, same current focus — just in whichever format this particular tool happens to understand. It's not a lot of time per switch. It's a constant low-grade friction that adds up to something real over a week.
I looked into why this happens and spent a few months building a fix. The structural reason is more interesting than I expected.
What each tool actually stores — and where
Every major AI coding tool has some form of persistent context. The formats look similar on the surface. They're not interchangeable.
| Tool | Memory mechanism | Where it lives | Scope |
|---|---|---|---|
| Claude Code | CLAUDE.md + auto-memory files |
~/.claude/ and project root |
This machine only |
| Cursor | .cursorrules |
Project root | This project, manual update |
| GitHub Copilot | .github/copilot-instructions.md |
Project root | This project, manual update |
| ChatGPT | Custom Instructions | OpenAI's servers, your account | Global, 1500-char limit, not project-aware |
| Gemini | Gems system prompt | Google's servers, your account | Per-gem, manual setup per project |
| Windsurf | .windsurfrules |
Project root | This project, manual update |
The formats cluster into two groups: file-based (Claude Code, Cursor, Copilot, Windsurf) and account-based (ChatGPT, Gemini). File-based systems travel with the repo but don't follow you to other tools. Account-based systems follow you personally but don't know about your specific project.
None of them overlap. A project context file for Cursor does nothing in Claude Code. What Claude Code's auto-memory has learned about your preferences is invisible to Copilot. Custom Instructions you set in ChatGPT don't transfer to Gemini.
The structural reason this won't fix itself
This isn't an oversight. It's a consequence of who controls each memory system.
Anthropic can govern Claude Code's context. They can't govern Cursor's. OpenAI can improve Custom Instructions. They can't touch CLAUDE.md. Every vendor owns their own substrate and nothing else.
This means there's no path to a unified memory system coming from inside any one tool. The incentive is to make your own tool's memory better, not to build an open interchange format that benefits every competitor equally. Even if two vendors agreed to share a format, the third and fourth wouldn't join — and you'd still have two silos instead of five.
The problem is structural. It requires a solution that sits outside all the tools.
What the actual friction looks like
In practice the friction is subtle. It doesn't usually manifest as "I have no context." It manifests as Claude Code knowing you use pnpm but Cursor suggesting npm. As ChatGPT not knowing the monorepo layout so you paste the architecture description for the fourth time this week. As switching to Gemini for a research spike and explaining the project again from scratch.
11:30 Switch to Cursor for a debugging session.
11:31 Cursor has .cursorrules from three weeks ago. Suggests npm.
11:32 Correct it. It forgets next session.
14:00 Open ChatGPT on phone. Ask about architecture.
14:01 Custom Instructions don't mention the project. Re-explain monorepo.
16:00 Back to Claude Code. It still knows everything from this morning.
16:45 Open Gemini for a research question. Start from scratch again.
The individual corrections take thirty seconds. The compounding effect across a week is a meaningful chunk of cognitive overhead.
Why the file-based approach alone doesn't scale
The obvious first fix is keeping your context files in sync manually. Update .cursorrules and .github/copilot-instructions.md alongside CLAUDE.md. Commit all of them. Done.
This works for a while. It breaks in three ways:
Format divergence. Each tool has its own preferred format and conventions. A CLAUDE.md that works well for Claude Code isn't the right shape for Cursor's rules file. They're different dialects. Copying and pasting produces something that's neither optimal for either.
Auto-memory is machine-local and accumulating. Claude Code's auto-memory writes corrections and preferences as you work — not things you document upfront, but things Claude learns from you. These accumulate in ~/.claude/projects/ as structured markdown files. They don't live in the repo. You can't commit them. They don't transfer to your other machine and they don't transfer to other tools.
Account-based tools can't read files. ChatGPT's Custom Instructions and Gemini's Gems are set through web interfaces, account-by-account, with length limits. There's no way to point them at a file in your repo. If you want ChatGPT to know your project conventions, you type them in. Every project, every account.
What actually works: write once, format for each tool
The pattern that solves this is separating two things that are usually conflated: where you write context and how each tool receives it.
You write context once, in one place. A sync layer formats it appropriately for each tool and keeps all the formatted versions up to date. When your context changes — because the project changed, or because you accumulated new preferences — the sync propagates the update to every tool's format automatically.
│
▼
sync layer (formats + distributes)
╱ │ │ │ ╲
Claude Cursor Copilot ChatGPT Gemini
Each tool gets context in the format it expects. The sync layer handles the translation. You maintain one set of memory files instead of five parallel ones that drift apart.
How this works in practice with forgein
This is the problem forgein solves. The setup takes about five minutes:
- Install the forgein skill into Claude Code: open Settings → Skills and add the forgeinai/forgein registry
- Run
/forgein auth— authenticates the CLI with your forgein account - Run
/forgein mem sync— pushes your memory files to the cloud
From there, /forgein export <target> generates an adapter file for any tool:
/forgein export cursor # writes .cursorrules
/forgein export copilot # writes .github/copilot-instructions.md
/forgein export windsurf # writes .windsurfrules
/forgein export chatgpt # formats Custom Instructions (two-field)
/forgein export gemini # formats Gems system prompt
After a /forgein mem sync, any existing adapter files in the project are automatically regenerated — so as your context evolves, the Cursor rules file and Copilot instructions file stay in sync without any manual step.
For ChatGPT and Gemini, the export prints the formatted text and you paste it in once. It's not automatic because those tools don't have programmatic write access, but you're pasting up-to-date content rather than writing it from scratch every time.
There's also a native MCP server at https://api.forgein.ai/api/adapters/mcp with auto-discovery at /.well-known/mcp. If you use Claude Desktop, Cursor's Agent mode, or Windsurf Cascade, you can connect directly — your forgein context becomes available as a tool in any MCP-compatible client without any file format to manage.
The team angle is worse
Everything above is the solo developer problem. Teams have it harder.
A ten-person team where each developer has their own tool preference produces ten divergent mental models of the project conventions. Someone working in Cursor and someone working in Claude Code might both have context files, but they're not the same context files. They'll drift as the project evolves. New engineers don't get consistent onboarding — they get whatever context file the person who set up the repo happened to write.
The fix for teams is org-level context: a shared baseline that every tool adapter inherits. When forgein generates a context file for Cursor, it prepends the org's baseline — architecture decisions, coding standards, current focus — before the individual user's personal memories. Every engineer's AI tools start from the same shared foundation, regardless of which tool they use.
When the tech lead updates the org baseline after a major architectural decision, every tool for every engineer gets the updated context on the next sync. That's the version of "team memory" that actually transfers across tools.
What this means for choosing tools
Once context is solved at the sync layer, tool choice becomes more genuinely about capability than about "which one remembers me better." You can use Claude Code for complex multi-step tasks, Cursor for inline editing, ChatGPT for quick questions, Gemini for long-document research — and all of them know the same thing about your project.
The argument for sticking to one tool because it knows your context loses its force. You've externalized the memory problem to a layer that isn't tied to any one vendor.
The practical starting point: sync your Claude Code memory files to forgein, then run the export commands once for each tool you use. The adapter files go in your repo. Commit them. Any teammate who pulls the repo gets Cursor rules and Copilot instructions that reflect the current project state — without anyone having to write or maintain them separately.