はじめに
OpenCLIは、ウェブサイトやローカルアプリをコマンドラインから操作可能にするNode.js製CLIで、GitHubで2.68万スターを集めています1。READMEには「100+ supported sites & commands」と書かれていますが、この「100+」がそのままヘッドレス環境(CIやクラウドのエージェントセッションのように、Chrome拡張を常駐させられない環境)で使える数を意味するとは限りません。実際にnpmでインストールし、コマンド一覧を出力させてタグ別に数えてみました。
対象読者は、OpenCLIをCIやクラウドのヘッドレス環境に組み込もうとしている方、および「100+ adapters」のうち拡張なしで動く範囲を先に知っておきたい方です。
TL;DR
-
opencli listの末尾には「1275 built-in commands across 10 apps + 164 sites, 13 external CLIs」(計1288コマンド)という自己申告の集計が出ます - サブコマンドには
public/cookie/ui/local/intercept/installed/auto-installの7タグがあり、ブラウザ拡張なしで動く(public+local+外部CLI2種)のは376個、全体の29.2%でした - 残り70.8%(
cookie724個 +ui182個 +intercept6個)はChrome拡張とログイン済みブラウザセッションが前提で、opencli doctorは拡張未接続を明示的に検出します - 拡張なしで
cookieタグのコマンドを実行しても即座にはエラーにならず、約30秒待たされてからBROWSER_CONNECTエラーが返ります
背景・課題
OpenCLIは「サイトをCLI化する」アダプタと、ローカルアプリ(Cursor・Discord・Antigravityなど)を操作するアダプタの2系統を持ちます。ブラウザ連携はChrome拡張(Browser Bridge)経由で、ログイン済みのCookieセッションをそのままCLIから使い回す設計になっています2。この設計自体は理にかなっていますが、拡張の常駐が前提にできないヘッドレス環境では、そもそもどのコマンドが動く対象なのかが README の「100+ adapters」という総数だけでは判断できません。
タグごとの実行経路を図にすると、拡張の有無で通る道が分かれます。
やったこと
インストールとバージョン確認
npm install -g @jackwener/opencli
opencli --version
# => 1.8.6
npm registryの公開日は2026-07-03で、GitHub側の最新リリースタグと一致していました。
環境チェック
opencli doctor
opencli v1.8.6 doctor (node v22.22.2)
[OK] Daemon: running on port 19825 (v1.8.6)
[MISSING] Extension: not connected
[FAIL] Connectivity: failed (Browser Bridge extension not connected)
Issues:
• Daemon is running but the Chrome/Chromium extension is not connected.
If the extension is already installed, try: opencli daemon restart
If the extension is not installed:
1. Download from https://github.com/jackwener/opencli/releases
2. Open chrome://extensions/ → Enable Developer Mode
3. Click "Load unpacked" → select the extension folder
• Browser connectivity test failed: Browser Bridge extension not connected
doctor はdaemon(ローカルNode.jsプロセス)とChrome拡張を別々に判定しており、拡張がない状態では「daemonはOKだが拡張未接続」という中間状態がそのまま出力されます。ここで一律に落ちるわけではない点が、後述のコマンド分類につながります。
コマンド一覧をタグ別に集計する
opencli list > /tmp/opencli-list.txt
tail -1 /tmp/opencli-list.txt
grep -oE '\[[a-z-]+\]' /tmp/opencli-list.txt | sort | uniq -c | sort -rn
1275 built-in commands across 10 apps + 164 sites, 13 external CLIs
724 [cookie]
338 [public]
182 [ui]
25 [local]
11 [auto-install]
6 [intercept]
2 [installed]
opencli list の最終行に自己申告の集計(1275 + 13 = 1288コマンド)が出力されます。タグは7種類あり、public(ログイン不要)・local(ローカルアプリの状態読み取り)・installed/auto-install(Docker・GitHub CLIなど 既にインストール済みの外部CLIをそのまま呼ぶだけ でブラウザを介さない)の4タグ・376個(29.2%)はブラウザ拡張なしで動きます。残る cookie(ログイン済みセッション必須・724個)・ui(ブラウザUI操作・182個)・intercept(ブラウザ経由のネットワーク傍受・6個)の3タグ・912個(70.8%)は拡張が前提になります。同じ reddit アダプタ内でも hot・search・frontpage はすべて cookie タグで、匿名アクセス可能なエンドポイントが存在するサービスでも一律ログイン必須の扱いになっているケースがあります。
public タグを実行する
opencli hackernews top --limit 3
- rank: 1
id: 48943745
title: EEG shows brain can simultaneous encode two speech streams
score: 44
author: giuliomagnifico
comments: 15
url: https://journals.plos.org/plosbiology/article?id=10.1371/journal.pbio.3003876
- rank: 2
id: 48943142
title: How Has Roman Concrete Lasted for Millennia? 1,900-Year-Old Latrine Offers Clues
score: 94
author: divbzero
comments: 56
...
--format json / --format csv も指定でき、両方とも同じデータが構造化されて返ってくることを確認しました。
opencli hackernews top --limit 2 --format csv
rank,id,title,score,author,comments,url
1,48943745,EEG shows brain can simultaneous encode two speech streams,44,giuliomagnifico,15,https://journals.plos.org/plosbiology/article?id=10.1371/journal.pbio.3003876
2,48943142,"How Has Roman Concrete Lasted for Millennia? 1,900-Year-Old Latrine Offers Clues",94,divbzero,56,...
Hugging Faceの hf アダプタも同様に public タグで、拡張なしで即座にレスポンスが返ります。
opencli hf top --limit 3
- rank: 1
id: '2607.13285'
title: 'Harness Handbook: Making Evolving Agent Harnesses Readabl...'
upvotes: 176
authors: Ruhan Wang, Yucheng Shi, Zongxia Li et al.
cookie タグを拡張なしで実行するとどうなるか
timeout 40 opencli reddit hot --limit 3
ok: false
error:
code: BROWSER_CONNECT
message: Browser Bridge extension not connected
help: |-
Make sure Chrome/Chromium is open and the OpenCLI extension is enabled.
If not installed:
1. Download: https://github.com/jackwener/opencli/releases
2. Open chrome://extensions → Developer Mode → Load unpacked
exitCode: 69
エラーメッセージ自体は分かりやすいのですが、即座には返りません。timeout 15 で切ると単に Terminated になり、この構造化エラーは確認できませんでした。実際には30秒前後待ってからこのJSONが返ってきます。
ハマりポイント
「100+ adapters」の中身は一様ではない
READMEの「100+ supported sites & commands」を見て、ヘッドレスでも100種類前後は使えるものと考えていましたが、タグ別に数えると拡張なしで動く範囲は1288コマンド中376個にとどまりました。しかも同じアダプタ内で匿名OKなコマンドとログイン必須なコマンドが混在しており(12306の train/trains は public、reddit の hot/search は cookie)、アダプタ単位ではなくコマンド単位で opencli list の出力をタグでgrepしないと、実際にヘッドレスで使える範囲は分かりません。
cookieコマンドの失敗はタイムアウト設計に響く
cookie/ui タグのコマンドを拡張なしで叩くと、即時エラーではなく約30秒待ってから BROWSER_CONNECT を返します。CIパイプラインなどに組み込む場合、コマンドごとに短いタイムアウトを設定していると、この待ち時間の途中で強制終了され、BROWSER_CONNECT という診断しやすいエラーメッセージを取りこぼす可能性があります。
まとめ
- OpenCLI 1.8.6を実際にインストールして集計すると、1288コマンド(
opencli list自己申告の1275 built-in + 13 external CLIs)中ブラウザ拡張なしで動くのはpublic/local/installed/auto-installの4タグ・376個(29.2%)でした - 残りの70.8%(
cookie724個 +ui182個 +intercept6個)はChrome拡張とログイン済みセッションが前提で、失敗時も即エラーにはならず約30秒待たされてからBROWSER_CONNECTが返ります - ヘッドレス/CI環境で使う前提なら、
opencli listの出力を全タグでgrepして使える範囲を先に洗い出しておくと手戻りが少なくなります
著者視点の発見ポイント
opencli doctor の出力を見た時点では「daemonはOKだが拡張未接続」という中間状態しか分からず、実際にどこまでのコマンドが使えるのかは判断できませんでした。opencli list の出力をタグでgrepして初めて、1288コマンドのうち3割弱しかヘッドレスで動かないという実数が見えました。README単体の「100+ adapters」という総数表記だけでは、ヘッドレス環境での実質的な利用可能範囲は測れません。
参考リンク
- jackwener/opencli — 本体リポジトリ。スター数・ライセンス・最新リリース日の確認元
- @jackwener/opencli - npm — インストール元・バージョン確認
-
2026-07-17時点のGitHubリポジトリ情報(26.8k stars, Apache-2.0, 最新リリース v1.8.6 / 2026-07-03) ↩
-
jackwener/opencli README — Browser Bridge拡張によるログイン済みセッション連携の説明 ↩