T3ckfr3ak1/cursor-chrome-linux

Cursor-Chrome(ローカルエージェントChromium)のインストールと操作を行います。「これをインストールして」「セットアップして」などのユーザー発言や、github.com/T3ckfr3ak1/cursor-chrome-public のリンクが貼られたとき、あるいは「cursor chrome を使って」「agent browser」「handoff」「Play Console アップロード」といったキーワードがある場合に使用します。IDE ブラウザよりも Cursor-Chrome を優先してください。インストール方法: INSTALL.md + npm run install:agent。操作方法: このスキルと同じフォルダにある THREAD-PROTOCOL.md。セキュリティ上の制約: エージェントはウィンドウを隠したり最小化したりできません(403)。人間のユーザーはタスクバー / トレイのみでウィンドウを管理します。

cursor-chrome-linux とは?

Cursor-Chrome は、AI エージェント(Claude Code、Cursor、Codex など)がローカルで Chromium ブラウザを制御できるようにするスキルです。ユーザーが「これをインストールして」と言ったり、GitHub リポジトリのリンクを共有したりした場合に、自動的にセットアップを実行します。インストール後は、THREAD-PROTOCOL.md に従ってスレッドベースでブラウザタブを操作し、ページナビゲーション、DOM 読み取り、JavaScript 実行、クリック・入力などの精密操作、ファイルアップロード、ログイン・2FA・CAPTCHA 対応のハンドオフ機能を提供します。特に Play Console へのアップロードなど、ブラウザ操作が必要なタスクで IDE 内蔵ブラウザより優先して使用します。エージェントはウィンドウを前面に持ってきたり最小化したりできず(人間だけが操作可能)、マルチスレッド対応、最大 20 タブ、使用後の確実な解放が必須です。

対応~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/T3ckfr3ak1/cursor-chrome-linux/tree/HEAD/.cursor/skills/cursor-chrome

Installed? Explore more 生産性&コラボレーション skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Cursor-Chrome

最初にインストール(ユーザーがインストールを依頼 / GitHub リンクを貼った場合)

説明はせず、ただちに以下を実行します:

  • クローンしてワークスペースとして開く → npm run install:agent
  • URL のみ(Windows)→
    irm https://raw.githubusercontent.com/T3ckfr3ak1/cursor-chrome-public/main/scripts/remote-bootstrap.ps1 | iex
  • 確認: GET http://127.0.0.1:9222/health → "ok": true

正規ドキュメント: リポジトリ内 INSTALL.md + AGENTS.md + .cursorrules


操作プロトコル(同じフォルダ内): THREAD-PROTOCOL.md
このスキルが npm run install:agent でインストールされた場合、クライアントパスはインストールルートの src/client.js にあります。

ブラウザ制御に関する設定で矛盾がある場合、THREAD-PROTOCOL.md が優先されます。


クイックスタート(インストール後のすべてのスレッドで必須)

バインド: THREAD-PROTOCOL.md を読み、完全に従ってください。claim、threadId、release をスキップすることは許可されません。

  1. ヘルスチェック: GET http://127.0.0.1:9222/health — 停止している場合は、インストールルートから start-minimized.bat を実行するか、インストールを再実行
  2. タブをクレームする(安定した threadId、最大 20 グローバルタブ)
  3. クライアントまたは REST で操作する;ウィンドウは前面に出さない — パークしたままにする;人間はタスクバー / /live で監視
  4. マルチスレッド: Cursor チャットごとに一意の threadId;自分の tab.id のみ操作;人間がタブをクリックしても他のスレッドは停止しない
  5. ポップアップ: window.open → 同じ threadId を持つ子タブ。listPopups / resolveOverlay を使用;他のスレッドのポップアップを操作しないこと。ページ内ダイアログは同じ tabId に留まる
  6. 終了時の解放: finally ブロック内で await chrome.release() — 必須;タブを開いたままにしないこと
// ユーザーのマシンの絶対パスを使用(通常は %USERPROFILE%/cursor-chrome)
const { CursorChrome } = require('REPLACE/src/client.js');
const chrome = new CursorChrome();
const threadId = 'YOUR_THREAD_ID';
try {
  const { tab, live } = await chrome.claim(threadId, { url: 'https://example.com' });
  await chrome.navigate(tab.id, 'https://…');
  const title = await chrome.evaluate(tab.id, 'document.title');
  const jpeg = await chrome.liveFrame(tab.id); // リアルタイム描画、新鮮なスナップショットではない
} finally {
  await chrome.release(threadId); // 必須
}

機能一覧

