Headful versus headless browsers for AI agents.
A headful browser runs with a visible window. People also call it a headed browser. A headless browser runs without displaying a window. Both modes can load pages, run scripts, and capture screenshots.
For AI agents, choose headless for unattended production runs. Choose headful when a person must watch or take over. Record traces and screenshots in either mode.
Current Chrome shares one implementation across both modes. Playwright's default headless Chromium uses a separate shell. Some clouds price modes differently. Kernel bills headful time at eight times its headless rate.
The short version
Visibility is an operating choice, not magic compatibility.
Headful means a visible browser window.
Headless Chrome runs without visible platform windows. Headful Chrome displays those windows. Headed is another name for headful. The visible difference still matters operationally.
Chrome unified its headless and headful implementations. Since Chrome 112, headless creates undisplayed platform windows. Old headless now ships as chrome-headless-shell. That split began with Chrome 132. Old compatibility assumptions deserve retesting.
Puppeteer still launches headless by default. Playwright does the same for normal execution. Playwright's default headless Chromium uses a separate shell. Its `chromium` channel opts into newer headless mode. Both frameworks can run headed for live inspection.
For agents, mode is only one dimension. Perception arrives through DOM, accessibility, screenshots, or video. Actions arrive through automation interfaces. Human oversight uses separate controls.
SourcesChrome Headless modePuppeteer headless modesDebugging Playwright testsPlaywright browsers
Defaults differ across frameworks and clouds.
Framework defaults favor headless execution. Playwright and Puppeteer both launch headless unless told otherwise. Chrome itself runs headless only with the --headless flag.
Cloud defaults vary by vendor. Kernel ships browsers headful by default. Steel runs new cloud sessions headful by default. Browserbase docs describe its browsers as headless.
Live viewing depends on the platform, not the label. Browserbase pairs its headless browsers with live view. Kernel offers live view and replays only in headful mode.
Check the exact default before comparing results.
| Factor | Default mode | How to change it | Operational note |
|---|---|---|---|
| Chrome | Headful | Pass the --headless flag. | Old headless ships separately as chrome-headless-shell. |
| Playwright | Headless, using a separate headless shell | Set headless: false, or pass --headed to Playwright Test. | The chromium channel opts into new headless mode. |
| Puppeteer | Headless | Set headless: false. | Setting headless: 'shell' selects the old headless shell. |
| Kernel | Headful | Set headless: true at creation. | Headless browsers lack live view and replays. |
| Steel Cloud | Headful for all new sessions | Legacy headless sessions remain supported. | Headless live streams will be phased out. |
| Browserbase | Docs describe headless browsers | Not covered by the cited docs. | Live view and session replays are documented. |
| Legba skill | Local rendering uses headless Chromium | No mode setting is documented. | Its hosted browser supports a view-link handoff. |
Mode defaults and switches, verified October 30, 2026.
SourcesChrome Headless modeDebugging Playwright testsPlaywright command linePlaywright browsersPuppeteer headless modesKernel headless modeSteel live sessionsWhat is BrowserbaseLegba published skill and session contract
Pick the mode by who watches the run.
The best mode follows the operating model. Production agents need evidence and control. Developers need fast diagnosis. Reviewers need understandable intervention paths.
No row declares a universal winner. Both modes can capture screenshots. Both can expose page structure. Both can fail differently across environments. Controlled tests settle specific questions.
| Factor | Headful | Headless |
|---|---|---|
| Displayed window | Browser windows remain visible to a nearby operator | Platform windows exist but are not displayed |
| Live debugging | Natural fit for inspectors, stepping, and direct observation | Usually reviewed through logs, traces, screenshots, and recorded artifacts |
| Agent perception | Can use DOM, accessibility, screenshots, or visual streams | Can use DOM, accessibility, screenshots, or visual streams |
| Human takeover | Local visible browser can support direct operator interaction | Requires a separate remote viewing or intervention surface |
| Unattended infrastructure | May require display infrastructure on server operating systems | Designed for unattended execution without visible user interfaces |
| Compatibility conclusion | Must be tested against the exact workflow and browser build | Must be tested against the exact workflow and browser build |
This matrix uses current official browser-framework behavior. It does not predict every website.
SourcesChrome Headless modeDebugging Playwright testsPlaywright Trace ViewerPlaywright screenshotsPuppeteer screenshotsPlaywright continuous integration guide
Headful time can cost more to run.
Mode can change the bill on hosted browsers. Kernel publishes separate per-second rates by mode. Its headful rate is eight times its headless rate. GPU-accelerated headful costs six times more again.
Memory follows the same pattern. Kernel headless browsers default to 1 GB of memory. Headful browsers default to 8 GB. Idle browsers in standby accrue no usage cost.
Measure cost per completed task in your chosen mode.
| Factor | Rate per second | About per hour | Relative to headless |
|---|---|---|---|
| Headless | $0.0000166667 | $0.06 | 1x |
| Headful | $0.0001333336 | $0.48 | 8x |
| Headful with GPU | $0.0008000016 | $2.88 | 48x |
Kernel usage rates by browser mode, verified October 30, 2026. Hourly figures are our arithmetic.
SourcesKernel pricing
SourcesKernel headless mode
Visual agents need screenshots, not a visible window.
A visible browser does not automatically provide vision. The agent still needs observations. Those observations may be structural or visual. Each representation loses different information.
DOM and accessibility data expose semantic structure. Screenshots expose layout and rendered pixels. Network events expose requests. Console logs expose application messages.
Headless browsers can capture screenshots. Playwright and Puppeteer both document screenshot APIs. Therefore visual agents do not inherently require headful mode. They require reliable visual observations.
Headful mode helps nearby humans observe live behavior. That can speed development. It can also support manual intervention. Production still needs recorded evidence afterward.
| Factor | Best evidence | Blind spot to manage |
|---|---|---|
| DOM or accessibility snapshot | Names, roles, text, hierarchy, and programmatic element references | Canvas content, visual overlap, styling, and spatial emphasis |
| Screenshot | Rendered layout, charts, canvas content, and visual confirmation | Hidden state, network behavior, semantics, and transient timing |
| Trace | Actions, snapshots, logs, network requests, and historical sequence | Missing instrumentation, retained secrets, and external side effects |
| Live headful view | Immediate operator observation and direct visual troubleshooting | Poor reproducibility without separate recordings and structured logs |
Select observation channels independently from browser display mode.
SourcesPlaywright Page APIPlaywright screenshotsPuppeteer screenshotsPlaywright Trace ViewerDebugging Playwright tests
Debug headed, then retest in production mode.
Agents fail for many ordinary reasons. Selectors can become ambiguous. Navigation can race page state. Authentication can expire. Dialogs can block progress.
Playwright's debug mode launches headed browsers. Its inspector can step through actions. Developers can inspect locators and logs. This shortens the feedback loop.
Headful development does not require headful production. Reproduce the failure visibly first. Then retain a trace or screenshot. Finally retest the production mode.
Some failures disappear during slow observation. Timing changes can hide races. Keep normal-speed replay in the loop. Compare artifacts across both executions.
- 01
Capture the failure.
Save logs, screenshots, traces, inputs, and browser versions. Remove sensitive values.
- 02
Replay it visibly.
Use headed debugging and action stepping. Observe the earliest divergence.
- 03
Fix the cause.
Prefer stable state checks and resilient locators. Avoid timing guesses.
- 04
Retest production mode.
Run normal speed and normal infrastructure. Compare retained evidence.
- 05
Test the fallback.
Trigger escalation deliberately. Verify operator context and authority.
# Playwright Test: run headed
npx playwright test --headed
# Playwright Test with the Inspector, also headed
npx playwright test --debug
# Library launch options
# Playwright: chromium.launch({ headless: false })
# Puppeteer: puppeteer.launch({ headless: false })SourcesDebugging Playwright testsPlaywright command linePuppeteer headless modesPlaywright Trace Viewer
Unattended production fits headless mode.
Unattended agents need bounded authority. Browser mode does not supply that boundary. Tools, credentials, destinations, and approvals determine reachable actions. Logs show what happened later.
Headless mode fits unattended infrastructure naturally. Chrome requires no visible interface there. Playwright's normal mode follows this pattern. Puppeteer also defaults to headless.
Headful production can still make sense. Remote operators may need live viewing. Some workflows require direct intervention. The surrounding platform must expose that control safely.
Either mode needs lifecycle management. Create scoped sessions. Limit accessible credentials. Close resources after work. Preserve only required evidence.
- Record browser and framework versions.
- Capture failures with bounded artifacts.
- Redact secrets before artifact retention.
- Separate observation from action authority.
- Require approval for consequential actions.
- Destroy sessions after completed tasks.
SourcesChrome Headless modePuppeteer headless modesPlaywright Trace ViewerPlaywright continuous integration guide
Retire four weak assumptions.
First, headless does not mean text-only. Modern Chrome still renders pages. Frameworks can capture visual output. Agents can receive those pixels.
Second, headful does not mean human-like. Automation interfaces still control the browser. Websites may observe many environmental signals. A visible window proves nothing alone.
Third, headless does not guarantee efficiency. Resource use depends upon workload and configuration. Measure representative sessions. Include rendering, media, traces, and concurrency.
Fourth, headful does not guarantee compatibility. Browser version and launch settings still matter. Extensions and policies can alter behavior. Exact workflows require controlled tests.
SourcesChrome Headless modePlaywright screenshotsPuppeteer headless modes
Treat a headful browser API as a contract.
A mode label answers one question. Production integration needs several contracts.
Require a named connection protocol. Require explicit lifecycle and timeout behavior. Ask how operators observe the running browser.
Screenshots do not require a visible window. Playwright and Puppeteer expose them directly. Live intervention remains a separate capability.
Do not infer a headful API from screenshots. Do not infer observability from a mode flag. Verify each interface independently.
| Factor | Contract | Required evidence | Failure question |
|---|---|---|---|
| Mode selection | A documented headed or headless setting. | Published request fields and defaults. | What happens when the mode is unavailable? |
| Browser control | A named automation protocol and version. | Documented connection and authentication steps. | Can the client reconnect after transport loss? |
| Operator view | A documented live view or debugging path. | Access controls and interaction boundaries. | Can observation accidentally change the run? |
| Evidence | Screenshots, traces, logs, or recordings. | Retention, redaction, and download behavior. | Can a failed run be reconstructed safely? |
| Lifecycle | Creation, timeout, termination, and cleanup rules. | Remote resource ownership after disconnects. | Can abandoned sessions remain active or billable? |
Five contracts define a useful headful browser API.
SourcesChrome Headless modePuppeteer headless modesDebugging Playwright testsPlaywright screenshotsPlaywright Trace ViewerPuppeteer screenshots
Run a representative selection test.
Do not benchmark a toy page. Select a representative workflow. Include authentication and navigation. Include the hardest interactive step. Include the required evidence path.
Run both modes with matching versions. Keep network conditions comparable. Record success and intervention rates. Record resource use and completion time.
Review failures by root cause. Separate page changes from mode differences. Separate agent planning failures from browser failures. Separate infrastructure failures from workflow policy.
Then choose the simplest operating model. Keep a documented debugging path. Keep a separate fallback path. Recheck after major browser upgrades.
| Factor | Measure | Why it matters |
|---|---|---|
| Task completion | Successful runs under the defined acceptance criteria | Captures practical outcome without hiding partial or unsafe completion |
| Human interventions | Count, timing, trigger, context provided, and operator action | Shows whether live visibility creates measurable operational value |
| Diagnostic evidence | Logs, screenshots, traces, network records, and reproducibility | Determines whether failures can be understood and corrected |
| Resource cost | Memory, processor time, storage, bandwidth, and display infrastructure | Supports capacity planning without assuming mode-specific savings |
| Boundary compliance | Allowed destinations, credentials, exports, approvals, and teardown behavior | Prevents a successful task from becoming an unsafe task |
Record these fields for every evaluated workflow. Avoid one-number winner claims.
SourcesChrome Headless mode
Human takeover needs a live view and a handback.
Takeover needs a live view that accepts input. Playwright's headed debug mode covers local work. Remote platforms stream the page instead. Steel's interactive view accepts remote mouse and keyboard input.
Treat live-view links as credentials. Steel's debug URLs work without authentication. Add your own access controls before sharing one.
Legba's published skill documents a human handoff. The session API's handoff call returns a view link. The hosted MCP server names this step request_human. Agent writes are refused while the person holds control. Reads keep working, so the agent can watch.
A resume call returns control to the agent. The view link carries its own token. It ends with the session. The skill documents no headed or headless setting. Remote CDP attachment remains undocumented.
SourcesDebugging Playwright testsSteel live sessionsLegba published skill and session contract
FAQs.
What is a headful browser?
What is a headless browser?
Do visual agents require headful mode?
Is headful mode always more compatible?
Which mode supports human takeover?
What should production agents record?
Does headful mode cost more than headless?
How do I run Playwright in headed mode?
References
- 01Chrome Headless modeChrome for Developers
- 02Puppeteer headless modesPuppeteer
- 03Debugging Playwright testsPlaywright
- 04Playwright browsersPlaywright
- 05Playwright command linePlaywright
- 06Playwright screenshotsPlaywright
- 07Puppeteer screenshotsPuppeteer
- 08Playwright Trace ViewerPlaywright
- 09Playwright Page APIPlaywright
- 10Playwright continuous integration guidePlaywright
- 11Kernel pricingKernel
- 12Kernel headless modeKernel
- 13Steel live sessionsSteel
- 14What is BrowserbaseBrowserbase
- 15