Skip to content
Agent Orchestration
Skill

/opencode-mistral-cache-key

OpenCode doesn't set prompt_cache_key for Mistral models, missing the documented 10% cached-token discount.

BOOST
From plugin
prompt-cache-skills
11613 skills
Install
$ npx -y skills add OnlyTerp/prompt-cache-skills --skill opencode-mistral-cache-key --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/opencode-mistral-cache-key

Context preview

The summary Claude sees to decide when to auto-load this skill.

OpenCode doesn't set prompt_cache_key for Mistral models, missing the documented 10% cached-token discount.

SKILL.md

opencode-mistral-cache-key.SKILL.md
name: opencode-mistral-cache-key
description: OpenCode doesn't set prompt_cache_key for Mistral models, missing the documented 10% cached-token discount.
target_harness: OpenCode
target_repo: sst/opencode
target_files:
  - packages/opencode/src/provider/transform.ts
target_commit: dev branch @ a9ef5a0f
estimated_savings: 90% input discount on Mistral cached tokens (currently 0%)

OpenCode: enable Mistral prompt caching (#27556)

Target

`packages/opencode/src/provider/transform.ts` → `ProviderTransform.options()` in `sst/opencode`.

Open feature request: #27556.

Symptom

Mistral's API supports prompt caching with a 10% pricing on cached tokens (similar to OpenAI's Responses API). The mechanism is a `prompt_cache_key` field on the request that Mistral uses as a routing hint, plus prefix stability.

OpenCode does not set `prompt_cache_key` for Mistral models. Even though Mistral supports caching server-side, OpenCode-routed Mistral calls never hit the cache.

Fix

Add Mistral to the providers that get an auto-set `prompt_cache_key`:

--- a/packages/opencode/src/provider/transform.ts
+++ b/packages/opencode/src/provider/transform.ts
@@ ProviderTransform.options(input, model)
   // OpenAI Responses
   if (/* model uses OpenAI responses */) {
     result["promptCacheKey"] = stableHashFor(input);
   }
+
+  // Mistral
+  if (model.providerID === "mistral" ||
+      model.api.npm === "@ai-sdk/mistral") {
+    result["prompt_cache_key"] = stableHashFor(input);
+  }

Where `stableHashFor(input)` returns a stable per-session hash — typically the session ID, or a sha256 of the system prompt if no session ID is available. NEVER use a per-request UUID (see `docs/gotchas.md` #9b).

Verify

1. Configure OpenCode with `mistral-large-latest` or similar. 2. Send two identical prompts. 3. Capture wire to Mistral. 4. **Before fix**: request body has no `prompt_cache_key` field. 5. **After fix**: `prompt_cache_key` field present and identical across both requests. 6. Inspect response usage for cached-token indicators (Mistral reports these similarly to OpenAI).

Background

The Responses-API-style `prompt_cache_key` pattern is industry standard for explicit cache routing — Mistral, OpenAI, and several other providers all use the same field name. OpenCode wires it for OpenAI but missed Mistral.

See [`docs/concepts/openai.md`](../../docs/concepts/openai.md) "The `prompt_cache_key` trick" — same pattern applies to Mistral.

Full audit: [`audits/opencode.md`](../../audits/opencode.md).

Read more
Ships withprompt-cache-skills

Drop-in prompt-caching fixes for the LLM agent harness you use. Point your AI coding agent at this repo and it ships the patches.

Get the whole plugin

Other skills on prompt-cache-skills.