Install
openclaw skills install @mfang0126/perplexity-web-bridgeChat with Perplexity from your agent: no Perplexity API key.
openclaw skills install @mfang0126/perplexity-web-bridgeGeneric (site-agnostic) browser automation: snapshot → numbered element table → one Jev decision pass picks (operation, target) → deterministic act → bounded settle-wait → repeat until DONE (independently verified). The main model only participates at escalations and at the final read — never inside the loop.
Chat with Perplexity without an API key: a bundled Perplexity driver (≤30 lines) turns the generic loop into "type a question into the web app, wait out the stream, extract the answer" — with a receipt for every step.
Unofficial. Not affiliated with or endorsed by Perplexity AI, Inc. Inspired by jev-ultrafast (independent implementation).
npx skills add mfang0126/perplexity-web-bridge
Requires:
scripts/jevw-escaler.py
(the fast escalation answerer, ~2–3 s per answer; model-agnostic via
JEZW_ESCALER_URL / JEZW_ESCALER_MODEL / JEZW_ESCALER_API_KEY — tested
build: Xiaomi MiMo 2.6 series)jevw run \
--goal "<natural-language goal, space-separated tokens (they feed the DONE keyword gate)>" \
--url <start URL> # REQUIRED unless --dry-run; never hardcoded per site
--site <perplexity|github|none> # optional predicate override (<30 lines each)
--escalate-cmd "python3 scripts/jevw-escaler.py" # STANDARD: instant LLM answers
[--text "<TYPE_TEXT text>"] # defaults to the recipe-enhanced goal
[--recipe default|finance|tech|research] # v1.1: prompt-quality wrapper
[--receipts <path.jsonl>]
Output: one final JSON line
{"status","answer","cycles","turns":{"escalations"},"wall_ms","session","site_checks"}.
Status: done | exhausted | blocked. Exit 0/3/4/2/1.
Standard: --escalate-cmd "python3 scripts/jevw-escaler.py" — one small-LLM
call per escalation (~2–3 s), done_verify answered instantly (the keyword gate
is the real judge). Any escaler failure falls back to WAIT. Without
--escalate-cmd the loop falls back to an interactive stdin bridge: print
payload, read ONE decision JSON line — answer fast, every parked minute breeds
another stuck.
stuck|low_confidence|invalid_target|jev_outage): decision =
{"op":..., "target": <idx from payload rows or null>, "confidence":..., "value":...}.
While an answer is generating, WAIT. Never invent indices.done_verify: {"op":"DONE","target":null,"confidence":0.95} — the loop's
keyword gate (≥half of goal tokens in the extracted answer) judges it regardless.--recipe finance|tech|research): wrap the goal in
community-validated answer rules — a citation after every factual sentence,
label weak evidence "unsupported", recency window, conflict exposure, and a
per-recipe focus hint (finance: SEC filings/10-K; tech: official docs +
verbatim errors; research: source-first, 30+ sources). The goal text stays
verbatim inside the wrapper, so the DONE keyword gate is unaffected.site_checks in the result): model_label (catches
silent model downgrades — compare with what you selected) and
citation_coverage / decorative_citations (markers the body actually uses
vs sources listed; a 15-source list with 3 markers is decoration).references/perplexity-playbook.md.src/jev_webbridge/predicates/<site>.py — max 30 lines,
every non-empty one declares WHY_OVERRIDE. A lint test enforces this.os.path.getsize, never tell() on a cached handle.max_wall_s) bounds the run so answer generation (minutes) can survive.Input.dispatchMouseEvent clicks can land geometrically and be SILENTLY
ignored by app handlers (Perplexity submit, 3×) — the effect-verified ladder
exists because of this. React/Lexical draft sync lives in the site predicate
(post_fill_js); without it submit silently no-ops.invalid_target), it does
not retry. ~2 hydration fill errors per run is a known open finding.text_len changing, which defeats stuck, but Jev
may pair ops badly mid-stream — expect invalid_target escalations; WAIT
until the stop-button/thinking state clears, then DONE. Stuck-WAIT spam
during the thinking phase is noisy but free and cheap.detail and pre_gate in each receipt are the ground truth for failures and
for the Jev decision a gate rejected. Read receipts first when debugging.site_checks.decorative_citations before trusting the source list, and
spot-check the citations you do rely on (an audit found 27% of wrong
sentences carried citations that did not support the claim).site_checks.model_label records
what the page actually said.docs/2026-09-24-probe-report.mdstatus=done, 77.0 s wall, 0 manual turns, 19.1× vs interactive baseline — docs/2026-09-24-speed-report.mddocs/COVERAGE.mdreferences/perplexity-playbook.mdbench/*.jsonl