主机
主机是把这台电脑的文件和所连接的机器提供给工作台的程序。每台电脑恰好有一个主机。桌面应用是一个主机;用 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 命令
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-serial | GRBL 1.1,USB 串口 | 页面 | loopback |
grbl-tcp | FluidNC / grblHAL,telnet(TCP 23) | 主机 | loopback |
marlin-serial | Marlin,USB 串口 | 页面 | loopback |
smoothie-serial | Smoothieware,USB 串口 | 页面 | loopback |
linuxcnc-rsh | LinuxCNC 2.9 linuxcncrsh(TCP 5007) | 主机 | loopback |
octoprint-http | OctoPrint 1.x | 主机 | loopback |
moonraker-http | Klipper(经 Moonraker) | 主机 | loopback |
prusalink-http | PrusaLink | 主机 | loopback |
repetier-http | Repetier-Server | 主机 | loopback |
duet-http | Duet / RepRapFirmware 3.1+ | 主机 | loopback |
feetech-sts-serial | Feetech STS/SCS 舵机总线(SO-100/101) | 页面 | loopback |
dynamixel2-serial | Dynamixel Protocol 2.0(Koch、WidowX) | 页面 | loopback |
xarm-tcp | UFACTORY xArm / Lite 6(TCP 502) | 主机 | loopback |
host-relay | CommandAGI ESP32 机械臂,局域网 HTTP | 主机 | loopback |
wifi8k-drone | WIFI_8K / E99 无人机,经 ESP32 链路 | 页面 | loopback |
ble-hid-relay | BLE HID 中继(ESP32) | 页面 | loopback |
jpeg-push | 推送 JPEG 的网络相机(ESP32-CAM) | 主机 | loopback |
openpnp-files | OpenPnP 作业交接(文件) | 主机 | 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-camera | USB 相机 | 页面 | none |
microphone | 麦克风 | 页面 | none |
仿真世界则使用两个模拟器:G-code 通道用 gcode-sim,舵机总线用 servo-sim。
下一步
赋予智能体操作一台机器的权限:智能体与长期授权。