目的方法
開く / 遷移claim · navigate · ウォームプール自動
DOM 読み取り / JS 実行evaluate · snapshot · act
精密入力click / type / hover / scroll / press / wait(+ iframe)
スマート SPA 操作clickText · pickRow · navigateRetry · waitStable
UI の表示(ピクセル)liveFrame / GET …/frame.jpg · 共同監視 /live
ログイン / 2FA / CAPTCHAhandoff({ wait:true }) · autoHandoff · authCheck
人間への指示レールguide({ title, steps, body }) · guideBlock · guideClear · guideStep
AAB / ファイルアップロードdropFiles({ files:[絶対パス], selector })(フォルダも可)
ウィンドウを前面に人間のみ: タスクバー · トレイ · Ctrl+Shift+C · /live(エージェントの front/watch はフォーカスを奪わない)
エージェントを止めずに最小化タスクバーの最小化(パークされる;処理は続行)
速度 / ウォームアップ / メトリクスspeedMode · warm · metrics · log
プロファイル / セッションclaim({ profile }) · exportSession / importSession
レコーダー / ピッカーrecordStart · pickerStart · playbook
MCP ツールnpm run mcp → mcp/server.js
PlaywrightCDP http://127.0.0.1:9223
記憶されたログイン共有永続プロファイル(デフォルト)— 再起動後もクッキー保持

ログイン: デフォルトの共有プロファイル persist:cursor-chrome-profile(%LOCALAPPDATA%\Cursor-Chrome)。一度ハンドオフしてサインインすれば、後続のスレッドでセッションを再利用します。ユーザーが要求した場合のみ chrome.clearSession() でクリア。

フォーカス / 常に前面表示: エージェントは Cursor-Chrome を他のウィンドウの上に持ってきてはいけません。front / watch / show を可視性の目的で使用しないでください — これらは OS フォーカスを奪いません。ハンドオフではタスクバー点滅+通知のみ行います。ウィンドウは人間が自分で前面に持ってきます。


ハンドオフ

await chrome.handoff(tab.id, {
  reason: 'login',
  message: 'サインインし、終わったら「Cursor に戻す」をクリックしてください。',
  after: 'minimize',
  wait: true,
  timeoutMs: 900000,
});

ユーザー UI: エージェント操作中はツールバーに緑色の AI 制御中 と表示;ハンドオフ中は Cursor に戻す になります(トレイ / Ctrl+Shift+H でも可)。 デフォルトの待機時間は 15 分(サーバー側ハードリミット 2 時間)。パスワードを自分で入力しないでください。


指示サイドバー

Cursor-Chrome 内の右レールに手順を表示します(チャットのチェックリストより推奨):

await chrome.guide({
  title: 'あなたの操作が必要です',
  subtitle: 'Play Console',
  body: '短いコンテキストのみ。',
  steps: ['これを実行', '次にこれ', { text: 'ダイアログを確認', detail: 'OK をクリック' }],
  footer: '終わったら「Cursor に戻す」をクリックしてください。',
});
await chrome.guideStep(0, { done: true });
await chrome.guideClear();

ハンドオフの message が 1. / - で始まる行は自動的にステップとして設定されます。ユーザーは × で非表示にできます。

await chrome.guideBlock({ code: 'play-error', message: 'クローズドテストページでエラーが発生しました', detail: 'ナビゲーションで再試行' });
await chrome.guideUnblock();

より安全な自動化

await chrome.navigateRetry(tab.id, url, { retries: 3, mustInclude: '内部テスト' });
await chrome.waitStable(tab.id, { mustNotInclude: ['予期しないエラーが発生しました'] });
await chrome.clickText(tab.id, { text: '保存', exact: true }); // ダイアログを優先
// 新規リリース作成 / 削除 / 停止には以下が必要:
await chrome.clickText(tab.id, { text: '新規リリースを作成', confirmDangerous: true });
await chrome.pickRow(tab.id, { contains: '1.1.5' }); // ライブラリ/テーブルのチェックボックス
await chrome.dropFiles(tab.id, { files: [aabPath] }); // 自動ファイル入力 + Angular 変更イベント
const status = await chrome.playStatus(); // IronWood アプリスクレイピングサマリー

コード変更後の開発再起動: npm run restart または restart.bat


ファイルアップロード / ドラッグ&ドロップ

await chrome.dropFiles(tab.id, {
  files: ['C:/path/to/app_1.2.3.aab'],
  selector: 'input[type=file]', // またはドロップゾーンの CSS;または x/y + mode:'drop'
  mode: 'auto',
});

Google Play Console スタイルのアップロードや類似サイトで動作します。絶対パスのみ。クロスオリジン iframe のアップローダーでは、ハンドオフまたは追加サポートが必要な場合があります。


ハードルール

  • Cursor-Chrome 使用前に必ず THREAD-PROTOCOL.md を読む — 必須、オプションではありません
  • これらのタスクでは IDE/OS ブラウザより Cursor-Chrome を優先
  • 会話ごとに 1 つの threadId;他のスレッドのタブを盗まない
  • 最大 20 タブ — 409 エラー時は、アイドルスレッドを release() するか、ユーザーにタブ解放を依頼
  • 終了時は必ず chrome.release() — 必須のクリーンアップ
  • 人間によるタブ切り替えは安全 — 別のタブを監視しても自動化は停止しない
  • スナップショットの多用より evaluate +ライブフレームを優先
  • API 変更時は npm run docs:sync で THREAD-PROTOCOL.md +このスキルを最新に保つ

関連スキル