本文へスキップ
claudemods

cc-arcade:プロンプトの上で遊べる Claude Code のゲーム Mod

Claude の作業中に、プロンプトの上でスネーク、テトリス、Doom、2048 などのゲームを遊べます。ターンが終わるとゲームは一時停止します。

権限

  • ツール呼び出しを傍受Claude が行うすべてのツール呼び出しを参照でき(tool.call / tool.check)、ブロックや変更も可能です。
  • UI を変更Claude Code の画面に描画します。バンド、ペイン、ステータス表示、トーストなど(ui.render / $.ui.*)。
  • コマンド・ツールを追加あなたや Claude が呼び出せる新しいスラッシュコマンドやツールを登録します($.command.register / $.tool.register)。
  • データを保存プラグイン専用のストアにセッションをまたいでデータを保持します($.store.*)。
検証バージョン
v2.1.291
最終検証日
必要バージョン
Claude Code ≥ 2.1.287
表示先
プロンプト上部、トースト

Claude Code 内でインストール:

/plugin install cc-arcade --marketplace sezaakgun/cc-arcade
すべてのインストール方法 ↓

このModでできること

cc-arcade は Claude Code のゲーム Mod で、Seza Akgün(sezaakgun)によるコミュニティ Mod です。Claude が作業している数分間、Claude Code のプロンプトの上で小さなゲームを遊べるようにします。/arcade を実行すると、入力欄の上にボタンが一列に並びます。ゲームごとのボタンに加えて、pet、random、auto、close があります。どれかをクリックするか、/arcade tetris のように名前を指定すると、盤面がプロンプトの上のスペースを使って表示されます。盤面をクリックするとキーボードがゲームに渡り、Esc でプロンプトに戻ります。

ゲームは 9 種類です。スネーク、テトリス、Doom(4 フロア、3 種類のモンスター、3 種類の武器を備えた一人称視点の通路シューターで、半ブロック文字にレイキャストで描画)、2048、マインスイーパー、Flappy、Pong、タイピングテスト、Space Invaders。各ゲームはセッションをまたいでベストスコアを記録し、ベストを更新するとトーストが表示されます。Claude がターンを終えると、開いているゲームは一時停止し、ステータス行が黄色になって ● Claude is done と表示されるので、返信を見逃すことはありません。

ペットもいます。ペットは Claude の作業とともに成長します。テストの成功、git commit の成功、Edit・Write・NotebookEdit によるファイル編集で XP が入り機嫌が良くなり、テストが失敗すると機嫌が悪くなります。作者は、ゲームは各ジャンルのクローンであり、オリジナルのパブリッシャーとは無関係だと注記しています。README によると、Claude Code 2.1.269 以降、マウスを報告できる対話型ターミナル、罫線文字とブロック文字を含むフォントが必要です。

デモ

録画では /arcade のピッカーを開き、続いて /arcade doom で Doom を開きます。盤面がプロンプトの上に現れ、レイキャストの画面と CLICK HERE TO PLAY のバナーが表示されます。ゲームは盤面をクリックして初めてキーボードを受け取るため、この動画では実際には遊んでいません。クリックするまで、キー入力はプロンプトに入り続けます。

インストール

インストールブロックのいずれかの方法を使ってください。どれも作者自身のマーケットプレイスから直接インストールします。その後、任意のセッションで /arcade を実行します。すでに開いているセッションにインストールした場合は、先に /reload-plugins を実行してください。

$ install cc-arcade

Claude Code 2.1.287 以上が必要

作者のマーケットプレイスからインストール: sezaakgun/cc-arcade

  1. 1.Claude Code 内で1行

    /plugin install cc-arcade --marketplace sezaakgun/cc-arcade

    実行中のセッション(v2.1.275 以降)に貼り付けます。最初に Claude Code がマーケットプレイスの追加を確認します。

  2. 2.シェルから

    claude plugin marketplace add sezaakgun/cc-arcade
    claude plugin install cc-arcade@cc-arcade

    その後、すでに開いているセッションでは /reload-plugins を実行してください。

  3. 3.インストールせずに試す

    git clone https://github.com/sezaakgun/cc-arcade
    claude --plugin-dir ./cc-arcade

    その1セッションだけ Mod を読み込みます。設定には何も追加されません。

仕組み

hooks/register.tsx はフックモジュールです。/arcade を登録し、AbovePrompt の描画位置にピッカーまたは開いている盤面を描き、ベストスコアとペットを $.store に保存し、turn.complete で開いているゲームを一時停止します。hooks/boards/ 以下の各盤面は Client 要素としてマウントされるサーフェスモジュールで、それぞれ独自のフレームクロック、キーボード、マウスを持ちます。ゲームのルールは hooks/games/ に純粋関数として置かれています。以下は hooks/register.tsx から、ペットに餌を与える部分です。

on('tool.call', async ($, e, next) => {
  const r = await next(e)
  const command = (e as { command?: unknown }).command
  const event = petEvent(e.tool, typeof command === 'string' ? command : undefined, 'deny' in r ? undefined : !r.isError)
  if (!event) return r
  const saved = await $.store.get('pet').catch(() => undefined)
  const current = isPet(saved) ? saved : pet ?? newPet($.clock.now())
  const fed = feed(current, event, $.clock.now())
  pet = fed
  await $.store.set('pet', fed).catch(err => $.ui.log(`cc-arcade: store write failed: ${err}`))
  // ...
  return r
})

