Skip to Content
SDKOverview

SDK Overview

TL;DR

The CMDOP SDK gives you programmatic access to your fleet from Python (cmdop) and Node (@cmdop/sdk) — one typed Client over the same surface: list and inspect machines, stream a machine’s AI agent (machines.ask()), manage fleets, tunnels, schedules, and keys, and drive the skills marketplace. Both packages ship in lockstep at the same version.

How it connects

How the CMDOP SDK connects your app to your machines through a CMDOP server and Jarvis over gRPC

Your app uses the SDK to reach your machines — any hardware, anywhere — through your CMDOP relay: the one your cmdop.com account provisions, or a relay you self-host. The relay links your fleet over gRPC and hosts Jarvis, a built-in AI that can drive those machines on its own.

Both SDK packages are MIT-licensed, with source on GitHub (commandoperator/cmdop-sdk ).

Two packages, one surface. Snake_case in Python, camelCase in Node — otherwise identical, kept at parity by construction.

InstallVersionRegistry
Pythonpip install cmdop1.1.0cmdop on PyPI
Nodenpm i @cmdop/sdk1.1.0@cmdop/sdk on npm

Why it’s easy to adopt

  • One install, zero dependencies. pip install cmdop / npm i @cmdop/sdk is everything — no native build step, no extra runtime, nothing fetched on first run.
  • Works anywhere. A single self-contained package runs the same on macOS, Linux, and Windows wherever Python or Node runs.
  • Typed end to end. Every resource and response is fully typed, with one clean async streaming API for live agent output.

Quick start

# pip install cmdop from cmdop import Client async with Client(token="...") as c: # or Client.from_env() page = await c.machines.list(presence="online") for m in page.items: print(m.hostname, m.presence) text = await c.machines.ask(machine_id, "uptime").collect() print(text)
// npm i @cmdop/sdk import { Client } from "@cmdop/sdk"; const c = new Client({ token: "..." }); // or Client.fromEnv() const page = await c.machines.list({ presence: "online" }); for (const m of page.items) console.log(m.hostname, m.presence); const text = await c.machines.ask(machineId, "uptime").collect(); console.log(text); await c.close();

What you can do

NamespaceWhatPlane
machineslist / inspect machines, stream their AI agent (ask), read & manage conversationsrelay
fleetscreate and manage fleets, members, and machine membershiprelay
tunnelsopen / close / inspect tunnelsrelay
schedulescreate, trigger, and review scheduled jobsrelay
keysissue and revoke fleet access keysrelay
skillsbrowse, install, publish, and review marketplace skillsplatform

The headline feature is machines.ask() — stream a machine’s AI agent as a clean async iterator of typed frames, with mid-stream PIN and confirmation prompts surfaced as first-class steps.

Two planes, one client. machines / fleets / tunnels / schedules / keys use your relay token (CMDOP_TOKEN); the skills marketplace uses your platform API key (CMDOP_API_KEY). Set whichever you need — the client routes each call to the right plane. See Configuration.