Skip to content

v2.16.0

Latest

Choose a tag to compare

@github-actions github-actions released this 17 Aug 04:24
· 4 commits to main since this release
284791f

v2.16.0 makes live-session attach the product: agents use the Chrome tab you
already have, finish common jobs in one step, and get a skinny receipt. It adds
named in-viewport and off-screen click, search-submit to listing results rather
than typeahead, first-class scroll to top/bottom (including nested overflow),
Chrome PDF plugin page-1 text, and overlay detect on the locked board. Document
nav, hover, fill, and scroll keep the same commands while dropping leftover AX
and load-event wait from the happy path. The README first screen is Cool visual
→ live-session advantage → user-facing 10/8/9 win score plus steps / token /
time bar charts (chrome-cdp-ex 10 PASS, Browser Use 8 PASS, Playwright 9 PASS;
measured 2026-08-17 on 22c525d4 with same-machine Playwright n=3). The
ten-row lab table lives in docs/pk-324-board.md, not the README.

docs: lead README with cool visual and win-score PK

  • README first screen is Cool (poster / 60-second demo / redesign stills)
    → live-session one-step punch → 10/8/9 win score plus steps / token /
    time bar charts → demo pages → short doctor / list Quick Start.
    The ten-row lab grid moved to docs/pk-324-board.md. Install stays
    pinned to published v2.15.0.

docs: lead README with the live-session one-step board

  • README leads with the live Chrome attach, one-step receipt, and the
    2026-08-17 22c525d4 three-column board vs Browser Use and same-machine
    Playwright. Table faces are success / steps / time / token. Overlay and
    PDF rows state the PASS/FAIL judgment, not only a char count. Install
    still starts at doctor.

