ChangelogSetup is the SDK, and your agent watches the app

0.5.0

Released 29 October 2026.

Adding the SDK is the whole setup for an iOS app: a debug build on the simulator starts Squiggle by itself, so squiggle up is optional, the first performance baseline is taken on your first run, and updating Squiggle needs no rebuild. Your agent's MCP server now watches the app the whole time it runs and tells the agent what broke, with a recording of it. Squiggle also runs inside a Niteshift task.

A release build of your app carries no Squiggle unless you set "release": true in .squiggle/config.jsonc. In CI, the runner must be able to reach license.squiggle.sh over HTTPS on its first licensed command.

Desktop app

  • Newcompact mode has an App menu with Reload JS, Open link from clipboard and your recent links
  • Newthe device heatmap labels the drags Analytics reads as a gesture, such as "Swipe to dismiss"
  • FixRelaunch app, Relaunch injected, the permission switches and the launch after a boot act on your app, not Squiggle's example app
  • Fixreloading Studio no longer crashes it or leaves the loading banner stuck

CLI

  • Newsquiggle agent watch --incidents prints one line per recorded incident, so an idle agent can wait for the next one
  • Newsquiggle release frees the app from whatever holds it, including a run waiting for an agent's answer
  • Fixsquiggle flow --from-recording -o <file> creates the file's folder when it doesn't exist
  • Fixsquiggle crawl skips controls named "Log out" and "Check out", as it does "logout" and "checkout"
  • Fix--fresh captures the app's log output, so log asserts work after a relaunch
  • Fixevery error message names a fix you can run, and an agent port already in use is E_AGENT_PORT_BUSY
  • Fixa device command on Linux with no device provider says how to reach a device, instead of asking you to build a macOS helper

Agents & MCP

  • Newthe MCP server watches the app from the moment it starts, the way Studio does. When the app throws, crashes or stalls, it records the moment, and your agent's next tool result says what broke, at which line of your code, and which of its own actions it followed
  • Newlive performance findings, such as a render storm or a long task, reach your agent the same way while the app runs
  • Newthe incidents tool lists what was recorded, each one replayable with replay_recording, and squiggle://incidents serves the newest ones
  • Newwatch in .squiggle/config.jsonc sets whether the server watches, how it tells your agent (push: notice, channel or none), whether it records, and how much it keeps. SQUIGGLE_WATCH=0 turns it off for one run
  • Newpublish_evidence puts screenshots and recordings in the description of a pull request you opened, and needs no app running. squiggle init --pr-evidence turns it on
  • Fixthe safety rail checks the control a tap actually lands on, not only the selector your agent sent

Flows & device

  • NewsetLocation and setPermissions run on the iOS simulator
  • NewtoggleAirplaneMode is in the published flow schema, so your editor stops flagging it

SDK

  • Newa release build gets a stand-in for the SDK: the same exports with none of its code, and Squiggle's native library links into Debug builds only. Set "release": true in .squiggle/config.jsonc to keep Squiggle in a release build
  • Newa production build of a web app gets a 10 KB stand-in for @squiggle.sh/react, with no setup

Everything else

  • Newa debug build of your app on the iOS simulator loads Squiggle's agent by itself, so you no longer run squiggle up before driving it. squiggle init no longer adds it to your ios script
  • Newyour first squiggle flow, squiggle flows or run_flow records the first performance baseline when the project has none
  • Newafter you update Squiggle, the next squiggle flow brings your app's copy of the agent up to date and relaunches the app if it still runs the old one. squiggle doctor --fix does the same
  • Newsquiggle flows launches your app itself, from the appId in your flows or apps.ios in .squiggle/config.jsonc
  • Newrun Squiggle in a Niteshift task: set "device": { "provider": "niteshift" }, and the CLI and MCP server on the task's Linux sandbox drive the app on its simulator. Steps outside the app, such as a launch or a system dialog, go to the task's agent
  • Newin a Niteshift task, nothing leaves the sandbox on Squiggle's initiative: no telemetry, crash reports or update checks, and publish_evidence writes its files for the task to attach
  • Newsquiggle doctor says when the app's agent comes from another release, and squiggle bench never compares a run on a Niteshift simulator with a local one
  • Fixa CI runner that can't reach license.squiggle.sh stops with E_LICENSE_UNREACHABLE (exit 3) and names the host to allow, unless it got a place with the same token in the last 24 hours. Before, it ran unlicensed
  • Fixa CI runner is counted by a random ID kept in ~/.squiggle, never by anything about the machine, and keeps its place for as long as a long run or an MCP session lasts
  • Fixa project's .squiggle/config.jsonc can turn telemetry and crash reports off for everyone who clones it, never on. Studio asks again when you switch to such a project
  • Fixan incident recording stops 20 seconds or 8 MB after its trigger, the same problem again isn't recorded twice, and old data is cleaned up during a long session