Skip to content

Releases

Merge pull request #576 from saffron-health/release-v0.6.45

Choose a tag to compare

@github-actions github-actions released this 14 Aug 21:21
840915e

Fixes

  • /dashboard/phone_numbers 404: The prerender list was hardcoded and didn't include the phone numbers section, so Vercel returned a 404 before the SPA could redirect. The list is now derived from the section registry so new sections can't be omitted silently.

  • Hosted runtime auth forwarded correctly: The deployment artifact previously consumed and removed the hosted job token before the project's selected Libretto runtime could see it. A proxy now forwards auth to auth-capable runtimes (≥ 0.6.44) and strips it cleanly before invoking older runtimes, preserving strict input schemas. Using --external libretto is now rejected to prevent the executor's copy from shadowing the project's selected version.

  • Docs build fixed for SMS OTP pages: The SMS OTP card in the API overview used an unresolvable fontawesome:message-square icon; switched to lucide:message-square and added the missing OG images so the pages deploy correctly.

Improvements

  • Workflow output (result) documented: The docs now clearly explain that the value a workflow handler returns is available as result on jobs/get and on job.completed webhooks. The first-workflow guide, deploying guide, and hosting overview all link to the new canonical section.

  • Recording availability clarified: The recordings API docs now note that headless: true runs and runs that fail before a browser starts are not recorded, and that recording_url_expires_at can be null. Links to the new data retention page are added throughout.

Merge pull request #562 from saffron-health/release-v0.6.44

Choose a tag to compare

@github-actions github-actions released this 13 Aug 05:43
fc02b6b

Features

  • SMS OTP support (claimSmsOtp): Workflows can now automate portals that send a one-time code by SMS. Provision a Libretto Cloud inbox number, register it on the portal, then use the new claimSmsOtp helper to lock the inbox and wait for the code:

    import { claimSmsOtp, workflow } from "libretto";
    
    export default workflow("portal-login", {
      credentials: ["username", "password"],
      async handler(ctx, input) {
        // ... fill username/password, then:
        const otp = await claimSmsOtp({ phoneNumberLabel: "uhc" });
        await ctx.page.click('button:has-text("Send code")');
        const { code } = await otp.wait();
        await ctx.page.fill('input[name="otp"]', code);
      },
    });

    Locally set LIBRETTO_API_KEY; hosted Cloud jobs inject auth automatically. Select the inbox with phoneNumber, phoneNumberId, or phoneNumberLabel.

  • SMS number management CLI: New libretto cloud sms-numbers commands let you provision, list, update, and release tenant SMS inbox numbers from the terminal:

    libretto cloud sms-numbers provision --label uhc
    libretto cloud sms-numbers list
    libretto cloud sms-numbers release <id>
  • Dashboard Phone numbers section: A new Phone numbers page in the dashboard lets you provision and release SMS inbox numbers and see which numbers are active in your tenant pool.

  • Dashboard webhook endpoints: The Settings page now supports creating, editing, enabling/disabling, rotating signing secrets for, and deleting webhook endpoints for receiving workflow results.

  • Hosted Workflow APIs catalog: A new public /hosted-workflows page lists workflows shared as opaque run APIs. Each detail page shows the run endpoint, authentication requirements, credential requirements, and input/output schemas, along with a copyable agent prompt. Publishers share from the dashboard workflow detail view.

  • Chrome Extension product page: The Chrome Extension is now publicly listed on the homepage and has its own dedicated page at /chrome-extension, linking directly to the Chrome Web Store.

