An unofficial command line alternative to the SteamOS Devkit Client, for Steam Deck and Steam Frame.
- Compatible. It uses the official client's key and device tools, so a device works with both.
- Easy to install. One binary, with no
ssh,rsyncor Python needed on the host. - Agent-native. No GUI and no prompts on the host, plain exit codes, and a Claude Code plugin that teaches an agent to use it.
Not affiliated with or endorsed by Valve. Steam and related marks are trademarks of Valve Corporation.
Download the binary from the latest release into a directory on PATH:
# Linux x86_64. On ARM use sdev-linux-arm64, on Apple silicon sdev-darwin-arm64.
mkdir -p ~/.local/bin
curl -fsSL -o ~/.local/bin/sdev https://github.com/neguse/sdev/releases/latest/download/sdev-linux-amd64
chmod +x ~/.local/bin/sdev# Windows x64
Invoke-WebRequest -OutFile sdev.exe https://github.com/neguse/sdev/releases/latest/download/sdev-windows-amd64.exeWith Go, go install github.com/neguse/sdev@latest builds it instead.
For Claude Code, the repository is also a plugin with a skill that drives the CLI:
/plugin install sdev --marketplace neguse/sdev
# Send dist/game, add it to Steam, stop the previous run and launch.
sdev deploy 192.168.1.20 --dir dist/game --gameid game --kill game --run -- run.sh
# ARM64 title on Steam Frame.
sdev deploy 192.168.1.21 --dir dist/game --gameid game \
--set steam_play=0 --set compat_tool=SteamLinuxRuntime_4-arm64 -- run.sh
# Save the current screen. On Steam Frame, VR must be active.
sdev shot 192.168.1.20 out.png
# Device and Steam state, as JSON.
sdev status 192.168.1.20
# Anything else runs on the device, and its exit code comes back.
sdev shell 192.168.1.20 'pgrep -x game'sdev help lists every command. For work that reaches outside the CLI, the skill tells an agent what to do.
Confirmed working on a real Steam Deck: history, pair, deploy, run, ls, rm, status, shot, logs, shell, pull, push, perf overlay, gpu-trace, renderdoc-server, flags, controller --appid, restart, session, client.
The first connection to a device asks for approval on the device. The key is the one the official SteamOS Devkit Client uses, so a device paired with either tool works with both.
Game IDs follow the official client's rule, ^[A-Za-z_][A-Za-z0-9_.]+$, and may not be a name it reserves for sideloaded Steam clients. Words after -- reach the game as given; there is no shell expansion. --run reports that Steam took the request, not that the game started. To set environment variables, export them in the launch script: Steam on Steam Deck did not pass on ones set through the devkit tools.
deploy deletes files on the device that are not in --dir. Files with the same size and mtime are skipped. Every file is sent as executable, like the official client does.
devkit-utils/ is copied unchanged from SteamOS Devkit Client (client/devkit-utils, commit e091c17), MIT licensed: see devkit-utils/LICENSE. sdev embeds it and installs it on the device when it needs it. sdev licenses prints the licenses of everything in the binary.