⏳ This skill is pending AI review.

Scores will appear once the review pipeline completes.

version unknown

steam-debug

@kmturley⭐ 7 stars

Inspect, debug, and inject custom code into a running Steam client — desktop (macOS, Linux, Windows) or Steam Deck over the network — through its Chromium Embedded Framework (CEF) Chrome DevTools Protocol endpoint. Use when developing Steam UI plugins, mods, themes, or integrations — injecting CSS/JS to try a change, locating webpack modules and obfuscated class names, reading React or SteamUIStore state, inspecting Big Picture / Quick Access Menu windows, screenshotting what actually rendered, streaming console logs, or diagnosing runtime errors in Steam's UI. The same commands run against either device, or both at once. Injection is per-session and for development only. Not for building a plugin loader or making changes persist across restarts, Steamworks game SDK work, game development, or scraping the public Steam web store.

Choose how to use this skill

You do not need every option. Choose the path your AI client supports. The stable page stays the same; versioned files are immutable.

1. Native installer

This listing has no registered native installer command. Use the complete package or source fallback below, depending on what your client supports.

Do not guess an installer command or replace an existing version without reviewing the diff.

2. Complete package recommended

Download the ZIP when available. It includes SKILL.md plus the references, security notes and version metadata.

No complete ProSkills package is published for this listing yet.

3. Prompt-only

Copy the prompt above when the agent can read the stable page or when you want to adopt the workflow without installing a skill.

Need only the instruction file?

Download SKILL.md only if your client requires a single file. The complete ZIP is safer for a full installation because it preserves the references and release context.

No path installs or executes anything by itself. Your agent still needs access to the project files. Before updating, compare the installed version and review the diff.

—/10

// RATINGS

⭐GitHub Stars
⭐ 7 on GitHubGitHub ↗

New / niche

🟢ProSkills Score
—
📍

Not yet listed on ClawHub or SkillsMP

// README

steam-debug

A Claude skill and standalone CLI for inspecting, debugging, and injecting code into a running Steam client — desktop or Steam Deck — via the Chrome DevTools Protocol (CDP).

Steam's UI is a Chromium Embedded Framework (CEF) app. Launched with debug flags it exposes the same protocol browser DevTools uses, so the entire Steam UI can be inspected and modified at runtime like a web page. steam-debug.mjs wraps that protocol into focused commands — read React state, search webpack modules, resolve minified class names, inspect computed CSS, drive navigation, stream logs, and inject custom CSS/JS.

Built for plugin, theme, and integration development against Steam's UI.

Works on desktop and Steam Deck. Same commands for both — a desktop client on macOS, Linux or Windows, and a Deck over the network via --host. Both are exercised by the test suite, and any command can run against both at once. See reference/remote.md.

Scope. This is a debugging and development tool. Injection is per-session and disappears on reload, by design — it exists so you can try a change and see what happens.

Out of scope: making a change persist or load on startup, packaging or distributing plugins, and anything that runs unattended inside someone's client. That belongs in a plugin loader. The boundary is simple — this helps you find out what is going on and try a change; making a change stick is someone else's job.


Using with Claude

Place this directory at ~/.claude/skills/steam-debug/. Claude Code discovers it via SKILL.md.

Describe the task in plain language; Claude selects the commands, interprets output, and follows the operating procedure in SKILL.md:

"Why is my injected CSS not showing up in Big Picture Mode?" "Find the webpack module that defines the DialogButton component." "Make the Quick Access Menu background darker." "Something is throwing a React error on the downloads page — find it."

SKILL.md is a strict SOP rather than a tutorial: it gates work behind a preflight check, fixes which commands may be used, and defines how to verify a result before reporting it — because the easiest mistake here is a confident answer drawn from the wrong window, a stale route, or a style that computed but never painted.


Requirements

  • Node.js 22+ — uses built-in WebSocket and fetch, no dependencies
  • A Steam client with CDP enabled — either:
    • desktop, launched with -cef-enable-debugging (see below), or
    • a Steam Deck with Settings → System → Developer → CEF Remote Debugging, reachable on your network. Address it with --host; SteamOS serves CDP on port 8081.
  • Chrome — optional, only for the interactive DevTools UI

Launch Steam in debug mode

Launch flags are read only at startup. A already-running instance silently ignores them, so it must be closed first — note that this drops in-progress downloads and running games.