Improvements

  • Sandbox Chromium fallback in start.md: The onboarding guide (https://libretto.sh/start.md) now instructs agents in Linux sandboxes (e.g. Claude Cowork) to stop retrying OS package installs when local Chromium fails, and instead fall back to --provider libretto-cloud or ask the user to verify on a host machine with working Chromium.
  • Dashboard workflow sharing UI: Workflow sharing controls in the dashboard are clearer, with an updated section title ("Share workflow outside this workspace"), better confirmation dialogs for enabling and disabling workspace sharing, and a collapsible Settings panel.
  • Dashboard table polish: All dashboard tables now use consistent row borders, uniform action button styles, a labeled "Live view" column in browser sessions, and better role-select alignment in the users table. Direct /dashboard/workflows/:workflow URLs now resolve correctly on the static Vercel deployment.
  • Sharing externally is UI-only: Workflow sharing (open source and hosted) is now managed entirely from the dashboard. The CLI cloud share, cloud host, cloud unhost, and cloud sharing commands have been removed. A new Sharing workflows externally documentation page covers the updated flow.

Documentation

  • New Reference → Runtime → SMS OTP page documents claimSmsOtp options, return value, and a full example.
  • Hosting → Website authentication now covers SMS one-time codes with a setup and sign-in example.
  • The Cloud API → SMS OTP page documents pool management APIs, claim/poll routes, and isolation rules.
  • Cross-links added between the runtime reference, hosting auth guide, Cloud API SMS OTP page, and the understand-Libretto authentication overview.

release: v0.6.43 (#555)

Choose a tag to compare

@github-actions github-actions released this 11 Aug 06:25
97c7ba9

Improvements

  • Open workflows and Hosted workflows docs: New dedicated documentation pages cover the Open workflows and Hosted workflows Cloud APIs, including publisher and consumer routes, credential requirements, and CLI examples. Both are linked from the Cloud API and Cloud Hosting overviews.
  • Workflow detail page: The dashboard now includes a per-workflow detail page (/dashboard/workflows/<name>) showing run history and controls to publish or manage Open and Hosted workflow listings from the UI. Deployed workflow names in the workflows table are now clickable links to this page.
  • Workflow sharing settings copy: The workspace settings panel wording has been updated to distinguish Open workflows (source-sharing) from Hosted workflows (opaque run API).

Merge pull request #553 from saffron-health/release-v0.6.42

Choose a tag to compare

@github-actions github-actions released this 11 Aug 04:36
5bc0f25

Improvements

  • Browser Tools MCP benchmark harnesses for Hermes and OpenClaw: The benchmark suite now includes four host-agent harnesses — hermes-stock, hermes-browser-tools, openclaw-stock, and openclaw-browser-tools — so Libretto Browser Tools MCP can be compared directly against the built-in browser toolsets of Hermes and OpenClaw using a local Chrome backend. Run them with:

    pnpm --filter libretto-browser-tools exec tsx benchmarks/index.ts run \
      --harnesses hermes-stock,hermes-browser-tools,openclaw-stock,openclaw-browser-tools \
      --provider local --concurrency 1

    Results across 26 live-site tasks show that Browser Tools MCP lanes match or beat their stock counterparts in pass rate while using significantly fewer tokens (up to 41% fewer on OpenClaw).

  • "Backed by Y Combinator" badge on the website: The Libretto website now displays a Y Combinator badge in the homepage hero and in the site footer, linking to the Libretto YC company page.

release: v0.6.41 (#542)

Choose a tag to compare

@github-actions github-actions released this 09 Aug 16:29
d81ac04

Features

  • Auth profiles docs: A new Auth profiles page is available under Browser Tools → Overview. It covers named profiles, the default and false profile options, the sign-in-once flow, provider support table, local storage location, and caveats. The browser_open tool now documents its authProfile parameter, and browser_status session listings include authProfile when set.

Improvements

  • run --cdp preserves existing page state: When running a workflow with --cdp, Libretto now attaches to the selected page without navigating to the workflow's startUrl. The page URL and authentication state stay intact. Navigate inside the handler, or position the browser on the target screen before the run. Normal run (with Libretto launching the browser) continues to open startUrl before the handler.

    # Attaches to the existing page — no startUrl navigation
    npx libretto run ./workflow.ts --cdp http://127.0.0.1:9222
  • Actionable workflow call stacks on failure: libretto run now prints the full Playwright error with its source-mapped call stack when a workflow fails, pinpointing the exact file and line in your TypeScript workflow code instead of only the top-level timeout message.

    page.waitForResponse: Timeout 500ms exceeded while waiting for event "response"
        at waitForMissingApi (workflow.ts:3:14)
        at extractExampleData (workflow.ts:6:9)
    Browser is still open. You can use `exec` to inspect it.
    
  • Surfaced daemon startup errors: Startup failures such as an unreachable CDP endpoint (connect ECONNREFUSED), a bad Chromium installation, or an unknown --page id now print the real error message instead of the opaque Daemon exited before startup (status: 1). Each failure includes a specific next-step hint.

Merge pull request #530 from saffron-health/release-v0.6.40

Choose a tag to compare

@github-actions github-actions released this 03 Aug 22:40
47de49e

Improvements

  • Hermes Agent and OpenClaw integration guides: Dedicated documentation pages for using Browser Tools with Hermes Agent and OpenClaw are now available, covering install, configuration, auth profiles, cloud providers, and troubleshooting for each host.

  • Dashboard API authentication fixes: The dashboard now correctly surfaces API authentication errors instead of silently showing empty tables. GitHub installation setup is also routed through the tenant-authorized OAuth flow.

  • Chrome extension signup flow: Users who sign up through the Chrome extension and have a tenant auto-provisioned are now redirected directly to the dashboard, bypassing the manual onboarding steps.

  • Privacy policy: A privacy policy is now published at libretto.sh/privacy, covering Libretto Cloud and the Chrome extension, including Chrome Web Store Limited Use compliance.

  • Playwright updated to ^1.62.0: The Playwright version constraint is now centralized via a pnpm catalog entry shared across the monorepo, and the aria snapshot API has been updated to page.ariaSnapshot({ mode: 'ai' }).

Merge pull request #516 from saffron-health/release-v0.6.39

Choose a tag to compare

@github-actions github-actions released this 30 Jul 00:51
0470fd7

Features

  • Persistent browser auth profiles: browser_open now accepts an authProfile parameter to reuse signed-in browser state across sessions. Omitting the field uses the named default profile on supported providers; pass authProfile: false for a fresh incognito session.

    // Reuse a named profile
    await toolkit.tools.browser_open.execute({ authProfile: "work" });
    
    // Incognito session
    await toolkit.tools.browser_open.execute({ authProfile: false });

    Named profiles are supported on the Local, Libretto Cloud, Kernel, and Browser Use providers. Browserbase and Steel are unsupported until a durable name-to-ID mapping is available. Local profiles are stored under ~/.libretto/browser-tools/profiles with owner-only permissions. Changes persist only after browser_close or a graceful dispose().

  • Account deletion controls: Workspace owners can now delete their Libretto Cloud account (and workspace, when they are the sole member) from the Users tab of the dashboard. A confirmation dialog is shown before any destructive action.

Improvements

  • Modal-scoped accessibility snapshots: When a modal dialog is open (<dialog>, role="dialog" aria-modal="true", or role="alertdialog" aria-modal="true"), the accessibility snapshot now roots at the modal instead of the full page. This prevents inert background content from cluttering the tree and ensures agents see only the focus-trapped UI.

    Before — page behind the modal stayed in the tree:

    <document>
      <main>
        # Checkout
        <button>Pay now</button>
      </main>
      Delete this item?
      <button>Cancel</button>
    </document>
    

    After — modal is the root:

    <dialog>
      Confirm delete
      Delete this item?
      <button>Cancel</button>
      <button>Delete</button>
    </dialog>
    
  • Opt-in snapshot diffs on exec: Accessibility-tree diffs after browser_exec / libretto exec are now opt-in. Pass diffSnapshot: true (tool) or --diff-snapshot (CLI) when you want a before/after page-change diff after an exploratory mutation. Skipping the flag avoids the cost of two snapshot captures on every exec.

    // Only capture a diff when you need it
    await toolkit.tools.browser_exec.execute({
      sessionId,
      code: "await page.locator('button').click()",
      diffSnapshot: true,
    });
    npx libretto exec --diff-snapshot "await page.locator('button').click()"
  • snapshot <ref> always captures a fresh tree: Scoped snapshots no longer depend on a cached tree from a prior full snapshot. Each snapshot <ref> call now captures a fresh screenshot and accessibility tree, then scopes the output to that ref.

  • Portable daemon IPC endpoints: The daemon now uses os.tmpdir() for socket paths on Linux (instead of a hardcoded /tmp), keeps macOS on the short /tmp path to stay within its 104-byte Unix socket limit, and correctly prefers UID-based endpoint isolation over username on Unix systems. Windows named pipe behavior is unchanged.

  • Cleanup errors as values: dispose(), closeSession(), and browser_close no longer throw on provider or browser cleanup failures. Errors are returned as typed values (BrowserCleanupError | null), so partial failures are surfaced to callers without masking the original error or leaving sessions in an unknown state.

Merge pull request #509 from saffron-health/release-v0.6.38

Choose a tag to compare

@github-actions github-actions released this 24 Jul 21:11
dae8bd4

Features

  • Unified authenticated dashboard: Signed-in users now land in a single left-sidebar dashboard that consolidates all workspace views into one place. Sections include Workflows, Schedules, Workflow Runs, Browser Sessions, Self-Healing Playwright, Users, Secrets, API Keys, and Billing — all reachable from /dashboard/<section>.

  • Secrets management: A new Secrets section lets workspace owners add, rename, replace, and delete encrypted secrets directly from the dashboard. Secret values are write-only — they are never returned in dashboard responses or shown in tables. A visibility toggle lets you preview a value before saving.

  • API key management: A new API Keys section lets any user create named API keys and delete keys they own. The raw key material is displayed exactly once immediately after creation with a one-click copy button, then never shown again.

  • Guided empty states: Each automation table shows a contextual prompt when no data is present. Cloud-dependent sections (Workflows, Schedules, Workflow Runs, Browser Sessions) surface a copyable Libretto Cloud setup prompt. The Self-Healing Playwright section walks through the ordered steps: create an API key → copy the PR agent prompt → connect a GitHub repository.

  • Updated homepage copy: The homepage hero now reads "Automate the work that happens in your browser" with an updated description reflecting the full product breadth (Chrome extension, CLI, SDKs, cloud browsers).

Improvements

  • Simplified sign-in flow: After signing in or verifying an email, users with an existing organization are sent directly to /dashboard instead of a setup wizard. New users create their organization first, then enter the dashboard.
  • Simplified navbar: The account dropdown in the navbar has been replaced with a single Dashboard button for signed-in users.
  • Legacy dashboard URLs redirect: /dashboard, /dashboard/cloud-browsers, /dashboard/pr-agent, and /dashboard/chrome-extension all redirect into the equivalent new dashboard section without breaking existing links.
  • Static prerendering for dashboard routes: All dashboard section pages are now prerendered at build time, so direct links, page refreshes, and auth redirects resolve correctly on Vercel without a client-side navigation round-trip.
  • Removed setup wizard: The /setup route has been removed. Any links that previously pointed there now redirect to the dashboard.

v0.6.37: release: libretto 0.6.37 and browser-tools 0.1.2 (#504)

Choose a tag to compare

@github-actions github-actions released this 22 Jul 21:38
3e73557

Features

  • startUrl workflow launch option: Workflows can now declare startUrl, gpu, and viewport directly in their definition. Libretto opens startUrl before the handler runs — on Kernel and Libretto Cloud it is sent at browser create time so the page loads before CDP attach, avoiding a double navigation that can trigger bot detection. Browserbase and Steel navigate to startUrl immediately after connect.

    export default workflow("bookFlight", {
      startUrl: "https://www.example.com/",
      gpu: true,
      viewport: { width: 1440, height: 900 },
      handler: async ({ page }) => {
        // Browser is already on startUrl — no page.goto needed here.
      },
    });
  • MCP adapter for Browser Tools SDK: libretto-browser-tools/mcp exposes all six browser tools to any MCP-compatible client or gateway. Register tools on a caller-owned McpServer and connect your transport of choice. Screenshots are returned as MCP image content; failures set isError: true with actionable error text. Safety annotations are published for each tool.

    import { registerMcpBrowserTools } from "libretto-browser-tools/mcp";
    
    const { dispose } = registerMcpBrowserTools(
      server,
      new LocalBrowserProvider({ headless: true }),
    );
  • Cloud job and schedule browser launch overrides: libretto cloud jobs create and libretto cloud schedules create now accept --start-url, --gpu, and --viewport WIDTHxHEIGHT flags to override workflow launch options at run time.

  • Browser Tools SDK product page: The /browser-tools marketing page is now live with benchmarks, tool examples, integration grid (AI SDK, Pi, MCP, and coming-soon adapters), and FAQ.

  • Browser Tools SDK ProviderSessionCreateOptions: startUrl, gpu, and viewport are now part of the createSession contract for all built-in providers (LocalBrowserProvider, KernelBrowserProvider, LibrettoCloudBrowserProvider, BrowserbaseBrowserProvider, SteelBrowserProvider, BrowserUseBrowserProvider). Kernel and Libretto Cloud preload startUrl; others navigate after connect. ProviderSessionCreateOptions and ProviderSession.startUrlPreloaded are exported from the package root.

Improvements

  • Playwright debugger package renamed to libretto-playwright-debugger: The npm package is now published as libretto-playwright-debugger (previously libretto-playwright-debug). The createPlaywrightDebugger() and debugFailure() API is unchanged.

    pnpm add libretto-playwright-debugger
  • Streamlined PR agent setup: GitHub repository connection is now the first setup step; the local-agent step has been removed from the wizard. Authenticated users with an incomplete PR agent setup are routed to /setup; users with a completed setup go to /dashboard.

  • libretto status output simplified: When no sessions are open, the command now prints No open sessions. without the preceding Open sessions: header.

  • libretto setup help text updated: The setup command description now points users to update for existing installations.

  • Docs migrated to Holocron: The documentation site has moved from Mintlify to the Holocron runtime. The /docs proxy now points to the new deployment at libretto-docs.vercel.app.

  • Browser Tools docs section: A new top-level Browser Tools tab is live in the docs, covering quickstart, tools reference, advanced topics (domain policy, borrowed pages, CDP attach), adapters (AI SDK, Pi, MCP, Custom), and providers (Local, Libretto Cloud, Kernel, Browserbase, Browser Use, Steel, Custom).

  • Docs Open Graph images: Every docs page now has a branded 1200×630 social card using Satori for precise Flexbox layout. A pnpm docs:og script regenerates all images deterministically.

  • Chrome extension auth return flow preserved: The cloud browsers dashboard now redirects signed-out visitors to sign-in with their original destination URL, so the Local Chrome Agent flow returns correctly after authentication.

  • Browser Tools SDK README refreshed: The packages/browser-tools README now includes a centered header, install steps, quick example, cloud provider list, and links to docs and the product page.

Merge pull request #474 from saffron-health/release-v0.6.36

Choose a tag to compare

@github-actions github-actions released this 15 Jul 21:54
c6cd8ef

Features

  • New website product pages: The Libretto website now has dedicated pages for each product in the family — the Libretto CLI (/cli), Playwright PR Agents (/debug-agents), and an upcoming Browser Tools SDK (/browser-tools). The homepage has been redesigned around a product listing that previews all three, and navigation (desktop dropdown, mobile menu) and the footer have been updated with links to each page.

  • Renamed Playwright debugger API: The libretto-playwright-debug package now exposes createPlaywrightDebugger() (replacing createLibrettoDebugger()) and playwrightDebugger.debugFailure() (replacing debugPlaywrightFailure()). Public types are renamed to match: PlaywrightDebuggerOptions, DebugFailureOptions, DebugFailureResult, and PlaywrightDebugger.

    import { createPlaywrightDebugger } from "libretto-playwright-debug";
    
    // Initialize once at module scope
    const playwrightDebugger = createPlaywrightDebugger({
      github: { owner: "acme", repo: "automations", baseBranch: "main" },
      agent: { model: "openai/gpt-5.4" },
    });
    
    try {
      await runAutomation(page);
    } catch (error) {
      await playwrightDebugger.debugFailure(error, page);
      throw error;
    }

Improvements

  • Playwright debugger documentation: The libretto-playwright-debug package README has been expanded with installation steps, authentication setup (Libretto API key, model provider keys), and precise integration guidance covering module-scope initialization and calling debugFailure() before Playwright teardown. The runtime reference doc and conceptual autofix guide have been updated to match the new API names.

  • Updated website copy: The site-wide call-to-action has been updated from "Book a demo" to "Talk to a dev", and the sign-in/sign-up page now uses generalized account copy covering both hosted workflows and PR agents.

  • YouTube quick link in README: A YouTube link has been added to the Quick Links section of the README.