Skip to content

OpenClaw integration is blocked by missing Chromium-style discovery endpoints (/json, /json/list, /json/protocol) despite successful CDP connect and navigation #1932

@Cyrillico

Description

@Cyrillico

Summary

We tried integrating Lightpanda as a remote CDP browser backend for OpenClaw and found the following behavior:

  • Lightpanda CDP server starts successfully
  • /json/version is 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:nightly Docker 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:nightly

Container logs show:

server running address=0.0.0.0:9222

2. Check discovery endpoints

curl http://127.0.0.1:9222/json/version

Response:

{"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.com

But 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/version works
  • 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:

  1. Chromium-style /json/* discovery is not currently supported
  2. Recommended integration should use:
    • persistent WebSocket connection
    • Target.createTarget
    • Target.attachToTarget
    • avoid relying on /json/list
  3. 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:

Issue #1908 in particular mentions that:

  • /json/list is 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:

  1. Is the absence of /json, /json/list, and /json/protocol expected behavior?
  2. Are there plans to implement these endpoints for better compatibility with existing Chromium-oriented CDP clients?
  3. If raw CDP attach is the recommended integration path, would you consider documenting that more explicitly in the README / docs?

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions