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 → shortdoctor/listQuick Start.
The ten-row lab grid moved todocs/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-1722c525d4three-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 atdoctor.
perf: faster document nav wait (#347)
- Successful
navstill lands on the destination whenreadyStateis
complete. It returns when the dest URL is committed and the document is
complete, without also waitingPage.loadEventFiredplus the leftover
150 ms action network-quiet floor after a cached document GET. Same
one-stepnavcommand; 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 toptext 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 reachesscrollY ≈ scrollMax.--compactis no longer a text
no-op: it prints metrics only (scrollY: 5295 / 5295 max (at-bottom: yes),
41 chars).--qa/--summarystay 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
navtext 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.--compactis no
longer a text no-op: it prints one line (URL title, 36 chars).
--qa/--summarystay the existing QA summary.--perceivestill
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 aftermouseMovedraces CSS
:hover(HF permalinkmd:opacity-0/ group-hover). Confirmevalis
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/groupHoverfrom a
cheap computed-style snapshot, not Accessibility.getFullAXTree.
Compositor-ack swallow stays 250 ms.evalrawmouseMoved 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,pressprobes 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
--submitflag. Compact receipts stay skinny.
fix: sequential batch fill report-only applies live (#337)
- Sequential
batch fill | press Enterstill skips mid-pipe leftover AX
and pending/api/quicksearch. #336 setbatchNextCommandthen returned
handleCommand(...)from atry/finallythat cleared lookahead as soon as
the Promise was created. Fill runs after the first daemonawait, so it
still settle-diffed. Lookahead now stays until that fill handler reads it.
Standalone fill still settle-diffs. No--submitflag.
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/quicksearchare not the success signal. Standalone fill still
settle-diffs. No--submit/--skip-settleflag. - Search-submit
press Enterwaits for the listing link after that fill,
thenjsclicks 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 --autoon 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
emptychrome-cdp-ex.pdf-viewer.v1stub. Paid landmark:AI4AI at Test-Timeonhttps://arxiv.org/pdf/2608.12307.perceive/html/qaand leftover-press settle stay
pdf-viewer.v1. Identical stub vs stub is still not a page change.
Plaintextwithout--autostill fail-closes as the stub.
feat: named click scrolls off-screen text into view (#332)
- Named
click/jsclickstill finds a control by accessible name in one
step with a skinny URL receipt. A unique off-screen hit now reuses the
existing CSS /@refjsclickscrollIntoView({ block: 'center', inline: 'center' })thenel.click(), soclick "Browse 1M+ applications"
from scrollY 0 lands on/spaceswithout a priorscroll downloop. - 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. Mouseclick@ref/ CSS is unchanged.
feat: submit search to results, not typeahead first hit (#328)
press Enterwith 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=bertrather than the first typeahead repo. A fail-closed
realistic mouse click still counts if the listing URL already loaded;
otherwisepressuses the existingjsclickpath. It does not fall
through to Enter.perceive -C -d 8Visible controls rank that listing link ahead of
typeahead repo hits (before the collector cap), with a stable
a[href="/models?search=…"]selector forclick.- 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/jsclickaccept an in-viewport accessible name (for example
"Browse 2M+ models"). That path usesHTMLElement.click()in one step
with a skinny URL receipt, so the agent does not needperceive -C -d 8
then a failed mouseclick @refthenjsclick.- 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 withno-input-eventsand
Nextjsclick. Leftover settle-diff for those forms is unchanged.
feat: scroll nested overflow to top/bottom (#326)
scroll to topandscroll to bottomstill use the existingscroll
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 / 0asat-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-bottomorat-top. Short of the container edge is a
failed action. Relativescroll down Nleftover settle-diff is
unchanged.
feat: scroll to top/bottom as first-class command (#323)
scroll to topandscroll to bottomare first-class window-document
commands. The receipt reportsscrollY,scrollMax, andat-top/
at-bottomwithout reprinting the AX tree. Relativescroll 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 belowscrollMax - 2, or still above top tolerance), not a success
headline withat-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 growNext: perceive -C -d 8.
Relativescroll down Nleftover settle-diff is unchanged.
Open issue dogfood (#320)
- Leftover golden-path
perceive -C -d 8thenscrollstill treats unchanged
identities as honestOutcome: no-change. Already-at-bottom leftover-ax-scroll
receipts whose Next is alreadyperceive -C -d 8no longer reprint
scroll: dispatched via scroll/Target: down.Scrolled by … Position: …
already states the action and the honest no-move.Outcome: no-change,
Verdictcontinue, Settle ms, and Next-C -d 8stay. A Visible-control
cap-swap staysOutcome: changedwith 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
+++ Addedsigned-commit /timeGMT selector dump, no relative-time /
GMT named samples, shared commit title not on both sample sides,#297
compact headline,#295rect-chrome no-change,#293leftover N>0
--cards, leftover-C -d 8then mutatingclick --js,#285PDF
Next, and#286/#291hover honest-gate hold.
HOVER_MOUSE_ACK_TIMEOUT_MSstays 250.
Open issue dogfood (#318)
- Leftover golden-path
perceive -C -d 8thenscrollstill treats unchanged
identities as honestOutcome: no-change. Already-at-bottom leftover-ax-scroll
receipts whose Next is alreadyperceive -C -d 8no longer reprint
(no changes detected in AX tree).Outcome: no-changealready states that.
Position:on the action line stays. Verdictcontinue, Settle ms, and Next
-C -d 8stay. A Visible-control cap-swap staysOutcome: changedwith
compact unique named samples and still prints its body and Page / Viewport.
Standalone leftoverperceive -C -d 8dumps 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
+++ Addedsigned-commit /timeGMT selector dump, no relative-time /
GMT named samples, shared commit title not on both sample sides,#297
compact headline,#295rect-chrome no-change,#293leftover N>0
--cards, leftover-C -d 8then mutatingclick --js,#285PDF
Next, and#286/#291hover honest-gate hold.
HOVER_MOUSE_ACK_TIMEOUT_MSstays 250.
Open issue dogfood (#316)
- Leftover golden-path
perceive -C -d 8thenscrollstill treats unchanged
identities as honestOutcome: no-change. Already-at-bottom leftover-ax-scroll
receipts whose Next is alreadyperceive -C -d 8no longer reprint the
Page:/Viewport:identity header (Focused: noneincluded).
Position:on the action line already states scroll identity, and Next
perceive -C -d 8re-establishes page identity. Verdictcontinue,
(no changes detected in AX tree), and Next-C -d 8stay. A
Visible-control cap-swap staysOutcome: changedwith compact unique
named samples and still prints Page / Viewport. Standalone leftover
perceive -C -d 8dumps 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
+++ Addedsigned-commit /timeGMT selector dump, no relative-time /
GMT named samples, shared commit title not on both sample sides,#297
compact headline,#295rect-chrome no-change,#293leftover N>0
--cards, leftover-C -d 8then mutatingclick --js,#285PDF
Next, and#286/#291hover honest-gate hold.
HOVER_MOUSE_ACK_TIMEOUT_MSstays 250.
Open issue dogfood (#313)
- Leftover golden-path
perceive -C -d 8thenscrollstill treats unchanged
identities as honestOutcome: no-change. Already-at-bottom leftover-ax-scroll
receipts whose Next is alreadyperceive -C -d 8printOutcome: no-change
without the settle-shape reasonSettle shape was leftover golden-path AX; viewport rect chrome did not replace identities.The body already says
(no changes detected in AX tree). Verdictcontinueand Next-C -d 8
stay. A Visible-control cap-swap staysOutcome: changedwith compact unique
named samples. Generic non-leftover actions still print an Outcome reason.
Leftover--cards/pdf-viewer.v1no-change still print their settle-shape
Outcome reasons. Interactive census /Console: clean/ Coords clickxy
tutorial stay dropped on the action receipt; the leftoverperceive -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+++ Addedsigned-commit /timeGMT selector dump, no
relative-time / GMT named samples, shared commit title not on both sample
sides,#297compact headline,#295rect-chrome no-change,#293
leftover N>0--cards, leftover-C -d 8then mutatingclick --js,
#285PDF Next, and#286/#291hover honest-gate hold.
HOVER_MOUSE_ACK_TIMEOUT_MSstays 250.
Open issue dogfood (#311)
- Leftover golden-path
perceive -C -d 8thenscrollstill treats unchanged
identities as honestOutcome: no-change. Already-at-bottom leftover-ax-scroll
receipts whose Next is alreadyperceive -C -d 8no longer reprint
Recovery hint: AX identities unchanged; re-run perceive -C -d 8 instead of report.Outcome, Verdictcontinue, and Next already carry that handoff.
A Visible-control cap-swap staysOutcome: changedwith 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 8dump itself still prints those header lines. Named
samples, no Hint--since-action, no generic Recovery hint on leftover
changed, no+++ Addedsigned-commit /timeGMT selector dump, no
relative-time / GMT named samples, shared commit title not on both sample
sides,#297compact headline,#295rect-chrome no-change,#293
leftover N>0--cards, leftover-C -d 8then mutatingclick --js,
#285PDF Next, and#286/#291hover honest-gate hold.
HOVER_MOUSE_ACK_TIMEOUT_MSstays 250.
Open issue dogfood (#309)
- Leftover golden-path
perceive -C -d 8thenscrollstill treats a
Visible-control cap-swap asOutcome: changed. Honest leftover-ax-scroll
receipts whose Next is alreadyperceive -C -d 8no 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 8dump 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 /timeGMT selector dump, no relative-time / GMT named
samples, shared commit title not on both sample sides,#297compact
headline,#295rect-chrome no-change,#293leftover N>0--cards,
leftover-C -d 8then mutatingclick --js,#285PDF Next, and
#286/#291hover honest-gate hold.HOVER_MOUSE_ACK_TIMEOUT_MS
stays 250.
Open issue dogfood (#307)
- Leftover golden-path
perceive -C -d 8thenscrollstill treats a
Visible-control cap-swap asOutcome: 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
+++ Addedsigned-commit /timeGMT selector dump, no relative-time
/ GMT named samples,#297compact headline,#295rect-chrome
no-change,#293leftover N>0--cards, leftover-C -d 8then
mutatingclick --js,#285PDF Next, and#286/#291hover
honest-gate hold.HOVER_MOUSE_ACK_TIMEOUT_MSstays 250.
Open issue dogfood (#305)
- Leftover golden-path
perceive -C -d 8thenscrollstill treats a
Visible-control cap-swap asOutcome: 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+++ Addedsigned-commit
/timeGMT selector dump,#297compact headline,#295rect-chrome
no-change,#293leftover N>0--cards, leftover-C -d 8then
mutatingclick --js,#285PDF Next, and#286/#291hover
honest-gate hold.HOVER_MOUSE_ACK_TIMEOUT_MSstays 250.
Open issue dogfood (#303)
- Leftover golden-path
perceive -C -d 8thenscrollstill treats a
Visible-control cap-swap asOutcome: 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+++ Addedselector dump. A new file, heading, or link still
prints a structural diff. Named samples, no Hint--since-action, no
generic Recovery hint,#297compact headline,#295rect-chrome
no-change,#293leftover N>0--cards, leftover-C -d 8then mutating
click --js,#285PDF Next, and#286/#291hover honest-gate hold.
HOVER_MOUSE_ACK_TIMEOUT_MSstays 250.
Open issue dogfood (#301)
- Leftover golden-path
perceive -C -d 8thenscrollstill treats a
Visible-control cap-swap asOutcome: changed. Honest leftover-ax-scroll
changedreceipts no longer print the generic
Recovery hint: Continue from the observed action evidence.Outcome,
compact named samples, Verdictcontinue, and Nextperceive -C -d 8
already carry that handoff. Generic non-leftoverchangedactions still
print the hint. Named samples, no Hint--since-action,#297compact
headline,#295rect-chrome no-change,#293leftover N>0--cards,
leftover-C -d 8then mutatingclick --js,#285PDF Next, and
#286/#291hover honest-gate hold.HOVER_MOUSE_ACK_TIMEOUT_MS
stays 250.
Open issue dogfood (#299)
- Leftover golden-path
perceive -C -d 8thenscrollstill treats a
Visible-control cap-swap asOutcome: 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 8without Hint--since-action. A new file,
heading, or link still prints a structural diff.#297compact
headline,#295rect-chrome no-change,#293leftover N>0--cards,
leftover-C -d 8then mutatingclick --js,#285PDF Next, and
#286/#291hover honest-gate hold.HOVER_MOUSE_ACK_TIMEOUT_MS
stays 250.
Open issue dogfood (#297)
- Leftover golden-path
perceive -C -d 8thenscrollstill treats a
Visible-control cap-swap asOutcome: 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] Mainidentity is not a Removed+Added pair. A new file,
heading, or link still prints a structural diff. Next stays
perceive -C -d 8on this leftover scroll, including the honest cap-swap
changedcase, instead of a Hint-only handoff orreport/
record-actions.#295rect-chrome no-change,#293leftover N>0
--cards, leftover-C -d 8then mutatingclick --js,#285PDF
Next, and#286/#291hover honest-gate hold.HOVER_MOUSE_ACK_TIMEOUT_MS
stays 250.
Open issue dogfood (#295)
- Leftover golden-path
perceive -C -d 8is 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 stayOutcome: no-change/
continue with Nextperceive -C -d 8instead ofreport/
record-actions. A new file, heading, or link entering the leftover tree
is stillOutcome: changed.#293leftover N>0--cardsthen scroll
stays compactcards.v1. Leftover-C -d 8then mutatingclick --js
still reports live text.#285leftover PDFclick --jsand#286/#291
hover honest-gate hold.
Open issue dogfood (#293)
- Leftover
perceive --cards/--role feedwith a real feed window (N>0
cards) is the settle shape for the nextscroll. Recapture stays
cards.v1so timestamp chrome is not a fake AXOutcome: changed, and
an unchanged virtualized window isno-change/ continue with Next
perceive --cardsinstead ofreportorperceive -C -d 8. Card
identity ignores relative-time chrome in article AX names (· 2m),
including when the clock lives in the articlenameitself rather than
only child StaticText. A third article entering the leftover window is
stillOutcome: changedeven whenexpectedOutcomeis
cards-window-no-change. 0-card leftovers still
recapture default AX (#257/#279). Leftover feed--cardsthen
click --jsstill recaptures AX.#285leftover PDFclick --jsand
#286/#291hover honest-gate hold.
Open issue dogfood (#291)
hoverstill snapshots settle-shape AX before mouseMoved and recaptures
immediately. Sync hover that already shows a delta KEEPs that baseline.
Idle recapture now discards without sittingwaitForHoverDomChange/
HOVER_MUTATION_TIMEOUT_MS(3000). Chrome 151 mouseenter can land after
that window; discard already keeps a later no-opscrollat(0, 0)as
Outcome: no-change. Hover stays a one-liner.HOVER_MOUSE_ACK_TIMEOUT_MS
stays 250.#286honest gate and#285leftover PDFclick --jshold.
Open issue dogfood (#282)
- Leftover
perceiveon a Chrome PDF plugin (chrome-cdp-ex.pdf-viewer.v1)
is not a valid AX settle shape. No-oppress Escape/ Arrow* stay
Outcome: no-change/Verdict: continueinstead 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.
#257leftover-cards + Escape and#279leftover-cards + mutating
click --jsare unchanged.
Open issue dogfood (#279)
- Leftover 0-card
perceive --cards/--role feeddumps are not a valid
settle shape for a mutating click. Action settle recaptures a default AX
baseline soclick --jsthat changes live text reportsOutcome: changed,
notno-change/ "No visible AX tree change" while the handler ran.
#257leftover-cards + Escape stays expected no-change.
Open issue dogfood (#270, #271, #272)
- Password-like
fill/typevalues are redacted in everyrecord-actions
field, includingtarget.dispatchTextand effect samples.commandArgs
stay<redacted>and the step staysreplayable: false. cascadewinner/editTargetis the declaration that produces
computedValue. An injected!importantrule beats a non-important inline
style instead of naming the losing inline as the edit target.replayof an incompletefill(needsInput: ["text"]or no text
argument) skips or fails closed with missing fieldtext. It does not
guess""or mutate the live input. Password fills that are
replayable: falsestay skipped.
Open issue dogfood (#266, #267)
- Realistic
click/clickxyoverlap 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 nomousedown/click
events — including when the probe cannot be installed. Framed@fN:Mclicks
probe the iframe document (or ignore a top-level emptyseen) so #261 does
not fail-close a working iframe handler. JSON receipts go through
runActionWithFeedback; CLIKind: no-input-eventsNext is
cdp jsclick <prefix> <sel>.jsclick/click --jsstill run
HTMLElement.click()as a separate command. restoreof acheckpoint --unsafe-fullartifact 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 @fNdumps are not reused as top-level action
settle-diffs. After a same-origin iframe dump, top-levelfill/select/
upload/clicksettle the page AX tree and reportOutcome: changedwhen
the control actually changed, instead ofno-change/ overlay against the
leftover iframe. Frame-local@fN:Mactions still settle inside that frame.
#257leftover--cardsreset is unchanged.
Open issue dogfood (#255, #256, #257)
- Leftover
perceive --cards,perceive -s, and defaultperceive --format jsonon a
Chrome PDF plugin emitchrome-cdp-ex.pdf-viewer.v1with Next
cdp eval <prefix> "document.contentType". They no longer dump empty cards,
an untitled empty tree, or Next:click @ref. Default perceive /--qa/
--summarystay pdf-viewer.v1. fullshoton a Chrome PDF plugin fail-fasts aspdf-viewer.v1instead of hanging
~30s, exiting 0 with a captureScreenshot-timeout "saved" fallback, and poisoning
latershot/elshoton that tab. Viewport-sized HTMLfullshotstays the
#252 fast path.perceive --cardsdumps are not reused as action settle-diffs. After a 0-card
page, no-oppress Escape/ deadclickxy/ unfocusedtypestay
Outcome: no-changeand do not recommend--cards. Real-feed--cardsstill
returnscards.v1. Default perceive then Escape stays no-change.
Open issue dogfood (#250, #251, #252, #253)
perceive --qa/perceive --summaryandsummaryon a Chrome PDF plugin emit
chrome-cdp-ex.pdf-viewer.v1instead of untitled/indeterminate QA or a fake HTML
census. Next iscdp eval <prefix> "document.contentType", neverreport/
perceive/textor literal<target>. HTML QA summary stay pass/populated.cascadeon a Chrome PDF plugin uses the same PDF gate asstyles/html/
snap:pdf-viewer.v1, no embedder BODY computed styles. HTML cascade,
including the #231 winning-rule[overridden]marker, is unchanged.fullshotof a viewport-sized page uses the working viewport capture path
instead ofcaptureBeyondViewport+ clip. A full-page clip timeout fail-closes
without claimingPage.captureScreenshotis unavailable and without skipping
latershot/elshotviewport captures.#223diff-shotstays fail-closed.- Realistic
clickbounds mouse compositor-ack likehoverso press/release stay
a click, not a multi-second stall. example.com Learn more navigates again;
click --js/jsclickstill work. A true no-nav still fail-closes.
Open issue dogfood (#245, #246, #247, #248)
visual-check/responsive-auditon a Chrome PDF plugin emitchrome-cdp-ex.pdf-viewer.v1
immediately instead of waiting through screenshot timeouts. Next is
cdp eval <prefix> "document.contentType", notshot/perceive. Screenshot
timeout paths restore the previous viewport and exit non-zero.snap/snap --fullon a Chrome PDF plugin emitpdf-viewer.v1instead of an
empty AX tree plus a perceive hint.styleson a Chrome PDF plugin emitpdf-viewer.v1instead of dumping the
chrome-extension embedder BODY/HTML computed styles. Selector misses interpolate
the target prefix instead of literal<target>.fillre-reads the live control after typing. If.value/ textContent stay
empty (controlled textarea), it retries the native setter, then fails closed:
noFilledline,Action failure: fill-no-change, notOutcome: changed.
Open issue dogfood (#241, #242, #243)
qaon a Chrome PDF plugin emitschrome-cdp-ex.pdf-viewer.v1instead of
Verdict: pass/ Next:perceive. Next iscdp eval <prefix> "document.contentType".html/html --autoon a Chrome PDF plugin emitpdf-viewer.v1and do not
return the empty chrome-extension embedder shell as successful HTML. Selector
misses interpolate the target prefix instead of literal<target>.cookiedelof 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 printCookie deleted.
Open issue dogfood (#237, #238, #239)
responsive-audit/visual-checkrestore the tab's original viewport after the
last--viewport, including when a screenshot times out (same contract as #210 /qa).click --qaon a Chrome PDF plugin emitschrome-cdp-ex.pdf-viewer.v1instead of
QA pass / populated / changed. Next iscdp eval <prefix> "document.contentType".- PDF-plugin action receipts (
click,viewport, selector misses) interpolate the
target prefix in that eval Next. Misses no longer recommendperceive.
Open issue dogfood (#234, #235)
click --qacompact Page/URL and JSONsummary.pageuse 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 --qaandreporton a Chrome PDF plugin emitchrome-cdp-ex.pdf-viewer.v1
and Next:cdp eval <prefix> "document.contentType", matchingperceive/
text --auto. They no longer claim pass/populated or recommend perceive/click @ref.
#217 residual after #218
hoverboundsInput.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)
qarestores the tab's original viewport after desktop/mobile emulation,
including when a screenshot times out.- First no-baseline no-op
pressisOutcome: no-change/ continue, not a
tree dump labeledchanged. - Missing
selectoption, non-select target, and missing selector are
Kind: usage/cdp help select(noReferenceError: value is not defined). uploadof a missing path fails closed and does not plant a 0-byte ghost file.- Invalid/zero
waitduration isKind: usage/cdp help wait, not doctor or status. - Unknown
tab-groupname isKind: usage/cdp tab-group list, not doctor. cookiedelof a missing cookie exits non-zero and does not claim deletion.hover @refreads the current rect without the click scroll-settle loop.
#183 / #190 residuals after #193
target --url … --exactwith zero matches classifies astarget-resolution
and recovers withcdp list, not unknown/doctor. Ambiguous matches stay on
the existingpages matchedpath.- Non-document GitHub 404s (issue
agent_tasks, hovercards, and the same class
of UI chrome) are not blockingnetwork-failurewhen the document itself is
not a 404. Compact nav size is unchanged.
Open issue dogfood (#181–#191)
- Resolve
use --namealiases case-insensitively, strip@, and match stored
target prefixes against live pages. Missing aliases recover withcdp list
instead of doctor. list/openJSON next-steps prefertext --auto/--cardsover starring
a tab and dumpingperceive -C -d 8.- Target no-match / ambiguous prefix / unknown flags recover with list or
cdp help <command>, not doctor/status. click @refboundsRuntime.callFunctionOnto 2s with a no-scroll fallback;
--jsworks after the selector; unknown click flags fail closed.report --qareads live page title/url; text--compactomits evidence;
default JSON is compact (--allfor the large dump).- Chrome PDF viewer pages return an honest receipt instead of empty untitled
perceive / unknown text errors. help [command]prints a topic;stopsends protocolargs: []and exits
non-zero on failure;blurno longer suggestsback.- Installed skills ship
bin/chrome-cdp; samepackageVersionignores
scriptPath-only daemon mismatches. navdefaults to compact page observation (--perceiveopt-in) and ignores
Copilotagent-sessions404s as blocking network failures.perceive --cardsafter 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
boundedchrome-cdp-ex.cards.v1cards with ref/url/handle/truncated text and
optional engagement crumbs, default cap 12 (--last Nup to 20), and a
virtualization notice when fewer articles are in the AX tree than the
viewport height suggests (#156).
Open onboarding
- Default
openno longer dumps a full perceive (11–29 KB). It returns
Opened new tab: PREFIX urlplusNext: cdp perceive PREFIX -C -d 8.
Pass--perceiveto 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 60000when
permission may still be pending;--attach-timeout-ms 0still returns the
target handoff without waiting. CatalogfeedbackPolicyisreport-only
to match the compact default (#160).
Table collection
- Replace the unbounded
tableclaim with bounded observation, completeness,
explicit--collectvirtual collection, and private--continuetokens.
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; standaloneloadalldoes not preserve recycled rows (#151).
Setup
setup.mjs --for hermes --writecopies the skill into
~/.hermes/skills/chrome-cdp-ex(or$HERMES_HOME/skills). Print-only
--for hermesnow prints the resolved destination instead of
<hermes-skills-dir>.doctortreats Hermes, Claude, and Codex skill
paths as first-class installs (#154).
Agent reliability
- When multiple tabs are open, doctor Proven / next probe is
cdp listrather 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-labelmatches跳至, 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 onlydocumentElement(#164). - Dead CDP now fails fast with a same-profile relaunch receipt.
list/doctor/attachno longer wait on a WebSocket fallback after connection refused or HTTP timeout. Remembered existing Chrome profiles relaunch with--remote-debugging-portand--user-data-dir(no disposablerm -rf). WhenCDP_PORTis set and the profile is unknown, doctor preferschrome://inspectover a blankspawn-debug-browsereven on Linux/no DISPLAY. Profile discovery uses reviewedBrowser.getBrowserCommandLine(#155). - Default
fill --format jsonto a compactchrome-cdp-ex.fill.v1receipt
(value,changed,navigation,typeahead) instead of the full action
envelope. Pass--full/--unsafe-fullforchrome-cdp-ex.action.v1.
perceive --since-actionafter a no-navigation typeahead fill summarizes as
textbox value set; N suggestion links, including when the header is
Focused: <input>rather than an AXtextbox/searchbox/combobox.
Bare--since-actionreuses the last perceive snapshot shape (so
perceive -ithen fill does not reroot against a full tree) and keeps
typeahead so the one-liner actually prints (#162). perceive -xno longer empties Mintlify-style<main>wrappers. Help documents
text --autoand-x; SKILL.md andrecipes.mdadd a "Read this page"
path usingtext --auto,eval, andcall(#161).- Reject unknown
perceiveflags 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.detachedinstead of
aging intoTimeout: Page.navigate. A navigation load waiter is cancelled when
Page.navigatethrows (#144). - Doctor no longer blocks a live CDP session just because PATH
nodeis v20.
It discovers Hermes / fnm / nvm Node 22 binaries, prints the exact rerun
command, andbin/chrome-cdpre-execs that binary (#157). - Preserve ambiguous completion when a side-effect-capable daemon request loses
its response. CLI remains non-zero and MCP remainsisError: true, while the
error now reportscompletion: "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
MCPisError: truewhendispatch.okis false. Nested replay/repeat steps now
fail fast on the same semantic result; dispatchedno-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.