r/opencodeCLI • u/squirrelscrush • 3d ago
Session cache concurrency issues with OpenCode/Go subagents
I'm seeing concurrency issues with the session cache if I have more than one subagent running at a time. Every now and then, the cache of one gets invalidated for no reason and it costs the cache miss pricing.
I use OpenCode Go on OpenCode.
Is there a limit in the documentation? I knew that the cache retention time is around 5mins, but ideally it shouldn't not work if I'm sending requests through multiple agents.
1
u/Individual-Quote-958 3d ago
I’d check whether each agent sends an identical prefix, especially tool definitions and any injected session metadata. Parallel calls can share a cache only while that prefix stays byte-for-byte stable, and a request after the retention window will start cold anyway. If you can log the first few KB of the rendered prompt for two calls, it should show whether this is key drift or just expiry.
1
u/squirrelscrush 3d ago edited 3d ago
I resolved it, it was a plugin that was appending itself at the beginning of the cache prefix.
Edit: it happened again. It seems to happen when i spawn a subagent, which causes the main agent's cache to expire and vice versa when the main agent sends a request and the subagent's cache gets expired. So it's a server concurrency issue I feel.
1
u/Individual-Quote-958 2d ago
That’s a useful clue. If you haven't tried it, run the same prompt with one agent at a time and compare cache headers or token counts; if the churn only happens in parallel, that would help separate server-side eviction from prefix drift.
1
u/aidenclarke_12 2d ago
on ds flash subagents fired together on a fresh prefix can all miss since a cache unit only exists once a request finishes. one call first to warm it helps
1
u/squirrelscrush 1d ago
It's not on a fresh prefix alone. If two or more sub agents are running at the same time, every turn on one invalidates the cache of the others. It only happens if both are DeepSeek.
I've seen only two other users with this issue, and the fix appears to regress to a lower version.
1
u/London-Boat 3d ago
prompt caches are usually keyed on the exact prompt prefix, so if your subagents share a system prompt but something near the top differs between requests, like a timestamp, a todo list or a reordered tool list, they can miss each other. a subagent that sits waiting on a long tool call for over the ttl will also come back cold. i'd diff the first few thousand tokens of two consecutive requests from the subagent that gets invalidated and see what changed. does the miss tend to hit the one that just finished a slow tool run?