0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenCLIの1288コマンド中、拡張なしで動くのは376個だけだった

0
Posted at

はじめに

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%(cookie 724個 + ui 182個 + intercept 6個)は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%(cookie 724個 + ui 182個 + intercept 6個)はChrome拡張とログイン済みセッションが前提で、失敗時も即エラーにはならず約30秒待たされてから BROWSER_CONNECT が返ります
  • ヘッドレス/CI環境で使う前提なら、opencli list の出力を全タグでgrepして使える範囲を先に洗い出しておくと手戻りが少なくなります

著者視点の発見ポイント

opencli doctor の出力を見た時点では「daemonはOKだが拡張未接続」という中間状態しか分からず、実際にどこまでのコマンドが使えるのかは判断できませんでした。opencli list の出力をタグでgrepして初めて、1288コマンドのうち3割弱しかヘッドレスで動かないという実数が見えました。README単体の「100+ adapters」という総数表記だけでは、ヘッドレス環境での実質的な利用可能範囲は測れません。

参考リンク

  1. 2026-07-17時点のGitHubリポジトリ情報(26.8k stars, Apache-2.0, 最新リリース v1.8.6 / 2026-07-03) ↩

  2. jackwener/opencli README — Browser Bridge拡張によるログイン済みセッション連携の説明 ↩

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?