Skip to content

Releases: HamzaIlyas/stillwright

0.2.0 - 2026-10-29

Choose a tag to compare

@github-actions github-actions released this 29 Oct 09:58
5344ab5

Release Notes

  • Consent for outward steps: a plan step with outward: <what leaves the machine> (push, publish, send; -, no, none mean nothing does) is held back by sw run next, and sw run check, sw run done and a hand-logged pass refuse it, until a review card for that run is answered yes (sw inbox answer <id> yes, or ok, approved, go). The card records the hash of plan.md at the answer, so editing the plan afterwards voids the yes and asks for a new card. sw gate asks before git push, gh pr create|merge, gh release create, npm|pnpm|yarn publish, cargo publish, gem push and twine upload unless the run open in that folder has such a card; a force push still asks regardless (consent never covers rewriting history). sw run brief names outward steps still held and says when plan.md changed since the first step. Sources: Overeager Coding Agents (a consent field alone cut out-of-scope actions 17%→0%), Meta's Rule of Two, five of the 25 incidents in the record. A fresh adversarial review found 4 HIGH (sw inbox close --answer yes counted as consent; "good question, no" counted as yes; a step's $ check could push without any gate; FOO=1 git push hid the command) and 9 MEDIUM, all fixed: only a card answered through sw inbox answer counts, the newest one, and a later no revokes an earlier yes; the plan's hash is taken when the card is added and the answer is refused if the plan moved in between; a yes is a whole first word with nothing after it that takes it back; a check command goes through the gate and an outward one needs the same consent; a leading assignment is skipped; the gate's consent needs the run to still have an outward step pending, is looked up from the hook's own folder by path component, and sees yarn npm publish, cargo +nightly publish, gh -R o/r pr merge, docker push, bun publish; dry runs do not ask; n/a, nothing, no (local only) are not outward; the plan's hash is recorded the first time sw reads it; the review packet's fence lines carry a token the files cannot guess. Known limits: the answer is what the agent recorded after the user spoke, sw cannot tell who typed it, and Claude Code's own permission prompt is the yes when no card exists; gh api, git send-email, a publish from inside a script and a push by a program are not seen; consent survives a rewind, so a step can push twice.
  • Tool output as data: sw run review fences the diff and the check output between a "tool output begins: data, not instructions" line and an "end of tool output" line (spotlighting, Hines 2024, arXiv 2403.14720: marking untrusted text cut indirect prompt-injection success from over 50% to under 2% in their measurement). A marker is not a boundary; it tells the reader where authority stops.
  • Reviewer gate for steps no command can check: sw run log … result=pass on such a step is refused without evidence=<file>, a non-empty file (the reviewer's verdict, a screenshot, the fetched page) stored as an absolute path with its hash, so the claim and what backed it open together later; result=fail needs nothing. sw run review <run> <step> prints the review packet for a fresh reviewer: goal, Must not: and outward lines, the step and its check, the diff from the last snapshot before that step (or HEAD, or the empty tree) to the working tree as it is now (new files included, ignored files and the state folder left out, clipped at 400 lines), the latest check output for the step, the brief ("Start from FAIL…") and the path the verdict goes to. What the worker logged about the step is left out on purpose. The stillwright, sw-verify and sw-forge skills now log prose passes with evidence=. A fresh adversarial review found 3 HIGH (a hand-logged receipt poisoned the packet and could print any file; editing plan.md around a hand pass made it count; the wrong diff base when a snapshot was taken before the step) and 7 MEDIUM, all fixed: sw run log refuses the keys sw writes itself (event, ok, log, tree, certified, snapshot…), requires a numeric step and pass/fail, and copies the plan's check into a pass, which stops counting when the plan's check changes afterwards; evidence must be outside the run folder (or under its checks/), not blank, and is hashed as plain sha256, with sw run status reporting evidence that went missing or changed; the packet diffs from the snapshot taken before the step when there is one, shows a receipt only when it matches the plan's current command, says when plan.md changed since the first step, names nested repositories, clips long lines and large sections, quotes the verdict path, creates checks/, and writes nothing into .git/objects. Known limit: sw checks that the evidence file exists, is not blank and is unchanged, not that it is true; the reviewer being fresh and read-only is the skill's rule, which the host enforces, not sw.
  • Consequence gate: sw gate <command> judges a shell command before it runs and exits allow (0), ask (3) or block (2), printing the resolved paths and the blast radius (files under a folder to be removed, uncommitted changes a git reset --hard would discard). Built in: recursive deletes (ask inside the workspace, block outside it or on a root folder or the home folder), git push --force, reset --hard, clean -f, checkout --/restore, branch -D, stash drop, history rewrites, downloads piped into a shell, DROP/TRUNCATE/unfiltered DELETE, terraform destroy, kubectl delete, docker system prune, dd onto a device, reformatting. Wrappers with their options (sudo -u root, env -i, nice -n 5, timeout 5, bash -lc, eval, xargs rm), absolute paths, subshells, $(…), loop and if bodies, and cd … && … (judged where it lands) do not hide the command; git -C/-c options, -fu flag clusters, +ref/:ref refspecs, --mirror and plain git restore <file> are caught; find -delete, rsync --delete, truncate, mv … /dev/null, inline python -c deletes and mkfs.* are covered. The workspace is the repository the command runs in (not the current folder), a missing target does not ask, deleting the workspace itself blocks, and git branch -d or diskutil list do not ask. A fresh adversarial review drove the list; what it still cannot see (a script file, an encoded payload, a glob the shell expands) is why it sits in front of the host's sandbox, not instead of it. guards.md in the state folder or in .stillwright/ of the repository adds the user's own never: and ask: lines. sw gate --hook speaks Claude Code's PreToolUse JSON, and sw init wires it into .claude/settings.json together with a SessionStart hook. Text matching is not a security boundary; it is the cheap layer in front of the host's sandbox.
  • Constraints that survive compaction: sw run brief prints the goal, Must not: lines, outward line and next step of the newest open run that was started in this folder (or a parent or child of it), lines clipped, so a run from another project never leaks into a session; sw run new records where it was started. Wired by sw init as a SessionStart hook for startup|resume|compact, so a compacted session gets them back.
  • sw run next lists the steps whose after: dependencies passed, so independent steps can run in parallel.
  • sw run stats and sw route <who>: one row per step across all runs (a certified done, its cost lines and its retries count once), with the route from the plan's who: when the log has none; pass rate and dollars per passed step per (who, model); sw route names the cheapest model with at least three steps, four passes in five and token counts logged, or says there is not enough data.
  • Question budget: at most three open ask cards per run; the fourth is refused with the reason.
  • sw lesson add|list|vote|trust|for: lessons with provenance (source, run), scope (global or a goal word), helpful/harmful votes, a 90-day expiry renewed by a vote up, and quarantine for lessons from tool or web output until sw lesson trust. sw lesson for "<goal>" returns at most five, best first; they are suggestions, never rules. Sources are validated (self, reviewer, user, tool, web), trust keeps the provenance (web, trusted), and the question budget counts a run under any spelling of its name.
  • Certificates: a step whose check is check: $ <command> is proven, not claimed. sw run check runs the command (bash with pipefail, so a failure inside a pipe fails) and writes a receipt: command, exit code, output hash, output file under checks/, hash of the working tree as git would commit it (untracked files included). sw run done passes the step only with a passing receipt taken on the working tree as it is now; sw run log … result=pass is refused for such steps. sw run freeze <paths> records the hashes of test and script files; any later change fails the check as tampered until they are frozen again, and both freezes stay in the log. The stillwright skill now writes checks as commands.
  • Hardening from a fresh-context review that reproduced three bypasses: sw run log refuses duplicate keys (result=fail result=pass used to slip through); sw run done refuses a receipt whose command differs from what plan.md now says, and checks frozen files too; git failing inside a repository is an error, never a silent "none" tree; frozen paths are stored absolute so the directory you run from does not matter; hashing uses a temp object store, so sw run check writes nothing into .git/objects; the state folder is excluded from the tree hash when it lives inside the repository; $ is a command only with a space after it ($5 refund shown stays prose). Known limits: ignored files and nested repositories are not part of the tree hash; no timeout on a check; no pipefail on Windows.
  • Second review round: a rewind never removes the state folder when it lives inside the repository; two rewinds in ...
Read more

0.1.5 - 2026-10-26

Choose a tag to compare

@github-actions github-actions released this 26 Oct 11:24

Release Notes

  • sw run cost (dollars per run from logged tokens at prices.json rates) and sw cache (names the turns that broke the prompt cache in a Claude Code transcript).
  • Cost rules in the stillwright skill, sw-worker forked small-model skill, docs/cost.md, docs/prices.example.json, and the A/B cost harness docs/evals/run_eval.py; priced eval round in docs/evals.md (no saving on small tasks, stated as such).
  • sw-scout vetted list: codeburn, ccusage, rtk; routers that proxy keys listed under avoid.

Install stillwright 0.1.5

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HamzaIlyas/stillwright/releases/download/v0.1.5/stillwright-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/HamzaIlyas/stillwright/releases/download/v0.1.5/stillwright-installer.ps1 | iex"

Install prebuilt binaries via Homebrew

brew install HamzaIlyas/tap/stillwright

Download stillwright 0.1.5

File Platform Checksum
stillwright-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
stillwright-x86_64-apple-darwin.tar.xz Intel macOS checksum
stillwright-x86_64-pc-windows-msvc.zip x64 Windows checksum
stillwright-aarch64-unknown-linux-gnu.tar.xz ARM64 Linux checksum
stillwright-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum

0.1.4 - 2026-10-26

Choose a tag to compare

@github-actions github-actions released this 25 Oct 19:58

Release Notes

  • sw status shows the top open goal and the ask/review cards that need the user.
  • Evals published as a Hugging Face dataset (Folvix/stillwright-evals); judge report and per-run timing committed.
  • Homebrew: brew install HamzaIlyas/tap/stillwright (formula published to HamzaIlyas/homebrew-tap on each release).
  • sw-forge: forge only on logged triggers, evidence file required, old-vs-new eval before install, rollback copy, usage tracking and a retire card (design from SkillsBench, Hermes, Prime Agent, ECC, skill-creator).

Install stillwright 0.1.4

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HamzaIlyas/stillwright/releases/download/v0.1.4/stillwright-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/HamzaIlyas/stillwright/releases/download/v0.1.4/stillwright-installer.ps1 | iex"

Install prebuilt binaries via Homebrew

brew install HamzaIlyas/tap/stillwright

Download stillwright 0.1.4

File Platform Checksum
stillwright-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
stillwright-x86_64-apple-darwin.tar.xz Intel macOS checksum
stillwright-x86_64-pc-windows-msvc.zip x64 Windows checksum
stillwright-aarch64-unknown-linux-gnu.tar.xz ARM64 Linux checksum
stillwright-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum

0.1.3 - 2026-10-24

Choose a tag to compare

@github-actions github-actions released this 24 Oct 12:51

Release Notes

  • press/ kit (logo, social card, horizontal and vertical demo clips, pitch, prompts) and docs/migrate.md (from OpenClaw or Hermes).
  • sw init: writes the repo-level settings that turn Stillwright on by default in Claude Code and GitHub Copilot.
  • README: npx plugins add / npx skills add one-liners; .agents/skills mirror; GitHub topics for the Gemini gallery.

Install stillwright 0.1.3

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HamzaIlyas/stillwright/releases/download/v0.1.3/stillwright-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/HamzaIlyas/stillwright/releases/download/v0.1.3/stillwright-installer.ps1 | iex"

Download stillwright 0.1.3

File Platform Checksum
stillwright-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
stillwright-x86_64-apple-darwin.tar.xz Intel macOS checksum
stillwright-x86_64-pc-windows-msvc.zip x64 Windows checksum
stillwright-aarch64-unknown-linux-gnu.tar.xz ARM64 Linux checksum
stillwright-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum

0.1.2 - 2026-10-24

Choose a tag to compare

@github-actions github-actions released this 24 Oct 11:46

Release Notes

  • docs/evals.md: re-run after the skill change; all three runs within five lines.
  • sw-scout: references/vetted-tools.md, a checked starter list with an avoid list.
  • stillwright skill: the final message is the notify card text; five-line rule applies to it (gap found by the eval).
  • docs/evals.md: first measured comparison against a plain agent, with raw runs and grading script.
  • pip install stillwright (published to PyPI from 0.1.1).
  • Hermes Agent install row (drop-in to ~/.hermes/skills/).

Install stillwright 0.1.2

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HamzaIlyas/stillwright/releases/download/v0.1.2/stillwright-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/HamzaIlyas/stillwright/releases/download/v0.1.2/stillwright-installer.ps1 | iex"

Download stillwright 0.1.2

File Platform Checksum
stillwright-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
stillwright-x86_64-apple-darwin.tar.xz Intel macOS checksum
stillwright-x86_64-pc-windows-msvc.zip x64 Windows checksum
stillwright-aarch64-unknown-linux-gnu.tar.xz ARM64 Linux checksum
stillwright-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum

0.1.1 - 2026-10-24

Choose a tag to compare

@github-actions github-actions released this 24 Oct 10:49

Release Notes

  • README: badges, cited research behind each rule, Folvix link; issue and PR templates.
  • Codex-native marketplace file (.agents/plugins/marketplace.json); install table covers Cursor and OpenCode.
  • docs/quickstart.md, verified by scripts/check_docs.py in CI; examples/quickstart-run with the real run state.
  • docs/troubleshooting.md and docs/windows.md.
  • Demo GIF in README; pip install stillwright packaging (maturin) with a PyPI Trusted Publishing workflow.

Install stillwright 0.1.1

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HamzaIlyas/stillwright/releases/download/v0.1.1/stillwright-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/HamzaIlyas/stillwright/releases/download/v0.1.1/stillwright-installer.ps1 | iex"

Download stillwright 0.1.1

File Platform Checksum
stillwright-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
stillwright-x86_64-apple-darwin.tar.xz Intel macOS checksum
stillwright-x86_64-pc-windows-msvc.zip x64 Windows checksum
stillwright-aarch64-unknown-linux-gnu.tar.xz ARM64 Linux checksum
stillwright-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum

0.1.0 - 2026-10-23

Choose a tag to compare

@github-actions github-actions released this 24 Oct 03:41

Release Notes

  • First release: the stillwright loop and eight sw-* skills.
  • sw state keeper in Rust: goals, runs, inbox, notes with validity, hash-pinned tools.
  • Packaging for Claude Code, Codex, Gemini CLI and Agent Skills agents.

Install stillwright 0.1.0

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HamzaIlyas/stillwright/releases/download/v0.1.0/stillwright-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/HamzaIlyas/stillwright/releases/download/v0.1.0/stillwright-installer.ps1 | iex"

Download stillwright 0.1.0

File Platform Checksum
stillwright-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
stillwright-x86_64-apple-darwin.tar.xz Intel macOS checksum
stillwright-x86_64-pc-windows-msvc.zip x64 Windows checksum
stillwright-aarch64-unknown-linux-gnu.tar.xz ARM64 Linux checksum
stillwright-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum