Oct 16, 2025

Headful Sessions: Real Streaming and Reliable Recordings

A complete rework of how you view and replay sessions.

Hussien Hussien

Co-Founder/CEO

Today we're launching headful sessions as the default for all Steel sessions. We've rebuilt our entire live view and replay experience from the ground up.

Before, we used Chrome's native screencasting for live views and rrweb for replays. Screencasting was slow, janky, and couldn't render OS elements or blocking flows. Rrweb's event-based recreation made replays unreliable - there was often a discrepancy between what your agent saw and what the recording showed.

Now, all sessions run headful with WebRTC-based streaming at 25fps and MP4 recordings that show exactly what happened.

What changed

OS-level streaming: We moved from Chrome's screencasting (4-12fps, unstable) to WebRTC-based streaming at the OS level at 25fps. Live views now capture everything on screen; native OS alerts, dropdowns, PDF viewers, and dialogs. Previously, these elements wouldn't render, breaking flows that required interaction with them.

Recordings: We replaced RRWeb's event-based recreation with MP4 recordings. Whatever happens on screen is in the recording. No more discrepancies between what your agent saw and what the replay shows. It's 1:1.

Headful by default: All sessions now run headful instead of headless. This means better compatibility with sites that detect headless browsers and more accurate rendering of complex UI states.

Why this matters

The old system had fundamental issues. RRWeb recreates the DOM from events, which means if an event wasn't captured correctly, the replay would diverge from reality. Developers debugging agent failures couldn't trust what they saw in replays.

Chrome's screencasting was designed for DevTools, not production streaming. It couldn't handle OS-level elements like native alerts or permission dialogs—these would be invisible in the stream, causing flows to appear broken when agents tried to interact with them. Frame rates varied wildly depending on page complexity.

With MP4 recordings and OS-level WebRTC streaming, what you see is what actually happened. When an agent fails, you can replay the exact visual state it encountered. When it succeeds, you have a reliable record of how it navigated the task.

Embedding recordings

You can now embed recordings anywhere by fetching the MP4 manifest from our API.

To get the playlist you can use our API:

const playlist = await fetch('https://api.steel.dev/v1/sessions/123e4567-e89b-12d3-a456-426614174000/hls', {
  headers: {
    'steel-api-key': 'YOUR_API_KEY'
  }
});
// returns m3u8 file

But to embed the player in your page you can simply do the following:

<!doctype html>
<html>
  <body>
    <video id="player" controls playsinline style="width:100%;max-width:900px;"></video>

    <script type="module">
      import Hls from 'https://cdn.jsdelivr.net/npm/hls.js@^1.5.0/dist/hls.mjs';
      const sessionId = "e4d682bb-a7f2-432c-ad13-8b116695d59e";
      const API_KEY = 'YOUR_API_KEY';
      const manifestUrl = 'https://api.steel.dev/v1/sessions/${sessionId}/hls';
      const video = document.getElementById('player');

      if (Hls.isSupported()) {
        const hls = new Hls({
          // add your header to every playlist/segment request
          xhrSetup: (xhr, url) => {
            xhr.setRequestHeader('steel-api-key', API_KEY);
          }
        });
        hls.loadSource(manifestUrl);
        hls.attachMedia(video);
      } else if (video.canPlayType('application/vnd.apple.mpegurl')) {
        // safari can do native HLS, but it won't send custom headers.
        // if your stream requires headers, prefer hls.js even on Safari
        // or serve a signed/tokenized URL without headers.
        video.src = manifestUrl; // works only if no header is required
      } else {
        video.outerHTML = '<p>Your browser does not support HLS.</p>';
      }
    </script>
  </body>
</html>

Recordings are durable and can be played in any standard video player. No custom player required, no event recreation, just reliable MP4 video.

Get started

We'll be rolling out headful sessions with the new streaming and recording system for all Steel Cloud sessions. And shipping to steel-browser soon too. No changes needed to your code, existing sessions automatically use the new system.

Questions? Discord or @steeldotdev.

Part of Steel's launch week. More at steel.dev/launch-week.

Ready to

Build with Steel?

Ready to

Build with Steel?

Ready to

Build with Steel?

Ready to Build with Steel?

A better way to take your LLMs online.

© Steel · Inc. 2024.

All Systems Operational

Platform

Join the community