Open Computer Use Agent — framework for desktop and browser automation
Project description
opendesk — Python SDK
Give any AI agent eyes and hands on your desktop.
macOS · Linux · Windows
Install
pip install 'opendesk[core,mcp]'
opendesk install
opendesk install registers the MCP server with Claude Code globally.
Quick start
import asyncio
from opendesk import create_registry, allow_all_context
async def main():
registry = create_registry()
ctx = allow_all_context()
# Screenshot with Set-of-Marks
shot = registry.get("screenshot")
result = await shot.execute(ctx, shot.Params(marks=True))
print(result.output)
# Click a button by name — no coordinates needed
ui = registry.get("ui")
await ui.execute(ctx, ui.Params(action="click", app="TextEdit", title="File"))
asyncio.run(main())
Installation options
pip install opendesk # core framework only
pip install 'opendesk[core,mcp]' # + screen capture + MCP server (recommended)
pip install 'opendesk[core,mcp,learn]' # + task recording and replay
pip install 'opendesk[core,mcp,learn,schedule]' # + scheduled tasks
pip install 'opendesk[all]' # everything
Tools
| Tool | What it does |
|---|---|
screenshot |
Capture screen with Set-of-Marks on every interactive element |
ui |
Click and type by element name — no coordinates needed |
mouse |
Pixel-level mouse control for anything ui can't reach |
keyboard |
Type text, press keys, send hotkeys |
app |
Open, close, and focus applications |
clipboard |
Read and write the system clipboard |
ocr |
Extract text from any region of the screen |
learn |
Record a workflow once, replay it anytime |
schedule |
Run any task on a timer |
audit |
Show the session audit log in any MCP session |
Full reference: docs/tools.md
MCP integrations
Claude Code
opendesk install # register globally
opendesk uninstall # remove
Claude Desktop
{
"mcpServers": {
"opendesk": { "command": "opendesk-mcp" }
}
}
Cursor / Continue
{
"mcpServers": [{ "name": "opendesk", "command": "opendesk-mcp", "transport": "stdio" }]
}
Agent integrations
Anthropic SDK
import anthropic
from opendesk.integrations.claude_code import ClaudeCodeAdapter
from opendesk.registry import create_registry
client = anthropic.Anthropic()
adapter = ClaudeCodeAdapter(create_registry())
result = await adapter.run_loop(
client=client,
model="claude-opus-4-6",
messages=[{"role": "user", "content": "Open TextEdit and type Hello."}],
system="Use the ui tool first. Mouse is a last resort.",
)
OpenAI / on-device models (Ollama, vLLM, llama.cpp)
from openai import OpenAI
from opendesk.integrations.openai_compat import OpenAIAdapter
# Any OpenAI-compatible endpoint works
client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
adapter = OpenAIAdapter()
result = await adapter.run_loop(client, model="qwen2.5:72b", messages=messages)
LangChain
from langchain_anthropic import ChatAnthropic
from langgraph.prebuilt import create_react_agent
from opendesk.integrations.langchain_compat import as_langchain_tools
from opendesk.registry import create_registry
tools = as_langchain_tools(create_registry())
agent = create_react_agent(ChatAnthropic(model="claude-opus-4-6"), tools)
Build from source
cd python
pip install -e '.[core,mcp]'
Docs
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
opendesk-0.1.3.tar.gz
(56.5 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
opendesk-0.1.3-py3-none-any.whl
(68.4 kB
view details)
File details
Details for the file opendesk-0.1.3.tar.gz.
File metadata
- Download URL: opendesk-0.1.3.tar.gz
- Upload date:
- Size: 56.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d2ed1d17c3168e68b2da819e513fe879defa0fcd11d89522ea2bdc6c6d5839f5
|
|
| MD5 |
07369fc5f9f45638af0b29300c467646
|
|
| BLAKE2b-256 |
e635da8ce6745c92891268d7970baab31255b295b1f1f7a75b15d022bfe5ccb2
|
File details
Details for the file opendesk-0.1.3-py3-none-any.whl.
File metadata
- Download URL: opendesk-0.1.3-py3-none-any.whl
- Upload date:
- Size: 68.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
339d9a1381d51fa40e025c0f1e26d9c2895bb087776c382dec70dad52c809877
|
|
| MD5 |
1b7045413b14ac36500369ea1a8ecd02
|
|
| BLAKE2b-256 |
062c09ed939ec65e37b12071f83d45b66ca4c742770b91f3fd6a321800f50e3e
|