Skip to content

v2026.10.06

Choose a tag to compare

@handstandsam handstandsam released this 06 Oct 12:08
· 16 commits to main since this release
1d35378

Highlights

Trailblaze App replaces the desktop app

trailblaze app now opens Trailblaze App, the web-based workspace for trails, runs and devices, in a native window, and starts the daemon if needed. The old Compose desktop app is gone. Run trailblaze app from a repo and it switches a running daemon to that repo's trails, targets and default target. trailblaze app --headless (or trailblaze app start) starts only the daemon.

One type tool, and openApp for getting to a screen

  • type types into a field by ref, the same way tap works. It's the tool the AI uses, and the AI no longer clears a field before typing into it.
  • inputText can find its field by selector, including the field's label, and gains clearFirst. On Android it also types into password fields on web pages inside apps.
  • openApp opens or foregrounds an app and returns once it is on screen, without clearing data or changing permissions. launchApp is deprecated but still works.
  • Trailhead building blocks: android_forceStop, ios_terminate and ios_grantPrivacy let a trailhead spell out every state change it makes. See the trailheads guide.
  • web_drag drags a web element and drops it somewhere else.

Reports: a Strings tab and a picture for every step

  • Strings lists every screen's visible text, with each string cut out of its screenshot.
  • A step with no screenshot gets a frame from the session video, and thumbnails play the step's recording. The Timeline can seek anywhere and open any captured event.
  • Each failed run says why it failed and where its time went.
  • App crashes show on the main timeline, and a passing run fails if its app crashed.
  • Multi-device reports give each device its own screenshot lane, and the Grid gains a Strip layout: a sideways gallery of each run's screenshots.

Better session video

  • Android recordings place each frame by when the device drew it, through a bundled scrcpy server.
  • Multi-device sessions record one video per device, including the browser.
  • Web recordings keep small text readable (TRAILBLAZE_WEB_VIDEO_QUALITY=high for sharper) and line up with their steps. WebM recordings now play in Chrome.

Faster and steadier

  • CLI: the launcher adds ~40ms to a command, down from ~180ms. A run that times out is cancelled on the daemon, so a retry doesn't run beside it. CLI commands show up in the session's trace.json.
  • Tool calls: direct tool calls skip screen captures nobody reads, typing and closing the keyboard is one step on Android, and recorded web trails replay at Playwright speed.
  • iOS: fewer device and screen re-probes per call. Several simulators can run in one daemon without reconnecting one tearing down another. Stopping the daemon no longer leaves XCTest runners behind, and a dead runner is rebuilt on reconnect instead of reporting "No device connected".
  • Android: the runner recovers after an emulator reboot, or when it loses UiAutomation or its shell stops answering. The keyboard is hidden without pressing Back. A late-reported tap, or a post-action wait that timed out, no longer fails the step.
  • Web: checks fail fast on a page that stopped responding, and screenshots no longer stall on pages with many links.

Breaking changes

  • Koog is the only agent. TRAILBLAZE_RUNNER and MULTI_AGENT_V3 are removed, along with --agent and trailblaze config agent. Saved settings and logs that name the old agents still load and run on Koog.
  • The desktop app is removed. trailblaze app --v2 is gone (trailblaze app does what it did), and so is TRAILBLAZE_DESKTOP_GUI. Settings formerly under Advanced Configuration now live in Trailblaze App's Settings → Workspace.
  • Physical iPhones are no longer supported. Only iOS simulators are; a physical device is refused with a message saying so.
  • The report's Map tab is removed. Old tab=map / mode=map links open the Grid.
  • Removed settings: annotated-screenshots, TRAILBLAZE_AUTO_TERMINATE_VERIFY_STEPS and TRAILBLAZE_IME_DISMISS_VIA_SHOW_MODE.
  • ask, blaze and verify fail when the LLM call fails, instead of reporting a result.

Other changes

  • Self-heal: a failed assertion is healed as a check, so the heal can't re-drive the flow it was checking.
  • Scripted tools: TypeScript tools no longer need a duplicate YAML descriptor. They can call Kotlin host helpers without those becoming tools, accept nullable T | null args, read their device's emulator serial or simulator UDID from ctx.device.instanceId, and return the screen after the action. A session only sees the tools that run on its platform.
  • Trails: requiresHost marks a device leg host-only.
  • Web locale: TRAILBLAZE_WEB_LOCALE (or a trail's config.locale) opens browser sessions in a given language.
  • tool --yaml accepts inline YAML, a file path, or - for standard input.
  • waypoint migrate-trail migrates selectors between any driver pair, with --from / --to to assert the expected dialects.
  • Decision engine (experimental, off by default): lets the agent make routine moves without an LLM call, using any POST /v1/systemone server. See LLM configuration.
  • TRAILBLAZE_DISABLE_DESKTOP_LOG_FILE stops the daemon copying its output to a log file.
  • assertVisible no longer crashes on cells with a disabled child. Home-screen icons and other elements under zero-size wrappers now appear in the element list.
  • The CLI jar is about 34 MB smaller: WebP screenshots are encoded with libwebp instead of Skia.
  • Maestro 2.11.0 and dadb 2.0.0, plus security updates to the MCP SDK, logging, metrics, jsoup and fast-uri dependencies.

Install or upgrade

brew install block/tap/trailblaze     # or: brew upgrade trailblaze

Or install from this release directly (requires Java 17+):

curl -fsSL https://raw.githubusercontent.com/block/trailblaze/main/install.sh | bash

What's Changed

  • Remove the retired WASM report build from GitHub Actions by @handstandsam in #253
  • Install libwebp tools on the Linux trail jobs so the gallery animations regenerate by @handstandsam in #255
  • Per-device session videos, sharper web recordings, faster CLI calls by @handstandsam in #254
  • Add openApp and trailhead building blocks, device-timed Android video, faster iOS calls by @handstandsam in #256
  • Strings tab, a picture for every step, inputText by selector, faster iOS calls by @handstandsam in #257
  • Replace the desktop app with Trailblaze App, add a single type tool, and slim the CLI jar by @handstandsam in #258

Full Changelog: v2026.09.25...v2026.10.06

What's Changed

  • Remove the retired WASM report build from GitHub Actions by @handstandsam in #253
  • Install libwebp tools on the Linux trail jobs so the gallery animations regenerate by @handstandsam in #255
  • Per-device session videos, sharper web recordings, faster CLI calls by @handstandsam in #254
  • Add openApp and trailhead building blocks, device-timed Android video, faster iOS calls by @handstandsam in #256
  • Strings tab, a picture for every step, inputText by selector, faster iOS calls by @handstandsam in #257
  • Replace the desktop app with Trailblaze App, add a single type tool, and slim the CLI jar by @handstandsam in #258

Full Changelog: v2026.09.25...v2026.10.06