peekwin is a Windows-native CLI for window control, input automation, screen inspection, targeted image capture, and UI wait commands.
Package manager listings can take a little time to show up after a release or moderation step. When available, use:
winget install --id UsamaEjaz.PeekWinchoco install peekwinDownload the latest Windows executable from GitHub Releases:
peekwin-<tag>-win-x64.exefor most Windows PCspeekwin-<tag>-win-arm64.exefor Windows on ARMpeekwin-<tag>-claude-desktop-win-x64.mcpbfor Claude Desktop on most Windows PCspeekwin-<tag>-claude-desktop-win-arm64.mcpbfor Claude Desktop on Windows on ARM
Rename it to peekwin.exe if you want, then run it directly from PowerShell or Command Prompt:
.\peekwin.exe --help
.\peekwin.exe versionIf you want it available from anywhere, add the folder containing peekwin.exe to your PATH.
If you need a specific version, download the asset from that release tag.
Build from source with the .NET 8 SDK:
git clone https://github.com/usamaejaz/peekwin.git
cd peekwin
dotnet build -c Releasepeekwin window list
peekwin app list
peekwin screens
peekwin click --x 400 --y 300
peekwin type --text "hello"
peekwin image --screen 0 --output .\shot.png
peekwin wait window --app notepad --state focused- List, focus, move, resize, minimize, maximize, restore, and close windows
- Send mouse and keyboard input
- Inspect UI elements and reuse them later with
--ref - Capture screenshots of screens, windows, or UI elements
- Wait for windows, text, or saved UI refs to reach a state
- Expose the same command surface over MCP
peekwin includes an MCP server under the mcp subcommand. It supports both stdio and HTTP transports and exposes named MCP tools across the full command surface.
Examples:
window_listwindow_focusclicksee_uiwait_windowcapture_imageclipboard_setget_help
Run the installed peekwin executable over stdio:
peekwin mcpInstall the packaged Claude Desktop extension from a release asset:
- Download the
.mcpbfile for your Windows architecture - Open Claude Desktop
- Go to
Settings - Open
Extensions - Open
Advanced settings - Choose
Install Extension... - Select the
.mcpbfile
Run the installed peekwin executable over HTTP:
peekwin mcp --transport http --urls http://127.0.0.1:3000 --path /mcpPrint the MCP host help:
peekwin mcp --helpThe CLI is Windows-only at runtime, but it can be built from a Linux host with the .NET 8 SDK installed.
Build:
dotnet build -c ReleaseRun locally on Windows:
dotnet run --project .\src\peekwin.csproj -- window listPrint the CLI version:
dotnet run --project .\src\peekwin.csproj -- versionRun the lightweight Windows smoke test:
.\scripts\smoke-test.ps1GitHub release publishing is automated for pushed version tags that match v*.
Directory.Build.props defines the release version. peekwin version, assembly/file metadata, and release tags should stay in sync.
Create and push a release with the helper script:
.\scripts\release.ps1 0.5.0This updates Directory.Build.props, creates a version-bump commit, creates tag v0.5.0, and pushes the branch and tag. Use -NoPush to keep the commit and tag local, or -DryRun to preview the release steps. -DryRun also skips the Windows-only guard so you can preview the flow from non-Windows PowerShell.
You can still push a tag manually if needed:
git tag v0.5.0
git push origin v0.5.0Produced release assets:
peekwin-<tag>-win-x64.exepeekwin-<tag>-win-arm64.exepeekwin-<tag>-claude-desktop-win-x64.mcpbpeekwin-<tag>-claude-desktop-win-arm64.mcpb
Each executable is a self-contained Windows build, so the target machine does not need a separate .NET runtime installation.
Use the built-in help for the full command reference:
peekwin --help
peekwin window --help
peekwin wait ref --help
peekwin mcp --helpUse --json when you want stable, script-friendly output.