Desktop control CLI for AI agents https://deskctl.dev
Find a file
Hari eac3a61ceb rename (#11)
* align docs and contract

* clean

* rename from deskctl-cli to deskctl

* runtime
2026-03-26 08:51:15 -04:00
.github/workflows rename (#11) 2026-03-26 08:51:15 -04:00
assets Phase 3: screenshot annotation with bounding boxes and @wN labels 2026-03-24 21:28:10 -04:00
docker docker-compose build 2026-03-25 12:40:14 -04:00
docs rename (#11) 2026-03-26 08:51:15 -04:00
npm/deskctl rename (#11) 2026-03-26 08:51:15 -04:00
site rename (#11) 2026-03-26 08:51:15 -04:00
skills/deskctl rename (#11) 2026-03-26 08:51:15 -04:00
src runtime contract enforcement (#6) 2026-03-25 22:00:16 -04:00
tests grouped runtime reads and waits selector modes (#5) 2026-03-25 21:11:30 -04:00
.dockerignore docker-compose build 2026-03-25 12:40:14 -04:00
.gitignore rename (#11) 2026-03-26 08:51:15 -04:00
.pre-commit-config.yaml tests and tooling (#4) 2026-03-25 19:29:59 -04:00
AGENTS.md Phase 6: utility commands, SKILL.md, AGENTS.md, README.md 2026-03-24 21:40:29 -04:00
Cargo.lock release: v0.1.6 [skip ci] 2026-03-26 03:25:14 +00:00
Cargo.toml release: v0.1.6 [skip ci] 2026-03-26 03:25:14 +00:00
CONTRIBUTING.md rename (#11) 2026-03-26 08:51:15 -04:00
flake.lock nix (#7) 2026-03-25 23:18:28 -04:00
flake.nix nix (#7) 2026-03-25 23:18:28 -04:00
LICENCE licence 2026-03-25 19:34:36 -04:00
Makefile rename (#11) 2026-03-26 08:51:15 -04:00
README.md rename (#11) 2026-03-26 08:51:15 -04:00

deskctl

npm release runtime skill

Non-interactive desktop control for AI agents on Linux X11.

Install

npm install -g deskctl
deskctl doctor
deskctl snapshot --annotate

One-shot execution also works:

npx deskctl --help

deskctl installs the command by downloading the matching GitHub Release asset for the supported runtime target.

Installable skill

npx skills add harivansh-afk/deskctl -s deskctl

The installable skill lives in skills/deskctl and is built around the same observe -> wait -> act -> verify loop as the CLI.

Quick example

deskctl doctor
deskctl snapshot --annotate
deskctl wait window --selector 'title=Firefox' --timeout 10
deskctl focus 'title=Firefox'
deskctl type "hello world"

Docs

Other install paths

Nix:

nix run github:harivansh-afk/deskctl -- --help
nix profile install github:harivansh-afk/deskctl

Source build:

cargo build

Support boundary

deskctl currently supports Linux X11. Use --json for stable machine parsing, use window_id for programmatic targeting inside a live session, and use deskctl doctor first when the runtime looks broken.