Skip to main content
The browser_use skill lets the PAL drive a live web browser and walk participants through a guided, pre-authored flow. You define one or more named flows as an ordered list of steps; during the call the PAL runs a flow, narrates each page as it moves, and the browser is streamed to participants on the PAL’s screen-share track.
Guided mode onlybrowser_use runs owner-authored, named flows that you script ahead of time. The PAL follows the steps you defined - it does not free-browse or take navigation instructions from the participant. If you don’t attach the skill, the PAL has no browser.

How it works

When you attach the skill, the PAL gains a small set of flow-control tools. The PAL starts a flow, and for each step a browser worker carries out the instruction on a real cloud browser while the PAL narrates what is on screen. The live browser is published as a screen-share track on the PAL’s participant, so participants see the pages as the PAL talks through them. Because each flow is named and scripted, you get repeatable, on-message walkthroughs: the same product tour, onboarding flow, or feature walkthrough every time, narrated live.

Adding the browser use skill to your PAL

Attach the skill with a PUT to the PAL’s skill collection, passing your flows in config:
The skill is active on the PAL’s next conversation.

Configuration

Flow object

Step object

Each step is a browser action, a spoken aside, or a slide.

Showing slides during a flow

A flow can interleave slides with live browser steps - useful for framing a demo (“here’s the architecture”) before dropping into the product, or recapping at the end. A slide step swaps the shared screen to a page of a slide deck and the PAL narrates it, exactly like a browser step, as part of the same walkthrough. There is no split screen: whichever acted most recently owns the surface (a browser step reclaims it from a slide, and vice versa). Slides come from a Knowledge Base document - the same kind of document the Presentation skill uses. To add slides to a flow:
  1. Upload the deck to your Knowledge Base and note its document ID. Documents are created via the Create Document API and are prepared for presentation automatically. The document must be owned by you and presentable (a pdf slide deck works well).
  2. Set slide_document_id in the skill config to that document ID. All slide steps in the config draw their pages from this one deck.
  3. Add slide steps where you want a page shown, using the 1-based page number of the deck. A prompt is optional on a slide step — give one to script the narration, or omit it to let the PAL narrate the slide from its page summary.
slide_document_id is required whenever any step uses slide; the config is rejected otherwise. If the referenced deck isn’t display-ready when the conversation starts, slide steps gracefully degrade to speak-only (the PAL narrates the prompt without swapping the screen).

Waiting for the participant’s answer

By default a flow auto-advances: as soon as a step’s narration finishes, the next step begins. That’s right for a continuous walkthrough, but wrong for a step that ends with a question — the screen would move on before the participant can answer. Set "wait_for_answer": true on a slide or task step to make the flow pause at that step’s boundary once its narration is done. While it waits:
  • The current slide or page stays on the shared screen.
  • The PAL answers follow-ups, repeats, or clarifications from it (“wait, say that again” gets a re-explanation, not the next slide).
  • The flow continues only when the participant is ready to move on — the PAL resumes it explicitly; talking alone never advances it.
  • On the final step, the hold works the same way; once the participant is ready, the PAL wraps up and the shared screen returns to the PAL’s video automatically.
Interjections behave sensibly on every step, flagged or not: if the participant talks over a step’s narration, the flow pauses, the PAL handles what they said, and resuming finishes that step’s point before moving on — an interruption never costs a step its content.

Best practices

Flag question steps with wait_for_answer. If a step’s narration ends with a check-in (“does that match what you’re seeing?”), set wait_for_answer on it — otherwise the flow advances the moment the question is spoken. Writing “pause for questions” inside the prompt does not pause the flow; only the flag does. Keep steps small and give each one a prompt. Break the flow into small, single-action steps, and write a sentence or two of narration (prompt) for each. The PAL narrates a step after its action lands, and while it is speaking the browser is already planning the next step - the on-screen move is held until the narration finishes, so the page never moves mid-sentence. The narration therefore doubles as the browser’s think-and-load time: a small task plus a sentence of narration lets the browser stay a step ahead, so the flow moves with no dead air. Very short prompts (or one oversized task) can leave a beat where the PAL has stopped talking but the browser is still working - tune it on a real run and lengthen the narration wherever the flow stalls.

Update the configuration

PATCH merges changes into the existing config - fields you omit are preserved:
Use PUT on the same path to overwrite the entire configuration. To turn the skill off, detach it:
See Skills Overview for how attachments work and the full API reference.

Displaying the browser video track in your app

The live browser is published the same way the Presentation skill publishes slides: as a screenVideo track on the same participant as the PAL’s video, not as a separate participant. Your frontend shows it by watching that participant’s screenVideo track and rendering it when it becomes playable.
If you embed with the @tavus/cvi-ui Conversation block, replica video and screen-share switching is built in - you do not need to wire up the track yourself.
If you build a custom Daily layout, follow the same steps as the presentation skill: find the PAL’s participant, subscribe to its tracks.screenVideo.state, and render the screenVideo track when the PAL is sharing (falling back to the replica video track otherwise). See Displaying the presentation video track for the full example - the wiring is identical; only the source of the shared surface differs.
The screenVideo track is lazy: it does not exist until the PAL starts sharing the browser. Don’t block or error on a missing screen track when the call connects - render the replica video and switch to the browser once screenVideo.state becomes playable.

Capability limitations

browser_use includes full presentation support: slide steps can show pages from a Knowledge Base deck as part of a flow (see Showing slides during a flow). Because of this overlap, browser_use and presentation cannot be attached to the same PAL at the same time. Attach browser_use if you need guided browser flows (with or without slides), or presentation if you only need slides.
The PAL publishes a single screen-share track. It shows either the live browser or a slide at any given moment, never both at the same time. There is no split screen.