Un núcleo en Go, clientes finos y tipados
Autenticación, streaming, reintentos y mapeo de errores se escriben una vez en Go y se reutilizan en cada cliente. Un lenguaje nuevo es una capa tipada ligera, no un port completo.
Un solo sistema de productos
Empieza con una máquina. Crece hasta una flota.
Controla tu flota desde código con clientes Python y Node para comandos de máquinas, flujos de agentes, transmisión y bots.
Controla tu flota desde código con clientes Python y Node para comandos de máquinas, flujos de agentes, transmisión y bots.
Cada plataforma ya viene dentro de un wheel y un paquete npm — sin instalar el agente cmdop, sin notarización y sin descargas por plataforma. Un resolutor elige en tiempo de arranque la compilación adecuada para el host.
Python — PyPI
Node — npm
cmdop 1.1.1 en PyPI · @cmdop/sdk 1.1.0 en npm
La operación principal transmite el agente de IA de una máquina a través del relay y lo expone como un iterador async limpio con salida en vivo, finalización, errores y solicitudes de aprobación.
Autenticación, streaming, reintentos y mapeo de errores se escriben una vez en Go y se reutilizan en cada cliente. Un lenguaje nuevo es una capa tipada ligera, no un port completo.
Los cinco binarios de la plataforma viajan dentro de un único fat wheel y un único paquete npm. Los usuarios finales solo hacen pip install o npm i — sin agente cmdop, sin optionalDependencies, sin notarización de Gatekeeper.
Controla tu flota desde código con clientes Python y Node para comandos de máquinas, flujos de agentes, transmisión y bots.
Transmite el agente de IA de una máquina como iterador async tipado, con solicitudes de aprobación cuando el trabajo necesita confirmación. El mismo modelo de interacción de la app, ahora scriptable.
Los bots de Telegram, Discord y Slack ahora están alojados completamente dentro del núcleo del SDK. Inicia uno con client.bots.run(...) y el binario de Go ejecuta el bucle del canal, impulsando machines.ask() por mensaje. El SDK absorbió los bots.
Cada operación del relay se refleja en ambos clientes y está protegida por una comprobación de paridad entre lenguajes — un método presente en un lenguaje pero no en el otro hace fallar la CI.
machineslist · get · info · spend · ask · messages · active_sessionfleetscrud · members · attach · detachtunnelsopen · close · list · get · sessionsschedulescrud · trigger · runskeyslist · issue · revokeskillslist · install · publishbotsrun · management (Telegram · Discord · Slack)Referencia completa de cada namespace, el modelo de streaming y el manejo de errores.
El núcleo programático sobre el que se construye cada otro producto de cmdop. Instálalo, impórtalo, despliega.
import asynciofrom cmdop import Clientasync def main():async with Client() as client: # token de API desde el entornostream = client.machines.ask(machine="work-mbp",prompt="What's eating disk on /var?",)async for frame in stream:if frame.kind == "event":print(frame.text, end="", flush=True)elif frame.kind == "done":breakasyncio.run(main())