UStackUStack
Standboy icon

Standboy

Standboy is a VS Code extension that embeds a Game Boy emulator panel and auto-expands/pauses it based on your AI coding agent activity.

Standboy

What is Standboy?

Standboy is a VS Code extension that embeds a Game Boy-family emulator panel and ties the emulator’s visibility and play state to the activity of your AI coding agent. When the agent starts generating, Standboy automatically expands the emulator sidebar and resumes playback; when the agent finishes or becomes idle, Standboy hides the panel and pauses the emulator.

The goal is to reduce the “dead time” of waiting for an agent by keeping the distraction within the IDE and hard-pausing the emulator when the agent is not actively working. It supports loading your own ROM files and persists the last played game and saves across VS Code restarts.

Key Features

  • Auto-show/auto-hide based on agent activity: The extension expands the emulator after the agent has been working for a few seconds, and tucks it back down after a similar idle window to avoid flicker during brief agent turns.
  • Lifecycle hookup for Cursor and Claude Code: Standboy integrates via Cursor’s and Claude Code’s official lifecycle APIs using a single toggle in the panel menu.
  • Resumes mid-frame: When the emulator is re-opened, it picks up exactly where it left off (not just restarting the game).
  • ROM library with persistent saves: Loaded ROMs are copied into a managed library. In-game save state mirrors to disk when the panel hides, the page unloads, and before Export; runtime state is kept in IndexedDB, with the extension designed so saves survive VS Code restarts.
  • ROM matching and library metadata: ROMs are identified by matching their SHA-1 against a bundled No-Intro database, enabling consistent canonical titles and cover art (with a letter-tile fallback for homebrew/hacks).
  • Device and input support: Supports .gb, .gbc, and .gba ROMs with platform auto-detection by file extension. Keyboard controls are rebindable from the panel menu, mapping the D-pad to arrow keys and A/B/Start/Select to any chosen keys.
  • Offline emulator and bundled data: The emulator (EmulatorJS) and the No-Intro database are bundled and run offline.

How to Use Standboy

  1. Install the VS Code extension: In VS Code, open the Extensions panel and search for Standboy, or run code --install-extension mfbzme.standboy.
  2. Connect agent detection (first run): On first activation, Standboy auto-opens the panel and shows a card to connect the detected agent type (Claude Code if ~/.claude/settings.json exists, or Cursor if running inside Cursor). Use Connect to enable lifecycle hooks, or dismiss and toggle later from the menu under Detection.
  3. Add a ROM: Click + Add ROM (or Load ROM… from the menu), then choose a local .gb, .gbc, or .gba file. Standboy copies it into its managed library, identifies it against the bundled No-Intro database, and starts the emulator.
  4. Use the emulator during active generation: The panel accepts keyboard input while it is open. When the agent is idle, Standboy pauses and hides the panel according to the idle window rules.

Use Cases

  • Keeping yourself focused while an agent works: When Cursor/Claude Code begins generating code, Standboy expands the emulator so you can play without leaving the IDE; when generation ends, it pauses and tucks the panel away.
  • Avoiding “tab switching” during long agent runs: Instead of switching to other apps (chat, forums, messaging), the emulator provides an in-editor break with a hard pause boundary when the agent is active/finished.
  • Returning to the same game after restart: After you load a ROM once, Standboy auto-resumes the last played ROM on the next VS Code launch, restoring save data.
  • Building a ROM library with consistent titles/covers: ROM files named differently on disk still appear with canonical titles and cover art by matching SHA-1 hashes to the bundled No-Intro database.
  • Testing different input layouts: Users can rebind controls from within the panel menu to fit their keyboard or preferences.

FAQ

  • Does Standboy include any games or provide ROM sources? No. Standboy loads user-supplied ROMs only and includes no bundled games and no links to ROM sources.

  • Can I use it offline? The emulator and the No-Intro database are bundled and run offline. The only described outbound network calls are one-shot cover-art fetches against libretro-thumbnails, performed by the extension host and cached locally.

  • How does Standboy decide when to show or hide the emulator? Standboy activates only when agent activity has been detected for a few seconds (auto-show), and it hides after a similar idle window (auto-hide). The behavior is designed to avoid strobing on very short agent turns.

  • Which agent integrations are supported? The extension hooks into Cursor and Claude Code using their official lifecycle APIs, with a toggle in the panel’s menu. For other agents, it can fall back to an edit-burst heuristic if specific support isn’t available.

  • Does the emulator resume where I left off? Yes. Standboy resumes mid-frame when the panel re-opens, and the webview is retained when hidden so it pauses in place and continues from the same state.

Alternatives

  • General-purpose Game Boy emulators (standalone desktop/mobile): These focus on gameplay but don’t integrate with VS Code agent lifecycles to pause/show automatically.
  • Other VS Code media/notification side panels: Extensions that surface activity indicators or simple dashboards can help manage focus, but they typically won’t provide an emulator that resumes mid-frame and persists saves.
  • IDE task schedulers or focus timers (Pomodoro-style): These can reduce “waiting time” in a structured way, but they don’t provide an in-IDE emulator with ROM identification and save persistence.
  • Emulator integrations built into webviews without agent hooks: Similar workflow (play inside the editor) but without the lifecycle-based show/hide and mid-frame resume tied to AI agent activity.