Skip to content
// 0x
0x08 // 工具设计

扩展 AI 编码助手的本地能力 — 浏览器自动化与共享终端

AI 编码助手默认通过文本对话交互,能执行命令、读写文件,但有两个明显的盲区:浏览器交互(JS 渲染页面、登录态操作、截图)和终端协作(需要用户输入密码的场景)。

本文记录如何通过 playwright-cli 和 tmux 为本地 AI 助手补齐这两块能力,实现从”问与答”到”看与做”的跃迁。

浏览器自动化:从 webfetch 到 playwright-cli

为什么需要

内置的 webfetch 工具能获取静态页面内容,但遇到需要 JS 渲染、表单提交、登录态操作的场景就无能为力。playwright-cli 是专为编码代理设计的浏览器自动化 CLI,每次命令后返回页面快照(含元素引用),token 开销远小于完整截图。

安装

npm install -g @playwright/cli@latest
playwright-cli install --skills

核心工作流

playwright-cli open <url>      # 打开浏览器
playwright-cli snapshot        # 获取页面快照(含 ref)
playwright-cli click e15       # 用 ref 点击
playwright-cli type "text"     # 输入文字
playwright-cli press Enter     # 提交
playwright-cli screenshot      # 截图
playwright-cli close           # 关闭

playwright-cli 每次操作后自动返回页面 URL、标题和元素树快照,不需要每次都截图。snapshot 中的 ref 编号(如 e1、e15)可作为后续操作的定位依据。

两种运行模式

模式一:headless 自启动——简单快速,适合无状态的自动化场景:

playwright-cli open https://example.com
playwright-cli screenshot --filename=screenshot.png

模式二:连接本地桌面浏览器——有 Cookie、登录态,用户能实时看到操作:

# 启动 Chrome 时开启远程调试端口
google-chrome --remote-debugging-port=9222 --user-data-dir=~/.config/chrome-debug

# 连接
playwright-cli attach --cdp=http://localhost:9222

连接后可以操作用户已登录的网站、看到实时的浏览器画面,适合需要人工监督的场景。

技巧:Basic Auth 的 SPA 兼容

Traefik 仪表盘等 SPA 页面使用 Basic Auth 时,在 URL 中嵌入密码会导致 JavaScript 的 fetch() 调用因安全策略报错。正确的做法是用路由拦截统一添加认证头:

AUTH=$(echo -n 'admin:password' | base64)
playwright-cli route "https://dashboard.localhost/**" --header="Authorization: Basic $AUTH"
playwright-cli goto https://dashboard.localhost/

这样 manifest.json、API 请求和 Web Worker 都能正确携带认证信息。

整合为 Skill

playwright-cli 的官方 skill 已包含详细的命令参考和 9 份专题文档。在此基础上,根据实际使用场景整理了本地 Chrome 连接、标签管理优先级、交互注意事项等经验,封装为可复用的 Skill:

共享终端:通过 tmux 实现 AI-用户协作

场景

AI 可以执行命令,但遇到需要输入密码(SSH、数据库)的环节就卡住了。同时用户也希望看到 AI 在远程服务器上执行了哪些操作。

实现方案

使用 tmux 终端复用器,让 AI 和用户共享同一个终端会话:

# AI 创建会话
tmux new-session -d -s shared

# 用户 attach(终端窗口自动打开)
deepin-terminal -e "tmux attach -t shared"

# AI 发送命令
tmux send-keys -t shared "ssh user@remote-server" Enter

# 用户在终端中输入密码,AI 不可见
# AI 可以继续发送只读命令,输出双方都能看到

# AI 查看输出
tmux capture-pane -t shared -p -S -20

协作角色分工

整合为 Skill

检测逻辑封装为 Skill:如果已有终端 attach 到 session,直接发命令;如果无人连接,自动打开终端窗口。用户通过”终端”、“共享终端”、“合作”等关键词触发。

工具链总览

AI 编码助手(核心)
├── webfetch        → 静态页面读取(轻量)
├── playwright-cli  → 浏览器自动化(JS 渲染、交互、截图)
│   ├── headless 模式  → 快速自动化
│   └── local Chrome   → 有登录态、用户可见
└── tmux            → 共享终端协作(密码安全、远程操作)
    └── SSH → 远程服务器巡检(只读)

经验总结

  1. 工具链分层:webfetch(轻量读取)→ playwright-cli(浏览器操作)→ tmux(终端协作),各司其职,复杂度递增
  2. 本地优先:所有能力在本地运行,数据不出机器;Chrome 和终端都在用户桌面,操作全程可见
  3. 安全协作:密码等敏感信息由用户在终端直接输入,AI 不接触;生产服务器限定只读命令
  4. 模块化封装:每个能力封装为独立 Skill,按需加载,互不干扰

最终效果:一句话让 AI 助手打开浏览器截图、连接远程服务器巡检、或者一起排查线上问题——全程在本地桌面上可见可控。


Share this post on:

Previous Post
从 Pine 到回测 — 构建本地交易信号系统
Next Post
从单体到管道:解耦订单同步与发货单创建