Skip to content

v2.13.9

Choose a tag to compare

@github-actions github-actions released this 03 Sep 05:25
· 72 commits to main since this release
0954646

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) or brew 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-in codex CLI 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), and codex-cli:: joins claude-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 with forge setup / forge auth whenever 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 a forge serve restart
    (crates/forge-cli/src/anywhere/state.rs).

Changed

  • The use_skill listing 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