会点击、会打字的智能体需要一整台电脑。问题是:用谁的电脑?
| 你的笔记本 | 无头浏览器服务 | Cyqle 桌面 | |
|---|---|---|---|
| 能接触到什么 | 你的文件、已登录的账号、你的网络 | 只有一个浏览器 | 一台专属桌面,里面只有你放进去的东西 |
| 卡住的时候 | 你放下手头的事去收拾 | 看日志、靠猜、再跑一遍 | 打开同一台桌面,直接接手 |
| 起始状态 | 取决于你电脑上今天有什么 | 干净,但只有浏览器 | 一次配置好的快照,每次运行都完全一致 |
| 同时跑十个 | 一台机器,一次运行 | 可以 | 可以,每次运行一个克隆 |
| 运行出错时 | 错误发生在你的电脑上 | 影响被隔离 | 影响被隔离。关掉它,启动一份干净的副本 |
隔离
每台桌面都有独立的网络和存储,并用为该会话生成的密钥加密。除非你主动发送,你笔记本上的任何东西都不会带进来。
完整桌面
浏览器、终端和完整的 root 权限。安装你的智能体,以及它需要操作的应用。能在 Linux 上运行的,在这里都能运行。
快照
按智能体的需要把桌面配置一次,然后创建快照。每次运行都从一份干净的副本启动,失败的运行永远不会影响下一次。
并行运行
从代码里为每个任务启动一个克隆。每个克隆都是独立的桌面,运行之间从不共享状态。
暂停与恢复
暂停会把桌面冻结在当下的状态。恢复后,同样的窗口回到原处,任务从中断处继续。
人在回路
你的智能体用自己的光标操作。在浏览器中打开同一台桌面即可旁观它工作,也可以拿起自己的光标直接接手。
# 从快照启动一份干净的副本
SID=$(curl -sS -X POST https://api.cyqle.in/v1/sessions \
-H "Authorization: Bearer $CYQLE_KEY" \
-H "Content-Type: application/json" \
-d "{\"snapshotId\":\"$SNAPSHOT\"}" | jq -r .data.id)
until curl -sS "https://api.cyqle.in/v1/sessions/$SID" \
-H "Authorization: Bearer $CYQLE_KEY" \
| jq -e '.data.status == "RUNNING"' >/dev/null
do sleep 2; done
# 用智能体自己的光标点击
curl -X POST \
"https://api.cyqle.in/v1/sessions/$SID/input/mouse" \
-H "Authorization: Bearer $CYQLE_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"click","x":640,"y":360,
"pointerId":"my-agent"}'
# 运行中途冻结,稍后恢复
curl -X PUT "https://api.cyqle.in/v1/sessions/$SID/pause" \
-H "Authorization: Bearer $CYQLE_KEY"REST API
每台桌面都是一个 API 端点。你的智能体读取屏幕、移动自己的光标、输入文字、执行 shell 命令。何时克隆桌面、何时暂停或关闭,由你的代码决定。
/v1/sessions启动桌面,可选从快照启动/v1/sessions/{id}/capture/{w}/{h}/{x}/{y}截取屏幕任意区域/v1/sessions/{id}/input/mouse移动、点击、拖拽、滚动/v1/sessions/{id}/input/keyboard输入文字或按下组合键/v1/sessions/{id}/exec执行 shell 命令并读取输出/v1/snapshots为配置好的桌面创建快照/v1/sessions/{id}/pause冻结;PUT …/resume 恢复/v1/sessions/{id}关闭桌面打开一台桌面,安装你的智能体和工具,登录它需要用到的服务,然后创建快照。
为每个任务启动一份快照副本。你的智能体通过 API、用自己的光标工作。
当智能体需要真人,比如输入 2FA 验证码或做个判断,打开桌面亲自完成这一步,再把控制权交还给它。