Repository navigation
Epic: make Claude 5.x reliable on existing transports #4580
Description
Goal
Make the Claude 5.x models work reliably on the transports docker-agent already has:
- Anthropic Messages (direct, custom
base_url, Models Gateway) - Google Vertex native prediction (
publisher: anthropic) - AWS Bedrock
ConverseStream
That means: respect what the user configured, send requests each model accepts, replay signed thinking exactly or refuse to continue, and price each turn with the model that actually served it.
Out of scope: new transports (Bedrock Mantle/InvokeModel, Foundry, Claude Platform on AWS), client-side refusal retries, destructive history migrations, native compaction on Vertex, global catalog refreshes.
Models
| Model | ID | Claude API | Vertex | Bedrock Converse |
|---|---|---|---|---|
| Haiku 5.5 | claude-haiku-5-5 |
✅ | ✅ | ✅ |
| Opus 5 | claude-opus-5 |
✅ | ✅ | ✅ |
| Opus 5.5 | claude-opus-5-5 |
✅ | ✅ | ✅ |
| Sonnet 5 | claude-sonnet-5 |
✅ | ✅ | ✅ |
| Sonnet 5.5 | claude-sonnet-5-5 |
✅ | ✅ | ✅ |
| Fable 5 | claude-fable-5 |
✅ | ✅ | ✅ |
| Fable 5.1 | claude-fable-5-1 |
✅ | ✅ | ✅ |
| Mythos 5 | claude-mythos-5 |
limited access | limited access (no Google model card) | ❌ Mantle only |
| Mythos 5.1 | claude-mythos-5-1 |
limited access | limited access (no Google model card) | limited access |
✅ means documented by the vendor (audited 2026-10-13), not tested in docker-agent. Dateless 5.x IDs are pinned snapshots, not aliases. Bedrock IDs add the anthropic. prefix and inference-profile qualifiers.
Decisions
- No new transport. Mythos 5 on Converse is refused before inference.
- For 5.x, a thinking-prefix mismatch defaults to
drop_block: the server drops invalidated thinking instead of failing. Runtime features (compaction, handoffs, trimming) legitimately change the prefix mid-session, so anerrordefault would make that 400 stick for the whole session. Setthinking_prefix_mismatch: errorto opt in. See feat(provider): exact signed-thinking capture, persistence and replay (incl. Bedrock) #4653. - Server fallback works end to end on the Claude API, including 5.x chains (feat(Claude): end-to-end server fallback for Claude 5.x #4584). Claude Haiku 5.5 has no server-side fallback: a list is rejected and
defaulthas no effect. Fallback is rejected on Vertex, Bedrock, gateways and other base URLs.
Work items
| Step | Issue | Status | PR |
|---|---|---|---|
| P1 | #4581 Document Claude backends, protocols and limits | ✅ Done | #4586 |
| P2 | #4582 Preserve transport and surface clone failures | ✅ Done | #4587 |
| P3 | #4576 Price routed turns with the serving model (external) | ✅ Done | #4579 |
| P4 | #4583 Claude 5.x core: request policy and signed history | ✅ Done | see below |
| P4.1 | #4651 Model table and request-policy resolver | ✅ Done | #4657 |
| P4.2 | #4652 Refuse 5.x fallbacks and Mythos 5 on Bedrock | ✅ Done (fallback block lifted by #4700) | #4658 |
| P4.3 | #4653 Signed thinking: capture, persistence, replay | ✅ Done (error default dropped) |
#4666, #4667, #4668 |
| P4.4 | #4654 Lifecycle tests: compaction, reload, switches, shared clients | ✅ Done (results) | #4686, #4688, #4689 |
| P5 | #4584 End-to-end server fallback for 5.x | 🟡 In review: 1 of 3 merged | #4690 ✅, #4691, #4700 |
#4581 ✅ #4582 ✅ ──┐
├──> #4583 ✅ ──> #4584 🟡 (#4690 ✅ #4691 #4700)
#4576 ✅ (#4579) ────┘
Follow-ups outside the epic: #4683 (keep unpriced turns distinguishable after reload), #4684 (rule-based lastSelectedID), #4685 (tool DeferralTracker).
Related:
- fix(anthropic): omit sampling params for Haiku 5.x #4640 (merged) stopped sending sampling parameters for Haiku 5.x, a small part of feat(Claude): Claude 5.x core — request policy and signed history #4583.
- fix: make Haiku 5.5 requests compatible across Claude providers #4553 (Haiku 5.5 compatibility PR) was closed without merging. Its scope is covered by feat(Claude): Claude 5.x core — request policy and signed history #4583.
- Preserve Claude prompt caching when changing effort mid-conversation #4116 (keep prompt caching when changing effort) is separate work. feat(Claude): Claude 5.x core — request policy and signed history #4583 must not break it.
Done when
- docs(Claude): document existing backends, protocols and feature limits [P1; independent] #4581
- fix(provider): preserve transport and surface clone failures [P2; independent] #4582
- Rule-based routing: routed requests are priced with the router's model, not the model that served them #4576
- feat(Claude): Claude 5.x core — request policy and signed history #4583 and all its sub-issues
- feat(Claude): end-to-end server fallback for Claude 5.x #4584
- Results recorded per model, transport and feature as pass / fail / not established / expected refusal. Limited-access models are not counted as passing.
- Legacy Claude models, other providers and fallback chains without 5.x keep their tested behavior.
Activity