provider-integration-limitslisted
Install: claude install-skill d4rken/clankermux
# Provider integration limits
Every entry here was established by live experiment against a real provider.
None of it is visible from the source, and several entries exist to stop a
client-side or upstream behaviour being diagnosed as a proxy defect.
## OpenRouter has no `count_tokens` endpoint
`POST /v1/messages/count_tokens` returns **404** on that route. Token counting
for **default-endpoint** OpenRouter accounts is therefore done locally, in
`packages/providers/src/local-token-count.ts`. Accounts configured with a custom
endpoint still count upstream — the guard is literally
`provider === "openrouter" && !customEndpoint`.
## Switching provider mid-conversation mislabels refusals
Resuming a Claude Code session after re-routing it from Astra to DeepSeek
reproduces a refusal whose upstream response is HTTP 200 with
`stop_reason: refusal`. Claude Code's own UI names the requested **Fable** alias,
so it reads as a refusal by the Fable model. It is not: the resolved and reported
model is DeepSeek. Client-side display behaviour, not a proxy defect.
## DeepSeek rejects `thinking.block_binding`
OpenCode adds Fable 5.1 thinking-binding controls automatically because of the
requested model name. DeepSeek via OpenRouter rejects the resulting
`thinking.block_binding` field with **HTTP 400**. Fixed in the OpenCode client
config (its own opt-out); no proxy change was made, and nothing strips the field
automatically.
## Client cancellation is client-dependent, and the record is m