66 KiB
Changelog
1.7.19 (2026-05-14)
Major hotfix + simplification batch. Extension bumped to 1.0.14. Node floor lowered to v20 so the long tail of Node v20–v21.6 users no longer crashes at module load. opencli browser user surface replaces required-flag --session <name> with a <session> positional. page.evaluate(fn, ...args) adds a type-safe alternative to the implicit auto-IIFE string form. Twitter cursor pagination no longer silently caps at ~500 items.
⚠ BREAKING CHANGES
- browser — replace the
--session <name>flag with a<session>positional argument that immediately followsbrowser.opencli browser work click 12instead ofopencli browser --session work click 12;opencli browser work bindinstead ofopencli browser bind --session work. Required-flag semantics are now encoded structurally as a positional, matching the Docker/git convention for required operation-target identifiers. The internal--sessionflag is preserved for the daemon protocol and for directprogram.parseAsynccallers but is no longer part of the user-facing surface. (#1505) - env — remove
OPENCLI_KEEP_TAB. The flag was a debugging shortcut, not a config dimension:--keep-tab true|falseon the command line is the single source of truth, and adaptersiteSession: 'persistent'already pins persistent site tabs as a hard constraint. Removing the env eliminates a globally-leaking process state that overrode every browser command in the shell. (#1509) - extension — remove the internal
surface\\0sessioncommand-session backdoor. Browser Bridge commands now route only through structuredsession+surfacefields; lease-key strings remain an extension-internal registry detail. (#1510)
Features
- browser — add
page.evaluate(fn, ...args)for type-safe browser-context evaluation with JSON-serialized arguments. String evaluation remains supported, but new adapter code should use function form to avoid implicitwrapForEvalauto-IIFE magic. (#1508) - twitter — default
tweetscommand to the logged-in user whenuseris omitted, and fix the sibling envelope-unwrap silent bug. (#1531) - zhihu — add
answer-detailto fetch a single answer's full content. (#1528) - zhihu — paginate question answers and recommendations. (#1517)
- reddit/read —
--expand-morevia/api/morechildren+ 7-kind typed errors. (#1492) - reddit — add
whoami,home,subreddit-inforead commands. (#1491) - ctrip — add
hotel-search+ flight browser-mode commands. (#1489)
Bug Fixes
- browser —
page.evaluate()/evaluateInFrame()now return the user JavaScript value directly. Browser Bridgeexecpreviously routed through a sharedpageScopedResulthelper that spread / wrapped the lease'ssessioninto the resultdata, contaminating arbitrary user returns: array / primitive returns came back as{ session, data }envelopes, and plain-object returns had an extrasessionkey injected (overwriting any usersessionfield).google searchandxiaohongshu searchwere the visible repro — Chrome rendered results correctly but adapters extracted an empty array. Fixed in extension 1.0.14 by revertingpageScopedResultto its pre-1461 form ({ id, ok, data, page }); no client-side unwrap is needed. (#1518) - twitter — raise fixed cursor-pagination caps in
bookmarks/likes/tweets/timeline/bookmark-folder/list-tweets/search/following. The oldi < 5/i < 10literals and following'sMath.ceil(limit / 50) + 2formula imposed hidden result ceilings below--limit; the loop now treats the page count as a high runaway guard while--limitand cursor exhaustion control normal pagination. (#1532) - twitter — repair
list-add/list-tweets/lists/followingafter 2026-05 site changes. (#1503) - twitter — repair
searchandtweetsreadback. (#1512) - twitter — make reply submission robust. (#1511)
- google/search — wait for
#rso a h3before extracting, falling back to the existing fixed wait. On Chrome 148 + Linux Wayland the DOM can settle before SERP anchors are populated, making extraction return empty even with the envelope bug fixed. (#1518) - google/search — wrap evaluate return value in object to fix serialization. (#1523)
- google-scholar/search — wrap evaluate return to fix serialization. (#1525)
- xiaohongshu/search — extract initially visible cards before scrolling, then merge post-scroll rows by URL. Xiaohongshu's virtualized masonry layout can evict the initial cards from the DOM after scroll, so the previous always-scroll-then-extract flow could lose the top results. (#1518)
- xiaohongshu —
parseLikeshandles2.1w/1.5万/1.2kshortforms. (#1504) - xiaohongshu+rednote/search — fall back to href-based note cards when
section.note-itemclass is dropped. (#1507) - xueqiu —
kline/earnings-dateformat dates in Asia/Shanghai instead of UTC. (#1498) - download — clamp progress percentages. (#1520)
Internal
- runtime — lower the Node floor to
>=20.0.0. Three coupled changes: drop allutil.styleText()usage (added in Node v21.7.0 / v20.12.0; previously crashed v21.0–v21.6 at module load), downgradeundicifrom^8.0.2(engines>=22.19.0) to^6.25.0(engines>=18.17, retainsAgent/EnvHttpProxyAgent/fetch), and lowerMIN_SUPPORTED_NODE_MAJORfrom 21 to 20 so the startup guard matches the declaredengines.node. Smoke-tested on v20.0.0 / v21.2.0 / v22.22.2. The semantic markers ([OK]/[WARN]/[FAIL]/ℹ/⚠/✖) keep their meaning; ANSI colors were redundant for the primarily agent-facing CLI. (#1524) - extension 1.0.14 —
pageScopedResultno longer injectssessionintodata. The field had no consumers and contaminatedexecresults with arbitrary user-JS shapes; routing-relevant identity is already exposed viaResult.page. (#1518) - extension 1.0.13 — remove the internal command-session lease-key backdoor. (#1510)
- ci — drop
e2e-headedandadapter-testfrompull_requesttriggers (kept onpushto main / nightly /workflow_dispatch). PR-time CI now targets ~2 min wall-time. (#1521, #1522) - scripts — auto-refresh
dist/beforebuild-manifest. (#1490)
1.7.18 (2026-05-12)
Hotfix release for the 1.7.17 doctor regression: opencli doctor failed connectivity probe with Browser session is required because the doctor probe didn't pass a session to the new strict-session browser bridge. Also adds new adapters and adapter fixes that were ready immediately after 1.7.17.
Bug Fixes
- doctor — pass an internal
__doctor__browser session to the live connectivity probe soopencli doctorworks again under the explicit-session browser model introduced in 1.7.17. (#1485) - browser —
--session <name>is now declared as arequiredOptionso Commander itself rejects calls missing the flag before runtime, and the help line is marked(required)instead of being hidden underOptions:. (#1485) - doubao/ask — restore Assistant detection after the 2026-05 DOM refactor. (#1484)
- youtube — request
srv3format for caption URLs. (#1422)
Features
- rednote — add
rednote.comadapter mirroring xiaohongshu read commands. (#1475) - reddit — add
replycommand for replying to comments. (#1428)
1.7.17 (2026-05-12)
Extension bumped to 1.0.12 (workspace → session lease routing, drop handleSessions handler). Major simplification pass: browser/adapter session model rewrite, --workspace removed, doctor surface trimmed to its core job.
⚠ BREAKING CHANGES
- browser session model — replace the browser-facing
--workspacemodel with explicit--session <name>onopencli browser *. Browser commands now require a session name,browser bind/unbinduse--session, and bind no longer accepts--domain,--path-prefix, or--allow-navigate-bound. Browser primitives keep their session tab by design; the browser namespace no longer exposes--keep-tab. (#1461) - adapter site sessions — replace adapter metadata
browserSession: { reuse: 'site' }withsiteSession: 'persistent', and replace the user override--reuse <none|site>/OPENCLI_BROWSER_REUSEwith--site-session <ephemeral|persistent>. Persistent site sessions keep a stable site tab open without idle expiry. (#1462) - doctor — remove
--no-liveand--sessionsflags fromopencli doctor. Doctor always runs the live browser connectivity probe (that's its core job); session enumeration was never part of health diagnosis. The underlying'sessions'daemon protocol action and theBrowserSessionInfopublic type are removed as dead code. (#1470)
Features
- chatgpt —
askandsendnow accept local image paths and upload them through the composer before submitting the prompt. (#1476)
Internal
- extension 1.0.12 — drop
handleSessionsaction handler (no remaining consumers after doctor cleanup). - extension 1.0.11 — switch Browser Bridge lease routing from user-facing workspaces to explicit browser sessions.
1.7.16 (2026-05-11)
Extension bumped to 1.0.10 (rename adapter-owned tab group OpenCLI Automation → OpenCLI Adapter). Performance and stability sweep across browser-backed adapters; new external CLI integrations (tg-cli, discord-cli, wx-cli).
Features
- openreview — add
authorcommand for ID-explicit publication lookup. (#1365) - external — register
tg-cli,discord-cli, andwx-clias external CLI integrations. (#1458)
Bug Fixes
- xiaohongshu — fall back to base64 upload when CDP
DOM.setFileInputFilesreturnsNot allowedon creator center. (#1374) - chatgpt — switch to locale-stable send button selector so non-English UIs don't break send. (#1354)
Performance
- adapters — hoist cookie reads to
page.getCookiesacross Tier 1 (25 files), eliminating per-call CDP round trips. (#1450) - twitter — drop redundant
goto + waitin adapter steps; framework auto pre-navigates. (#1451) - twitter — enable
browserSession.reuse: 'site'on 17 read-only adapters so repeated reads share one tab. (#1454) - reddit — opt 13 browser-backed adapters into shared site-tab lease. (#1455)
- claude — replace fixed-sleep waits with selector-based readiness on streaming flows. (#1452)
- deepseek — replace fixed-sleep waits with selector-based readiness on streaming flows. (#1449)
- chatgpt — replace fixed-sleep waits with selector-based readiness (D3). (#1456)
Refactor
- browser — split interactive and automation windows so
opencli browser *and adapter-driven background commands no longer share one Chrome window; tab groups are isolated by role.
Internal
- extension 1.0.10 — rename the adapter-owned Chrome tab group from
OpenCLI AutomationtoOpenCLI Adapter. (#1457) - docs — list
tg-cli,discord-cli,wx-cliin External CLI README sections. (#1459)
1.7.15 (2026-05-10)
Extension bumped to 1.0.9 (Accessibility.enable allowlist + downloads permission + cross-origin frame target attach for AX). Major Browser Agent Runtime release: full Phase 0/1/2 alignment with vercel-labs/agent-browser model — CDP-primary input, AX snapshot/refs with stale recovery, semantic locators across all primitives, full form toolbelt (hover/focus/dblclick/check/uncheck/upload/drag/wait-download), annotated screenshots, and same-origin iframe AX routing. Cross-origin OOPIF AX is best-effort (Chrome extension API limitation).
⚠ BREAKING CHANGES
- browser lifecycle — replace
--focus/OPENCLI_WINDOW_FOCUSEDwith--window foreground|background/OPENCLI_WINDOW, and replace--live/OPENCLI_LIVEwith--keep-tab true|false/OPENCLI_KEEP_TAB.opencli browser *defaults to a foreground window and keeps its tab; browser-backed adapter commands default to a background automation window and release their tab unless the adapter uses site-level reuse.
Features
- help / browser —
opencli browser --help -f yaml|jsonnow emits a structured, agent-ready index of all browser leaf commands (including nestedtab,get, anddialogcommands), their positionals, command options, namespace options, and root global options. Individual browser commands also support structured help, backed by a shared Commander option/argument spec extractor. - help / built-in namespaces —
opencli daemon|plugin|adapter|profile --help -f yaml|jsonnow emit the same structured payload asbrowser. One agent call returns every leaf's positionals, options, descriptions, and global options — no per-leaf--helpfollow-ups needed. Original namespace descriptions are preserved throughapplyRootSubcommandSummaries()via a snapshot at namespace declaration time. - browser state — add opt-in AX snapshot refs via
browser state --source ax, including backend-node click resolution and role/name stale-ref recovery for the Phase 0 browser-agent runtime prototype. - browser state — AX snapshots now include same-origin iframe refs, and
browser state --compare-sourcesprints DOM-vs-AX observation metrics for the Phase 1 default-source decision without dumping page contents. - browser locators —
browser find,browser click, andbrowser get text|value|attributesnow accept semantic locator flags (--role,--name,--label,--text,--testid) so agents can act on common controls without a separate state-ref lookup. - browser locators — semantic locator flags now work across input/action primitives (
type,fill,select,hover,focus,dblclick,check,uncheck,upload) plus prefixed--from-*/--to-*locators fordrag. - browser actions — add
browser hover,browser focus, andbrowser dblclickprimitives backed by the same target resolver and CDP input path asbrowser click. - browser actions — add
browser checkandbrowser uncheckprimitives that ensure checkbox / radio / aria-checked controls reach the requested state instead of blindly toggling. - browser upload — add
browser upload <target> <file...>to attach local files toinput[type=file]targets through CDPDOM.setFileInputFiles, with local path validation and file-input verification. - browser actions — add
browser drag <source> <target>for CDP mouse drag sequences between two resolved element centers. - browser wait / extension 1.0.8 — add
browser wait download [pattern]backed by Chrome's downloads lifecycle API, so agents can wait for file downloads by filename/URL pattern and receive completed/failed download metadata. - browser state / extension 1.0.9 — AX snapshots can now route same-origin iframe refs through
frameId. Cross-origin OOPIF AX routing is best-effort because real Chrome extension smoke tests showchrome.debuggermay not expose attachable iframe targets to extensions. - browser screenshot — add
browser screenshot --annotate, which refreshes DOM refs and overlays visible[N]labels on the screenshot so visual inspection maps back tobrowser click <ref>targets.
Bug Fixes
- browser click —
browser clicknow prefers CDPInput.dispatchMouseEventover DOMel.click(), so custom dropdowns that depend on pointer/mouse events (Radix, shadcn, Material UI, Mercury-style category pickers) open and select reliably while retaining JS click as a fallback for older backends or zero-rect targets. - browser state / extension 1.0.7 —
browser state --source axnow enables the CDP Accessibility domain before reading the AX tree, fixing real-Chrome snapshots that previously returned onlyRootWebAreawith zero refs. - help / build — every positional arg must now declare a non-empty
helpstring. The build-manifest step fails closed when a positional has empty / whitespace-only / missinghelp, soopencli <site> <cmd> --helpalways shows callers what each parameter is for. Pre-existing offenders (twitter followers/following/list-add/list-remove/list-tweets/search/thread,reddit search/subreddit/user/user-comments/user-posts,douyin stats/update,bilibili subtitle,jike search) now have explicit help text — most notablytwitter followers [user]andfollowing [user]now document that omitting the user fetches the currently logged-in account.
1.7.14 (2026-05-08)
Features
- help — adapter help is now agent-friendly: per-command listings drop the
[options]noise from globally-shared options (--format,--trace,-v,-h, etc.) and only mention them at the site level, soopencli twitteretc. read like a flat command index. (#1401) - twitter — write-action symmetry P0: add
unlike,retweet,unretweet, andquoteto round out the read/write coverage. (#1400)
Bug Fixes
- browser daemon —
npm install -g @jackwener/opencli@latestnow correctly auto-restarts a stale ready-state daemon so users pick up the new version without a manualopencli daemon restart. (#1399)
1.7.13 (2026-05-07)
Extension bumped to 1.0.6 (screenshot --width / --height / --full-page flags, automation tab group color marker, automation container reuse fix).
⚠ BREAKING CHANGES
- linux-do — remove deprecated compatibility shims
linux-do hot,linux-do category,linux-do latest. Uselinux-do feed --view top --period <period>,linux-do feed --category <id-or-name>, andlinux-do feed --view latestinstead. - grok ask — drop the
--webflag and the legacy<textarea>composer path. The default flow is now the only path and uses the current ProseMirror+TipTap composer (the path that used to require--web true). Existing scripts passing--webwill get an "unknown option" error from commander; remove the flag. - env — rename
OPENCLI_BROWSER_TIMEOUTtoOPENCLI_BROWSER_IDLE_TIMEOUT. The variable controls workspace lease idle release time, not per-command runtime; the new name reflects that. Old name was undocumented and removed without a fallback. - registry — remove the unused
Strategy.HEADER; adapter authors should useStrategy.COOKIEand set headers explicitly inside browser-side fetches.
Features
- observation — add trace artifact primitives,
browser console,browser network --since/--follow/--failed, and adapter--trace=retain-on-failurefor failure-retained browser evidence. - autofix — retire
OPENCLI_DIAGNOSTIC; adapter repair now uses--trace retain-on-failure, tracesummary.md, and error-envelope trace metadata. - browser —
bindattachesbound:*workspaces to user-owned Chrome tabs without taking over window lifecycle;sessionsreportsidleMsRemaining: nullfor bound workspaces because they do not schedule idle close timers. (#1169, #929) - browser lifecycle — owned browser workspaces now lease tabs inside a shared dedicated automation container instead of owning one Chrome window per workspace; lease state is persisted for MV3 service-worker reconciliation and idle cleanup is backed by alarms.
- browser session — adapter commands can opt into site-level tab reuse with
browserSession.reuse = 'site'; Grok and other browser-backed LLM adapters now keep a shared site tab by default, and users can override with--reuse <none|site>. - chatgpt — add browser-web baseline commands:
ask,send,read,history,detail,new, andstatus. - grok — add browser-web baseline commands:
read,history,detail,new,send, andstatus(existingaskandimageunchanged). - yuanbao — add browser-web baseline commands:
send,status,read,history, anddetail(joining the existingaskandnew). - qwen — add
detailcommand for opening a specific historical conversation by id. - web read — make page extraction render-aware: same-origin iframe content is merged into the Markdown source,
--wait-forcan wait inside main/iframe documents,--wait-until networkidlewaits for captured requests to settle, and--diagnosereports frames, empty containers, and API-like XHRs for shell/AJAX pages.
Bug Fixes
- pipeline / capabilityRouting — the
fillpipeline step (introduced in #1222) now correctly triggers a browser session and gets transient retry coverage; previously a pipeline using onlyfillcould crash on a missing page object. (#1393) - xiaohongshu publish — improve image publishing reliability via creator-center URL routing, tab priority handling, and DataTransfer fallback.
- youtube — use watch-page HTML for transcript captions to recover when the public transcript API is unavailable.
- desktop adapters — restore 11 desktop adapter commands that were lost from the manifest due to a factory-pattern regression.
Internal
- cleanup — remove dead
src/analysis.ts(179 lines, 0 importers), retireOPENCLI_DIAGNOSTICtest residue, derive validator step allowlist from the live pipeline registry to prevent future drift.
1.7.8 (2026-04-25)
Features
- powerchina — procurement search adapter. (#1155)
- toutiao —
articlesadapter for 头条号 creator dashboard. (#1148) - weixin —
create-draftanddraftscommands for Official Account. (#1095)
Bug Fixes
- chatgpt-app — use AX send flow and support zh-CN generating state. (#1135)
- deepseek — fix history titles and resume conversation on
ask. (#1153) - amazon — fall back discussion to product page. (#1154)
- sinafinance — match stock symbol in addition to name. (#1158)
Chores
- extension — restore pre-1.6.8 neon terminal icons. (#1177)
1.7.7 (2026-04-23)
Features
- 51job — comprehensive adapter:
search,hot,detail,company. (#1132) - weread —
ai-outlinecommand for AI-generated book outlines. (#1141) - web/download — video/audio/iframe download +
--stdoutstreaming. (#1146) - download — hardened HTML→Markdown pipeline with better element handling. (#1143)
- verify — fixture-based value validation + skill docs for COOKIE pitfalls. (#1131)
- agent-native retrospective — analyze / verify guards / fixture content checks. (#1133)
- twitter — expose
has_mediaandmedia_urlscolumns. (#1115)
Bug Fixes
- core — quality audit fixes: elapsed=0 display, daemon error handler state reset, cause chain truncation guard, download cookie expiry, launcher async kill, verbose error logging. (#1151)
- daemon — allow extension ping CORS for reachability probing. (#1150)
- deepseek — separate thinking process from response in
--thinkmode. (#1142) - deepseek — use position-based model selection instead of text matching. (#1123)
- weread/book — add fallback selectors for reader page without cover. (#1138)
- xiaoyuzhou — correct podcast-episodes API endpoint. (#1129)
- bilibili — resolve full video URLs and preserve full description. (#1118)
Docs
- Fix stale references in READMEs and autofix skill doc. (#1130)
- Restore and rewrite
opencli-usageas orientation skill. (#1128)
1.7.6 (2026-04-21)
Extension bumped to 1.0.2 (body-truncation signal unified across raw / detail / fallback paths).
Features
- Window lifecycle flags —
--live(orOPENCLI_LIVE=1) keeps the automation window open after a command finishes;--focus(orOPENCLI_WINDOW_FOCUSED=1) brings the window to the foreground. Works on any subcommand. (#1122) - Selector-first browser interactions —
find/get/click/type/selectaccept CSS selectors in addition to numeric refs;--nthdisambiguates multiple matches. (#1112) - Agent-native browser payload — structured
networkbodies with truncation signal,get html --as jsonwith--depth/--children-max/--text-maxbudgets, newbrowser extractcommand for long-form content with resume cursor. (#1104) network --filter <fields>— filter captured requests by body-shape path segments for quick API discovery. (#1103)get html --as json— structured HTML tree output; no more silent truncation on raw--as html. (#1102)browser networkrewrite — agent-native discovery with cache keys and shape preview. (#1100)- Compound form fields — date / select / file controls surface a
compoundenvelope with format, options,accept. Cascading stale-ref recovery + bbox 0.99 dedup for tagged elements. (#1116) - twitter
tweets— fetch a user's recent posts. (#1098) - bilibili
video— new video command. (#1110) - deepseek
--file— file upload support onask. (#1093)
Bug Fixes
- twitter — 5s timeout on
resolveTwitterQueryIdto prevent hang. (#1106) - youtube — fall back to Videos tab when Home has no videos. (#1109)
- jianyu — keep accessible detail urls in search. (#1099)
- jianyu — block inaccessible detail links and verification pages. (#918)
Docs
- opencli-browser skill — restored and upgraded for selector-first workflow. (#1119)
- Window lifecycle — sync README + skill docs with
--live/--focusbehavior. (#1125)
Extension (1.0.2)
- Unify body-truncation contract across raw / detail / fallback network paths; surface
body_truncated/body_full_size/body_truncation_reason. (#1104)
1.7.5 (2026-04-20)
Extension bumped to 1.0.1 (multi-tab routing + cross-origin iframe).
Features
- DeepSeek adapter — browser-based
ask/history/new/read/status(#1088) - Eastmoney adapters — 13 finance adapters as Phase A oracle:
quote,rank,kline,sectors,etf,holders,money-flow,northbound,longhu,kuaixun,convertible,index-board,announcement(#1091) - Twitter GraphQL lists —
list-tweets,list-add,list-remove(#1076) - nowcoder adapter — 牛客网 with 16 commands (#1036)
- Chinese academic & policy adapters —
baidu-scholar,google-scholar,wanfang,gov-law,gov-policy(#243) - Download saved path —
web readandweixin downloadnow show saved file location (#1042) - Cross-origin iframe support — CDP execution context for iframed content (#1084)
Improvements
- Multi-tab routing — hardened target isolation and tab routing (#1072)
- Skill consolidation — 6 skills merged into 3 (
opencli-adapter-author,opencli-autofix,smart-search); removed mechanical commandsexplore/synthesize/generate/cascade/record(#1094) - Browser docs rewrite — docs reoriented for AI Agent use case (#1080)
- antigravity serve — configurable timeout + auto-reconnect (#859, #1063)
- Design debt cleanup — deprecated APIs, arg validation, dead plugin code (#1065)
Bug Fixes
- xiaoyuzhou — migrate from broken SSR to authenticated API (#1059); accept
CONFIG_ERRORin E2E guard (#1066) - xiaohongshu — detect draft save success (#1060); verify title input sticks on publish (#1050)
- twitter — repair lists scraping from detail pages (#1053)
- zsxq — separate content from title, remove title truncation (#1079)
- extension — per-workspace idle timeout for browser sessions (#1064)
Revert
Extension (1.0.1)
1.7.0 (2026-04-11)
This is a major release with significant internal architecture changes. Adapter code, validation, and error handling have been modernized.
⚠ BREAKING CHANGES
- Node.js >= 21 required —
import.meta.dirnameis used in core modules; Node 20 and below will fail at startup. - YAML adapters deprecated — YAML-based
.yamladapters are no longer loaded. Existing YAML adapters must be converted to JS viacli()API. A deprecation warning is emitted if.yamlfiles are detected. .tsadapters no longer loaded at runtime — The runtime only discovers.jsfiles. If you have.tsadapters in~/.opencli/clis/, compile them to.jsor rewrite using plain JS. A warning is printed when.tsfiles without a matching.jsare found.- Error output format changed — All errors are now emitted as a structured YAML envelope to stderr. Scripts parsing stdout for
[{error, help}]must switch to stderr / exit code. (#923) tabIdreplaced bytargetId— Cross-layer page identity now usestargetId. Extensions and plugins referencingtabIdmust update. (#899)operaterenamed tobrowser— Allopencli operatecommands are nowopencli browser. (#883)
Features
- auto-close adapter windows — Browser tabs opened by adapters are automatically closed after execution; configurable via
OPENCLI_WINDOW_FOCUSED. (#915) - Self-Repair protocol — Automatic adapter fixing when commands fail. (#866)
- EarlyHint callback — Cost gating channel for generate pipeline. (#882)
- verified generate pipeline — Structured contract for AI-driven adapter generation. (#878)
- structured diagnostic output — AI-driven adapter repair gets structured diagnostics. (#802)
- auto-downgrade to YAML in non-TTY — Machine-readable output when piped. (#737)
- Browser Use improvements — Better click/type/state handling for browser automation. (#707)
- CDP session-level network capture — Full network capture support for CDPPage. (#815, #816)
- AutoResearch framework — V2EX/Zhihu test suites (194 tasks). (#731, #717, #741)
- new adapters: Gitee (#845), 闲鱼 (#696), 1688 (#650, #820), LessWrong (#773), 虎扑 (#751), 小鹅通 (#617), 元宝 (#693), 即梦 (#897, #895), Quark Drive (#858), GitHub Trending/Binance/Weather (#214)
- adapter enhancements: Instagram post/reel/story/note (#671), Twitter image posts/replies (#666, #756), 知乎 interactions (#868), Bilibili b23.tv short URL (#740), 雪球 kline/groups (#809), Amazon unified ranking (#724), Gemini deep-research (#778), 新浪财经热搜 (#736), linux-do topic split (#821), JD/淘宝/CNKI revived (#248)
Bug Fixes
- security: escape codegen strings and redact diagnostic body (#930)
- bilibili: add missing domain for following cli (#947)
- clean up stale
.tsadapter files during upgrade (#948) - clean up legacy shim files and stale tmp files on upgrade (#934)
- address deep review findings (security, correctness, consistency) (#935)
- batch quality improvements — dedupe completion, unify logging, fix docs (#945)
- graceful fallback when extension lacks network-capture support (#865)
- handle missing electron executable gracefully (#747)
- recover drifted tabs instead of abandoning them (#715)
- retry on "No window with id" CDP error (#892)
- launcher: graceful degradation and manual CDP override for Windows (#744)
- xiaohongshu: scope note interaction selectors, replace blind retry with MutationObserver (#839, #730)
- twitter: relax reply composer timeout, use composer for text replies (#862, #860)
- doubao: preserve image URLs, connect to correct CDP target (#708, #674)
- gemini: stabilize ask reply state handling (#735)
- douban: fix marks pagination and improve subject data extraction (#752)
- jianyu: avoid early API bucket cutoff, stabilize search (#916, #912)
- xiaoe: resolve missing episodes for long courses via auto-scroll (#904)
Refactoring
- adapters: convert adapter layer from TypeScript to JavaScript (#928)
- adapters: migrate all CLI adapters from YAML to TypeScript, then to JS (#887, #922)
- validate: switch from YAML-file scanning to registry-based validation (#943)
- strategy: normalize strategy into runtime fields at registration time (#941)
- errors: unify error output as YAML envelope to stderr (#923)
- daemon: make daemon persistent, remove idle timeout (#913)
- browser: unify browser error classification and deduplicate retry logic (#908)
- monorepo: adapter separation —
clis/at root (#782) - rename
operatetobrowser(#883) - eliminate
anytypes in core files (#886) - migrate adapter imports to package exports (#795)
Performance
- P0 optimizations — faster startup, reduced overhead (#944)
- fast-path completion/version/shell-scripts to bypass full discovery (#898)
- optimize browser pipeline — tab query dedup, parallel stealth, incremental snapshots (#713)
- reduce round-trips in browser command hot path (#712)
- skip blank page on first browser command (#710)
Documentation
- restructure README narrative (#885)
- add Android Chrome usage guide (#687)
- add Electron app CLI quickstart guide
- fix stale
.tsreferences across skills and docs (#954) - unify skill command references and merge opencli-generate into opencli-explorer (#891, #894)
Upgrade Guide
- Update Node.js to v21 or later (v22 LTS recommended).
- Run
npm install -g @jackwener/opencli@latest— the preuninstall hook gracefully stops the old daemon; the first browser command after upgrade auto-restarts it. - If you have custom
.tsadapters in~/.opencli/clis/, rename or compile them to.js. A warning will be printed on startup if stale.tsfiles are detected. - If you have custom
.yamladapters, convert them to JS using thecli()API (seeskills/opencli-adapter-author/references/adapter-template.md). - If you parse error output from stdout, switch to stderr. Errors are now structured YAML envelopes with typed exit codes.
1.6.1 (2026-04-02)
Bug Fixes
- sync package-lock.json version with package.json (#698)
1.6.0 (2026-04-02)
Features
- opencli-browser: add browser control commands for Claude Code skill (#614)
- docs: add tab completion to getting started guides (#658)
Bug Fixes
- twitter: resolve article ID to tweet ID before GraphQL query (#688)
- xiaohongshu: clarify empty note shell hint (#686)
- skills: add YAML frontmatter for discovery and improve descriptions (#694)
Refactoring
- centralize daemon transport client (#692)
1.5.9 (2026-04-02)
Features
- amazon: add browser adapter — bestsellers, search, product, offer, discussion (#659)
- skills: create skills/ directory structure with opencli-usage, opencli-explorer, opencli-oneshot (#670)
- record: add minimal record write candidates (#665)
Refactoring
- src cleanup — deduplicate errors, cache VM, extract BasePage, remove Playwright MCP legacy (#667)
- remove bind-current, restore owned-only browser automation model (#664)
Chores
- remove .agents directory (#668)
1.5.8 (2026-04-01)
Bug Fixes
- extension: avoid mutating healthy tabs before debugger attach and add regression coverage (#662)
1.5.7 (2026-04-01)
Features
- daemon: replace 5min idle timeout with long-lived daemon model (4h default, dual-condition exit) (#641)
- daemon: add
opencli daemon status/stop/restartCLI commands (#641) - youtube: add search filters —
--typeshorts/video/channel,--upload,--sort(#616) - notebooklm: add read commands and compatibility layer (#622)
- instagram: add media download command (#623)
- stealth: harden CDP debugger detection countermeasures (#644)
- v2ex: add id, node, url, content, member fields to topic output (#646, #648)
- electron: auto-launcher — zero-config CDP connection (#653)
Bug Fixes
- douyin: repair creator draft flow — switch from broken API pipeline to UI-driven approach (#640)
- douyin: support current creator API response shapes for activities, profile, collections, hashtag, videos (#618)
- bilibili: distinguish login-gated subtitles from empty results (#645)
- facebook: avoid in-page redirect in search — use navigate step instead of window.location.href (#642)
- substack: update selectors for DOM redesign (#624)
- weread: recover book details from cached shelf fallback (#628)
- docs: use relative links in adapter index (#629)
1.4.1 (2026-03-25)
Features
- douyin: add Douyin creator center adapter — 14 commands, 8-phase publish pipeline (#416)
- weibo,youtube: add Weibo commands and YouTube channel/comments (#418)
- twitter: add filter option for search (#410)
- extension: add popup UI, privacy policy, and CSP for Chrome Web Store (#415)
- add url field to 9 search adapters (67% -> 97% coverage) (#414)
Bug Fixes
- extension: improve UX when daemon is not running — show hint in popup, reduce reconnect noise (#424)
- remove incorrect gws and readwise external CLI entries (#419, #420)
CI
1.4.0 (2026-03-25)
Features
- pixiv: add Pixiv adapter — ranking, search, user illusts, detail, download (#403)
- plugin: add lifecycle hooks API — onStartup, onBeforeExecute, onAfterExecute (#376)
- plugin: validate plugin structure on install and update (#364)
- xueqiu: add Danjuan fund account commands — fund-holdings, fund-snapshot (#391)
- tiktok: add video URL to search results (#404)
- linkedin: add timeline feed command (#342)
- jd: add JD.com product details adapter (#344)
- web: add generic
web readcommand for any URL → Markdown (#343) - dictionary: add dictionary search, synonyms, and examples adapters (#241)
Bug Fixes
- analysis: fix hasLimit using wrong Set (SEARCH_PARAMS → LIMIT_PARAMS) (#412)
- pipeline: remove phantom scroll step — declared but never registered (#412)
- validate: add missing download step to KNOWN_STEP_NAMES (#412)
- extension: security hardening — tab isolation, URL validation, cookie scope (#409)
- sort: use localeCompare with natural numeric sort by default (#306)
- pipeline: evaluate chained || in template engine (#305)
- pipeline: check HTTP status in fetch step (#384)
- plugin: resolve Windows path and symlink issues (#400)
- download: scope cookies to target domain (#385)
- extension: fix same-url navigation timeout (#380)
- fix ChatWise Windows connect (#405)
- resolve 6 critical + 11 important bugs from deep code review (#337, #340)
- harden security-sensitive execution paths (#335)
- stealth: harden anti-detection against advanced fingerprinting (#357)
Code Quality
- replace all
catch (err: any)with typedgetErrorMessage()across 13 files (#412) - adopt CliError subclasses in social and desktop adapters (#367, #372, #375)
- simplify codebase with type dedup, shared analysis module, and consistent naming (#373)
- ci: add cross-platform CI matrix (Linux/macOS/Windows) (#402)
1.3.3 (2026-03-25)
Features
- browser: add stealth anti-detection for CDP and daemon modes (#319)
Bug Fixes
- stealth: review fixes — guard plugins, rewrite stack trace cleanup (#320)
1.3.2 (2026-03-24)
Features
- error-handling: refine error handling with semantic error types and emoji-coded output (#312) (b4d64ca)
Bug Fixes
- security: replace execSync with execFileSync to prevent command injection (#309) (41aedf6)
- remove duplicate getErrorMessage import in discovery.ts (#315) (75f4237)
- e2e: broaden xiaoyuzhou skip logic for overseas CI runners (#316) (a170873)
Documentation
Chores
1.3.1 (2026-03-22)
Features
- plugin: add update command, hot reload after install, README section (#307) (966f6e5)
- yollomi: add new commands and update documentation (#235) (ea83242)
- record: add live recording command for API capture (#300) (dff0fe5)
- weibo: add weibo search command (#299) (c7895ea)
- v2ex: add node, user, member, replies, nodes commands (#282) (a83027d)
- hackernews: add new, best, ask, show, jobs, search, user commands (#290) (127a974)
- doubao-app: add Doubao AI desktop app CLI adapter (#289) (66c4b84)
- doubao: add doubao browser adapter (#277) (9cdc127)
- xiaohongshu: add publish command for 图文 note automation (#276) (a6d993f)
- weixin: add weixin article download adapter & abstract download helpers (#280) (b7c6c02)
Bug Fixes
- tests: use positional arg syntax in browser search tests (#302) (4343ec0)
- xiaohongshu: improve search login-wall handling and detail output (#298) (f8bf663)
- ensure standard PATH is available for external CLIs (#285) (22f5c7a)
- xiaohongshu: scope image selector to avoid downloading avatars (#293) (3a21be6)
- add turndown dependency to package.json (#288) (2a52906)
1.3.0 (2026-03-21)
Features
Performance
Refactoring
1.2.3 (2026-03-21)
Bug Fixes
- replace all about:blank with data: URI to prevent New Tab Override interception (#257) (3e91876)
- harden resolveTabId against New Tab Override extension interception (#255) (112fdef)
1.2.2 (2026-03-21)
Bug Fixes
1.2.1 (2026-03-21)
Bug Fixes
- twitter: harden timeline review findings (#236) (4cd0409)
- wikipedia: fix search arg name + add random and trending commands (#231) (1d56dd7)
- resolve inconsistent doctor --live report (fix #121) (#224) (387aa0d)
1.2.0 (2026-03-21)
Features
- douban: add movie adapter with search, top250, subject, marks, reviews commands (#239) (70651d3)
- devto: add devto adapter (#234) (ea113a6)
- twitter: add --type flag to timeline command (#83) (e98cf75)
- google: add search, suggest, news, and trends adapters (#184) (4e32599)
- add douban, sinablog, substack adapters; upgrade medium to TS (#185) (bdf5967)
- xueqiu: add earnings-date command (#211) (fae1dce)
- browser: advanced DOM snapshot engine with 13-layer pruning pipeline (#210) (d831b04)
- instagram,facebook: add write actions and extended commands (#201) (eb0ccaf)
- grok: add opt-in --web flow for grok ask (#193) (fcff2e4)
- tiktok: add TikTok adapter with 15 commands (#202) (4391ccf)
- add Lobste.rs, Instagram, and Facebook adapters (#199) (ce484c2)
- medium: add medium adapter (#190) (06c902a)
- plugin system (Stage 0-2) (1d39295)
- make primary args positional across all CLIs (#242) (9696db9)
- xueqiu: make primary args positional (#213) (fb2a145)
Refactoring
- replace hardcoded skipPreNav with declarative navigateBefore field (#208) (a228758)
- boss: extract common.ts utilities, fix missing login detection (#200) (ae30763)
- type discovery core (#219) (bd274ce)
- type browser core (#218) (28c393e)
- type pipeline core (#217) (8a4ea41)
- reduce core any usage (#216) (45cee57)
- fail fast on invalid pipeline steps (#237) (c76f86c)
1.1.0 (2026-03-20)
Features
- add antigravity serve command — Anthropic API proxy (35a0fed)
- add arxiv and wikipedia adapters (#132) (3cda14a)
- add external CLI hub for discovery, auto-installation, and execution of external tools. (b3e32d8)
- add sinafinance 7x24 news adapter (#131) (02793e9)
- boss: add 8 new recruitment management commands (#133) (7e973ca)
- serve: implement auto new conv, model mapping, and precise completion detection (0e8c96b)
- serve: use CDP mouse click + Input.insertText for reliable message injection (c63af6d)
- xiaohongshu creator flows migration (#124) (8f17259)
Bug Fixes
- docs: use base '/' for custom domain and add CNAME file (#129) (2876750)
- serve: update model mappings to match actual Antigravity UI (36bc57a)
- type safety for wikiFetch and arxiv abstract truncation (4600b9d)
- use UTC+8 for XHS timestamp formatting (CI timezone fix) (03f067d)
- xiaohongshu: use fixed UTC+8 offset in trend timestamp formatting (CI timezone fix) (593436e)