Un cœur Go, de fins clients typés
Authentification, streaming, reprises et correspondance des erreurs sont écrits une fois en Go puis réutilisés par chaque client. Un nouveau langage est une fine couche typée, pas un port complet.
Un seul système produit
Commencez avec une machine. Passez ensuite à une flotte.
Pilotez votre flotte depuis le code avec des clients Python et Node pour commandes machine, flux d’agents, streaming et bots.
Pilotez votre flotte depuis le code avec des clients Python et Node pour commandes machine, flux d’agents, streaming et bots.
Chaque plateforme est déjà incluse dans un seul wheel et un seul paquet npm — pas d'installation de l'agent cmdop, pas de notarisation, pas de téléchargement par plateforme. Un résolveur choisit la bonne build pour l'hôte au lancement.
Python — PyPI
Node — npm
cmdop 1.1.1 sur PyPI · @cmdop/sdk 1.1.0 sur npm
L’opération principale streame l’agent IA d’une machine via le relay et l’expose comme un itérateur async propre avec sortie en direct, fin, erreurs et demandes d’approbation.
Authentification, streaming, reprises et correspondance des erreurs sont écrits une fois en Go puis réutilisés par chaque client. Un nouveau langage est une fine couche typée, pas un port complet.
Les cinq binaires de la plateforme tiennent dans un seul fat wheel et un seul paquet npm. Les utilisateurs finaux font simplement pip install ou npm i — pas d’agent cmdop, pas d’optionalDependencies, pas de notarisation Gatekeeper.
Pilotez votre flotte depuis le code avec des clients Python et Node pour commandes machine, flux d’agents, streaming et bots.
Streamez l’agent IA d’une machine comme un itérateur async typé, avec des demandes d’approbation quand le travail doit être confirmé. Le même modèle d’interaction que dans l’app, désormais scriptable.
Les bots Telegram, Discord et Slack sont désormais hébergés entièrement dans le cœur du SDK. Lancez-en un avec client.bots.run(...) et le binaire Go exécute la boucle du canal, pilotant machines.ask() par message. Le SDK a absorbé les bots.
Chaque opération du relais est répliquée dans les deux clients et verrouillée par un contrôle de parité inter-langages — une méthode présente dans un langage mais pas dans l’autre fait échouer 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)Référence complète pour chaque namespace, le modèle de streaming et la gestion des erreurs.
Le cœur programmatique sur lequel repose chaque autre produit cmdop. Installez-le, importez-le, livrez.
import asynciofrom cmdop import Clientasync def main():async with Client() as client: # jeton API depuis l’environnementstream = 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())