OpenCode v2.0.29 shipped on October 14 with a line in the changelog that matters more than it looks: the desktop app's session view now shows context tokens and accumulated cost per session. (The desktop app is the same OpenCode 2 release line as the CLI, not a separate product.) Pair that with the new provider account management (connect, switch, rename, remove, all from Settings → Providers), and BYOK stops being "set a variable, hope for the best." You can see what you spent.
We ran a real session on Kimi K3 through our own gateway and then did the thing cost displays are rarely subjected to: we reconciled it against the bill. Disclosure: Wallaby Token sells API access to Kimi K3, and the session below ran on our endpoint.
Setting it up
Settings → Providers, then "Show more providers". Wallaby is in the extended list:

Pick Wallaby, paste your API key, hit Continue. A "Wallaby connected" toast confirms it, and moonshotai/kimi-k3 shows up in the model picker.

If kimi-k3 throws Model unavailable right after connecting, quit the desktop app fully and reopen it: the v2 background service caches the model catalog from before your key existed. We covered this and the other two v2 upgrade traps in our OpenCode 2 upgrade notes.
What the cost panel actually shows
We gave the session one prompt: "tell me about https://wallabytoken.com". K3 fetched the site and described our own service back to us, ABN, itemized billing, the works, which made the session easy to audit later. The session view then itemized every message:

Each row carries the model, stream speed, input/output tokens, cost, first-token latency, and the pricing basis it used ("Standard · $2.7 / $13.5/M"). No digging through docs to learn what rate you were charged at; it sits in the row.
The Context panel one click away aggregates the whole session: total tokens, input/output split, cache reads and writes, message counts, and a running Total Cost — $0.10 across this session's nine messages over about ten hours.

The reconciliation
Here are the session's last two message rows, and the corresponding lines from the Wallaby statement for the same key:
| Message | Tokens in / out | OpenCode shows | Statement bills |
|---|---|---|---|
| "tell me about wallabytoken.com" | 12,648 / 918 | $0.046542 | $0.046542 |
| follow-up turn | 10,322 / 214 | $0.030758 | $0.030758 |
Exact to the sixth decimal. The math checks by hand too: 12,648 input tokens at $2.70 per million plus 918 output tokens at $13.50 per million is $0.0465426.
One honest caveat from our own run: OpenCode's family total and our dashboard's daily total did not match, and the reason was us. The test key also served a few CLI experiments that day, and the dashboard counts everything the key touches while OpenCode counts only its own sessions. If you want reconciliation to stay a one-glance affair, mint one key per tool. That is five seconds of setup and it makes any discrepancy meaningful instead of explainable.
Why this display matters
Agent sessions are where token budgets go to be surprised. A cost figure next to every message changes the ergonomics: you notice the expensive turn when it happens, not on the invoice. And when the number in the client is the number on the statement, you can trust both.
Kimi K3 on Wallaby runs at 10% off the official list — $2.70 per million input tokens, $13.50 per million output, $0.27 on cache hits — with per-token metering and an itemized statement for every key. New accounts get $0.50 in free credit, no card required: create a key, connect it in Settings → Providers, and your next session's cost will be staring back at you.