Robotaxi Tracker

v1.0.0

Use this skill when the user asks for the latest or current US autonomous vehicle, self-driving car, robotaxi, Tesla, or Waymo vehicle counts, fleet size, ci...

0· 97· 1 versions· 0 current· 0 all-time· Updated 5h ago· MIT-0
by阿赖@pekky

Install

openclaw skills install robotaxi-tracker

Robotaxi Tracker

Use this skill for requests about robotaxitracker.com, especially when the user wants:

  • latest US autonomous vehicle counts
  • current self-driving car / robotaxi counts in the US
  • Tesla vs Waymo fleet comparison
  • city distribution
  • official fleet numbers
  • tracker-collected / discovered vehicle counts
  • output in a compact table

This skill should also trigger for natural-language requests like:

  • 帮我查下最新的美国自动驾驶车辆数量
  • 帮我查下最新的美国 robotaxi 数量
  • 最新的 Tesla 和 Waymo 车队数量
  • 美国自动驾驶车辆城市分布

Core rules

  1. Do not rely on HTML alone. Inspect JS bundles and query the public backend.
  2. Do not mix metric types. Separate:
    • official fleet
    • tracker-collected / discovered vehicles
  3. Validate:
    • service area count
    • row count in the city table
    • city sum vs chosen aggregate metric
  4. If the user requests a final table only, output only the table.
  5. Do not assume the first Convex host you find is valid. Test candidate hosts and keep only hosts that return status: success for the expected public queries.
  6. Do not claim the backend requires authentication unless you have confirmed a direct API response that explicitly indicates auth is required. A 404 or wrong host is not an auth failure.

Required tools

  • curl
  • rg
  • jq

If network is restricted, switch to a tool or environment that can fetch the site.

Workflow

1. Fetch homepage HTML

curl -sS https://robotaxitracker.com/ -o /tmp/robotaxi_home.html

2. Extract and download homepage JS bundles

You must scan all homepage chunks. Do not pick a single chunk by guesswork.

grep -o '/_next/static/chunks/[^"?]*\.js' /tmp/robotaxi_home.html | sort -u > /tmp/robotaxi_chunks.txt
cat /tmp/robotaxi_chunks.txt
mkdir -p /tmp/robotaxi_js
while read -r u; do
  [ -n "$u" ] || continue
  f=$(basename "$u")
  curl -sS "https://robotaxitracker.com$u" -o "/tmp/robotaxi_js/$f"
done < /tmp/robotaxi_chunks.txt

If you have not scanned all chunks listed in /tmp/robotaxi_chunks.txt, stop and finish that first.

3. Find backend query names and enumerate all candidate hosts

rg -o 'api\.[A-Za-z0-9_.]+' -n /tmp/robotaxi_js/*.js | sort -u
rg -o '[A-Za-z0-9-]+\.convex\.cloud' -n /tmp/robotaxi_js/*.js | sort -u > /tmp/robotaxi_hosts.txt
cat /tmp/robotaxi_hosts.txt
rg -n 'convex\.cloud|ConvexReactClient' /tmp/robotaxi_js/*.js

Look for queries like:

  • api.queries.serviceAreas.list
  • api.queries.fleet.getHomepageData
  • api.queries.fleet.getRecentlyAddedCounts

Known current host notes:

  • Prefer graceful-eel-151.convex.cloud first. It was verified on 2026-04-10 to return status: success for the public queries above.
  • happy-otter-123.convex.cloud was observed returning 404 Not Found on 2026-04-10. Treat it as stale or invalid unless re-verified.

Do not stop after finding one host. Enumerate all candidate hosts first.

4. Validate all candidate hosts before choosing one

Before using any discovered Convex host for real data extraction, probe every candidate host with a known public query.

while read -r host; do
  [ -n "$host" ] || continue
  echo "=== $host ==="
  curl -sS "https://$host/api/query"     -H 'Content-Type: application/json'     --data '{"path":"queries/serviceAreas:list","args":[{"provider":"waymo"}]}'
  echo
done < /tmp/robotaxi_hosts.txt

Selection rules:

  1. You must test every host in /tmp/robotaxi_hosts.txt before choosing one, unless the first verified-success host is graceful-eel-151.convex.cloud.
  2. Choose the first host that clearly returns {"status":"success", ...} for the expected public query.
  3. If a host returns 404 Not Found, empty output, HTML, or malformed JSON, treat it as invalid and continue to the next candidate host.
  4. Do not describe 404, empty output, or wrong-host behavior as an authentication requirement.
  5. Only describe the backend as auth-protected if the API response explicitly indicates authentication or authorization failure.
  6. If graceful-eel-151.convex.cloud returns status: success, prefer it immediately.

After choosing a host, keep using that same validated host for all subsequent queries in the run.

5. Get service areas

curl -sS https://<convex-host>/api/query \
  -H 'Content-Type: application/json' \
  --data '{"path":"queries/serviceAreas:list","args":[{"provider":"waymo"}]}'

Extract rows:

curl -sS https://<convex-host>/api/query \
  -H 'Content-Type: application/json' \
  --data '{"path":"queries/serviceAreas:list","args":[{"provider":"waymo"}]}' \
  | jq -r '.value[] | [.name,.slug,.id] | @tsv'

Repeat for tesla.

6. Tracker-collected counts

Homepage aggregate:

curl -sS https://<convex-host>/api/query \
  -H 'Content-Type: application/json' \
  --data '{"path":"queries/fleet:getHomepageData","args":[{"provider":"waymo"}]}'

Per city:

curl -sS https://<convex-host>/api/query \
  -H 'Content-Type: application/json' \
  --data '{"path":"queries/fleet:getHomepageData","args":[{"provider":"waymo","serviceAreaId":"<serviceAreaId>"}]}'

Use .value.totalVehiclesCount for the per-city tracker count unless the user explicitly asks for another field.

7. Official fleet counts

Search bundles:

rg -n 'getOfficialFleetCount|getTotalOfficialFleet|officialFleet|official fleet' /tmp/robotaxi_js/*.js

Important:

  • the site may expose official fleet only for some providers
  • official total and official city mapping may not cover exactly the same set of cities
  • do not infer missing city numbers unless the user explicitly asks for estimation

8. Validation

Always check:

  1. number of service areas
  2. number of city rows in the final table
  3. sum of chosen city metric
  4. chosen total metric
  5. the selected Convex host and whether it returned status: success during validation

If totals differ, mention the mismatch only if the user asked for explanation. Otherwise, use the requested metric and keep output compact.

If you cannot produce live data, explain exactly which host was tested, what raw failure happened, and why that failure implies the next step. Never jump directly from a wrong-host response to an authentication conclusion.

Output defaults

If the user asks for a combined comparison table, use:

城市Waymo数量Tesla数量
Bay Area......
Austin......
总数量......

Rules:

  1. Put the same city on the same row.
  2. Fill missing values with 0.
  3. Add 总数量 as the last row.
  4. Do not include extra prose if the user asked for table-only output.

Common mixed-metric case

If the user says:

  • Waymo uses official fleet
  • Tesla uses site/tracker data

Then:

  1. fetch Waymo official city numbers from frontend-exposed config
  2. fetch Tesla tracker city numbers from backend query
  3. merge by city
  4. output one table only

Version tags

latestvk97ap0y1p1tg06t9nxdr1qbrr184p6p9