How are people handling context across different AI coding tools?

Answering both of your questions from a different seat than Dean’s — I’m not reporting on
users, I’m one of the people running the cross-tool thing he says he hasn’t seen go
production-grade. So: one data point, with the disclosure up front that the tool involved
is my own project (MDflow).

What breaks first

My order is close to Dean’s but with a different #1. Commands and paths going stale never
really hurt me, because I stopped writing them anywhere except package.json. What breaks
first for me is the item that looks least dramatic on your list: agents don’t load the
right context at all.
It never announces itself. You don’t get an error, you get an agent
confidently working from nothing, producing something plausible, and you find out two
commits later that it never read the decision doc explaining why the thing it just “fixed”
was written that way.

What fixed it wasn’t better instructions, it was making context findable without me naming
a path: every folder carries a short human-written description of what’s in it and why, and
the agent reads the descriptions before it reads any document. “Auth decisions live here,
this folder is append-only, don’t rewrite history” is something it learns from the folder
itself, not from my prompt and not by guessing.

Second: stale notes correlate almost perfectly with notes no human ever opens. Your
observation upthread is right, but the deeper version is that context rots because nobody’s
eyes land on it. Anything I read in normal work gets corrected as a side effect of reading
it. A memory store or vector index I never open has no such feedback loop — which is why
“old memories become wrong” survives every cleanup ritual you set for yourself.

Third, the ugly one nobody warns you about: two tools writing the same document. Claude
Code appends a session note, Cursor rewrites the same file ten minutes later from a stale
read, and the append is gone with no trace. The mitigations that mattered were all
unglamorous: compare-and-swap on save so a write from a stale read fails loudly instead of
silently winning; a log of every automated write labelled with the token that made it, with
a diff; version history that restores non-destructively; and a hard guardrail that an agent
cannot blank a document without an explicit confirm flag. That last one has saved me twice.

On cross-tool MCP: it works, but only for one kind of context

Claude Code, Cursor and Codex all read and write the same hosted markdown workspace over
MCP — token for the CLIs, OAuth for the Claude and ChatGPT apps. Daily driver for months,
not a weekend experiment. Two honest caveats, because Dean’s skepticism is pointed at the
right thing:

It does not work for repo facts. Build commands, paths, conventions stay in AGENTS.md next
to the code, exactly for the drift reason. What actually left the repo is the stuff that was
never about one repo: decisions and why they were made, notes spanning several projects,
research, handoff docs.

And “both tools have to be disciplined about when to write and when to retrieve” is a real
constraint, not a solved one. What made it tolerable is that the discipline is written down
where the agent looks first — the folder description — instead of living in each tool’s own
rules file where it drifts apart. Retrieval is still the model’s call, and it does sometimes
skip it. The difference is that I notice, because the document it should have read is a
document I read too.

Also plainly: the MCP side of what I use is on a paid tier, so it’s not a like-for-like
swap for a free local memory server.

I have found that context works better when each tool gets a small, explicit context packet instead of the entire project history.

I keep a short project brief, current task, constraints, and relevant files separate from the scratch conversation. When moving between tools, I pass that brief plus the latest decision log, then ask the next tool to restate its assumptions before it edits anything.

That keeps the context portable and makes it easier to notice when one model has inferred something the previous one never established.

I do the goodbye letter thing too. Difference is I don’t want to write it at hop time. The last agent already has the context; it should journal while it works.

Git still records the branch. I needed the resume, what we ruled out, and what’s still in the air. I built Mental CLI for that. Local markdown in ~/.mental. Next tool (or next me) types mental.

Not a memory MCP. Not another HANDOFF.md I have to remember to update.

even my own memory system is not working as well anymore because each harness is now implementing its own.
I have a graph memory system through grapitti that has every repo as a category so any relevant memory needed is there no matter the workspace.

I have 37 repos across an ecosystem, and the deterministic items live in the skill files and then my graph memory is for when the ai starts to touch the code or on certain tool calls for certain items it pulls a query directly through a hook and adds the needed context.

All file writes are blocked unless i give the “i approve” statement, which stops these systems from creating a million memory files that i cant track. but claude code started putting them in the project files under the root claude folder and i had to make a special hook for that.

Pretty much i made so many hooks and adjustments that im about to just switch to opencode and migrate everything so i dont have to keep adjusting every two days.

My answer to this got simpler over time: I stopped trying to carry context between tools and started
carrying one artifact instead.

Before any code is written, the planning session produces a design contract. Goal, acceptance criteria, files in scope, what is explicitly out of scope. Short, around 40 lines. That file is the only thing that crosses a tool boundary. The implementation session gets the contract and the repo. The review session gets the contract and the diff. Neither of them ever sees the planning conversation.

Two things came out of that. Token cost stopped compounding, because no session inherits the previous one’s history - the expensive model went from always-on to a couple thousand tokens per change. And review got sharper, because the reviewer has no idea what the implementer was thinking and so can’t be talked into agreeing with it.

The cost is that you have to write the contract properly. If it’s vague, the implementer fills the gaps with its own assumptions and the reviewer has nothing concrete to check against. That took me a while to get right and it is still the part I get wrong most often.

I automate the handoff now with a plugin I wrote (needs Orca to operate), and there’s a video of it running if that’s useful: https://youtu.be/6pRWkhlQSAc - but the contract-as-only-artifact part works by hand too. That’s how I ran it for months.

dely-demo

Repo: GitHub - hieuphung97/dely: Multi-harness control protocol that turns requests into approved design contracts, orchestrating isolated worker sessions for sequential implementation and independent code reviews under Orca supervision for Claude Code, Codex, Cursor, Antigravity, and other AI coding agents. · GitHub

You are sounding similar to my situation so I have a few suggestions for you.

First you should consider indexing every repo, it lets other systems fly through your setup, just make each harness / coding agent work with the MCP setup and suddenly they use dramatically less context to search through your repos. I use codebase MCP for indexing, you might want to try your own but so far it seems great..

Second, a coordination layer makes a huge different. I have openclaw, Hermes, claude, codex, cursor, grok, and grok-bot plus a specialized agentic flows in my workflow like blender, OCR, etc

The solution for coordination for me was to build a proper tool for workflow GitHub - go7studio/Go7-Workhorse: One desk for every AI subscription you already pay for — Grok, Claude, Codex, Cursor and your own API keys, each under its own login. A model per chat or auto-routed by task; usage per vendor before the bill. Native desktop app for Windows and macOS. MIT. · GitHub

And the real benefit was that context sharing is less of an issue because the now the systems all talk at once, claude started calling workhorse to assign work to codex… cursor api and auto even get used inside the harness so it’s a full loop. Still in beta so if you try it out please let me know what you think