0.81.0
takahirom/arbigent0.81.0Sep 9, 2026by takahirom
AI Summary
Introduces a new `arbigentw` wrapper script for version pinning, improves `replayWithFallback` logic to wait for screen targets rather than time, and adds Anthropic prompt caching support.
Key Highlights
- New `arbigentw` wrapper script for pinning versions in repositories.
- Replay waits for the screen target instead of the clock for better synchronization.
- Anthropic prompt caching and cache usage recording.
- Project-wide `maxRetry` configuration defaults.
- Enhanced web report with scenario cards and outcome colors.
Breaking Changes
- `ArbigentInitializerInterceptor.resetsDeviceState` is removed.
- `ArbigentScenarioContent.maxRetry` is now `Int?` (nullable).
New Features
- arbigentw wrapper script
- Anthropic prompt caching
- Project-wide retry defaults
- Enhanced web report UI
Full Release Notes
# Deprecated. We are changing `arbigent-wrapper.properties`'s path in 0.81.1 --- This release adds `arbigentw`, a `gradlew`-style wrapper for pinning arbigent in a repository, and finishes the second round of `replayWithFallback` fixes from running it on a real suite. Two changes are breaking for library consumers — see the section at the end. ## `arbigentw`: Pin a Version in Your Repository (#431) A wrapper script downloads the pinned release on first use, verifies its SHA-256 checksum and runs it, so nobody on the team has to install the CLI: ```bash arbigent wrapper --version 0.81.0 ./arbigentw run --scenario-ids="open-model-page" ``` It commits `arbigentw` (a POSIX shell script, no jar) and `.arbigent/wrapper/arbigent-wrapper.properties`. The checksum is mandatory and a mismatch installs nothing. Java 17 or later is required. See the README for bootstrapping without an installed CLI. Windows `.bat` is not included yet. ## Replay Waits for the Screen, Not for the Clock (#425) Replay used to sleep the whole recorded interval between two steps without checking the screen. Now each step gets a budget — the recorded interval, capped at 60s, minus the time already spent — and a step with a recorded target proceeds as soon as that target is on screen. Since the recorded interval already includes the AI's latency, replay is never slower than the recording. The one cost: the first step of each task, which previously waited nothing, now gets a 10s budget. The trace written after a replay keeps the recorded intervals rather than the replay's own, faster ones, so a clean replay no longer tightens the next one's budget. Traces tightened by earlier versions recover after one AI-driven run. ## The AI That Takes Over a Task Continues from Where Replay Left It (#434) When a replayed task diverges, the AI re-runs it. It used to re-run the task's initializers, which threw away the device state the replayed actions had produced, and started with an empty context. Now the replacement skips the initializers and sees the replayed actions as history: ``` This action was already performed before this attempt, replayed from a recording: Click on text: Sign in ``` These entries do not count against `maxStep` and are not written to the trace again. ## A Trace Longer Than `maxStep` Is Not Replayed (#435) A trace stitched together after a fallback can exceed the task's step limit. Such a trace is now refused at write and at read, with the reason in the log: ``` Not replaying the stored trace for task 2: it has 7 steps, more than the 5 the task allows ``` An existing trace over the limit is treated as invalid; that scenario runs once under the AI and records a fresh trace. ## Anthropic Prompt Caching, and Cache Counts in Usage (#424) `AnthropicAi` now puts a `cache_control` breakpoint on the last system block, so the tools and system prompt are read from cache from the second step on — about half the input tokens per call in a 5-step measurement. Usage recording (`AI usage:` log line and `usages/*.json`) now includes cache counts for both OpenAI and Anthropic. ## `settings.maxRetry` as a Project-Wide Default (#436) `maxRetry` can now be set once under `settings`; a scenario resolves `scenario.maxRetry ?: settings.maxRetry ?: 3`. Existing project files behave the same, except that a scenario explicitly set to `3` was never written out before, so it now inherits a project value if one is configured. ## Smaller Changes - The web report gained scenario cards, consistent outcome colors, screenshot toggles and collapsible YAML (#439). - CI workflows that ship no runtime use the preinstalled Temurin JDK (#433). ## Breaking Changes for Library Consumers - `ArbigentInitializerInterceptor.resetsDeviceState` is removed (#434). Initializers now run once per task attempt, and the agent replacing a fallen-back task skips them. Delete any override. - `ArbigentScenarioContent.maxRetry` is now `Int?` (#436). Constructor and `copy` signatures change, as does `ArbigentProjectSettings`. YAML files need no change. ## What's Changed * Add arbigentw wrapper by @takahirom in https://github.com/takahirom/arbigent/pull/431 * Use the preinstalled Temurin JDK where no runtime is bundled by @takahirom in https://github.com/takahirom/arbigent/pull/433 * Add settings.maxRetry as a project-wide retry default by @takahirom in https://github.com/takahirom/arbigent/pull/436 * Add Anthropic prompt cache breakpoint and record cache usage by @takahirom in https://github.com/takahirom/arbigent/pull/424 * Wait for the recorded target before capturing a replayed step by @takahirom in https://github.com/takahirom/arbigent/pull/425 * Skip initializers for the agent replacing a fallen-back task by @takahirom in https://github.com/takahirom/arbigent/pull/434 * Reject a replay trace longer than the task's step limit by @takahirom in https://github.com/takahirom/arbigent/pull/435 * Improve web report readability and collapse YAML by @takahirom in https://github.com/takahirom/arbigent/pull/439 **Full Changelog**: https://github.com/takahirom/arbigent/compare/0.80.0...0.81.0