A lazydocker-style terminal UI for managing a fleet of Steam devkits: Steam Deck, Steam Machine, and anything else running the SteamOS devkit tools. One keyboard-driven panel instead of clicking through Valve's GUI once per device.
The real lazydeck TUI: device list, detail, and activity panels, refreshing status across a small devkit fleet.
Your whole fleet in one view. Multi-select devices with space and batch a deploy, log sync, or delete across all of them at once.
mDNS/Bonjour LAN discovery (f in the TUI, or an add-device wizard that walks discover → pick → pair) means no hunting for a Deck's IP address.
Vendors the MIT-licensed devkit_client library, pulled from the actively-maintained flibitijibibo/steamos-devkit fork. Same pairing/SSH/rsync/mDNS logic Valve's GUI uses, not reimplemented from scratch.
A local lazydeck serve API (versioned, loopback-only, HTTP+SSE) exposes every operation for scripting and for game-engine editor plugins. The TUI is just one client.
A pure terminal UI, not a PySDL2/imgui window. Runs over SSH, inside tmux or screen, on a headless Linux build box where Valve's own devkit client can't open a window at all.
Godot 4 and Unity editor plugins (dock UI, export, deploy, log sync) ship today, plus an Unreal plugin in progress. All talk to lazydeck serve directly.
lazydeck mcp exposes the same API as MCP tools over stdio for Claude Desktop, VS Code Copilot, and other MCP-capable clients. Read-only by default; mutating tools are opt-in.
Bind any key to an arbitrary shell command against the selected device(s) in config.yml, lazygit-style. No plugin API to learn, no fork to maintain.
Point webhooks at a Discord or Slack incoming webhook URL (auto-detected and formatted natively) or any other endpoint, and every deploy or log-sync job posts success or failure when it finishes.
Records devkit host keys the first time you pair, in a dedicated known_hosts file, and warns (or optionally rejects) on a changed key later.
Pinned Go/Python/tool versions via mise, a reproducible Containerfile, GitHub Actions pinned to commit SHAs, and SBOMs, checksums, and build provenance generated for every release.
brew install kevintcoughlin/lazydeck/lazydeck
Or grab a tagged release archive from
Releases and run
install.sh. Every release bundles the Go binary alongside the
vendored Python runtime; you only need
uv installed locally.
lazydeck serve exposes health, capabilities, device
discovery/pairing/status, async deploy and log-sync jobs (with
cancel + SSE progress), all over a versioned local HTTP API. Browse
the rendered API docs or read
the raw OpenAPI spec.
lazydeck mcp exposes the same local API to Claude Desktop,
VS Code Copilot, and other MCP-capable clients over stdio, for anyone who
wants to script their fleet from an LLM client instead of the TUI.
Read-only tools are on by default; add --allow-mutations to
let an agent pair devices, deploy, sync logs, or cancel jobs.
{
"mcpServers": {
"lazydeck": {
"command": "/absolute/path/to/lazydeck",
"args": ["mcp"]
}
}
}
Restart your MCP client after editing its config. See the MCP guide for details.
| Key | Action |
|---|---|
| ↑/k · ↓/j | move the cursor |
| space | multi-select (batches d/l/x) |
| s | refresh status for all devices |
| d | deploy a build |
| l | sync logs down |
| g | list installed games |
| a | add-device wizard (discover + pair) |
| enter | open an interactive SSH shell |
| ? | full help screen |