You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
run -s <id> <file.py> [--arg k=v] — execute a reusable Python file once against the live session (same vars as eval, plus args), instead of shell-looping eval/CLI calls over a list. ~20x faster than a shell loop for 30 items (7.75s → 0.38s; see benchmarks/microbench_run_vs_loop.sh)
replay playbooks gained wait (by selector/state, not just a fixed sleep), assert (fail a step when a condition doesn't hold), for_each (loop nested steps over a literal or captured list), and headers on fetch steps
stop_on_failure: true playbook option halts remaining steps after the first failed one, including out of a nested for_each
setup --upgrade bumps the patchright pip package and installs the Chromium build it now expects, and restarts a running daemon so it stops driving the old binary from memory. Previously there was no command for this — brow setup alone just re-fetched the build for whatever version was already pinned
Update-available check: most commands now print a one-line [brow] brow X.Y.Z is available ... notice to stderr when a newer brow-cli is on PyPI, cached once a day (hourly retry on failure) so it almost never touches the network. Fails silently on any error and never blocks a command. Disable with BROW_NO_UPDATE_CHECK=1
Changed
License reverted to Elastic License 2.0 (was MIT) — permits free use, modification, and distribution, but not offering brow as a hosted/managed service. Releases up to and including 1.2.0 remain MIT-licensed; this applies to releases after 1.2.0
Fixed
fetch steps' output: name now actually populates {name} (and {name[key]}) for later steps, as the playbook-writer docs always claimed — previously it was only recorded in the run's result log and never fed back into substitution
replay CLI now exits nonzero when any step failed — previously it always exited 0 regardless of step outcomes
fetch steps with an HTTP 4xx/5xx response are now marked as failed (expect_status opts out) — previously any response, including a 500, was reported ok: true
An unknown playbook step action now reports a clear error instead of failing silently with no explanation
stop_on_failure now actually halts a run when the failure is inside a for_each — previously it only stopped the current iteration's remaining steps, and later iterations and outer steps kept going
A playbook-level auth: none is now inherited by fetch steps that don't set their own auth — previously only a per-step auth was ever checked
state restore now restores localStorage in addition to cookies — previously it silently dropped the origins half of storage_state(), so a restored login failed for any site keeping its auth token in localStorage instead of a cookie
profile delete now refuses (409) while a live session holds that profile, instead of deleting the on-disk directory out from under it
Docs site: every internal cross-reference link used a relative .md path that Astro never resolves and rendered as a literal broken href in the built site (e.g. href="daemon.md") — converted site-wide to the resolved /brow/... paths the sidebar itself uses