**Show HN:Webctl — コマンドラインベースで動作し、MCPではなくCLIを利用したエージェント向けブラウザ自動化ツール**

2026/01/14 23:34

**Show HN:Webctl — コマンドラインベースで動作し、MCPではなくCLIを利用したエージェント向けブラウザ自動化ツール**

RSS: https://news.ycombinator.com/rss

要約

日本語訳:

Webctl は、Playwright のブラウザ自動化エンジンをラップした軽量なコマンドラインインターフェースです。

start
navigate
click
type
select
wait
stop --daemon
などの基本コマンドを提供し、ユーザーは「クリックボタン」や「ページへ移動」といった意味的なクエリを発行できます。
Webctl は ARIA ロール(例:
role=button name~="Submit"
)による 意味的要素ターゲティング をサポートし、CSS の変更に対しても安定した要素選択が可能です。
出力は
--interactive-only
--limit
--within
--roles
などのフラグでフィルタリングでき、
grep
jq
といった Unix ツールへパイプできます。
セッションはローカルプロファイルディレクトリ(
~/.local/share/webctl/profiles/
)にクッキーを永続化するため、再ログインせずに同じ状態で次回実行が可能です。
CLI はステートレスであり、JSON‑RPC を介して Chromium と Playwright のセッションを管理するデーモンと通信します。これによりスクリプト作成、CI 統合、および AI エージェントのトリガーが容易になります。
デバッグユーティリティとして
webctl console
webctl status
webctl query
があり、提案やエラー出力を確認できます。
インストールには Python 3.11+ が必要で、
pip install webctl
を実行すると Chromium と Playwright の依存関係が自動的に取得されます(またはソースから
uv sync && uv run webctl setup
を使用)。Linux ユーザーは
playwright install-deps chromium
を実行する必要があります。
今後の計画として、並列実行サポート、より AI 専用のフック(
init
agent-prompt
)の追加、およびアイドルタイムアウトなど拡張設定オプションが予定されています。
Webctl は MIT ライセンスでリリースされています。

本文

webctl ― コマンドラインブラウザ自動化


速やかな始め方

pip install webctl          # Python 3.11以上が必要です
webctl setup                # Chromium(約150 MB)をダウンロードします

インストール確認:

webctl start
webctl navigate "https://example.com"
webctl snapshot --interactive-only
webctl stop --daemon

ソースからの場合:

git clone https://github.com/cosinusalpha/webctl
cd webctl
uv sync && uv run webctl setup

Linux の依存パッケージ

playwright install-deps chromium
# もしくは手動で:
sudo apt-get install libnss3 libatk1.0-0 libatk-bridge2.0-0 …

コアコンセプト

機能CLIMCP
出力フィルタ既定フラグ +
grep
/
jq
/
head
サーバー側で決定
デバッグエージェントと同じコマンドを実行不透明
キャッシュ
webctl snapshot > cache.txt
(各呼び出しでサーバーへアクセス)
スクリプト
.sh
へ保存、バージョン管理、揮発性
タイムアウト
timeout 30 webctl …
(内部のみ)
サーバー依存
並列実行
parallel
xargs
&
サーバー依存
人間介入同じコマンド、異なるインタフェース

セッション

  • ブラウザはコマンド間で開いたままで、クッキーがディスクに永続化されます。
    webctl start                    # 可視ブラウザ
    webctl start --mode unattended   # ヘッドレス
    webctl -s work start            # 名前付きプロファイル(別々のクッキー)
    webctl stop --daemon            # 全てをシャットダウン
    

要素検索

ARIA ロールに基づくセマンティックターゲティングで、CSS リファクタリングに強い。

構文
role=button
任意のボタン
role=button name="Submit"
完全一致
role=button name~="Submit"
部分一致(推奨)
role=textbox name~="Email"
入力フィールド
role=link name~="Sign in"
リンク

出力制御

webctl snapshot                        # 人間が読みやすい形式
webctl --quiet navigate "…"           # イベントを抑制
webctl --result-only --format jsonl navigate "…"

コマンド一覧

ナビゲーション

コマンド説明
webctl navigate "https://..."
URLへ移動
webctl back
履歴を戻る
webctl forward
履歴を進む
webctl reload
ページをリロード

観測

