v2.13.9
Forge v2.13.9
CLI/TUI and desktop release v2.13.9; mobile remains on its compatible native version.
- CLI / TUI — binaries below (
*.tar.gz/*.zip) orbrew upgrade forge - Desktop (macOS · Windows · Linux) — app bundles below + in-app auto-update
- Mobile (iOS) — production OTA by default; native/TestFlight builds are manual when required
Fixed
- A fresh install could fail its very first prompt with a usable model sitting right there. With
no catalog yet the router only ever tried the classified tier's built-in seeds; the trivial tier
is a local ollama plus groq, so on a machine with no API keys and ollama not running the chain
exhausted and the turn failed — while a logged-incodexCLI could have served it. The seed chain
now carries the other tiers as a deduped tail (the tier's own candidates still lead, so the
primary pick is unchanged), andcodex-cli::joinsclaude-cli::as a default seed: it was in no
tier list at all (crates/forge-mesh/src/lib.rs,crates/forge-config/src/lib.rs). - A first-run failure named an adapter instead of a next step. The verdict only offered setup
guidance when EVERY attempt reported missing credentials, and a keyless candidate fails as
"provider unavailable", so a machine with nothing configured was told "attempted providers failed
for mixed reasons". It now leads withforge setup/forge authwhenever no API key and no
logged-in CLI exist, keeping the failure mix after it. Neither "binary on PATH" nor "not known
logged out" proves a login, so the check requires positive evidence
(crates/forge-core/src/failure_verdict.rs). - A read-only turn inside a build session is no longer re-driven to produce a diff. #1266 fixed
which contract such a turn derives, but the empty-diff nudge and the code-change classification
still read the session-wide flag a worktree daemon session arms for its whole life, so the turn
was still pushed to "implement the fix now" against its own instruction
(crates/forge-core/src/lib.rs). - The CLI-bridge terms notice reads like Forge, not a raw timestamped log line wedged between
the routing line and the model's first token. It also survives the failover path, which is how a
keyless run reaches a bridge at all (crates/forge-provider/src/lib.rs). - A bare bridge id reads as what it means.
claude-cli::is a valid pin for "whatever model
that CLI is configured to use" and the first built-in complex-tier default, but printed verbatim
it looked like a truncated id on a new user's first turn. It now renders as
claude-cli (its default model)(crates/forge-tui/src/lib.rs). - A relay link that has never exchanged is no longer reported as disconnected. The two states
call for different actions: one is still coming up, the other needs aforge serverestart
(crates/forge-cli/src/anywhere/state.rs).
Changed
- The
use_skilllisting costs about 626 fewer tokens on every tool-bearing turn. It advertises
every skill in its own description — 64 skills at 100 characters was 7,438 characters riding every
request, a quarter of the whole tool payload and more than the system prompt. Each summary is
clipped to 60 characters; discovery is unchanged since every skill is still listed by name
(crates/forge-core/src/lib.rs).
What's Changed
- chore(dist): update package manifests to v2.13.8 by @github-actions[bot] in #1274
- chore(deps): bump the cargo-minor-patch group across 1 directory with 6 updates by @dependabot[bot] in #1272
- fix(anywhere): a link that has never exchanged is not a dropped link by @florisvoskamp in #1273
- fix(cli): the CLI-bridge terms notice reads like Forge, not like a log line by @florisvoskamp in #1275
- perf(core): the skill listing costs ~600 fewer tokens on every tool-bearing turn by @florisvoskamp in #1276
- fix(tui): a bare bridge id reads as the CLI's default model, not a truncated id by @florisvoskamp in #1277
- fix(core): a zero-credential install is told how to set up, whatever failed first by @florisvoskamp in #1278
- fix(mesh): a first run no longer dies with a usable bridge one tier away by @florisvoskamp in #1279
- chore: prepare v2.13.9 release by @florisvoskamp in #1280
Full Changelog: v2.13.8...v2.13.9