diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx b/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx
index cd47e917085b..a4242a52741a 100644
--- a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx
+++ b/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx
@@ -201,15 +201,17 @@ export function Prompt(props: PromptProps) {
const last = msg.findLast((item): item is AssistantMessage => item.role === "assistant" && item.tokens.output > 0)
if (!last) return
+ const cached = last.tokens.cache.read + last.tokens.cache.write
const tokens =
- last.tokens.input + last.tokens.output + last.tokens.reasoning + last.tokens.cache.read + last.tokens.cache.write
+ last.tokens.input + last.tokens.output + last.tokens.reasoning + cached
if (tokens <= 0) return
const model = sync.data.provider.find((item) => item.id === last.providerID)?.models[last.modelID]
const pct = model?.limit.context ? `${Math.round((tokens / model.limit.context) * 100)}%` : undefined
const cost = msg.reduce((sum, item) => sum + (item.role === "assistant" ? item.cost : 0), 0)
+ const tokenText = cached > 0 ? `${Locale.number(tokens)} (${Locale.number(cached)} cached)` : Locale.number(tokens)
return {
- context: pct ? `${Locale.number(tokens)} (${pct})` : Locale.number(tokens),
+ context: pct ? `${tokenText} (${pct})` : tokenText,
cost: cost > 0 ? money.format(cost) : undefined,
}
})
diff --git a/packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/context.tsx b/packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/context.tsx
index 9ffe77979150..e129985c273e 100644
--- a/packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/context.tsx
+++ b/packages/opencode/src/cli/cmd/tui/feature-plugins/sidebar/context.tsx
@@ -19,25 +19,34 @@ function View(props: { api: TuiPluginApi; session_id: string }) {
if (!last) {
return {
tokens: 0,
+ cached: 0,
percent: null,
}
}
+ const cached = last.tokens.cache.read + last.tokens.cache.write
const tokens =
- last.tokens.input + last.tokens.output + last.tokens.reasoning + last.tokens.cache.read + last.tokens.cache.write
+ last.tokens.input + last.tokens.output + last.tokens.reasoning + cached
const model = props.api.state.provider.find((item) => item.id === last.providerID)?.models[last.modelID]
return {
tokens,
+ cached,
percent: model?.limit.context ? Math.round((tokens / model.limit.context) * 100) : null,
}
})
+ const tokenText = createMemo(() => {
+ const cached = state().cached
+ if (cached === 0) return `${state().tokens.toLocaleString()} tokens`
+ return `${state().tokens.toLocaleString()} tokens (${cached.toLocaleString()} cached)`
+ })
+
return (
Context
- {state().tokens.toLocaleString()} tokens
+ {tokenText()}
{state().percent ?? 0}% used
{money.format(cost())} spent
diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/subagent-footer.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/subagent-footer.tsx
index c857937d4acb..6e22b522cb64 100644
--- a/packages/opencode/src/cli/cmd/tui/routes/session/subagent-footer.tsx
+++ b/packages/opencode/src/cli/cmd/tui/routes/session/subagent-footer.tsx
@@ -36,8 +36,9 @@ export function SubagentFooter() {
const last = msg.findLast((item): item is AssistantMessage => item.role === "assistant" && item.tokens.output > 0)
if (!last) return
+ const cached = last.tokens.cache.read + last.tokens.cache.write
const tokens =
- last.tokens.input + last.tokens.output + last.tokens.reasoning + last.tokens.cache.read + last.tokens.cache.write
+ last.tokens.input + last.tokens.output + last.tokens.reasoning + cached
if (tokens <= 0) return
const model = sync.data.provider.find((item) => item.id === last.providerID)?.models[last.modelID]
@@ -49,8 +50,9 @@ export function SubagentFooter() {
currency: "USD",
})
+ const tokenText = cached > 0 ? `${Locale.number(tokens)} (${Locale.number(cached)} cached)` : Locale.number(tokens)
return {
- context: pct ? `${Locale.number(tokens)} (${pct})` : Locale.number(tokens),
+ context: pct ? `${tokenText} (${pct})` : tokenText,
cost: cost > 0 ? money.format(cost) : undefined,
}
})
diff --git a/packages/opencode/src/plugin/codex.ts b/packages/opencode/src/plugin/codex.ts
index a0ff0002f48e..b7dc4d85ca9b 100644
--- a/packages/opencode/src/plugin/codex.ts
+++ b/packages/opencode/src/plugin/codex.ts
@@ -374,6 +374,7 @@ export async function CodexAuthPlugin(input: PluginInput): Promise {
"gpt-5.3-codex",
"gpt-5.4",
"gpt-5.4-mini",
+ "gpt-5.5",
])
for (const [modelId, model] of Object.entries(provider.models)) {
if (modelId.includes("codex")) continue