{"version":"1.9.0","versions":{"cli":"1.9.0","desktop":"1.9.0"},"date":"2026-11-11","dateFormatted":"November 11, 2026","url":"https://docs.factory.com/changelog/release-notes#v1.9.0","jsonUrl":"https://docs.factory.com/changelog/releases/1.9.0.json","summary":"Open in Browser links, hook fixes, safer file edits, and fewer stuck sessions","surfaces":["cli","app","api","enterprise"],"changes":[{"type":"fix","surface":"cli","title":"Hook entry validation","description":"One invalid hook entry no longer disables the rest of the file, and Droid reports it"},{"type":"fix","surface":"app","title":"Transcript position on resize","description":"The transcript keeps its place instead of sliding under the composer when the composer changes height"},{"type":"feature","surface":"app","title":"Open in Browser menu","description":"Right-clicking a web link in the desktop app now offers Open in Browser, which opens your default browser"},{"type":"fix","surface":"cli","title":"Tasks inside Script runs","description":"A Task no longer blocks the other calls in a Script run, and a failed run names the Tasks it stopped"},{"type":"fix","surface":"app","title":"Personal code provider connect","description":"A personal code provider row now explains that your organization must set up its app instead of opening setup"},{"type":"fix","surface":"cli","title":"Autonomy level in hooks","description":"Hooks in an exec run now report the run's autonomy level and working directory from the first event"},{"type":"fix","surface":"app","title":"Sign-in errors during outages","description":"A sign-in service outage now returns a temporary error instead of telling you to sign in again"},{"type":"fix","surface":"cli","title":"Plugin hook environment","description":"Plugin hooks now run with their own environment and arguments, and a plugin manifest's hooks load with it"},{"type":"fix","surface":"enterprise","title":"Enterprise control history actors","description":"Enterprise control history now names every actor instead of leaving some unnamed in a large organization"},{"type":"fix","surface":"cli","title":"Pending tool calls on reload","description":"A tool call Droid will never run now ends as interrupted instead of returning as pending on reopen"},{"type":"improvement","surface":"cli","title":"Task concurrency limits","description":"Running many Tasks at once no longer fails on a separate limit, and new sessions keep room to start"},{"type":"fix","surface":"cli","title":"Approved edits and rewind","description":"Approved edits now match the preview you saw, and rewinding a moved file restores it instead of losing it"},{"type":"security","surface":"app","title":"Organization owner safeguards","description":"Concurrent member changes can no longer leave an organization without an Owner"},{"type":"fix","surface":"cli","title":"Stopping a stalled session","description":"Stopping a session is now answered instead of waiting behind an earlier request that never finished"},{"type":"improvement","surface":"api","title":"Public API reference","description":"The public API reference now gives every operation a stable identifier and consistent error responses"},{"type":"fix","surface":"cli","title":"Windows file writes","description":"Saving on Windows no longer fails when another Droid process releases the same file's lock"},{"type":"fix","surface":"cli","title":"Sandboxed Script on Linux","description":"Sandboxed Script now starts on Linux hosts where its sandbox tools sit outside the default search path"},{"type":"fix","surface":"cli","title":"Hooks with large inputs","description":"A large message no longer stops a hook from running, and one failing hook keeps the others' results"},{"type":"fix","surface":"app","title":"Slack workspace reinstall","description":"Reinstalling Factory in a new Slack workspace now matches your members again instead of leaving them unlinked"},{"type":"fix","surface":"cli","title":"Custom Droid tool restrictions","description":"Editing a custom Droid now keeps its tool restriction instead of giving it every tool"},{"type":"fix","surface":"cli","title":"Checkout cleanup safety","description":"A session's checkout is now kept when a commit lands while its cleanup runs"}],"contentText":"New features\n\n- Open in Browser menu - Right-clicking a web link in the desktop app now offers Open in Browser, which opens your default browser\n\nImprovements\n\n- Task concurrency limits - Running many Tasks at once no longer fails on a separate limit, and new sessions keep room to start\n- Public API reference - The public API reference now gives every operation a stable identifier and consistent error responses\n\nBug fixes\n\n- Hook entry validation - One invalid hook entry no longer disables the rest of the file, and Droid reports it\n- Transcript position on resize - The transcript keeps its place instead of sliding under the composer when the composer changes height\n- Tasks inside Script runs - A Task no longer blocks the other calls in a Script run, and a failed run names the Tasks it stopped\n- Personal code provider connect - A personal code provider row now explains that your organization must set up its app instead of opening setup\n- Autonomy level in hooks - Hooks in an exec run now report the run's autonomy level and working directory from the first event\n- Sign-in errors during outages - A sign-in service outage now returns a temporary error instead of telling you to sign in again\n- Plugin hook environment - Plugin hooks now run with their own environment and arguments, and a plugin manifest's hooks load with it\n- Enterprise control history actors - Enterprise control history now names every actor instead of leaving some unnamed in a large organization\n- Pending tool calls on reload - A tool call Droid will never run now ends as interrupted instead of returning as pending on reopen\n- Approved edits and rewind - Approved edits now match the preview you saw, and rewinding a moved file restores it instead of losing it\n- Stopping a stalled session - Stopping a session is now answered instead of waiting behind an earlier request that never finished\n- Windows file writes - Saving on Windows no longer fails when another Droid process releases the same file's lock\n- Sandboxed Script on Linux - Sandboxed Script now starts on Linux hosts where its sandbox tools sit outside the default search path\n- Hooks with large inputs - A large message no longer stops a hook from running, and one failing hook keeps the others' results\n- Slack workspace reinstall - Reinstalling Factory in a new Slack workspace now matches your members again instead of leaving them unlinked\n- Custom Droid tool restrictions - Editing a custom Droid now keeps its tool restriction instead of giving it every tool\n- Checkout cleanup safety - A session's checkout is now kept when a commit lands while its cleanup runs\n\nSecurity\n\n- Organization owner safeguards - Concurrent member changes can no longer leave an organization without an Owner"}