-
Notifications
You must be signed in to change notification settings - Fork 888
Description
Summary
We tried integrating Lightpanda as a remote CDP browser backend for OpenClaw and found the following behavior:
- Lightpanda CDP server starts successfully
/json/versionis available- OpenClaw can connect successfully and can perform a basic
open <url>navigation - However, most browser control operations used by OpenClaw fail afterwards with HTTP 404
The blocker appears to be strongly related to missing Chromium-style discovery endpoints, especially:
/json/json/list/json/protocol/json/new?...
All of these return 404 on the current Lightpanda server, while OpenClaw’s current browser stack appears to rely on at least part of this discovery / target enumeration behavior.
So at the moment Lightpanda can be “partially connected”, but cannot be used as a drop-in backend for OpenClaw’s existing browser control stack.
Environment
- Lightpanda:
lightpanda/browser:nightlyDocker image - Platform: macOS arm64
- OpenClaw: local gateway/browser control
- Transport: remote CDP via
ws://127.0.0.1:9222
Reproduction
1. Start Lightpanda
docker run -d --name lightpanda-test -p 9222:9222 -e LIGHTPANDA_DISABLE_TELEMETRY=true lightpanda/browser:nightlyContainer logs show:
server running address=0.0.0.0:9222
2. Check discovery endpoints
curl http://127.0.0.1:9222/json/versionResponse:
{"webSocketDebuggerUrl":"ws://0.0.0.0:9222/"}But the following endpoints return 404:
curl http://127.0.0.1:9222/json
curl http://127.0.0.1:9222/json/list
curl http://127.0.0.1:9222/json/protocol
curl 'http://127.0.0.1:9222/json/new?https://example.com'3. Configure a remote CDP profile in OpenClaw
For example:
{
browser: {
profiles: {
lightpanda: {
cdpUrl: "ws://127.0.0.1:9222"
}
}
}
}4. Run tests
These commands succeed:
openclaw browser --browser-profile lightpanda status
openclaw browser --browser-profile lightpanda open https://example.comBut the following commands all fail with HTTP 404:
openclaw browser --browser-profile lightpanda tabs
openclaw browser --browser-profile lightpanda snapshot
openclaw browser --browser-profile lightpanda snapshot --interactive
openclaw browser --browser-profile lightpanda screenshot
openclaw browser --browser-profile lightpanda evaluate --fn '() => document.title'
openclaw browser --browser-profile lightpanda wait --text 'Example Domain'Actual result
- CDP server is running
/json/versionworks- Navigation works
- But tabs / snapshot / screenshot / evaluate / wait all fail with HTTP 404
Expected result
Either of the following would help integration significantly:
Option A
Implement Chromium-style discovery endpoints, at least:
/json/json/list/json/protocol
This would make it easier for existing CDP/browser clients like OpenClaw to reuse their current discovery logic.
Option B
If these endpoints are intentionally not supported, it would help to document clearly that:
- Chromium-style
/json/*discovery is not currently supported - Recommended integration should use:
- persistent WebSocket connection
Target.createTargetTarget.attachToTarget- avoid relying on
/json/list
- What the recommended stable target discovery / current-page attach pattern is
Related issues
We found a couple of related issues that suggest this is not an isolated case:
- Playwright connectOverCDP fails: frame ID mismatch in Page.getFrameTree (startup path) #1800:
Playwright connectOverCDP fails: frame ID mismatch in Page.getFrameTree (startup path) - Integration: Neo CLI works with Lightpanda as headless backend #1908:
Integration: Neo CLI works with Lightpanda as headless backend
Issue #1908 in particular mentions that:
/json/listis not implemented- they work around it via
Target.createTarget + Target.attachToTarget - which suggests the core CDP functionality is usable, but differs from Chromium’s default discovery model
Questions
Could you clarify:
- Is the absence of
/json,/json/list, and/json/protocolexpected behavior? - Are there plans to implement these endpoints for better compatibility with existing Chromium-oriented CDP clients?
- If raw CDP attach is the recommended integration path, would you consider documenting that more explicitly in the README / docs?