| name | play-game |
| description | ブラウザゲームを自動プレイするスキル。agent-browserを使ってローカルまたはオンラインのHTML/JSゲームをプレイします。倉庫番、オセロ、五目並べなど。 |
| allowed-tools | Bash(agent-browser:*), Bash(npm install -g agent-browser*), Bash(chmod +x*), Bash(python3 -m http.server*), Bash(lsof -i:*), Bash(kill *), Bash(mkdir -p logs*) |
Game Playing with agent-browser
ブラウザゲームを自動プレイするためのスキルです。
重要な制約事項
ゲーム情報の確認方法について:
- 各ゲームの情報は、そのゲームディレクトリ内の
README.md からのみ確認できます
README.md 以外のファイル(script.js、style.css、index.html など)は読むことが禁止されています
- これらのファイルを読もうとすること自体も禁止されています
- ゲームの操作方法やルールは
README.md に記載された情報と、実際にゲームを動かして得られる情報のみを使用してください
1. 事前準備(自動セットアップ)
agent-browserのセットアップ
agent-browser --version 2>&1 || npm install -g agent-browser
chmod +x $(npm root -g)/agent-browser/bin/agent-browser-darwin-* 2>/dev/null
agent-browser install 2>&1 | tail -5
ワンライナーセットアップ
npm install -g agent-browser && chmod +x $(npm root -g)/agent-browser/bin/agent-browser-darwin-* && agent-browser install
2. ローカルゲームのプレイ
Step 1: HTTPサーバーを起動
cd /path/to/game && python3 -m http.server 8888 &
Step 2: ゲームを開く
agent-browser --headed open http://127.0.0.1:8888/index.html
!!!! 最重要 !!!!
絶対に --headed オプションを付けてください。
--headed を付けないとヘッドレスモード(画面非表示)で動作し、ゲームの様子が視聴者に見えません。
ヘッドレスモードでのプレイは厳禁です。必ず agent-browser --headed open ... の形式で起動してください。
Step 3: スクリーンショットで状態確認
mkdir -p logs
agent-browser screenshot "logs/$(date +%Y%m%d-%H%M%S)_game.png"
スクリーンショットの保存ルール:
- すべてのスクリーンショットは
logs/ ディレクトリに保存してください
- ファイル名は必ず
YYYYMMDD-HHMMSS_名前.png 形式にしてください
- 例:
logs/20260202-143025_initial.png, logs/20260202-143130_result.png
- シェルでの生成:
agent-browser screenshot "logs/$(date +%Y%m%d-%H%M%S)_名前.png"
- プロジェクトルートや
/tmp/ に保存しないでください
Step 4: ゲームオブジェクトを確認
agent-browser eval "typeof game"
agent-browser eval "Object.keys(game).join(', ')"
Step 5: ゲームを操作
agent-browser eval "game.move('right')"
agent-browser eval "game.move('up')"
agent-browser eval "game.handleCellClick(3, 4)"
3. ゲーム別ガイド
倉庫番 (Sokoban)
agent-browser eval "JSON.stringify({player: game.playerPos, stage: game.currentStage})"
agent-browser eval "game.move('right')"
agent-browser eval "game.isCleared()"
パズルの解き方のコツ:
- 箱は押すことしかできない(引けない)
- 壁際に押すとスタックする可能性あり
- 目標地点に近い箱から処理
オセロ (Othello)
agent-browser eval "JSON.stringify(game.getValidMoves(game.currentPlayer))"
agent-browser eval "game.handleCellClick(row, col)"
agent-browser eval "game.gameOver"
五目並べ (Gomoku)
agent-browser eval "game.handleCellClick(row, col)"
agent-browser eval "game.winner"
4. 便利なパターン
連続操作(重要:音声同期を行うこと)
重要: ゲーム操作の前に必ず音声読み上げの完了を待ってから次の操作を行ってください。同期XHRでTTS完了を待機します。
agent-browser eval "['right', 'right', 'down', 'left'].forEach(d => game.move(d))"
for dir in right right down left; do
agent-browser eval "var x=new XMLHttpRequest();x.open('GET','http://localhost:3000/api/tts/wait',false);try{x.send()}catch(e){}"
agent-browser eval "game.move('$dir')"
done
ゲームループ(シェルスクリプト)
moves="right right down left up"
for dir in $moves; do
agent-browser eval "var x=new XMLHttpRequest();x.open('GET','http://localhost:3000/api/tts/wait',false);try{x.send()}catch(e){}"
agent-browser eval "game.move('$dir')"
done
状態をJSON出力
agent-browser eval "JSON.stringify(game)" --json
5. トラブルシューティング
| 問題 | 解決策 |
|---|
game が undefined | agent-browser eval "Object.keys(window).filter(k => !k.startsWith('webkit'))" でグローバル変数を確認 |
| キー操作が効かない | eval でJavaScript直接操作を使用 |
| サーバーが起動しない | lsof -i:8888 でポート使用状況を確認、kill で終了 |
| スクリーンショットが真っ白 | agent-browser wait 2000 で待機してから撮影 |
6. サーバー管理
lsof -i:8888
kill $(lsof -t -i:8888)
7. ブラウザを閉じる
agent-browser close