
2026/01/29 4:39
**Show HN:ユーザースクリプト用カーソル**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Browser Code は、Claude が仮想ファイルシステム(VFS)上のファイルとして Web ページを閲覧・編集できるブラウザ拡張機能です。
各サイトは
/domain/path/ の下に表示され、 page.html、 console.log、 screenshot.png、 plan.md などのファイルが含まれます。また、ディレクトリ scripts/ と styles/ はユーザーが記述したコードを保持します。./scripts/*.js にあるスクリプトは Chrome(または Firefox)の userScripts API を通じて永続化され、 /products/[id] や /users/[userId]/posts/[postId] のような動的ルートを含む URL で自動的に実行されます。拡張機能は window.__routeParams を注入してこれらのパラメータを公開します。アーキテクチャは次の三部構成です:背景サービスワーカー(Claude API クライアント、スクリプト登録、会話履歴、VFS の調整)、VFS を実装し DOM ↔ HTML をシリアライズし、メインワールドでスクリプトを実行しコンソール出力を傍受するコンテントスクリプト、およびチャット UI、ファイルブラウジング、計画/実行コントロールを提供するサイドバー React パネル。
Plan Mode では Claude が
plan.md に提案変更を書き込み、ユーザーの承認後に Execute Mode に切り替わります。このモードでファイル編集、DOM の変異、およびスクリプト実行が可能です。VFS ファイルはバージョン番号を持ち、最後に読み込んだ以降 DOM が変更されている場合は編集が失敗します(楽観的同時実行)。ローカルファイル同期もサポートされています:Chrome は File System Access API を介して双方向同期を提供し、Firefox は Downloads API によるエクスポートのみの同期と最新勝利(newest‑wins)衝突解決を提供します。
利用可能なエージェントツールには
Read、Edit、Write、Glob、Grep、Bash、Ls、Screenshot、Todo があります。インストールは Chrome で開発者モードを有効にする(または Firefox で一時アドオン)し、「User scripts」権限を付与して CSP をバイパスします。ビルドは
bun install で行い、開発コマンド (bun run dev / bun run dev:firefox) を実行し、リリース用にビルド/zip してください。
このバージョンは主要ポイントをすべて捉え、元のテキストに存在しない推測情報を除外し、明確で簡潔な概要を提示しています。
本文
Browser Code
ユーザースクリプト用のコーディングエージェントで、独自にローダーを備えています。
Browser Code は、クロード(Claude)にウェブページを仮想ファイルシステムとして可視化するブラウザ拡張機能です。
chrome.userScripts(Tampermonkey と同じ API)に永続化されるユーザースクリプトを生成・編集・管理し、URL が一致した際に自動実行します ― DOM 上で「Claude Code」を思わせるものです。
動作概要
- ページはファイルシステムとして扱われる – DOM は
、コンソール出力はpage.html
となります。console.log
にスクリプトを、./scripts/
にスタイルを作成できます。./styles/ - スクリプトは userScripts API 経由で永続化 – 保存されたスクリプトは Chrome や Firefox の等価機能に登録され、CSP 制限を回避します。
- URL が一致すれば自動実行 – スクリプトは保存した URL パターンにマッチするページの読み込み時に実行されます。
などの動的ルートもサポート。/products/[id]
アーキテクチャ
┌───────────────────────────────────────────────────────────────┐ │ ブラウザ拡張機能 │ ├───────────────────────────────────────────────────────────────┤ │ ┌───────────────────────────────────────────────────────┐ │ │ │ バックグラウンドサービスワーカー │ │ │ │ • Claude API クライアント(エージェンティックループ) │ │ │ │ • userScripts 登録と CSP バイパス │ │ │ │ • タブごとの会話履歴 │ │ │ │ • VFS ストレージの調整 │ │ │ └───────────────────────────────────────────────────────┘ │ │ ↕ │ │ ┌───────────────────────────────────────────────────────┐ │ │ │ コンテントスクリプト │ │ │ │ • 仮想ファイルシステム(VFS)の実装 │ │ │ │ • DOM ↔ HTML シリアライズとバージョン管理 │ │ │ │ • スクリプトはメインスレッドで実行 │ │ │ │ • コンソールの傍受 │ │ │ └───────────────────────────────────────────────────────┘ │ │ ↕ │ │ ┌───────────────────────────────────────────────────────┐ │ │ │ サイドバー・パネル(React) │ │ │ │ • チャット UI とツールコールの可視化 │ │ │ │ • Plan/Execute モード切替 │ │ │ │ • ファイルブラウザとローカル同期 │ │ │ └───────────────────────────────────────────────────────┘ │ └───────────────────────────────────────────────────────────────┘
仮想ファイルシステム(VFS)
すべてのウェブサイトは次のような仮想ファイル構造で表現されます。
/{domain}/{url-path}/ ├── page.html # ライブ DOM(読み取り/編集でミューテーションをトリガ) ├── console.log # キャプチャされたコンソール出力(読み取り専用) ├── screenshot.png # 必要時にページをキャプチャ ├── plan.md # エージェントの計画(Plan モード) ├── scripts/ │ ├── my-script.js # あなたが作成したスクリプト(永続化、auto‑run) │ └── _auto_edits.js # DOM 編集から生成 └── styles/ └── custom.css # あなたのスタイル(永続化、auto‑inject)
バージョン管理
ファイルにはバージョン番号が付与され、楽観的同時実行制御を行います。エージェントは編集前にファイルを読み取り、そのバージョンを保持します。DOM が変更された場合、編集はバージョン不一致で失敗します。
動的ルートマッチング
/products/[id] や /docs/[...slug] のようなパスに保存したスクリプトは動的にマッチします。
| パターン | マッチ例 | |
|---|---|---|
| | |
| | |
| | |
ルートパラメータはスクリプト実行前に
window.__routeParams に注入されます。
Plan / Execute ワークフロー
- Plan モード(デフォルト) – エージェントがページを探索し、ファイルを読み取り、
に変更案を提案。DOM の変更やスクリプトの書き込みは行いません。plan.md - Execute モード – ユーザーの承認後、エージェントは計画を実行:ファイルを書き込み、DOM を編集し、スクリプトを走らせます。
この二段階プロセスにより、意図しない変更を防止します。
ローカルファイル同期
| ブラウザ | 読み取り | 書き込み | 使用 API |
|---|---|---|---|
| Chrome | ✓ | ✓ | File System Access API |
| Firefox | – | ✓ (エクスポート) | Downloads API |
- Chrome:一度ディレクトリを選択すれば、双方向同期が可能です。VS Code で編集するとブラウザに反映されます。
- Firefox:ダウンロード API を介してエクスポートのみです。スクリプトは設定したフォルダーへダウンロードされます。
競合解決は「最新が勝つ」か、ユーザー選択で行います。
エージェントツール
| ツール | 説明 |
|---|---|
| ファイル内容を読み取り、バージョンも返す(衝突検知に使用) |
| 既存ファイル内の文字列検索&置換。最後に読んだバージョンが必要 |
| ファイル全体を書き込み。新規の場合はバージョン 0 を指定 |
| パターン(例:)に一致するファイルを検索 |
| 正規表現でファイル内を検索し、マッチとコンテキストを返す |
| スクリプトファイル( など)またはインライン JS を実行 |
| ディレクトリ内容を列挙 |
| 現在のビューポートをキャプチャ |
| マルチステップ作業用タスクリストを管理 |
インストール方法
Chrome
- 拡張機能をビルド(以下参照)またはリリース版をダウンロード。
を開く。chrome://extensions- 「デベロッパーモード」を有効にする。
- Load unpacked →
を選択。.output/chrome-mv3/ - 拡張機能の詳細へ進み、User scripts パーミッションをオン(CSP バイパスに必要)。
Firefox
- 拡張機能をビルド(以下参照)。
を開く。about:debugging#/runtime/this-firefox- Load Temporary Add‑on →
内の任意ファイルを選択。.output/firefox-mv2/
ビルド手順
bun install # 開発モード bun run dev # Chrome 用 bun run dev:firefox # Firefox 用 # 本番ビルド bun run build # 両ブラウザ共通 bun run zip # 配布 ZIP を作成
注意点
- CSP バイパスには「User scripts」権限が必要です。LinkedIn のように厳しい CSP があるサイトでは、拡張設定で許可を有効化してください。
- Trusted Types:一部サイトは
をサニタイズします。その場合は DOM API(例:innerHTML
)を使う必要があります。createElement - Firefox ではファイル同期がエクスポートのみのため、双方向同期は利用できません。
技術詳細
- ストレージ – VFS データは
にbrowser.storage.local
キーで保存。各ドメインはパス → スクリプト/スタイルを保持。vfs:{domain} - スクリプト登録 – ストレージ変更時、バックグラウンドが
を呼び出し、VFS パスからマッチパターンを生成して再登録します。chrome.userScripts.register() - CSP バイパス –
API はカスタムワールド(userScripts
)を設定し、制限を緩和します。script-src 'self' 'unsafe-inline' 'unsafe-eval' - DOM シリアライズ –
で読み取ると完全なドキュメントがシリアライズされます。書き込み時は現在の DOM と差分を計算し、最小限のミューテーションのみ適用します。page.html