文档 · 02

连接一台机器。

机器通过主机——它所连接的那台电脑上运行的程序——接入 CommandAGI,或者直接从浏览器页面接入。

主机

主机是把这台电脑的文件和所连接的机器提供给工作台的程序。每台电脑恰好有一个主机。桌面应用是一个主机;用 commandagi daemon start 启动的后台服务也是。桌面应用启动时,会接管正在运行的服务。

主机只监听 127.0.0.1(默认端口 4173,或任意空闲端口),并把状态保存在 ~/.commandagi 中:

文件内容
host.json此主机关联的账户、它的 id 和连接设置(仅所有者可读写)
grants.json在此主机上创建的长期授权(仅所有者可读写)
principals.json主体凭据的哈希值和受信任的账户密钥(仅所有者可读写)
mcp.json本地 MCP 端点及其每次启动生成的令牌(仅所有者可读写)
daemon.json哪个进程正在担任主机、使用哪个端口
settings.json、recents.json、devices/、worlds/你的用户级设置和定义
daemon.log主机日志

目前可用:主机随桌面应用一起提供。主机自己的命令行——commandagi daemon、grant、mcp——按其构建情况记录在此,但尚未作为可安装的软件包发布。(目前 npm 上的 commandagi 软件包是 SDK 的命令行;参见 SDK 与 MCP。)

commandagi 命令

shell
commandagi daemon start [--port N] [--project DIR] [--name X] [--no-platform]
commandagi daemon status | stop | logs
commandagi daemon run   [same flags, in the foreground]
commandagi mcp [--credential-file F]
commandagi grant add | list | revoke …
commandagi threed install | status
commandagi code eval <path> [--input name=value]…
  • daemon start 在后台运行主机,日志写入 ~/.commandagi/daemon.log。--no-platform 只在本地托管,不关联账户。
  • 当桌面应用担任主机时,daemon stop 会拒绝执行——请从应用中退出。
  • mcp 是供智能体使用的 stdio 中继(参见 SDK 与 MCP)。grant 用于创建和撤销长期授权(参见智能体与长期授权)。
  • threed 安装本地 3D 设计服务;code eval 以无界面方式求值一个代码零件,并以 JSON 输出其操作图。

把主机关联到你的账户

关联到账户的主机,可以在任何地方从该账户的工作台访问,并以该账户的身份行事。关联就是登录:

  • 在桌面应用中,按提示登录;
  • 在主机提供的工作台页面上,从左侧停靠栏登录——主机会校验密钥并保存它;
  • 在 shell 中,启动守护进程之前把 COMMANDAGI_API_KEY 设为一个 API 密钥。

账户密钥保存在 host.json 中——一个仅所有者可读写的普通文件——因此复制过去的 ~/.commandagi 仍保持登录状态。退出登录会删除它。

主机之间配对

不同电脑上的主机可以通过一次操作双向配对:一个主机发出邀请,另一个接受。配对始终由人来决定。配对之后,智能体可以列出其他主机并调用它们——但只能在那边已有的授权范围之内。

页面驱动:从浏览器使用 USB 和蓝牙

有些驱动直接运行在工作台页面中,使用 WebSerial 和 Web Bluetooth。浏览器只有在你选择端口时才会打开它,因此智能体用的永远是人建立的连接,绝不会自行打开连接。网络上的机器(打印机的 HTTP API、通过 TCP 连接的 FluidNC 控制器)由主机驱动。

监听局域网内机器主动连入的驱动,需要设置 "devices.lanListener": true。

驱动目录

每个驱动都标明了它经过何种验证:none(未验证)、loopback(回环:针对忠实模拟该协议的软件替身验证)、bench(台架)或 hardware(硬件)。驱动的声明从不超出实际做过的验证。目前还没有任何机器在硬件上完成调试投用。

驱动机器与协议运行于验证程度
grbl-serialGRBL 1.1,USB 串口页面loopback
grbl-tcpFluidNC / grblHAL,telnet(TCP 23)主机loopback
marlin-serialMarlin,USB 串口页面loopback
smoothie-serialSmoothieware,USB 串口页面loopback
linuxcnc-rshLinuxCNC 2.9 linuxcncrsh(TCP 5007)主机loopback
octoprint-httpOctoPrint 1.x主机loopback
moonraker-httpKlipper(经 Moonraker)主机loopback
prusalink-httpPrusaLink主机loopback
repetier-httpRepetier-Server主机loopback
duet-httpDuet / RepRapFirmware 3.1+主机loopback
feetech-sts-serialFeetech STS/SCS 舵机总线(SO-100/101)页面loopback
dynamixel2-serialDynamixel Protocol 2.0(Koch、WidowX)页面loopback
xarm-tcpUFACTORY xArm / Lite 6(TCP 502)主机loopback
host-relayCommandAGI ESP32 机械臂,局域网 HTTP主机loopback
wifi8k-droneWIFI_8K / E99 无人机,经 ESP32 链路页面loopback
ble-hid-relayBLE HID 中继(ESP32)页面loopback
jpeg-push推送 JPEG 的网络相机(ESP32-CAM)主机loopback
openpnp-filesOpenPnP 作业交接(文件)主机loopback
os-input本机的键盘和指针主机loopback
cdp-tab一个浏览器标签页(Chrome DevTools Protocol)主机loopback
cdp-screencast一个浏览器标签页的视频主机loopback
pty-shell本机上的一个 shell主机loopback
python-kernel一个 Python 内核(笔记本)主机loopback
display-capture屏幕捕获页面none
uvc-cameraUSB 相机页面none
microphone麦克风页面none

仿真世界则使用两个模拟器:G-code 通道用 gcode-sim,舵机总线用 servo-sim。

下一步

赋予智能体操作一台机器的权限:智能体与长期授权。