perf: faster document nav wait (#347)

  • Successful nav still lands on the destination when readyState is
    complete. It returns when the dest URL is committed and the document is
    complete, without also waiting Page.loadEventFired plus the leftover
    150 ms action network-quiet floor after a cached document GET. Same
    one-step nav command; no --wait-until / --skip-settle. Click-initiated
    navigation still uses the short 50/250 quiet window.

perf: skinny document-scroll-edge receipt (#345)

  • Successful scroll to bottom / scroll to top text is the #323 line
    (scrollY / scrollMax / at-bottom, 61 chars on huggingface.co), not
    the 469-char Recovery/Hint/Outcome essay. Same one-step document edge
    still reaches scrollY ≈ scrollMax. --compact is no longer a text
    no-op: it prints metrics only (scrollY: 5295 / 5295 max (at-bottom: yes),
    41 chars). --qa / --summary stay the existing QA summary.
    Attention/failed/relative leftover-ax-scroll keep the fat receipt. No
    new scroll command.

perf: skinny document nav receipt to URL and title (#343)

  • Successful nav text is URL + title + readyState (68 chars on
    example.org), not the 564-char Recovery/Hint/Outcome essay. Same
    one-step document nav still waits until usable. --compact is no
    longer a text no-op: it prints one line (URL title, 36 chars).
    --qa / --summary stay the existing QA summary. --perceive still
    dumps AX. Attention/failed navs keep the fat receipt. No --goto.

perf: skip hover leftover AX recapture before confirm eval (#341)

  • Sequential batch --compact 'hover … | eval …' skips leftover AX
    recapture on hover. Dumping settle-shape AX after mouseMoved races CSS
    :hover (HF permalink md:opacity-0 / group-hover). Confirm eval is
    the success signal. Standalone hover still recaptures so a later no-op
    mutator does not steal hover's AX delta. No new hover command or flags.
  • Hover receipts name opacity 0→1 / visible / groupHover from a
    cheap computed-style snapshot, not Accessibility.getFullAXTree.
    Compositor-ack swallow stays 250 ms. evalraw mouseMoved is not the
    happy path.

perf: skip typeahead listing probe wait on search-submit (#339)

  • Sequential batch --compact 'fill … | press Enter' still lands on
    /models?search=bert, not the typeahead first repo. After report-only
    fill, press probes once for the listing link instead of polling
    1500 ms for typeahead. If the listing is not visible yet, it opens
    /models?search=<filled> from the value just set and returns on
    listing URL commit. Typeahead first-model click is still FAIL. No
    --submit flag. Compact receipts stay skinny.

fix: sequential batch fill report-only applies live (#337)

  • Sequential batch fill | press Enter still skips mid-pipe leftover AX
    and pending /api/quicksearch. #336 set batchNextCommand then returned
    handleCommand(...) from a try/finally that cleared lookahead as soon as
    the Promise was created. Fill runs after the first daemon await, so it
    still settle-diffed. Lookahead now stays until that fill handler reads it.
    Standalone fill still settle-diffs. No --submit flag.

perf: skip fill leftover settle on search submit (#335)

  • Sequential batch --compact 'fill … | press Enter' still lands on the
    listing URL (/models?search=bert), not the typeahead first repo.
    Mid-pipe fill is report-only: leftover typeahead AX and pending
    /api/quicksearch are not the success signal. Standalone fill still
    settle-diffs. No --submit / --skip-settle flag.
  • Search-submit press Enter waits for the listing link after that fill,
    then jsclicks it and returns when the listing URL has committed.
    Typeahead-overlay mouse compositor wait is not paid. A miss still
    counts if the listing URL already loaded; it does not send Enter.
    Compact receipts stay skinny.

fix: text --auto reads Chrome PDF plugin page-1 text (#283)

  • text --auto on a Chrome PDF plugin tab (application/pdf) returns
    page-1 text from the PDF bytes (FlateDecode / object streams / TJ
    kerning, the same print-to-text path other tools use) instead of the
    empty chrome-cdp-ex.pdf-viewer.v1 stub. Paid landmark: AI4AI at Test-Time on https://arxiv.org/pdf/2608.12307.
  • perceive / html / qa and leftover-press settle stay
    pdf-viewer.v1. Identical stub vs stub is still not a page change.
    Plain text without --auto still fail-closes as the stub.

feat: named click scrolls off-screen text into view (#332)

  • Named click / jsclick still finds a control by accessible name in one
    step with a skinny URL receipt. A unique off-screen hit now reuses the
    existing CSS / @​ref jsclick scrollIntoView({ block: 'center', inline: 'center' }) then el.click(), so click "Browse 1M+ applications"
    from scrollY 0 lands on /spaces without a prior scroll down loop.
  • The receipt may include Scroll: <before> → <after>. It stays skinny
    (no perceive dump). In-viewport named clicks still do not scroll. Missing
    names still fail closed. Mouse click @​ref / CSS is unchanged.

feat: submit search to results, not typeahead first hit (#328)

  • press Enter with a visible listing link (See N model results,
    a[href*="models?search="], /search?q=) submits that listing instead of
    sending raw Enter, so Hugging Face header search lands on
    /models?search=bert rather than the first typeahead repo. A fail-closed
    realistic mouse click still counts if the listing URL already loaded;
    otherwise press uses the existing jsclick path. It does not fall
    through to Enter.
  • perceive -C -d 8 Visible controls rank that listing link ahead of
    typeahead repo hits (before the collector cap), with a stable
    a[href="/models?search=…"] selector for click.
  • Search-submit Enter uses report-only, so leftover perceive -C -d 8
    settle is not eaten. Other keys still settle-diff. Receipt stays skinny.

feat: click in-viewport named link without fat perceive (#327)

  • click / jsclick accept an in-viewport accessible name (for example
    "Browse 2M+ models"). That path uses HTMLElement.click() in one step
    with a skinny URL receipt, so the agent does not need perceive -C -d 8
    then a failed mouse click @​ref then jsclick.
  • In-viewport named queries do not scrollIntoView. Short of the navigating
    href is FAIL. Unique off-screen names are #332.
  • Mouse click @​ref / CSS still fail-closes with no-input-events and
    Next jsclick. Leftover settle-diff for those forms is unchanged.

feat: scroll nested overflow to top/bottom (#326)

  • scroll to top and scroll to bottom still use the existing scroll
    command. When the window document cannot scroll, they scroll the nearest
    overflow container (container.scrollTop, same idea as
    table --collect --scroll-container) instead of reporting document
    0 / 0 as at-bottom: yes. An explicit --scroll-container SELECTOR
    targets that container, walking up to the nearest overflow ancestor
    when the node itself is not scrollable.
  • Container receipts stay skinny: that container's scrollTop /
    scrollMax / at-bottom or at-top. Short of the container edge is a
    failed action. Relative scroll down N leftover settle-diff is
    unchanged.

feat: scroll to top/bottom as first-class command (#323)

  • scroll to top and scroll to bottom are first-class window-document
    commands. The receipt reports scrollY, scrollMax, and at-top /
    at-bottom without reprinting the AX tree. Relative scroll down N
    still uses settle-diff leftover AX behavior. Nested overflow is a
    different job.
  • Short of the requested window-document edge is a failed action (scrollY
    still below scrollMax - 2, or still above top tolerance), not a success
    headline with at-bottom: no / at-top: no.
  • Edge forms stay off leftover-ax-scroll no-change tagging after leftover
    perceive -C -d 8, so the receipt does not grow Next: perceive -C -d 8.
    Relative scroll down N leftover settle-diff is unchanged.

Open issue dogfood (#320)

  • Leftover golden-path perceive -C -d 8 then scroll still treats unchanged
    identities as honest Outcome: no-change. Already-at-bottom leftover-ax-scroll
    receipts whose Next is already perceive -C -d 8 no longer reprint
    scroll: dispatched via scroll / Target: down. Scrolled by … Position: …
    already states the action and the honest no-move. Outcome: no-change,
    Verdict continue, Settle ms, and Next -C -d 8 stay. A Visible-control
    cap-swap stays Outcome: changed with compact unique named samples and still
    prints dispatched/Target, its body, and Page / Viewport. Leftover --cards
    / pdf-viewer.v1 / generic non-leftover actions keep their own
    dispatched/Target. Interactive census / Console: clean / Coords clickxy
    tutorial stay dropped on the action receipt; no Recovery hint that restates
    Next, no settle-shape Outcome reason, no reprinted Page / Viewport on honest
    no-change, no tautological AX body on honest no-change, no Hint
    --since-action, no generic Recovery hint on leftover changed, no
    +++ Added signed-commit / time GMT selector dump, no relative-time /
    GMT named samples, shared commit title not on both sample sides, #297
    compact headline, #295 rect-chrome no-change, #293 leftover N>0
    --cards, leftover -C -d 8 then mutating click --js, #285 PDF
    Next, and #286/#291 hover honest-gate hold.
    HOVER_MOUSE_ACK_TIMEOUT_MS stays 250.

Open issue dogfood (#318)

  • Leftover golden-path perceive -C -d 8 then scroll still treats unchanged
    identities as honest Outcome: no-change. Already-at-bottom leftover-ax-scroll
    receipts whose Next is already perceive -C -d 8 no longer reprint
    (no changes detected in AX tree). Outcome: no-change already states that.
    Position: on the action line stays. Verdict continue, Settle ms, and Next
    -C -d 8 stay. A Visible-control cap-swap stays Outcome: changed with
    compact unique named samples and still prints its body and Page / Viewport.
    Standalone leftover perceive -C -d 8 dumps still print that no-change line.
    Leftover --cards / pdf-viewer.v1 / generic non-leftover actions keep their
    own AX body. Interactive census / Console: clean / Coords clickxy tutorial
    stay dropped on the action receipt; no Recovery hint that restates Next, no
    settle-shape Outcome reason, no reprinted Page / Viewport on honest no-change,
    no Hint --since-action, no generic Recovery hint on leftover changed, no
    +++ Added signed-commit / time GMT selector dump, no relative-time /
    GMT named samples, shared commit title not on both sample sides, #297
    compact headline, #295 rect-chrome no-change, #293 leftover N>0
    --cards, leftover -C -d 8 then mutating click --js, #285 PDF
    Next, and #286/#291 hover honest-gate hold.
    HOVER_MOUSE_ACK_TIMEOUT_MS stays 250.

Open issue dogfood (#316)

  • Leftover golden-path perceive -C -d 8 then scroll still treats unchanged
    identities as honest Outcome: no-change. Already-at-bottom leftover-ax-scroll
    receipts whose Next is already perceive -C -d 8 no longer reprint the
    Page: / Viewport: identity header (Focused: none included).
    Position: on the action line already states scroll identity, and Next
    perceive -C -d 8 re-establishes page identity. Verdict continue,
    (no changes detected in AX tree), and Next -C -d 8 stay. A
    Visible-control cap-swap stays Outcome: changed with compact unique
    named samples and still prints Page / Viewport. Standalone leftover
    perceive -C -d 8 dumps still print those header lines. Leftover
    --cards / pdf-viewer.v1 / generic non-leftover actions keep their
    own Page / Viewport headers. Interactive census / Console: clean /
    Coords clickxy tutorial stay dropped on the action receipt; no Recovery
    hint that restates Next, no settle-shape Outcome reason, no Hint
    --since-action, no generic Recovery hint on leftover changed, no
    +++ Added signed-commit / time GMT selector dump, no relative-time /
    GMT named samples, shared commit title not on both sample sides, #297
    compact headline, #295 rect-chrome no-change, #293 leftover N>0
    --cards, leftover -C -d 8 then mutating click --js, #285 PDF
    Next, and #286/#291 hover honest-gate hold.
    HOVER_MOUSE_ACK_TIMEOUT_MS stays 250.

Open issue dogfood (#313)

  • Leftover golden-path perceive -C -d 8 then scroll still treats unchanged
    identities as honest Outcome: no-change. Already-at-bottom leftover-ax-scroll
    receipts whose Next is already perceive -C -d 8 print Outcome: no-change
    without the settle-shape reason Settle shape was leftover golden-path AX; viewport rect chrome did not replace identities. The body already says
    (no changes detected in AX tree). Verdict continue and Next -C -d 8
    stay. A Visible-control cap-swap stays Outcome: changed with compact unique
    named samples. Generic non-leftover actions still print an Outcome reason.
    Leftover --cards / pdf-viewer.v1 no-change still print their settle-shape
    Outcome reasons. Interactive census / Console: clean / Coords clickxy
    tutorial stay dropped on the action receipt; the leftover perceive -C -d 8
    dump itself still prints those header lines. No Recovery hint that restates
    Next, no Hint --since-action, no generic Recovery hint on leftover
    changed, no +++ Added signed-commit / time GMT selector dump, no
    relative-time / GMT named samples, shared commit title not on both sample
    sides, #297 compact headline, #295 rect-chrome no-change, #293
    leftover N>0 --cards, leftover -C -d 8 then mutating click --js,
    #285 PDF Next, and #286/#291 hover honest-gate hold.
    HOVER_MOUSE_ACK_TIMEOUT_MS stays 250.

Open issue dogfood (#311)

  • Leftover golden-path perceive -C -d 8 then scroll still treats unchanged
    identities as honest Outcome: no-change. Already-at-bottom leftover-ax-scroll
    receipts whose Next is already perceive -C -d 8 no longer reprint
    Recovery hint: AX identities unchanged; re-run perceive -C -d 8 instead of report. Outcome, Verdict continue, and Next already carry that handoff.
    A Visible-control cap-swap stays Outcome: changed with compact unique named
    samples. Generic non-leftover actions still print a Recovery hint when Next
    is report / investigate. Interactive census / Console: clean / Coords
    clickxy tutorial stay dropped on the action receipt; the leftover
    perceive -C -d 8 dump itself still prints those header lines. Named
    samples, no Hint --since-action, no generic Recovery hint on leftover
    changed, no +++ Added signed-commit / time GMT selector dump, no
    relative-time / GMT named samples, shared commit title not on both sample
    sides, #297 compact headline, #295 rect-chrome no-change, #293
    leftover N>0 --cards, leftover -C -d 8 then mutating click --js,
    #285 PDF Next, and #286/#291 hover honest-gate hold.
    HOVER_MOUSE_ACK_TIMEOUT_MS stays 250.

Open issue dogfood (#309)

  • Leftover golden-path perceive -C -d 8 then scroll still treats a
    Visible-control cap-swap as Outcome: changed. Honest leftover-ax-scroll
    receipts whose Next is already perceive -C -d 8 no longer reprint
    Interactive census / Console: clean / Coords clickxy tutorial chrome,
    and no longer reprint Outcome / Receipt / Verdict as the same
    "Observed page change after action" sentence three times. The leftover
    perceive -C -d 8 dump itself still prints those header lines. A new
    file, heading, or link still prints a structural diff. Named samples,
    no Hint --since-action, no generic Recovery hint, no +++ Added
    signed-commit / time GMT selector dump, no relative-time / GMT named
    samples, shared commit title not on both sample sides, #297 compact
    headline, #295 rect-chrome no-change, #293 leftover N>0 --cards,
    leftover -C -d 8 then mutating click --js, #285 PDF Next, and
    #286/#291 hover honest-gate hold. HOVER_MOUSE_ACK_TIMEOUT_MS
    stays 250.

Open issue dogfood (#307)

  • Leftover golden-path perceive -C -d 8 then scroll still treats a
    Visible-control cap-swap as Outcome: changed. A name that appears on
    both sides of the swap (live: a shared commit title
    Add diffusers weights (modular pipeline) (#2)) stays in headline
    membership but does not occupy a named sample slot on both sides, so
    unique file / heading / link names fill the cap. Counts stay honest.
    A new file, heading, or link still prints a structural diff. Named
    samples, no Hint --since-action, no generic Recovery hint, no
    +++ Added signed-commit / time GMT selector dump, no relative-time
    / GMT named samples, #297 compact headline, #295 rect-chrome
    no-change, #293 leftover N>0 --cards, leftover -C -d 8 then
    mutating click --js, #285 PDF Next, and #286/#291 hover
    honest-gate hold. HOVER_MOUSE_ACK_TIMEOUT_MS stays 250.

Open issue dogfood (#305)

  • Leftover golden-path perceive -C -d 8 then scroll still treats a
    Visible-control cap-swap as Outcome: changed. Relative-time / GMT
    title strings in the live formatter shape (a role=link "2 days ago" /
    time "Thu, 13 Aug 2026 15:18:27 GMT" [clickable]) stay in headline
    membership but do not occupy the named 4-sample cap, so the remaining
    useful name fills the cap. Counts stay honest. A new file, heading, or
    link still prints a structural diff. Named samples, no Hint
    --since-action, no generic Recovery hint, no +++ Added signed-commit
    / time GMT selector dump, #297 compact headline, #295 rect-chrome
    no-change, #293 leftover N>0 --cards, leftover -C -d 8 then
    mutating click --js, #285 PDF Next, and #286/#291 hover
    honest-gate hold. HOVER_MOUSE_ACK_TIMEOUT_MS stays 250.

Open issue dogfood (#303)

  • Leftover golden-path perceive -C -d 8 then scroll still treats a
    Visible-control cap-swap as Outcome: changed. Title-only Visible-control
    dump lines in the live formatter shape (span "…" span[title="…"] .classes
    / time "Fri, … GMT" time[title="…"] .classes) are identity chrome, not a
    structural +++ Added selector dump. A new file, heading, or link still
    prints a structural diff. Named samples, no Hint --since-action, no
    generic Recovery hint, #297 compact headline, #295 rect-chrome
    no-change, #293 leftover N>0 --cards, leftover -C -d 8 then mutating
    click --js, #285 PDF Next, and #286/#291 hover honest-gate hold.
    HOVER_MOUSE_ACK_TIMEOUT_MS stays 250.

Open issue dogfood (#301)

  • Leftover golden-path perceive -C -d 8 then scroll still treats a
    Visible-control cap-swap as Outcome: changed. Honest leftover-ax-scroll
    changed receipts no longer print the generic
    Recovery hint: Continue from the observed action evidence. Outcome,
    compact named samples, Verdict continue, and Next perceive -C -d 8
    already carry that handoff. Generic non-leftover changed actions still
    print the hint. Named samples, no Hint --since-action, #297 compact
    headline, #295 rect-chrome no-change, #293 leftover N>0 --cards,
    leftover -C -d 8 then mutating click --js, #285 PDF Next, and
    #286/#291 hover honest-gate hold. HOVER_MOUSE_ACK_TIMEOUT_MS
    stays 250.

Open issue dogfood (#299)

  • Leftover golden-path perceive -C -d 8 then scroll still treats a
    Visible-control cap-swap as Outcome: changed. Samples now prefer
    accessible names. Live collector fallbacks (img "img" /
    a role=link "link") stay in headline membership but do not occupy
    the 4-sample cap. Leftover-ax-scroll receipts print Next
    perceive -C -d 8 without Hint --since-action. A new file,
    heading, or link still prints a structural diff. #297 compact
    headline, #295 rect-chrome no-change, #293 leftover N>0 --cards,
    leftover -C -d 8 then mutating click --js, #285 PDF Next, and
    #286/#291 hover honest-gate hold. HOVER_MOUSE_ACK_TIMEOUT_MS
    stays 250.

Open issue dogfood (#297)

  • Leftover golden-path perceive -C -d 8 then scroll still treats a
    Visible-control cap-swap as Outcome: changed (membership, not rect
    chrome). The settle receipt now summarizes that swap instead of reprinting
    8+8 / 9+9 full control lines, and a fold-tag-only change on the same
    [navigation] Main identity is not a Removed+Added pair. A new file,
    heading, or link still prints a structural diff. Next stays
    perceive -C -d 8 on this leftover scroll, including the honest cap-swap
    changed case, instead of a Hint-only handoff or report /
    record-actions. #295 rect-chrome no-change, #293 leftover N>0
    --cards, leftover -C -d 8 then mutating click --js, #285 PDF
    Next, and #286/#291 hover honest-gate hold. HOVER_MOUSE_ACK_TIMEOUT_MS
    stays 250.

Open issue dogfood (#295)

  • Leftover golden-path perceive -C -d 8 is the settle shape for the next
    scroll. Viewport @​ref / Visible-control rect chrome ((x,y w×h)) is
    not a page mutation: unchanged AX identities stay Outcome: no-change /
    continue with Next perceive -C -d 8 instead of report /
    record-actions. A new file, heading, or link entering the leftover tree
    is still Outcome: changed. #293 leftover N>0 --cards then scroll
    stays compact cards.v1. Leftover -C -d 8 then mutating click --js
    still reports live text. #285 leftover PDF click --js and #286/#291
    hover honest-gate hold.

Open issue dogfood (#293)

  • Leftover perceive --cards / --role feed with a real feed window (N>0
    cards) is the settle shape for the next scroll. Recapture stays
    cards.v1 so timestamp chrome is not a fake AX Outcome: changed, and
    an unchanged virtualized window is no-change / continue with Next
    perceive --cards instead of report or perceive -C -d 8. Card
    identity ignores relative-time chrome in article AX names (· 2m),
    including when the clock lives in the article name itself rather than
    only child StaticText. A third article entering the leftover window is
    still Outcome: changed even when expectedOutcome is
    cards-window-no-change. 0-card leftovers still
    recapture default AX (#257 / #279). Leftover feed --cards then
    click --js still recaptures AX. #285 leftover PDF click --js and
    #286/#291 hover honest-gate hold.

Open issue dogfood (#291)

  • hover still snapshots settle-shape AX before mouseMoved and recaptures
    immediately. Sync hover that already shows a delta KEEPs that baseline.
    Idle recapture now discards without sitting waitForHoverDomChange /
    HOVER_MUTATION_TIMEOUT_MS (3000). Chrome 151 mouseenter can land after
    that window; discard already keeps a later no-op scroll at (0, 0) as
    Outcome: no-change. Hover stays a one-liner. HOVER_MOUSE_ACK_TIMEOUT_MS
    stays 250. #286 honest gate and #285 leftover PDF click --js hold.

Open issue dogfood (#282)

  • Leftover perceive on a Chrome PDF plugin (chrome-cdp-ex.pdf-viewer.v1)
    is not a valid AX settle shape. No-op press Escape / Arrow* stay
    Outcome: no-change / Verdict: continue instead of claiming
    "Observed page change after action" from the same empty-AX stub.
    Identical stub vs stub is not evidence of a plugin page turn.
    #257 leftover-cards + Escape and #279 leftover-cards + mutating
    click --js are unchanged.

Open issue dogfood (#279)

  • Leftover 0-card perceive --cards / --role feed dumps are not a valid
    settle shape for a mutating click. Action settle recaptures a default AX
    baseline so click --js that changes live text reports Outcome: changed,
    not no-change / "No visible AX tree change" while the handler ran.
    #257 leftover-cards + Escape stays expected no-change.

Open issue dogfood (#270, #271, #272)

  • Password-like fill / type values are redacted in every record-actions
    field, including target.dispatchText and effect samples. commandArgs
    stay <redacted> and the step stays replayable: false.
  • cascade winner / editTarget is the declaration that produces
    computedValue. An injected !important rule beats a non-important inline
    style instead of naming the losing inline as the edit target.
  • replay of an incomplete fill (needsInput: ["text"] or no text
    argument) skips or fails closed with missing field text. It does not
    guess "" or mutate the live input. Password fills that are
    replayable: false stay skipped.

Open issue dogfood (#266, #267)

  • Realistic click / clickxy overlap Chrome 151's mouse CDP acks instead of
    serializing on a 250ms compositor-ack swallow, then fail closed when a
    capture-phase probe on the target document sees no mousedown/click
    events — including when the probe cannot be installed. Framed @​fN:M clicks
    probe the iframe document (or ignore a top-level empty seen) so #261 does
    not fail-close a working iframe handler. JSON receipts go through
    runActionWithFeedback; CLI Kind: no-input-events Next is
    cdp jsclick <prefix> <sel>. jsclick / click --js still run
    HTMLElement.click() as a separate command.
  • restore of a checkpoint --unsafe-full artifact writes the captured cookie
    values. It no longer re-redacts them to the literal sentinel <redacted>.
    Default redacted checkpoints still skip cookie restore.

Open issue dogfood (#259)

  • Leftover perceive --frame @​fN dumps are not reused as top-level action
    settle-diffs. After a same-origin iframe dump, top-level fill / select /
    upload / click settle the page AX tree and report Outcome: changed when
    the control actually changed, instead of no-change / overlay against the
    leftover iframe. Frame-local @​fN:M actions still settle inside that frame.
    #257 leftover --cards reset is unchanged.

Open issue dogfood (#255, #256, #257)

  • Leftover perceive --cards, perceive -s, and default perceive --format json on a
    Chrome PDF plugin emit chrome-cdp-ex.pdf-viewer.v1 with Next
    cdp eval <prefix> "document.contentType". They no longer dump empty cards,
    an untitled empty tree, or Next:click @​ref. Default perceive / --qa /
    --summary stay pdf-viewer.v1.
  • fullshot on a Chrome PDF plugin fail-fasts as pdf-viewer.v1 instead of hanging
    ~30s, exiting 0 with a captureScreenshot-timeout "saved" fallback, and poisoning
    later shot / elshot on that tab. Viewport-sized HTML fullshot stays the
    #252 fast path.
  • perceive --cards dumps are not reused as action settle-diffs. After a 0-card
    page, no-op press Escape / dead clickxy / unfocused type stay
    Outcome: no-change and do not recommend --cards. Real-feed --cards still
    returns cards.v1. Default perceive then Escape stays no-change.

Open issue dogfood (#250, #251, #252, #253)

  • perceive --qa / perceive --summary and summary on a Chrome PDF plugin emit
    chrome-cdp-ex.pdf-viewer.v1 instead of untitled/indeterminate QA or a fake HTML
    census. Next is cdp eval <prefix> "document.contentType", never report /
    perceive / text or literal <target>. HTML QA summary stay pass/populated.
  • cascade on a Chrome PDF plugin uses the same PDF gate as styles / html /
    snap: pdf-viewer.v1, no embedder BODY computed styles. HTML cascade,
    including the #231 winning-rule [overridden] marker, is unchanged.
  • fullshot of a viewport-sized page uses the working viewport capture path
    instead of captureBeyondViewport + clip. A full-page clip timeout fail-closes
    without claiming Page.captureScreenshot is unavailable and without skipping
    later shot / elshot viewport captures. #223 diff-shot stays fail-closed.
  • Realistic click bounds mouse compositor-ack like hover so press/release stay
    a click, not a multi-second stall. example.com Learn more navigates again;
    click --js / jsclick still work. A true no-nav still fail-closes.

Open issue dogfood (#245, #246, #247, #248)

  • visual-check / responsive-audit on a Chrome PDF plugin emit chrome-cdp-ex.pdf-viewer.v1
    immediately instead of waiting through screenshot timeouts. Next is
    cdp eval <prefix> "document.contentType", not shot / perceive. Screenshot
    timeout paths restore the previous viewport and exit non-zero.
  • snap / snap --full on a Chrome PDF plugin emit pdf-viewer.v1 instead of an
    empty AX tree plus a perceive hint.
  • styles on a Chrome PDF plugin emit pdf-viewer.v1 instead of dumping the
    chrome-extension embedder BODY/HTML computed styles. Selector misses interpolate
    the target prefix instead of literal <target>.
  • fill re-reads the live control after typing. If .value / textContent stay
    empty (controlled textarea), it retries the native setter, then fails closed:
    no Filled line, Action failure: fill-no-change, not Outcome: changed.

Open issue dogfood (#241, #242, #243)

  • qa on a Chrome PDF plugin emits chrome-cdp-ex.pdf-viewer.v1 instead of
    Verdict: pass / Next:perceive. Next is cdp eval <prefix> "document.contentType".
  • html / html --auto on a Chrome PDF plugin emit pdf-viewer.v1 and do not
    return the empty chrome-extension embedder shell as successful HTML. Selector
    misses interpolate the target prefix instead of literal <target>.
  • cookiedel of a dotted-domain cookie (domain=.example.com) deletes with the
    cookie's domain/path (not URL-only) and re-reads the jar. If the cookie remains,
    the command exits non-zero and does not print Cookie deleted.

Open issue dogfood (#237, #238, #239)

  • responsive-audit / visual-check restore the tab's original viewport after the
    last --viewport, including when a screenshot times out (same contract as #210 / qa).
  • click --qa on a Chrome PDF plugin emits chrome-cdp-ex.pdf-viewer.v1 instead of
    QA pass / populated / changed. Next is cdp eval <prefix> "document.contentType".
  • PDF-plugin action receipts (click, viewport, selector misses) interpolate the
    target prefix in that eval Next. Misses no longer recommend perceive.

Open issue dogfood (#234, #235)

  • click --qa compact Page/URL and JSON summary.page use the post-navigation
    identity (same as the action receipt / pageHealth.evidence), not the pre-nav
    snapshot. A Learn more click that lands on iana.org no longer labels example.com.
  • report --qa and report on a Chrome PDF plugin emit chrome-cdp-ex.pdf-viewer.v1
    and Next:cdp eval <prefix> "document.contentType", matching perceive /
    text --auto. They no longer claim pass/populated or recommend perceive/click @​ref.

#217 residual after #218

  • hover bounds Input.dispatchMouseEvent (mouseMoved) renderer-ack to 250ms
    and treats that timeout as success. Live Chrome 151 withholds the ack for ~5s
    on a static page; the event is already forwarded, so hover must not wait it out.

Open issue dogfood (#210, #211, #212, #213, #214, #215, #216, #217)

  • qa restores the tab's original viewport after desktop/mobile emulation,
    including when a screenshot times out.
  • First no-baseline no-op press is Outcome: no-change / continue, not a
    tree dump labeled changed.
  • Missing select option, non-select target, and missing selector are
    Kind: usage / cdp help select (no ReferenceError: value is not defined).
  • upload of a missing path fails closed and does not plant a 0-byte ghost file.
  • Invalid/zero wait duration is Kind: usage / cdp help wait, not doctor or status.
  • Unknown tab-group name is Kind: usage / cdp tab-group list, not doctor.
  • cookiedel of a missing cookie exits non-zero and does not claim deletion.
  • hover @​ref reads the current rect without the click scroll-settle loop.

#183 / #190 residuals after #193

  • target --url … --exact with zero matches classifies as target-resolution
    and recovers with cdp list, not unknown/doctor. Ambiguous matches stay on
    the existing pages matched path.
  • Non-document GitHub 404s (issue agent_tasks, hovercards, and the same class
    of UI chrome) are not blocking network-failure when the document itself is
    not a 404. Compact nav size is unchanged.

Open issue dogfood (#181#191)

  • Resolve use --name aliases case-insensitively, strip @, and match stored
    target prefixes against live pages. Missing aliases recover with cdp list
    instead of doctor.
  • list / open JSON next-steps prefer text --auto / --cards over starring
    a tab and dumping perceive -C -d 8.
  • Target no-match / ambiguous prefix / unknown flags recover with list or
    cdp help <command>, not doctor/status.
  • click @​ref bounds Runtime.callFunctionOn to 2s with a no-scroll fallback;
    --js works after the selector; unknown click flags fail closed.
  • report --qa reads live page title/url; text --compact omits evidence;
    default JSON is compact (--all for the large dump).
  • Chrome PDF viewer pages return an honest receipt instead of empty untitled
    perceive / unknown text errors.
  • help [command] prints a topic; stop sends protocol args: [] and exits
    non-zero on failure; blur no longer suggests back.
  • Installed skills ship bin/chrome-cdp; same packageVersion ignores
    scriptPath-only daemon mismatches.
  • nav defaults to compact page observation (--perceive opt-in) and ignores
    Copilot agent-sessions 404s as blocking network failures.
  • perceive --cards after scroll reports unchanged when the card window did
    not replace; waitForEvent fails fast on websocket close.

Compact feed perception

  • Add perceive --cards (alias --role feed) for virtualized timelines. Returns
    bounded chrome-cdp-ex.cards.v1 cards with ref/url/handle/truncated text and
    optional engagement crumbs, default cap 12 (--last N up to 20), and a
    virtualization notice when fewer articles are in the AX tree than the
    viewport height suggests (#156).

Open onboarding

  • Default open no longer dumps a full perceive (11–29 KB). It returns
    Opened new tab: PREFIX url plus Next: cdp perceive PREFIX -C -d 8.
    Pass --perceive to opt into the previous AX dump. Attach waiting is
    fail-fast (5s). The "Allow debugging?" banner is delayed until about 1s
    or the third failed daemon-socket connect so normal daemon boot does not
    look like a permission prompt. Use --attach-timeout-ms 60000 when
    permission may still be pending; --attach-timeout-ms 0 still returns the
    target handoff without waiting. Catalog feedbackPolicy is report-only
    to match the compact default (#160).

Table collection

  • Replace the unbounded table claim with bounded observation, completeness,
    explicit --collect virtual collection, and private --continue tokens.
    Observation previews at most 20 inline rows and 8,192/16,384 UTF-8 bytes.
    Collection requires an explicit scroll container, stable identity, and MCP
    confirm: true; standalone loadall does not preserve recycled rows (#151).

Setup

  • setup.mjs --for hermes --write copies the skill into
    ~/.hermes/skills/chrome-cdp-ex (or $HERMES_HOME/skills). Print-only
    --for hermes now prints the resolved destination instead of
    <hermes-skills-dir>. doctor treats Hermes, Claude, and Codex skill
    paths as first-class installs (#154).

Agent reliability

  • When multiple tabs are open, doctor Proven / next probe is cdp list rather than a starred or first-daemon perceive. Leftover golden-path examples use <target-from-list> (sample after list), not the starred tab. Skip-links (href #, Skip to, 跳至, keyboard / 鍵盤快速鍵), including zh-TW skip buttons whose accessible name / aria-label matches 跳至, get late @​refs; article/feed/listitem/status nodes get @​1 (#163).
  • Focused search/combobox typeahead listboxes are omitted from default perceive; use Escape, -s main, or --keep-typeahead. Scroll reports the largest overflow scrollport, not only documentElement (#164).
  • Dead CDP now fails fast with a same-profile relaunch receipt. list / doctor / attach no longer wait on a WebSocket fallback after connection refused or HTTP timeout. Remembered existing Chrome profiles relaunch with --remote-debugging-port and --user-data-dir (no disposable rm -rf). When CDP_PORT is set and the profile is unknown, doctor prefers chrome://inspect over a blank spawn-debug-browser even on Linux/no DISPLAY. Profile discovery uses reviewed Browser.getBrowserCommandLine (#155).
  • Default fill --format json to a compact chrome-cdp-ex.fill.v1 receipt
    (value, changed, navigation, typeahead) instead of the full action
    envelope. Pass --full / --unsafe-full for chrome-cdp-ex.action.v1.
    perceive --since-action after a no-navigation typeahead fill summarizes as
    textbox value set; N suggestion links, including when the header is
    Focused: <input> rather than an AX textbox / searchbox / combobox.
    Bare --since-action reuses the last perceive snapshot shape (so
    perceive -i then fill does not reroot against a full tree) and keeps
    typeahead so the one-liner actually prints (#162).
  • perceive -x no longer empties Mintlify-style <main> wrappers. Help documents
    text --auto and -x; SKILL.md and recipes.md add a "Read this page"
    path using text --auto, eval, and call (#161).
  • Reject unknown perceive flags with compact-flag help and a non-zero exit
    instead of silently dumping the full page (#158).
  • Pending CDP requests now fail on socket close / Inspector.detached instead of
    aging into Timeout: Page.navigate. A navigation load waiter is cancelled when
    Page.navigate throws (#144).
  • Doctor no longer blocks a live CDP session just because PATH node is v20.
    It discovers Hermes / fnm / nvm Node 22 binaries, prints the exact rerun
    command, and bin/chrome-cdp re-execs that binary (#157).
  • Preserve ambiguous completion when a side-effect-capable daemon request loses
    its response. CLI remains non-zero and MCP remains isError: true, while the
    error now reports completion: "unknown", sideEffectMayHaveOccurred: true,
    retrySafe: false, bounded transport diagnostics, and a verify-before-retry
    perception command. The client never redispatches the action (#150).
  • Preserve failed JSON Action Results while returning a non-zero CLI status and
    MCP isError: true when dispatch.ok is false. Nested replay/repeat steps now
    fail fast on the same semantic result; dispatched no-change, attention,
    and post-dispatch observation timeouts retain their existing transport-success
    semantics (#143).

Package

  • Asset: pi-chrome-cdp-2.16.0.tgz
  • SHA-256: 0459fdc15a7fa6163869daa1d584ebacabd61c11997cf09e7b3d2c7a72c645c9
  • Includes cross-host manifests, validation scripts, Codex Killer Path evidence, demo media, CLI shim, setup script, and skills runtime.