Agent Computer
一个给 Codex 直接调用的 Windows 桌面原子工具集。
发布后的安装方式:
uv tool install agent-computer-max
安装后命令入口仍然是:
agent-computeragent-computer-daemon
现在它只保留纯桌面控制、Observation latest 与截图强化能力:
- Observation latest preview / grid
- 绝对坐标网格截图
- 轻量预览截图
- 通用截图
- 列出窗口 / 聚焦窗口
- 点击 / 双击 / 移动 / 滚动
- 键盘输入 / 粘贴 / 热键
- 浏览器 URL 直达导航
项目不再内置任何视觉理解模型调用。 如果需要定位元素,推荐流程是:
- 先确保 daemon 与 Observation Layer 已启动
- Human 默认看
/live或 latest preview - Model 默认取 latest grid image,而不是直接看
/live网页 - 调用点击、滚动、输入等桌面动作
- 再读取最新的 latest grid image,确认状态并顺便读取下一步坐标
- 如此循环
只有在 latest image 看不清楚当前状态、或你需要冻结一张更高确定性的静态图时,才额外使用手动截图做兜底观察。 如果窗口没有最大化,或在截图与点击之间发生了分屏、缩放、尺寸变化,坐标命中率会明显下降。
补充约束:
- 如果目标站点的操作手册已经给出了目标信息,以手册为准
- 当操作没有出现预期行为的时候,首先应该认为是自己的定位不准确
- 在点击之后没有出现预期结果时,先获取当前鼠标坐标信息,再对照最新网格图片复核,优先排查是否因为坐标偏差导致点击没有落在目标上
- 每次对目标开始操作之前,首先阅读相关的 skill / 操作手册
- 思考一切可行办法去完成用户的需求;在用户需求被完成之前,不要因为单次失败、页面异常或路径不顺手就停止
- 当实际操作时出现“操作手册中不存在的行为 -> 结果映射”时,需要把新映射追加到对应手册中
- 追加手册时,至少记录当时的 URL、鼠标坐标、触发动作和页面反馈
1. 创建 conda 环境
cd <project-root>
conda env create -p .\.conda -f environment.yml
conda activate .\.conda
pip install -e .
2. 坐标规则
用于点击联动时,项目遵循这条硬规则:
- 截图优先使用整屏
- 坐标原点永远是整张屏幕左上角
(0,0) - 网格图使用四边标尺带,不把小字压在内容区里
- 细网格线默认每
50px一条 - 主网格线每
100px一条,并且只有主网格线会显示坐标标签 - 红色竖线标签是该主线的
x - 红色横线标签是该主线的
y - 未标注的中间
50px细线仍然有效,可用于精确估计点击点 - 点击阶段直接使用这套整屏绝对坐标,不再做额外换算
3. 原子工具
3.1 页面进入策略
如果目标是“进入某个已知页面”,优先级应该是:
- 能拿到可靠 URL:优先直接打开 URL
- 拿不到 URL,但能构造稳定 URL:优先直接构造并打开
- 只有在 URL 不可得、需要站内跳转、或必须依赖当前页面状态时,才走
latest grid image -> 读坐标 -> click -> latest grid image -> ...
也就是说:
- URL 优先
- 点击兜底
3.2 URL 直达导航
如果当前活动窗口已经是浏览器,推荐直接用:
agent-computer browser-open-url --url "https://www.zhipin.com/"
agent-computer browser-open-url --url "https://www.zhipin.com/web/geek/jobs?city=101210100&query=agent%E5%BC%80%E5%8F%91" --restore-clipboard
agent-computer browser-current-url
agent-computer browser-back
agent-computer browser-forward
agent-computer browser-refresh
这个命令的行为是:
- 发送
Ctrl+L - 把 URL 放进剪贴板并粘贴
- 发送
Enter browser-current-url的行为是:校验前台窗口是浏览器,再执行Ctrl+L -> Ctrl+C -> Esc读取当前地址栏 URLbrowser-back的行为是:Alt+Leftbrowser-forward的行为是:Alt+Rightbrowser-refresh的行为是:Ctrl+R- 在操作浏览器网页时,如果误触进入了同一网站的下一个页面,可以直接使用
browser-back返回 - 一般情况下,执行
browser-back之后,可以默认浏览器已经回到上一个页面,并继续使用上一张 frame 推进,而不需要立刻重新查看当前页面 - 例外是会实时变化的网页;这类页面在执行
browser-back之后,仍然建议重新读取 latest image 确认当前状态
3.3 Observation latest(默认)
Observation Layer 是默认观察入口,不需要每一步都手动抓图。
- Human 默认入口:
/live?token=<TOKEN> - Human live frame 接口:
/live/frame.jpg?token=<TOKEN>&mode=preview|grid - Human live meta 接口:
/live/frame.json?token=<TOKEN>&mode=preview|grid - Model 默认入口:
/observation/latest.jpg?token=<TOKEN>&mode=grid - Model 默认元数据:
/observation/latest.json?token=<TOKEN>&mode=grid - latest preview 仍然保留给 Human 做纯净观察
推荐读取顺序:
- 启动 daemon
- 取
.agent\observation.urls.json - Human 用
human_live_url - Model 用
model_default_image_url - 如需确认 freshness,再读
model_default_meta_url - 如需读取当前鼠标坐标,优先读
model_mouse_url
也就是说:
/live是 Human console/live/frame.*仅给 Human live 页面使用,可在 preview / grid 之间切换- latest grid image 是 Model default
latest.json会返回与当前 frame 对齐的mouse_position/observation/mouse.json提供当前鼠标的即时坐标/observation/latest.*现在只支持mode=grid,用于 AI / model 侧- 手动截图是强化手段,不是默认入口
.\windows-launcher.ps1 observation urls
.\windows-launcher.ps1 observation urls --json
agent-computer observation urls --json
agent-computer observation mouse --json
3.4 网格截图
给 Codex 或人工读取精确坐标用。默认整屏、带绝对坐标网格、高质量 JPEG。 这是手动冻结一张高精度坐标图的方式,不再是默认观察入口。 在执行任何截图前,应先确保目标窗口已经最大化;至少也要保证窗口尺寸在本轮截图到点击之间保持不变。
当前网格的绘制方式是:
- 四边标尺带
- 细网格线每
50px一条 - 主网格线每
100px一条并带标签 - 大号等宽数字只显示在
100px主网格线上 - 标签只画在外围,不遮挡屏幕内容
- 返回坐标仍然是屏幕绝对坐标,不是标尺带的图片像素坐标
agent-computer capture-grid
agent-computer capture-grid --grid-size 50 --jpeg-quality 90 --output .\artifacts\grid.jpg
推荐使用方式:
- 默认先看 latest grid image
- 只有在你需要冻结一张静态高精度坐标图时,再执行
capture-grid - Codex 查看网格图并读取当前目标坐标
click/scroll/paste/press- 之后回到 latest grid image 持续推进
3.5 预览截图
给 Codex 做纯净观察用。默认整屏、无网格、压缩 JPEG。 只有在 latest grid image 看不清当前状态、文字被网格干扰、或你需要单独确认视觉细节时,才建议使用。
agent-computer capture-preview
agent-computer capture-preview --output .\artifacts\preview.jpg
3.6 通用截图
仍然保留通用截图命令,适合调试:
agent-computer capture --target primary-screen --format png
agent-computer capture --target active-window --format jpeg --jpeg-quality 70
agent-computer capture --window-title "Windows PowerShell" --grid
4. 桌面动作命令
列出窗口:
agent-computer windows
聚焦窗口:
agent-computer focus --title "Windows PowerShell"
agent-computer maximize --title "Google Chrome"
按坐标点击:
agent-computer click --x 500 --y 920
agent-computer click --x 500 --y 920 --double
滚轮、输入、粘贴、URL 导航、按键、组合键:
agent-computer scroll --amount -500
agent-computer type --text "hello world"
agent-computer paste --text "agent开发"
agent-computer paste --text "agent开发" --restore-clipboard
agent-computer browser-open-url --url "https://www.zhipin.com/"
agent-computer browser-back
agent-computer browser-forward
agent-computer browser-refresh
agent-computer press --key enter
agent-computer hotkey ctrl shift s
说明:
type适合 ASCII、快捷测试paste更适合中文、长文本、复杂内容browser-open-url适合已知目标页面browser-current-url适合确认当前浏览器真实落点browser-back/browser-forward/browser-refresh适合当前活动浏览器窗口paste的行为是:先把指定文本放进 Windows 剪贴板,再发送Ctrl+Vbrowser-open-url的行为是:Ctrl+L -> Ctrl+A -> paste URL -> Enter
5. 推荐给 Codex 的使用方式
默认推荐这样组合,而不是依赖手动截图主导的流程。
5.1 通用桌面链路
适用场景:
- 桌面原生应用
- 没有 Browser Assist 的网页
- 需要直接按屏幕坐标推进的场景
- 如果目标页面 URL 已知,先用
browser-open-url - 聚焦目标窗口,并确保目标窗口已经最大化
推荐顺序:先
focus,再maximize - 开始操作之前,先阅读相关的 skill / 操作手册
- 用
agent-computer observation urls --json或.agent\observation.urls.json拿到默认 observation 入口 - Model 默认读取
model_default_image_url,也就是 latest grid image - 如需确认 freshness,再读取
model_default_meta_url - 如需读取当前鼠标坐标,再读取
model_mouse_url - 用
click、scroll、paste、browser-open-url等原子动作执行业务步骤 - 再次读取 latest grid image,并顺便读取下一步坐标
- 如果点击之后没有出现预期结果,先读取当前鼠标坐标,并和 latest grid image 对照,优先确认是否存在坐标偏差
- 不要因为一次点击失败或页面异常就停止,继续思考并尝试其他可行路径,直到用户需求完成
- 如果出现手册中没有覆盖的新行为 -> 结果映射,把它追加回操作手册,并记录 URL、鼠标坐标和页面反馈
- 只有当 latest grid image 看不清楚时,才临时使用
capture-preview - 只有当你需要冻结一张静态高精度网格图时,才使用
capture-grid
5.2 浏览器网页链路
适用场景:
- Chrome / Chromium 网页
- Browser Assist 扩展已连接
- 需要先做 DOM 几何定位,再做桌面点击的场景
默认推荐顺序:
- 如果目标页面 URL 已知,先用
browser-open-url - 聚焦目标浏览器窗口,并确保目标窗口已经最大化
- 确认 Browser Assist 已连接:
使用
browser-assist-status - 用
browser-assist-locate发送结构化定位请求 - 从返回结果中读取
mapped.screenCandidates[*].screenPoint - 用
click执行桌面点击 - 点击后再读取 latest grid image,仅用于确认结果,而不是用于先定位
也就是说:
- 浏览器页面的默认定位来源是 Browser Assist
grid在这个链路里默认只负责看结果- 只有 Browser Assist 失败或当前页面不适合插件定位时,才回退到纯 grid 读坐标
6. 便捷启动
项目根目录自带一个 Windows launcher:
.\windows-launcher.ps1 browser-open-url --url "https://www.zhipin.com/"
.\windows-launcher.ps1 browser-current-url
.\windows-launcher.ps1 browser-assist-status
.\windows-launcher.ps1 browser-assist-locate --input-file .\docs\examples\browser-assist-request.json
.\windows-launcher.ps1 browser-back
.\windows-launcher.ps1 browser-forward
.\windows-launcher.ps1 browser-refresh
.\windows-launcher.ps1 maximize --title "Google Chrome"
.\windows-launcher.ps1 observation urls
.\windows-launcher.ps1 click --x 500 --y 920
.\windows-launcher.ps1 capture-grid --grid-size 50
.\windows-launcher.ps1 capture-preview
现在三层职责明确:
agent-computer-daemon是核心常驻进程agent-computer是正式 CLI 入口.\windows-launcher.ps1只负责定位 Windows 本地环境、确保 daemon ready,并把命令转发给正式 CLI
也就是说,.\windows-launcher.ps1 不再维护第二套命令定义或参数默认值。
7. Observation Layer
项目支持一套统一的 Observation Layer:
- Human 默认入口是
/live,并以preview作为默认展示模式 - Model 默认取
grid snapshot能力继续保留,不被替代
Observation latest 文件位于:
artifacts\observation\preview_latest.jpgartifacts\observation\grid_latest.jpg
token 位于:
.agent\observation.json
manifest 位于:
.agent\observation.urls.json
站点手册:
BOSS_ZHIPIN_AGENT_MANUAL.md
核心访问路径:
/live?token=<TOKEN>
/live/frame.jpg?token=<TOKEN>&mode=preview
/live/frame.jpg?token=<TOKEN>&mode=grid
/live/frame.json?token=<TOKEN>&mode=preview
/live/frame.json?token=<TOKEN>&mode=grid
/observation/latest.jpg?token=<TOKEN>&mode=grid
/observation/latest.json?token=<TOKEN>&mode=grid
/observation/mouse.json?token=<TOKEN>
默认角色分工:
- Human 默认看
/live - Human 通过
/live内部切换preview/grid - Model 默认看
latest.jpg?mode=grid latest.json?mode=grid用于 freshness / frame metalatest.json?mode=grid中的mouse_position与当前 frame 对齐/observation/mouse.json用于读取当前鼠标即时坐标capture-preview/capture-grid只用于强化观察
推荐拿 URL 的方式:
agent-computer observation urls --json
agent-computer observation mouse --json
.\windows-launcher.ps1 observation urls --json
.\scripts\show_observation_urls.ps1
推荐启动方式:
.\scripts\start_observation_local.ps1
如果需要远程访问:
.\scripts\start_observation_tunnel.ps1 -RelayHost <public-host> -RelayUser <user>
.\scripts\show_observation_urls.ps1
Nginx 反向代理模板位于:
deploy\nginx\agent-computer-observation.conf.exampledeploy\observation.remote.json.example
8. Browser Assist Locator
项目提供一套 Browser Assist Locator v1 最小闭环:
- 扩展负责网页 DOM 几何定位
- daemon 负责 WebSocket 桥接与坐标映射
agent-computer继续负责实际桌面动作执行
Browser Assist 的后端入口:
GET /browser-assist/status
POST /browser-assist/locate
GET /ws/browser-assist?token=<TOKEN>
Browser Assist 配置文件位于:
.agent\browser_assist.json
扩展源代码位于:
extensions\browser-assist-locator
打包扩展:
.\scripts\package_browser_assist_extension.ps1
查看扩展连接状态:
.\windows-launcher.ps1 browser-assist-status
执行 Browser Assist 定位:
.\windows-launcher.ps1 browser-assist-locate --input-file .\docs\examples\browser-assist-request.json
请求体示例:
{
"query": {
"text": "收藏",
"role": "button",
"hint": "当前职位详情区域里的收藏按钮",
"selectorHint": null,
"index": 0
},
"options": {
"visibleOnly": true,
"interactiveOnly": true,
"maxCandidates": 5
}
}
Browser Assist 的输出边界:
- 插件返回
page / viewport / browser / matches - 插件返回
browser.contentLeftOnScreen/contentTopOnScreen - 插件不做 screen 坐标最终映射
- daemon 负责把
clickablePoint映射成桌面绝对坐标
推荐浏览器操作链路:
browser-open-urlbrowser-assist-statusbrowser-assist-locate- 读取
mapped.screenCandidates[*].screenPoint clickobservation/latest.*?mode=grid仅用于确认点击结果
也就是说:
- Browser Assist 负责“找在哪”
- daemon 负责“算到哪”
agent-computer click负责“点下去”grid默认不再负责浏览器页面的前置定位,只负责事后验证
快速 roundtrip 检查:
.\scripts\test_browser_assist_roundtrip.ps1
.\scripts\test_browser_assist_roundtrip.ps1 -RequestFile .\docs\examples\browser-assist-request.json
Release files for agent-computer-max 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| agent_computer_max-0.1.0.tar.gz | 51.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| agent_computer_max-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 106.8 kB
Release files / agent_computer_max-0.1.0.tar.gz
| Download URL | agent_computer_max-0.1.0.tar.gz |
|---|---|
| Size | 51.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
27f0c25800afda47a6b93608176227be02fcac0130856d3f10d42d68935a34d3
|
|
BLAKE2b-256 checksum How to use checksums |
83044280108ecd2349e4f206c8be464255925ce31723d89dd45eb8e11dd05dda
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / agent_computer_max-0.1.0-py3-none-any.whl
| Download URL | agent_computer_max-0.1.0-py3-none-any.whl |
|---|---|
| Size | 55.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
62e1542f2875f43ed2a5287ea6d1c6d129a7e0c2971f5bc857a88abe690f41b9
|
|
BLAKE2b-256 checksum How to use checksums |
8e98e6d0d6b231d10685796cd31d56951b82e93f4437be6f08c04cd1e02800b6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|