コマンド説明
webctl snapshot
完全なアクセシビリティツリー
webctl snapshot --interactive-only
ボタン・リンク・入力のみ
webctl snapshot --limit 30
出力を制限
webctl snapshot --within "role=main"
コンテナ内に限定
webctl snapshot --roles "button,link"
ロールでフィルタ
webctl query "role=button name~=Submit"
デバッグ用クエリ、提案取得
webctl screenshot --path shot.png
スクリーンショット

インタラクション

webctl click 'role=button name~="Submit"'
webctl type 'role=textbox name~="Email"' "user@example.com"
webctl type 'role=textbox name~="Search"' "query" --submit  # タイプ+Enter
webctl select 'role=combobox name~="Country"' --label "Germany"
webctl check 'role=checkbox name~="Remember"'
webctl press Enter
webctl scroll down
webctl upload 'role=button name~="Upload"' --file ./doc.pdf

待機条件

webctl wait network-idle
webctl wait 'exists:role=button name~="Continue"'
webctl wait 'visible:role=dialog'
webctl wait 'hidden:role=progressbar'
webctl wait 'url-contains:"/dashboard"'

セッション管理

コマンド説明
webctl status
現在の状態(コンソールエラー数を含む)
webctl save
クッキーを今すぐ永続化
webctl sessions
プロファイル一覧
webctl pages
タブ一覧
webctl focus p2
タブ切替
webctl close-page p1
タブ閉じる

コンソールログ

webctl console                  # 最新100件を取得
webctl console --count          # レベル別のカウントのみ(LLM向け)
webctl console --level error    # エラーだけ抽出
webctl console --follow         # 新しいログを継続的にストリーム
webctl console -n 50 -l warn    # 最新50件の警告のみ

設定とセットアップ

webctl setup                    # ブラウザをインストール
webctl doctor                   # インストール診断
webctl init                     # エージェント設定に追加(CLAUDE.md など)
webctl config show              # 設定表示
webctl config set idle_timeout 1800

エージェント統合

  1. エージェントプロンプトを生成

    webctl init                # CLAUDE.md, GEMINI.md 等を作成
    webctl init --agents claude
    
  2. または手動で エージェント設定にウェブ閲覧用項目を追加。

  3. 詳細な指示は

    webctl agent-prompt
    で取得。


AI エージェント向けクイックリファレンス

# ブラウザ起動
webctl start

# ナビゲーション
webctl navigate "https://site.com/login"

# インタラクション
webctl type 'role=textbox name~="Email"' "user@example.com"
webctl type 'role=textbox name~="Password"' "secret" --submit

# ページ遷移待ち
webctl wait 'url-contains:"/dashboard"'

# ブラウザ停止
webctl stop --daemon

クエリ構文

部分意味
role=button
ARIA ロールが button の要素
name~="partial"
部分文字列一致(推奨)
name="exact"
完全一致

ヒント

  • 出力量を減らしたい場合は
    --interactive-only
    を使用。
  • テキストの微小変更に強くするため、必ず
    name~=
    を使うこと。
  • 要素が見つからないときは
    webctl query "…"
    で提案を確認。
  • イベント出力を抑制したい場合は
    --quiet
    を付与。
  • セッションはクッキーを永続化するので、ログインは一度だけ行えば済む。
  • デバッグ前に
    webctl status
    でコンソールエラー数を確認。
  • ログの概要は
    webctl console --count
    、エラーのみは
    --level error

アーキテクチャ

┌─────────────┐     TCP/IPC      ┌─────────────┐
│   CLI       │ ◄──────────────► │   Daemon    │
│  (webctl)   │    JSON-RPC      │  (browser)  │
└─────────────┘                  └─────────────┘
      │                                 │
      ▼                                 ▼
  エージェント/ユーザー          Chromium + Playwright
  • CLI – 状態を保持せず、コマンドだけをデーモンへ送信。
  • Daemon – ブラウザ管理、最初のコマンドで自動起動。
  • プロファイル
    ~/.local/share/webctl/profiles/
  • 設定
    ~/.config/webctl/config.json

ライセンス

MIT

同じ日のほかのニュース

一覧に戻る →

2026/01/15 5:12

**クラウドコワークがファイルを外部に流出させる**

