Python SDK for CMDOP agent interaction
Project description
CMDOP
Your OS. Online.
Full access to your machines from anywhere. Not files — the whole system.
Your Code ──── Cloud Relay ──── Agent (on server)
│
Outbound only, works through any NAT/firewall
Install
pip install cmdop
The package still imports as cmdop. The installed CLI entry point is cmdop-sdk (ssh, fleet, exec, tui) so it does not collide with the main CMDOP desktop/Go binary on PATH.
Quick Start
from cmdop import AsyncCMDOPClient
async with AsyncCMDOPClient.remote(api_key="cmdop_xxx") as client:
# Terminal
await client.terminal.set_machine("my-server")
output, code = await client.terminal.execute("uname -a")
# Files
content = await client.files.read("/etc/hostname")
await client.files.write("/tmp/config.json", b'{"key": "value"}')
# AI Agent with typed output
from pydantic import BaseModel
class Health(BaseModel):
cpu: float
memory: float
issues: list[str]
await client.agent.set_machine("my-server")
result = await client.agent.run("Check server health", output_model=Health)
health: Health = result.data # Typed!
# Skills — run predefined AI workflows
await client.skills.set_machine("my-server")
skills = await client.skills.list()
result = await client.skills.run("code-review", "Review the auth module")
Connection
from cmdop import CMDOPClient, AsyncCMDOPClient
# Remote (via cloud relay) - works through any NAT
client = CMDOPClient.remote(api_key="cmdop_xxx")
# Local (direct IPC to running agent)
client = CMDOPClient.local()
# Async
async with AsyncCMDOPClient.remote(api_key="cmdop_xxx") as client:
...
Documentation
| Topic | Description |
|---|---|
| Terminal | Execute commands, stream output, SSH sessions |
| Auth | Agent password authentication, session tokens |
| Files | Read, write, list files on remote machines |
| Agent | AI tasks with structured typed output |
| Skills | Predefined AI workflows with tool access |
| Download | Download files from URLs via remote server |
| SDKBaseModel | Auto-cleaning Pydantic model for scraped data |
Architecture
┌─────────────┐ gRPC/HTTP2 ┌─────────────┐ gRPC ┌─────────┐
│ Python │◀────────────────▶│ Cloud │◀──────────▶│ Agent │
│ SDK │ Bidirectional │ Relay │ Outbound │ (Go) │
└─────────────┘ └─────────────┘ └─────────┘
- Agent makes outbound connection (no port forwarding)
- SDK connects via gRPC (works through any firewall)
- All services multiplexed over single connection
Comparison
| Feature | CMDOP | Tailscale | ngrok | SSH |
|---|---|---|---|---|
| Terminal streaming | gRPC | VPN + SSH | No | Yes |
| File operations | Built-in | SFTP | No | SCP |
| AI agent | Built-in | No | No | No |
| Reusable AI skills | Built-in | No | No | No |
| NAT traversal | Outbound | WireGuard | Outbound | Port forward |
| Client install | None | VPN client | None | SSH client |
| Structured output | Pydantic | No | No | No |
Requirements
- Python 3.10+
- CMDOP agent running locally or API key for remote access
Links
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
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
File details
Details for the file cmdop-2026.4.7.tar.gz.
File metadata
- Download URL: cmdop-2026.4.7.tar.gz
- Upload date:
- Size: 206.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9872cab88d98760250080b673cf4d9f2b7b31cc05653910de9b4ec6dd58eea33
|
|
| MD5 |
d2de91122a28fbd09b48fdc3538ca697
|
|
| BLAKE2b-256 |
4fb8f571fc3ccf6feb0348df28648c7bcb2f0f98b6f80b0dd09f5faba647486b
|
File details
Details for the file cmdop-2026.4.7-py3-none-any.whl.
File metadata
- Download URL: cmdop-2026.4.7-py3-none-any.whl
- Upload date:
- Size: 345.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
120ac7ee649a6524129106c8c083c7b6e6b0641116fc9eacb50481ef661f7815
|
|
| MD5 |
274eb138d05f4e13edfabca57cec4ecd
|
|
| BLAKE2b-256 |
5c6e3335d5e83ed3b5ee7cc531ed36362fb3edfb128d30147c48133f3fd07406
|