让 Agent 去操作一个真实网站,真正卡住的地方通常不是模型看不懂页面,而是三件事缠在一起:登录态怎么给、站点结构怎么描述、写入风险怎么收口。把浏览器交给模型点来点去,等于把 Cookie 和副作用一起交出去。Hycli 换了一条路:它是 Rust 写成的单文件命令行工具,用三个 AI worker 分别读站点的公开文档、前端产物与真实浏览器网络流量,把站点能力整理成一组带类型的 CLI 子命令,同时暴露成一个 MCP 服务;凭据放在本机操作系统的钥匙串里,模型只看得到账号标签与脱敏后的响应结构,真正的密钥由本机在执行时注入。本教程六步走完:装好二进制、探测站点、看清动作、接进 MCP、打开写入闸门,最后把登录态与边界一次说清。
Step 1:装好单文件二进制,并先认清它不是什么
三个平台的走法不一样,但都不需要你先装运行时。macOS 打开磁盘镜像把应用拖进 Applications,它会自动把命令链到 ~/.local/bin;Windows 跑安装程序,它会把命令加进用户 PATH 与开始菜单,之后在 PowerShell 里启动;Linux 装 deb 包,或者解开压缩包再跑安装脚本,然后启动。v0.1.0 有一条发布说明值得记住:Windows 与 macOS 的便携压缩包不含安装脚本,请用安装程序或磁盘镜像那条路。
macOS 13+(Apple Silicon 与 Intel 均可)
打开 .dmg,把 Hycli.app 拖进 Applications 并打开
自动链接到 ~/.local/bin/hycli
Windows 10 / 11(x64 与 ARM64)
运行 hycli-0.1.1-win32-*-setup.exe(写入用户 PATH 与开始菜单)
之后在 PowerShell 里执行 hycli open
Linux(x64 与 ARM64)
sudo apt install ./hycli-0.1.1-linux-*.deb
或解开 .tar.gz 后执行 ./install.sh,再执行 hycli open
本地仪表盘:http://127.0.0.1:4318
数据落在操作系统的应用数据目录里:Windows 在 %LOCALAPPDATA% 下的 hycli,macOS 在 ~/Library/Application Support/hycli,Linux 在 ~/.local/share/hycli;想挪位置就设 HYCLI_DATA_DIR。仪表盘、CLI 与 MCP 共用同一个数据目录,包括已经在跑的进程,所以改目录的时候要考虑正在运行的那几个。
动手之前把「它不是什么」先说清。它不是通用网页爬虫:目标是为某一个具体站点生成可复用的带类型操作界面。它也不是授权绕过工具:README 明确要求只用于你有权访问的站点与账号,并且作者声明不对账号限制或封禁负责。最后一条成熟度提示:版本是 0.1.1,至今的测试都跑在合成的本地站点上,真实站点在限流、反爬与负载下的表现还没有测过。
Step 2:prepare:三路探测,准备阶段不碰你的数据
核心命令只有一条:给 Hycli 一个站点地址,再用 --intent 说清楚你想在上面做什么。它会派三个 AI worker 分头看材料——一个读站点公开的 API 文档,一个读前端代码找每页背后的数据结构,第三个跟着真实浏览器点击时的网络调用,把前两路漏掉的部分补上。三个 worker 合起来产出站点操作定义,按资源分组,每个子命令的参数带类型,描述由站点自身生成。
hycli prepare https://your-website.example \
--intent "Search posts, save drafts, and publish articles"
这里最值得记的是它的安全姿态:准备阶段不会对你的账号做任何改动。即便某条路径或者某个 GraphQL 请求体里藏了写行为,也会在这一步被拦下来。也就是说,你可以放心地对着生产站点做探测,先看清能力再谈动作。取消是协作式的:它能阻止后续工作,但撤不掉操作系统已经弹出的对话框;正在跑的扫描必须先结束才能开始下一次。
探测也要守规矩:三路探测会真实访问目标站点并观察网络流量。请只对你有权访问的站点与账号执行,并且留意对方的服务条款;把内部系统交给任何工具之前,先确认这件事在你们团队是被允许的。
Step 3:describe:动作名以输出为准,不要凭空假设
探测完之后,用 describe 看这一趟到底生成了什么。这一步不能跳:命令名与参数完全由分析结果决定,不同站点不会有相同的一套动作,README 里的示例只是示例。看完再按「站点名 + 动作名」的形式调用,读取类动作会立刻对已登录的站点生效。
hycli describe your-website
# 读取类动作立即执行;动作名以 describe 的实际输出为准
hycli your-website search-posts --query "release notes"
还有一类场景它单独给了入口:如果你已经知道某个站点有现成的 JSON 或 GraphQL 端点,但还没生成对应的站点动作,可以用带边界的已验证账号读取,把请求写进一个文件再交给它。这样既不用等站点定义生成完,也不会让模型凭空编请求体。
# 已知端点、尚无站点动作时:受控的已验证账号读取
hycli accounts read ACCOUNT --request REQUEST.json
# 遇到问题想反馈:返回 JSON,含 url 与 launch_requested
hycli feedback
feedback 这条命令有个细节值得知道:它总是返回一段 JSON,里面有 issue 编辑页地址和一个表示是否启动了浏览器的标志位;那个标志位只说明启动器有没有被调起,不代表页面真的打开了。没有浏览器环境时它依然正常退出,也不会自动提交任何 issue——提交前请自己检查一遍,把凭据、Cookie、账号信息与站点私有数据清干净。
Step 4:接进 MCP,让 Agent 用自然语言调用
CLI 之外还有一条更省事的路:把 Hycli 注册成 MCP 服务,然后让编码 Agent 用自然语言驱动它。四个主流客户端用的是同一份配置形态——命令是 hycli,参数是 mcp。接好之后可以直接对 Agent 说:用 Hycli 准备某个站点、把可用动作列出来、再帮我起草一篇新内容。
{
"mcpServers": {
"hycli": {
"command": "hycli",
"args": ["mcp"]
}
}
}
支持这条路的客户端包括 Claude Code、Cursor、Codex 与 Windsurf。注册完成后,Agent 会自己去看站点定义与动作清单,你只需要说清楚意图。这里有个实用的验收办法:先只让 Agent 做读取类的动作,确认它拿到的数据与你自己在站点上看到的一致,再考虑开放写入。
Step 5:写入闸门:默认关闭,逐站确认,失败不重试
新建的站点 CLI 默认 writes 为 false,也就是只给读。要用写操作,得显式给这个站点放行;放行之后还有一层:每一个写动作在该站点上初次使用时都要你确认一次。权限随时可以撤销。这套设计对应的是真实世界里最贵的那类事故——重复下单、重复发文、重复提交表单。
# 给这个站点打开写权限(默认关闭)
hycli writes your-website allow
# 写动作:初次使用时逐站确认,可随时撤销
hycli your-website create-draft --title "Hello from Hycli" --body "Automated from my terminal."
与之配套的是一条很容易被当成缺点的设定:写操作失败不会自动重试。这是作者有意的取舍,理由很实在——一次网络抖动之后自动重发,很可能变成两条重复记录。你在脚本里也不要替它加重试,除非你能保证接口幂等。写入的边界还包括:准备阶段不改动账号,读取立即生效,写入需要确认。
不要给写操作套自动重试:失败不重试是刻意的设计,目的是避免重复下单或重复发文。如果你在编排层自己加了一层重试,等于把这道闸门拆了,请在确认目标接口幂等之后再考虑。
Step 6:登录态与凭据柜:模型永远看不到密钥
这一节是整个工具最值得理解的部分。Cookie、localStorage、sessionStorage 与 API key 都存在本机的加密保险库里,底层走操作系统钥匙串:Windows 用凭据管理器,macOS 用钥匙串,Linux 用 Secret Service,没有钥匙串时回退成只有属主可读的文件权限。模型这一侧看到的只是账号标签、存储键的名字,以及已经脱敏的响应结构;真正的密钥由本机在执行那一刻注入,并且会从输出与日志里被移除。于是 Agent 能调用一个已登录的站点,却拿不到任何可以复用的凭据。
凭据与登录态的四条规则
1) 原生浏览器会话发现是可选开启的,macOS 上默认关闭
Windows 与 Linux 保留开启的默认值
2) 开关作用于仪表盘、CLI 与 MCP,共用同一数据目录
包括已经在运行的进程
3) 开启开关不会自动开始扫描,需要显式点 Find / Recheck
4) 关闭开关会保留已导入的账号与浏览器伴侣连接
不是所有会话都能被发现。被 Windows App-Bound 加密锁住、放在隐私容器里,或者浏览器档案本身被加密的会话,需要走一次手动登录:在仪表盘的 Accounts 里选择连接账号,用浏览器伴侣扩展登录,或者导入 JSON 或 Netscape 格式的 Cookie 文件。有一条红线无论怎么强调都不过分——永远不要把 Cookie 或账号信息粘贴进 AI 对话里。原生访问还可能触发操作系统钥匙串的授权弹窗,操作前先把遗留的系统弹窗处理完,一次没完成的原生尝试会自动重试。
动手前值得抄走的边界清单
1) v0.1.1,仍在活跃开发中
2) 至今的测试都跑在合成的本地站点上
3) 真实站点在限流、反爬与负载下的表现尚未测量
4) 导入登录态时只读取指定域名的数据
5) 浏览器凭据不进 LLM 提示词,真正的密钥本机注入
6) 它不是授权绕过工具,也不是生产系统的权限边界
想自己验证的话,仓库里给了一整套本地校验命令:仪表盘侧装依赖后跑 check 与 build,Rust 侧跑 cargo test 与 cargo build,再跑端到端脚本。全部测试都针对合成的本地站点与固定样本,README 明确要求不要拿真实第三方账号去测写操作。最后一句预期管理:它能把「让 Agent 操作已登录站点」这件事从不可行变成可控,但它不替你承担权限边界的责任,敏感站点请另配审计与最小权限账号。
常见问题速查
| 现象 | 原因与处理 |
|---|---|
| 命令找不到 | Windows 用安装程序写 PATH;macOS 由 .dmg 链到 ~/.local/bin;Linux 跑 install.sh 或装 deb |
| 便携压缩包里没有安装脚本 | v0.1.0 起 Windows 与 macOS 便携包不含脚本,改用 setup.exe 或 .dmg |
| 仪表盘打不开 | 默认在 127.0.0.1:4318;先确认 hycli open 已执行 |
| 想换数据目录 | 设 HYCLI_DATA_DIR,注意它与已在运行的进程共用 |
| prepare 会不会改我的账号 | 不会,准备阶段不做任何改动,隐藏的写行为也会被拦 |
| 命令名和示例不一样 | 动作名由分析结果决定,以 hycli describe 的实际输出为准 |
| 写操作被拒 | 新 CLI 默认 writes 为 false,需 hycli writes 站点名 allow 并逐站确认 |
| 写入失败后没有自动重试 | 刻意设计,避免重复下单或发文;确认幂等后再自行处理 |
| macOS 上找不到已登录会话 | 原生会话发现默认关闭,需要显式开启并点击 Find 或 Recheck |
| 隐私容器里的账号连不上 | 用 Accounts 连接账号,走浏览器伴侣扩展或导入 Cookie 文件 |
| 担心 Cookie 进了模型上下文 | 凭据存本机钥匙串,模型只看到账号标签与脱敏结构 |
| 已知端点但还没有站点动作 | 用 hycli accounts read 加请求文件做受控读取 |
| 想在真实站点上评估稳定性 | 作者说明测试仅在合成站点完成,真实限流与反爬表现未测 |
| feedback 没打开页面 | 返回的 launch_requested 只表示启动器被调起;用返回的 url 自己打开 |