This release includes 1 breaking change for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+5 more
ReleasePort's take
Moderate signalThe v0.7.5 release adds a `reasoning_replay` option to WorkflowRunner and updates the Anthropic client with extended thinking and prompt caching features.
Why it matters: A new `reasoning_replay` flag (full, keep‑last, none) lets developers control replay behavior; default now skips reasoning blocks. The AnthropicClient gains adaptive thinking and cache‑aware token accounting for more efficient usage.
Summary
AI summaryUpdates docs/decisions/017-reasoning-replay-policy.md, docs/results/raw/reasoning-replay.md, and proxy across a mixed release.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Breaking | High |
Changes default behavior to replay no reasoning blocks. Changes default behavior to replay no reasoning blocks. Source: llm_adapter@2026-06-12 Confidence: high |
— |
| Feature | Medium |
Adds `reasoning_replay` option (`full`, `keep-last`, `none`) to WorkflowRunner and proxy. Adds `reasoning_replay` option (`full`, `keep-last`, `none`) to WorkflowRunner and proxy. Source: llm_adapter@2026-06-12 Confidence: high |
— |
| Feature | Medium |
Adds reasoning‑replay evaluation grid with ~170k runs across policies and ablations. Adds reasoning‑replay evaluation grid with ~170k runs across policies and ablations. Source: llm_adapter@2026-06-12 Confidence: high |
— |
| Feature | Medium |
Adds `AnthropicClient(thinking=…)` to enable extended thinking (e.g., adaptive). Adds `AnthropicClient(thinking=…)` to enable extended thinking (e.g., adaptive). Source: llm_adapter@2026-06-12 Confidence: high |
— |
| Feature | Medium |
Adds prompt caching (`AnthropicClient(prompt_caching=True)`) with cache‑aware token accounting. Adds prompt caching (`AnthropicClient(prompt_caching=True)`) with cache‑aware token accounting. Source: llm_adapter@2026-06-12 Confidence: high |
— |
| Feature | Medium |
Re‑bases Claude eval tier to run Sonnet and Opus with adaptive extended thinking enabled. Re‑bases Claude eval tier to run Sonnet and Opus with adaptive extended thinking enabled. Source: llm_adapter@2026-06-12 Confidence: high |
— |
Full changelog
Reasoning replay is now a measured, bounded policy. Reasoning-capable backends return hidden reasoning alongside tool calls, and forge previously re-serialized all of it into backend-facing history on every later turn. The new reasoning_replay knob bounds that — and after a full re-sweep of the published eval grid showed that dropping replayed reasoning is quality-free and token-cheaper, the default is none. The release also re-baselines the Claude eval tier with extended thinking enabled and adds Anthropic prompt caching with cache-aware cost accounting.
Added
reasoning_replay {full, keep-last, none}onWorkflowRunner(reasoning_replay=…)and the proxy (--reasoning-replay).fullreplays every captured reasoning block (the historical behavior),keep-lastonly the most recent,nonekeeps reasoning out of backend-facing history entirely. Serialization-only: reasoning is still captured and still surfaces inon_messageand internal history. In OpenAI-compatible proxy responses,keep-lastexposes current reasoning asreasoning_contentrather than assistantcontent, so clients that preserve reasoning fields can replay just the latest block. See ADR-017.- Reasoning-replay eval grid (
eval_results_v0.7.5.jsonl, a new eval generation): the full 8–14B lineup re-swept across all three policies × both ablations × native/prompt — ~170k runs. The policy is part of the eval resume key and a first-class report/dashboard dimension: row labels carry:keep-last/:fulltags (untagged =none), the dashboard gains a Reasoning Replay filter, the report a--reasoning-replayfilter, and a dedicated reasoning-replay view compares policies per config. A wire-level counter (reasoning_wire) validates each policy's on-wire behavior (none→ exactly 0 replayed reasoning across every run). - Anthropic extended thinking —
AnthropicClient(thinking=…)— request-side extended-thinking config (e.g.{"type": "adaptive"}). When set, a forcedtool_choiceis suppressed (the API requiresautowith thinking on) andmax_tokensis raised to fit the thinking budget. The Claude eval baseline now runs Sonnet and Opus with adaptive thinking — all prior Claude rows had thinking off, the wrong baseline for a reasoning-flavored suite; Haiku does not support adaptive thinking and stays non-thinking. - Anthropic prompt caching —
AnthropicClient(prompt_caching=True)— marks a static ephemeral cache breakpoint over the tool definitions + system prompt (byte-identical every turn, so it read-hits from turn 2 onward instead of re-billing the re-sent schema).TokenUsagegains genericcache_creation_input_tokens/cache_read_input_tokenscounters, and eval cost accounting prices cache writes (1.25×) and reads (0.1×) at their actual rates.
Changed
- Captured reasoning is no longer replayed to the backend by default. Pre-0.7.5 behavior replayed every captured reasoning block (equivalent to
reasoning_replay="full"); the default is now"none". On the published eval suite,noneis statistically indistinguishable from replay-all in aggregate while saving the replayed tokens every turn; no per-config regression survives multiple-comparison correction (closest: a mild raw drop on Ministral-3 14B Reasoning Q4, wherenoneandkeep-lastare indistinguishable from each other). The knob is inert for models that emit no reasoning. Migration:--reasoning-replay full(proxy) orWorkflowRunner(reasoning_replay="full")restores the historical behavior. Anthropic-protocol proxy responses emit reasoning text only underfull— forge does not synthesize signed Anthropic thinking blocks.
Breaking Changes
- Default `reasoning_replay` changed from `full` to `none`, altering backend history behavior.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About Forge
All releases →Related context
Related tools
Earlier breaking changes
- v0.7.4 Deprecates pydantic `.model_*` API on `ToolCall` and `TextResponse` dataclasses; construction no longer validates argument shape.
- v0.7.3 Renames `--mode {native,prompt}` to `--backend-capability {native,prompt}`; no deprecation alias.
- v0.7.0 Unknown‑tool handling now replies with [UnknownToolError] on the tool channel instead of user nudges.
- v0.7.0 Changes error reporting: step enforcement and prerequisite violations now emit tool‑channel messages with [StepEnforcementError] / [PrereqError].
Beta — feedback welcome: [email protected]