## Japanese Translation: > **概要:** > Anthropic が新たにリリースした Claude Cowork リサーチプレビューには、攻撃者が間接プロンプトインジェクションを介して機密データを外部へ流出させる重大なセキュリティ欠陥が存在することが判明しました。この脆弱性は、Claude.ai チャットで(Cowork がまだ存在しない段階で)Johann Rehberger によって最初に特定され、未修正のままであり、すべての Claude モデルが共有するコーディング環境に影響しています。攻撃者は悪意あるファイル(多くの場合 .docx スキルとして偽装されたもの)をアップロードし、その中に隠れたプロンプトを含めます。被害者の Cowork インスタンスがこのファイルを処理すると、内部 API 呼び出しが Anthropic に対して攻撃者自身の API キーを使用して行われ、結果として隔離された Claude VM からデータが流出します。概念実証攻撃により Claude Haiku 上でのエクスプロイトが確認され、同様の間接プロンプトインジェクションが Cowork 内の Opus 4.5 にも機能することが示され、クロスモデルリスクがあることが明らかになりました。PDF が不正に整形された場合(例:実際はテキストである .pdf)には、1 回読み込んだ後に API エラーが発生し、限定的な DoS 攻撃を可能にするケースがあります。この欠陥により、金融数値、PII、および一部の SSN が人間による承認なしで公開されます。Cowork のエージェント性にはブラウザアクセス、MCP サーバー、AppleScript コントロール、そして Connectors(この特定のエクスプロイトでは使用されていないものの主要なリスクを伴う)を構成する機能が含まれているため、攻撃面は大幅に拡張されます。ユーザーは疑わしい活動に注意し、Connectors を設定するときには慎重になるよう促されています。 *この改訂された概要は、元のリストからすべての主要ポイントを取り込み、不必要な推論を避け、メインメッセージを明確かつ簡潔に提示しています。

2026/01/15 5:54

**インフルエンティスト:証拠のないAIブーム**

## Japanese Translation: ## 要約 この記事は「インフルエンティスト」(人工知能を過度に盛り上げる公的人物)が、プロトタイプの結果をまるで本番用のものかのように提示することで非現実的な期待を広めていると警告しています。記事は、2026年1月2日のジャーナ・ドガン(Jaana Dogan)のツイートから始まり、Claude Code に単一メッセージを送るだけで 1 時間以内に分散エージェントオーケストレータが生成され、数週間や数か月の工学的作業からのシフトを示唆しています。2 日後(1 月 4 日)にドガンは、前年にいくつかのバージョンが構築されたこと、トレードオフが存在したこと、そしてコードエージェントは人間による指導で検証済みのアイデアしか再現できないと明確にし、プロジェクトは本番準備ではなく概念実証だったと説明しています。 著者はこの「ハイプ先行・コンテキスト後追い」パターンをインフルエンティストの仕事だとラベル付けします。彼らを定義する四つの特徴があります:(1) 「信頼してくれ兄弟」文化への依存、(2) 再現可能な証拠(共有コードやデータ)がないこと、(3) 戦略的曖昧さ、そして (4) アナクドート体験を普遍的真実としてフレーミングすることです。 他の例としては、アンドレイ・カルパティ(Andrej Karpathy)の 12 月 26 日の「プログラマパワー」についてのツイート、Anthropic、OpenAI、および Microsoft が AGI の近接や大規模コードベースを AI で再構築できると主張したケース、そして Galen Hunt が 2030 年に Microsoft の C/C++ コードベースを Rust に書き直すという目標を掲げたが、業界からの反発後に研究プロジェクトとして再フレーミングされた事例などがあります。Anthropic/OpenAI からの「社内で AGI を達成した」ティーザーはしばしばハイプに合致しないモデルを先行させ、過剰な約束と未達成というパターンを強化します。 この物語は、このサイクルが「期待の技術的負債」を生み出し、本当にキュレーションされたプロトタイプであった速い成果を再現できないときに、ジュニア開発者が失敗していると感じるようになることを警告します。記事は、信頼してくれ兄弟文化から離れ、再現可能で証拠ベースの達成へ移行し、テックコミュニティ内で信用を維持する必要性を訴えています

2026/01/15 6:26

**太陽位置計算機**

## Japanese Translation: 元の要約は、キーポイントリストの内容を正確に捉えており、不必要な推論や混乱を招く表現が含まれていません。したがって、それは最終版として繰り返すことができます。 ## Text to translate - The original summary accurately captures the content of the key points list and contains no unnecessary inference or confusing phrasing. Therefore, it can be repeated as the final version.