# macOS
pkill -f Steam
# Linux
pkill steam
# Windows
taskkill /IM steam.exe /F
PlatformCommand
macOSopen -a Steam --args -dev -windowed -cef-enable-debugging -gamepadui
Linuxsteam -dev -windowed -cef-enable-debugging -gamepadui
Windowssteam.exe -dev -windowed -cef-enable-debugging -gamepadui
Steam DeckSettings → System → Developer → CEF Remote Debugging
FlagEffect
-cef-enable-debuggingRequired. Opens CDP on port 8080 (8081 on Steam Deck)
-devDeveloper mode — relaxed security, verbose logging
-windowedRun windowed instead of fullscreen
-gamepaduiBig Picture Mode. Required for page, menu, and stores

Omit -gamepadui to debug the classic desktop UI, which is a different front end.

curl http://localhost:8080/json/version   # {"Browser": "Chrome/...", ...}

Steam takes 30–90 seconds to fully initialise. Poll status until both marks are ✓.


Usage

S=~/.claude/skills/steam-debug/steam-debug.mjs

node $S status
node $S help
CommandDescription
statusCDP endpoint, target count, webpack module count, init state
doctorDiagnose the whole setup and print the remedy for whatever is wrong
targetsAll CDP targets with title, URL, WebSocket URL
eval <expr>Evaluate JS; promises awaited; objects returned as JSON
errorsInstall a console.error capture shim, print what it caught
logsStream live console, browser and Steam-backend output until Ctrl+C
console <cmd> / console listRun a Steam developer-console command, or list what exists
restart <js|client>Restart the UI or the whole client, and wait for it to come back
reactReact version, module ID, fiber tree stats
styles <selector>Computed styles, layout rect, resolved CSS custom properties
dom <selector>Dump an element subtree — structure, sizes, leaf text
text [selector]Dump the visible on-screen text — cheap alternative to a screenshot
webpack <pattern>Search every webpack module's source
classes <pattern>Resolve minified CSS-module class names by readable name
module <id>Dump a webpack module's full source
navigate <page>Drive Big Picture Mode to a page
pageCurrent route and open menu
menu <name>Open or close Quick Access / Main Menu
popupsPopup windows tracked by g_PopupManager
storeswindow.SteamUIStore sub-stores and properties
screenshot [selector]Capture what is actually painted, as a PNG
inject css|js <file>Inject a stylesheet or script, namespaced and reversible
inject list / inject remove <slug>List or undo injections
watch css|js <file>Re-inject on every file change until Ctrl+C
OptionApplies toDefault
--target <name>eval, errors, logs, styles, dom, text, module, screenshot, inject, watchSharedJSContext
--port <n>alltries 8080, 8081, then 9222
--host <addr>alllocalhost — comma-separate for several devices
--timeout <ms>all10000
--jsonalloff
--level <all|warn|error>logsall
--source <all|console|browser|backend>logsall
--grep <regex>logs—
--limit <n>webpack, classes, console list, text10 / 20 / 500
--ignore-casewebpack, classes, console listoff
--depth <n>dom2
--out <path>screenshotderived from target title
--diff <path>screenshot—
--settlescreenshotoff
--file <path>eval—
--id <slug>inject, watchderived from filename
--confirmrestart, consoleoff
--show-secretsalloff

--json works on every command and guarantees machine-readable stdout, so nothing has to be parsed out of prose. logs --json emits one JSON object per line.

Credentials are redacted by default. Any JSON value under a key that looks like a token, password, Steam Guard blob, machine ID or session id is replaced with a description of what was withheld, and eval refuses an expression touching SteamClient.Auth. Pass --show-secrets when you are deliberately debugging sign-in.

--host takes a list, so any command can run against a desktop client and a Steam Deck together — the practical way to check a plugin behaves the same on both:

node $S page --host localhost,steamdeck
node $S inject css theme.css --host localhost,steamdeck --target BigPicture
node $S logs --host localhost,steamdeck --level error   # concurrent, tagged per device

Output is labelled per device, --json aggregates into { devices: [...] }, --out is suffixed so captures do not overwrite, and the exit code is 0 only if every device succeeded.


Reading Steam's own logs

Three streams, not o

// HOW IT'S BUILT

KEY FILES

SKILL.mdREADME.md

// REPO STATS

7 stars