Anode is a Windows MCP server and CLI that gives AI agents their own desktop for computer use, GUI automation and UI testing, while you keep using your PC. Claude Code, Codex, Claude Desktop or any Model Context Protocol client gets a separate screen, mouse pointer and keyboard focus in a background Windows session, which Anode calls the seat. The agent can run builds, drive native apps and headed browsers, read accessible controls and take screenshots without moving your pointer or stealing your focus.
Works on 64-bit Windows 10/11 Pro, Enterprise or Education, and Windows Server with a Remote Desktop host. Not Windows Home. Free and open source (MIT).
Install for Windows x64 · Portable ZIP · Connect an agent · Troubleshooting · Changelog
flowchart LR
subgraph yours["Your session: your mouse, keyboard and apps"]
agent["Claude Code / Codex / any MCP client"] -- "MCP (stdio)" --> mcp["anode mcp"]
mcp -- "named pipe" --> daemon["Anode daemon<br/>viewer + Stop button"]
end
subgraph seat["The seat: a background Windows child session"]
host["seat host<br/>screenshots, input, UI Automation, command jobs"] --> apps["apps, browsers, builds, games"]
end
daemon -- "named pipe" --> host
- Develop and test apps: run builds and local servers, collect command output, inspect native controls, test browser forms and capture screenshots in the background desktop.
- Give an agent a desktop: 32 MCP tools for guidance, screenshots, mouse/keyboard input, accessibility, UI waits, application launches and cancellable command jobs.
- Watch or stop it:
anode showopens the viewer andanode hidecloses it. Ctrl+Alt+Shift+K oranode killsigns the seat out and closes every application in it, including unsaved work. - Automate games: optional virtual Xbox 360 controller support through ViGEmBus.
- Coordinate several agents: exclusive desktop leases and command jobs scoped to each agent. Agents share one seat and take turns; see multiple agents.
The seat is a Windows child session: a second session for your own account, created by Windows' built-in loopback Remote Desktop feature. It has its own pointer and focus; adding a virtual monitor to your current session does not. The seat runs as your Windows user and shares your files, account and network. This is desktop isolation, not a security sandbox. Virtual gamepads are machine-wide. See security and isolation.
Requires: Windows 10/11 Pro, Enterprise or Education, or Windows Server with a Remote Desktop host. The release targets x64; ARM64 is not validated. Windows Home is unsupported. Release builds include .NET; you do not need an SDK or runtime. ViGEmBus is optional.
Run in an ordinary PowerShell terminal:
Invoke-WebRequest -UseBasicParsing https://github.com/skulitom/Anode/releases/latest/download/install.ps1 -OutFile install.ps1
# You can inspect install.ps1 before running it.
powershell -NoProfile -ExecutionPolicy Bypass -File .\install.ps1The installer verifies the release archive's SHA-256 checksum, installs to
%LOCALAPPDATA%\Programs\Anode, adds that folder to your user PATH and adds Anode to the
Start menu, where opening it shows the viewer, and to Installed apps, where you can uninstall it.
Open a new terminal afterward. Machine setup and agent registration are separate steps below.
Prefer portable? Download the ZIP,
extract the entire folder, and use .\anode.exe in place of anode.
Builds are currently unsigned; Windows may show a SmartScreen warning.
Custom locations, offline installation, updates and removal →
Both still need the one-time anode setup below; plugin users skip anode configure for
Claude Code.
- Scoop:
scoop bucket add anode https://github.com/skulitom/Anode, thenscoop install anode/anode. Runanode quitand close MCP clients using Anode beforescoop update anode. - Claude Code plugin: with
anodealready on your PATH (the installer above or Scoop), run/plugin marketplace add skulitom/Anode, then/plugin install anode@anodeinside Claude Code. It registers the MCP server and theanode-desktopskill but does not installanode.exe. Use it oranode configure claude, not both; see Claude Code.
anode doctor | Out-Host # reports prerequisites; no changes
anode setup | Out-Host # one administrator prompt, once per machine
anode configure | Out-Host # detects installed Codex / Claude Code CLIssetup enables Remote Desktop and child sessions. It adds no firewall rules, but can restart
Remote Desktop Services and disconnect existing RDP sessions.
See exactly what changes.
configure backs up client settings, registers Anode by absolute path, sets a 420-second tool
timeout, and installs the discoverable anode-desktop skill. Use anode configure codex or
anode configure claude to choose one client, or add --no-skill for MCP registration alone.
Installed the Claude Code plugin? It already registers Anode and the skill there, so skip
anode configure, or run anode configure codex to add Codex only.
Restart your agent session to load the tools. Claude Desktop:
add Anode to its config.
VS Code, Cursor and other clients: Connecting agents.
Start and check the background seat:
anode start --hidden | Out-Host
anode capabilities | Out-HostIf Windows Hello/PIN sign-in prevents automatic login, choose Sign in… from the Anode tray
icon (or the viewer's header) to request the Windows credential dialog. When starting Anode,
you can also use anode start --sign-in. See sign-in troubleshooting.
Then ask your agent:
Use Anode to open Notepad in the background seat, type "Hello from Anode", and show me a screenshot. Keep the viewer hidden and leave my main desktop available.
Or work through the CLI:
$env:ANODE_AGENT_ID = 'my-cli-task'
$lease = anode lease acquire | Out-String | ConvertFrom-Json
if ($LASTEXITCODE -ne 0) { throw 'Desktop acquisition failed.' }
$env:ANODE_LEASE_TOKEN = $lease.leaseToken
anode exec --cwd C:\project --wait 1000 -- dotnet build | Out-Host
anode windows | Out-Host
anode shot seat.png | Out-Host
anode lease release | Out-HostPowerShell users: piping to Out-Host (or Out-String) makes PowerShell wait for this GUI
executable and display its output. Scripts should check $LASTEXITCODE after each command.
Prefer Anode for native Windows GUI automation and headed app/browser tests that should leave
the user's main desktop available; use direct APIs, file tools and headless tests otherwise.
Call anode_guide or run anode guide --json for setup-free guidance. seat_status never starts
anything. Call seat_lease with action: "acquire" before desktop work; it starts a hidden seat
if needed and waits in line while another agent works. Each desktop action keeps the lease, so
renew only across pauses longer than 120 seconds, and release when finished. The MCP prompt
desktop_test walks through it: /mcp__anode__desktop_test in Claude Code after
anode configure, or type / and search for desktop_test with the plugin.
See the agent guide, portable skill
and llms.txt documentation index.
| I want to… | Start here |
|---|---|
| Install, update or uninstall | Installation guide |
| Connect Codex, Claude Code, Claude Desktop, VS Code or Cursor | Connecting agents |
| Share the desktop between agents | Multiple agents and leases |
| Help an agent discover and choose Anode | Agent guide |
| Run apps, control the viewer or use a gamepad | Usage guide |
| Look up a CLI command or option | Command reference |
| Test native apps and browsers | Development and testing |
| See worked examples | Claude Code + Steam, headed Playwright fixture used by the development test |
| Inspect windows and accessible controls | Desktop tools |
| Understand permissions and isolation | Security |
| Know what data Anode handles | Privacy |
| Diagnose startup, sign-in or capture problems | Troubleshooting |
| Integrate a client | MCP and named-pipe protocol |
| Understand the implementation | Architecture |
- One connected child session per machine. Agents and CLI clients share that seat.
- Files, accounts, network ports and application singletons are shared. Steam games run in the seat using the Steam client on your desktop, which stays there, without the overlay or Steam Input; other single-instance apps may already belong to your main session. Use separate browser profiles for browser testing.
- Capture and input depend on Windows and the application. Use
anode capabilitiesto check; a connected seat alone does not prove screenshots or input work. - Protected video and exclusive fullscreen may not capture. Virtual gamepads can also affect games on your main desktop.
Anode sends nothing to its maintainers: the runtime has no telemetry, update check or remote endpoint. Screenshots and UI text go only to the MCP client or CLI that asked for them, and that client may send them to its model provider. Read the privacy policy.
Install the .NET 10 SDK, then:
git clone https://github.com/skulitom/Anode.git
cd Anode
powershell -NoProfile -ExecutionPolicy Bypass -File scripts\build.ps1 -QuickTest -PackageThe executable and docs are in dist; the downloadable bundle and checksums are in
artifacts\release. Quick checks require no seat and send no desktop input.
Contributing and release process.
Found a problem? Report a bug or suggest an improvement.
Built on documented Windows child sessions, the Remote Desktop ActiveX control and Task Scheduler. Optional gamepad support uses ViGEmBus. Related projects: Cathode, LibreAutomate and BetterGI.