Exo Control
Realtime PC eyes and hands for any AI agent
Any model · MCP · CLI · Python
Compact. Leased. Honest.
Install · Agent instructions · Safety · Exo Launcher
Exo Control is a Windows Python library that gives any AI eyes and hands on the desktop. Same ops over MCP, CLI, or Python. Not an app and not a Setup.exe — install with pip.
| How the AI talks | Entry |
|---|---|
| MCP | exo_exec · exo_screenshot · exo_help |
| CLI | exo-control exec · exo-control script · exo-control doctor |
| Python | from exo_control import ExoExecEngine |
Works with Exo Launcher when it is installed. Not required.
Install
pip install exo-control
exo-control doctor
Until the PyPI release is live:
pip install "git+https://github.com/ImAvgErix/ExoControl.git@v2.0.0"
exo-control doctor
Optional browser CDP: pip install "exo-control[browser]" then playwright install chromium.
State lives under ~/.exo/. Legacy ~/.aether/ is migrated automatically.
MCP
{
"mcpServers": {
"exo-control": {
"command": "python",
"args": ["-m", "exo_control.slim_mcp_server"]
}
}
}
Do not set PYTHONPATH at a second tree. exo-control doctor reports shadowing.
Quick script
exo-control script examples/notepad.json
from exo_control import ExoExecEngine
ExoExecEngine().execute({
"steps": [
{"op": "lease_acquire", "agent_id": "demo", "task": "notepad", "ttl_sec": 90},
{"op": "launch", "app": "notepad"},
{"op": "type", "text": "hello from Exo Control"},
{"op": "verify", "text": "hello from Exo Control"},
],
"finally": [
{"op": "window_close", "title": "Notepad", "discard_unsaved": True},
{"op": "lease_release"},
],
})
Failed steps do not attach screenshots unless screenshot_on_fail: true. Use {"op":"last_error"}. Drop AGENTS.md into any model's rules.
What it can do
| Surface | Ops |
|---|---|
| Desktop | UIA click/type/fill, lease, multi-monitor, UI memory |
| Browser | CDP snapshot refs, DOM click/type |
| OS | Allowrooted files, HKCU registry, processes/services, fuzzy launch |
{"op":"help"} lists the core ops. detail=true is the full catalog.
Safety
- One desktop lease;
lease_statusnever returns the token - Destructive OS ops need
confirm=true(agent assertion, not a human prompt) - Files stay in
EXO_FILE_ROOTSunless the operator setsEXO_ALLOW_OUTSIDE_ROOTS=1 - Hard denies: anti-cheat, unnamed PID kill, critical services, non-loopback CDP
- SECURITY.md
Docs
| Doc | Role |
|---|---|
| AGENTS.md | Drop-in agent instructions |
| docs/HARNESS.md | Host install matrix |
| docs/LIVE-MODEL.md | Lease / eyes / hands |
| docs/API-STABILITY.md | 2.0 public surface |
| CHANGELOG.md | Version history |
License
MIT
Release files for exo-control 2.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| exo_control-2.0.0.tar.gz | 151.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| exo_control-2.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 302.6 kB
Release files / exo_control-2.0.0.tar.gz
| Download URL | exo_control-2.0.0.tar.gz |
|---|---|
| Size | 151.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c072e8bb754675d6af61e3c4d4e5505ac36f5dff55e233754f228082645279ed
|
|
BLAKE2b-256 checksum How to use checksums |
5cc3a8347830ffaf843589d61f2693414e6879ed8ea9626a26e8aa49f9d58e6e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 12, 2026.
Transparency logRelease files / exo_control-2.0.0-py3-none-any.whl
| Download URL | exo_control-2.0.0-py3-none-any.whl |
|---|---|
| Size | 151.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
433d229610bb3f757a2516d217227998095eb166c1d6cee6299cadd571706ba1
|
|
BLAKE2b-256 checksum How to use checksums |
f9c9443e8a4cf0ae964e311889c619444139d7b5cc1c798976e5cda5df67c415
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 12, 2026.
Transparency log