このフックは await next(e) でまずツールを実行させ、その結果をそのまま返すので、呼び出しを止めたり変えたりすることはありません。hooks/games/pet.ts の petEvent は、Bash コマンドをテストランナーの一覧(bun test、npm test、pytest、go test、cargo test など)や git commit と照合します。ペットは更新のたびにストアから読み直されるので、複数のセッションを並べて使っても同じペットに餌が与えられます。ゲームのラウンドが終わると、盤面は surface.post でスコアを送り、ui.message フックが保存済みのベストを上回っていればそれを記録します。

カスタマイズ

すべての操作は /arcade から行います。

  • /arcade でピッカーを開き、/arcade <game> で特定のゲームを直接開きます。
  • /arcade random は、ペットと直前に遊んだゲーム以外からランダムに選びます。
  • /arcade auto はその時々に合ったものを選びます。直近 5 分以内にテストが失敗していればペット、Claude が 1 分以上作業していれば長めのゲーム、作業中なら短いラウンド、待機中なら 2048 かマインスイーパーです。
  • /arcade list はすべてのゲームとあなたのベストスコアを表示します。
  • /arcade colorblind は Doom を赤と緑の対比に頼らないパレットに切り替え、その設定は記憶されます。
  • /arcade stop でアーケードを閉じます。

権限と安全性

私たちは実行前に、プラグインが読み込むすべてのファイルを読みました。プラグインはネットワーク通信、コマンドの実行、ファイルの読み書きを行いません。UI の変更 はプロンプトの上の盤面とトーストに対応します。コマンド・ツールの追加 は /arcade に対応します。データの保存 はベストスコア、ペット、色覚サポートの設定に対応し、すべてプラグイン専用の $.store に入ります。

ツール呼び出しの介入 が表示されるのは、マッチャーなしですべての tool.call にフックしているため、各 Bash コマンドの文字列と呼び出しが失敗したかどうかが見えるからです。行うのは観察だけで、呼び出しの完了を待ってから結果をそのまま返し、保存するのはカウンターだけで、コマンドの文字列は保存しません。claude plugin validate は警告を報告しませんでした。

ツール呼び出しを傍受
Claude が行うすべてのツール呼び出しを参照でき(tool.call / tool.check)、ブロックや変更も可能です。
UI を変更
Claude Code の画面に描画します。バンド、ペイン、ステータス表示、トーストなど(ui.render / $.ui.*)。
コマンド・ツールを追加
あなたや Claude が呼び出せる新しいスラッシュコマンドやツールを登録します($.command.register / $.tool.register)。
データを保存
プラグイン専用のストアにセッションをまたいでデータを保持します($.store.*)。

互換性とトラブルシューティング

macOS 上の Claude Code 2.1.291 で検証し、作者の 32 件の bun test 単体テストはすべて成功しました。テストは bun:test をインポートしているため、claude plugin test では読み込めません。claude -p、デスクトップアプリ、モバイルでは何も描画されず、盤面には対話型ターミナルが必要です。

  • /arcade が不明なコマンドになる。 README によると関数フックを有効にする必要があります。~/.claude/settings.json の env ブロックに CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1 を設定し、/plugin でプラグインが読み込まれているか確認してください。
  • キー入力がプロンプトに入る。 まず盤面をクリックしてください。
  • クリックしても何も起きない。 ターミナルがマウスを報告していません。/arcade <game> でゲームを開くことはできますが、クリックなしでは盤面にキーボードを渡せません。
  • ブロックの代わりに四角が表示される。 罫線文字とブロック文字を含むターミナルフォントを使ってください。

ターミナルの高さがあるほど盤面は大きくなります。帯にはターミナルの高さの約半分が割り当てられます。

よくある質問

cc-arcade にはどんなゲームが入っていますか?
スネーク、テトリス、Doom(移植ではなく、レイキャストで描く小さな通路シューター)、2048、マインスイーパー、Flappy、コンピューター相手の Pong、タイピングテスト、Space Invaders です。Claude の作業に合わせて育つペットもいます。
キー入力がゲームではなくプロンプトに入ってしまうのはなぜですか?
盤面はクリックして初めてキーボードを受け取ります。Esc を押すとキーボードがプロンプトに戻ります。これが動作するには、ターミナルがマウスクリックを報告できる必要があります。
遊んでいる間に Claude の返信を見逃しませんか?
見逃しません。ターンが終わると、開いているゲームは一時停止し、ステータス行が黄色に変わって "● Claude is done" で始まります。キーを押せば続きを遊べ、Esc を押せば返信を読みに戻れます。
遊ぶとトークンを消費しますか?
いいえ。プラグインはクリックやコマンドにすべて自分で応答し、モデルは呼び出しません。ネットワーク通信も行いません。
ペットは何を見ていますか?
すべてのツール呼び出しにフックし、Bash コマンドがテストの実行や git commit だったか、Claude がファイルを編集したかを確認します。保存されるのはカウンターだけで、プラグイン専用のストアに入ります。コマンドの文字列、パス、プロンプトは保存されません。
Claude Code で動作中の ツール呼び出しカウンター

ツール呼び出しカウンター

Claude のツール呼び出しをターンごと・セッションごとに数え、スピナーの横に件数を表示。/tally で内訳も確認できます。

  • スピナー
  • トランスクリプト
  • ステータス
  • ツール呼び出しを傍受
  • UI を変更
  • コマンド・ツールを追加

v2.1.291 で検証済み

Claude Code で動作中の 完了トースト

完了トースト

Claude の長いターンが終わると「Done in 2m 14s」のトーストと短いチャイムでお知らせ。デスクトップ通知にも対応します。

  • トースト
  • コマンドを実行
  • UI を変更
  • 音を再生

v2.1.291 で検証済み

同じカテゴリの Mod: タイマー、ToDo、スタンドアップ、スラッシュコマンド。