🦎 Hermes + PinchTab 浏览器引擎手册
版本: 5.0 | 更新日期: 2026-07-10 | 维护人: Hermes Agent
基于实际环境审计,修正部署路径、版本号、进程架构及使用统计数据。
📑 目录
1. 🚀 部署
1.1 存在形式
| 组件 | 当前实际路径 | 大小 | 说明 |
|---|---|---|---|
| 二进制 | /opt/data/home/.pinchtab/bin/pinchtab | 19MB | Go 静态编译单文件,v0.12.0(非 v0.13.0) |
/opt/data/.pinchtab/bin/pinchtab | 19MB | ✅ 重复副本,版本一致 | |
| 运行配置 | /opt/data/.pinchtab/config.json | 4K | 当前活动配置(token 鉴权) |
| 用户配置 | /opt/data/home/.pinchtab/config.json | 4K | 历史冗余,内容与上面一致 |
| Profile 数据 | /opt/data/.pinchtab/profiles/default/Default/ | 699M | Chrome 用户数据(Cache 468M + Code Cache 219M) |
| 活动日志 | /opt/data/.pinchtab/activity/ | 284K | 历史(Jun 4 - Jul 3) |
/opt/data/home/.pinchtab/activity/ | 4K | 近期(Jul 3 - Jul 7) | |
| Server 日志 | /opt/data/home/.pinchtab/server.log | 4K | 启动日志 + 请求记录 |
| MCP 配置 | /opt/data/config.yaml → mcp_servers.pinchtab | — | command: /opt/data/home/.pinchtab/bin/pinchtab, args: [mcp] |
1.2 依赖
| 依赖 | 版本 | 路径 |
|---|---|---|
| Chromium | 144.0.7559.133 | /opt/hermes/.playwright/chromium_headless_shell-1223/chrome-linux/headless_shell |
| Go 运行时 | — | 无需,Go 静态编译二进制 |
注意:浏览器引擎使用的是 Hermes 自带的 headless_shell(在 /opt/hermes/.playwright/ 下),不是 /opt/data/home/.local/share/playwright/ 中的 Playwright Chromium。前者由 Hermes 容器镜像自带,后者是用户通过 pip install playwright 安装的。
1.3 磁盘占用
| 项目 | 大小 | 路径 |
|---|---|---|
| Profile 缓存 | 699M | /opt/data/.pinchtab/profiles/ |
| ├─ Cache | 468M | Chrome 磁盘缓存 |
| └─ Code Cache | 219M | JavaScript 编译缓存 |
| 二进制 | 19M × 2 | 两个副本 |
| 活动日志 | 288K | 两处 activity 目录 |
| 合计 | ~761M | 浏览器引擎(headless_shell)不计,属容器基础镜像 |
2. 🔄 生命周期与运行时架构
2.1 进程架构
v0.12.0 进程模型(与旧版文档不同,当前版本没有独立的 server → bridge 分离链路,而是:)
┌─ Hermes Gateway ──────────────────────────────────────┐
│ MCP Client (stdio) │
│ │ JSON-RPC │
│ ▼ │
├─ pinchtab mcp ────────────────────────────────────────┤
│ PID 14348 / 14360 (两个 MCP 子进程) │
│ · 接收 Hermes MCP 调用 │
│ · 转发为 PinchTab HTTP API 请求 │
│ · 由 Gateway 启动/管理 │
│ │ HTTP :9867 (带 Bearer token) │
│ ▼ │
├─ pinchtab server ─────────────────────────────────────┤
│ PID 14125 (主 daemon) │
│ · 中央控制面,端口 9867 │
│ · 管理 Chrome 实例声明周期 │
│ · 记录 activity 日志 │
│ │ CDP (Chrome DevTools Protocol) │
│ ▼ │
├─ pinchtab bridge ─────────────────────────────────────┤
│ PID 19956 (实例代理) │
│ · 转发 CDP 命令到 Chrome │
│ · 管理标签页状态 │
│ │ CDP │
│ ▼ │
├─ Chrome (headless_shell) ─────────────────────────────┤
│ · headless 模式 │
│ · Profile: /opt/data/.pinchtab/profiles/default/ │
│ · 多个子进程 (zygote/network/renderer/storage) │
└────────────────────────────────────────────────────────┘
2.2 生命周期时间线
完整生命周期(基于服务器日志 + 活动记录)
| 时间 | 事件 | 说明 |
|---|---|---|
| May 16 | 首次安装 | 二进制 home/.pinchtab/bin/pinchtab 就位 |
| May 18-30 | 活跃使用期 | 性能基准测试等(旧版对比测试) |
| Jun 4 | 服务重启 | stateDir 切至 /opt/data/.pinchtab/,activity 开始记录 |
| Jun 4-30 | 密集使用期 | 日均 20-100+ events,含 navigate/snapshot/text/click 等 |
| Jun 9 10:23 | 后台关闭 | shutting down dashboard... 实例被故意停止 |
| Jul 1-2 | 休眠期 | 仅 1 event/日(health check) |
| Jul 3 08:00+ | 服务重启 | 重新启动 server,触发 148 events |
| Jul 3-7 | Token 异常期 | 几乎所有请求返回 401(token 不匹配) |
| Jul 3 - now | 进程持续运行 | server/mcp/bridge 进程持续运行 6+ 天 |
2.3 进程状态(当前)
| 进程 | PID | 运行时长 | 角色 |
|---|---|---|---|
pinchtab server | 14125 | 6d 17h | 中央 daemon,端口 9867 |
pinchtab mcp | 14348 | 6d 17h | MCP 桥接 #1 |
pinchtab mcp | 14360 | 6d 17h | MCP 桥接 #2 |
pinchtab bridge | 19956 | 6d 17h | Chrome CDP 代理 |
2.4 常驻 vs 按需
当前架构是常驻 daemon 模式(非旧版文档所述的"按需启动")。
- server/mcp/bridge 进程持续运行,在 Hermes Gateway 启动时即加载,非首次调用时启动
- Chrome 实例在 server 启动时自动启动(always-on 策略),非按需启动
- 进程自 Jul 3 以来已持续运行 6 天 17 小时未重启
资源消耗:
- server 进程 RSS: 27MB
- mcp 进程 ×2: ~20MB 各
- bridge 进程: ~28MB
- Chrome 及其子进程: 按页面数量浮动(每个渲染进程 ~100-170MB)
3. 📊 使用记录与统计
3.1 每日活动量
| 日期 | 事件数 | 活跃度 |
|---|---|---|
| Jun 4 | 23 | ⭐ |
| Jun 5 | 18 | |
| Jun 9 | 66 | ⭐⭐ |
| Jun 10 | 82 | ⭐⭐⭐ |
| Jun 12 | 87 | ⭐⭐⭐ |
| Jun 14 | 109 | ⭐⭐⭐⭐ |
| Jun 16-17 | 39+71 | ⭐⭐⭐ |
| Jun 21 | 23 | |
| Jun 23-30 | 5-77/日 | 偶发使用 |
| Jul 3 | 148 | 🔥 峰值(服务重启) |
| Jul 4-7 | 1-2/日 | Token 异常,实质不可用 |
3.2 操作统计(全历史)
| 操作 | 成功次数 | 占比 | 说明 |
|---|---|---|---|
navigate | 189 | 45% | 页面导航(最多) |
snapshot | 92 | 22% | 获取页面结构 |
text | 79 | 19% | 提取页面纯文本 |
click | 18 | 4% | 点击页面元素 |
press / mouse-wheel / hover | 5 | 1% | 其他交互 |
| 合计 | ~383 | 100% | 另含 ~105 health check 等辅助调用 |
导航 (navigate) + 内容提取 (snapshot + text) 占所有操作的 86%,为主要使用模式。点击等交互操作仅占 4%。screenshot 等可视化输出仅 7 次。
3.3 当前状态:Token 异常
自 Jul 3 服务重启后,所有 PinchTab API 调用返回 401。 MCP 进程发送的请求不含有效的 Bearer token,导致每次操作实际失败。7 月 4 日至 7 日仅 1-2 次/日的 health check(也 401)。
根因:两处 config.json 中的 token 在服务重启后未同步。当前 config 中有 token:3df8213a...,但 MCP 进程可能持有旧 token 或不带 token 发送请求。
修复:
# 将 home 下的 config 同步到运行目录
cp /opt/data/home/.pinchtab/config.json /opt/data/.pinchtab/config.json
# 或重启 Gateway 重新加载 MCP
fuser -k 9867/tcp
# 等待 Gateway 重启(自动拉起 pinchtab mcp)
4. ⚙️ 当前配置快照(v0.12.0)
活动配置位于 /opt/data/.pinchtab/config.json(与 /opt/data/home/.pinchtab/config.json 内容一致)。
4.1 Server 配置
| server.port | 9867 | 服务端口 |
| server.bind | 127.0.0.1 | loopback 绑定 |
| server.token | 3df8213a... | Bearer 鉴权 |
| stateDir | /opt/data/.pinchtab | 状态目录 |
| engine | 空 | 未配置 |
4.2 浏览器配置
| browser.binary | /opt/hermes/.playwright/chromium_headless_shell-1223/chrome-linux/headless_shell |
| browser.version | 144.0.7559.133 |
| instanceDefaults.mode | headless |
| instanceDefaults.stealthLevel | light |
| instanceDefaults.maxTabs | 20 |
| instanceDefaults.tabEvictionPolicy | close_lru |
4.3 安全配置
| allowedDomains | ["*"] | ⚠️ 全部放行 |
| allowEvaluate | true | ⚠️ JS 执行开启 |
| allowNetworkIntercept | true | ⚠️ 网络拦截开启 |
| allowDownload / Upload | true | ⚠️ 文件上下开开启 |
| allowClipboard | false | ✅ 剪贴板关闭 |
| allowStateExport | false | ✅ 状态导出关闭 |
| idpi.enabled | false | ⚠️ IDPI 关闭(旧文档声称 true) |
| idpi.strictMode | false | ⚠️ 非限定模式 |
| trustedProxyCIDRs / ResolveCIDRs | [] | ⚠️ 无内网信任配置 |
4.4 多实例配置
| strategy | always-on | 常驻运行 |
| allocationPolicy | fcfs | 先到先得 |
| instancePortStart~End | 9868 - 9968 | 实例端口池 |
| restart.maxRestarts | 20 | 崩溃自动重启上限 |
4.5 Hermes config.yaml MCP 配置
mcp_servers:
pinchtab:
command: /opt/data/home/.pinchtab/bin/pinchtab
args:
- mcp
timeout: 120
关键点:
- args 只有
["mcp"],无--server(否则 stdout 污染) - timeout 120s 充足
- MCP 工具集共 38+ 个工具(navigate/click/snapshot/fill/type 等)
5. 🔧 故障排查
5.1 当前问题:401 missing_token
症状:MCP 调用返回 401,activity 日志显示 status=401
根因:服务重启后 token 不一致
修复:
# 从 home 复制 config(含正确 token)到运行目录
cp /opt/data/home/.pinchtab/config.json /opt/data/.pinchtab/config.json
# 重启服务
fuser -k 9867/tcp
5.2 MCP 工具不可见
# 检查配置
grep -A5 "pinchtab:" /opt/data/config.yaml
# 确认 args 只有 ["mcp"]
# 重启 Gateway
5.3 Chrome 无法启动
容器环境自动使用 headless_shell(headless 模式),无需沙箱。确认二进制路径存在。
5.4 磁盘占用
Profile 缓存(699M)为主要磁盘消耗,可定期清除:
# 清除浏览器缓存(不影响配置)
rm -rf /opt/data/.pinchtab/profiles/default/Default/Cache/*
rm -rf /opt/data/.pinchtab/profiles/default/Default/Code\ Cache/*
5.5 清理重复文件
目前 /opt/data/.pinchtab/bin/pinchtab 和 /opt/data/home/.pinchtab/bin/pinchtab 为同版本重复副本(19MB × 2)。MCP 配置指向 home 下的,/opt/data/.pinchtab/bin/ 下的副本可清理。
与旧版文档差异总结
| 项目 | 旧版(v4.0) | 实际(v5.0) |
|---|---|---|
| 版本 | v0.13.0 | v0.12.0 |
| 二进制路径 | /opt/data/mcp/pinchtab/ | /opt/data/home/.pinchtab/bin/pinchtab |
| 浏览器引擎 | Playwright Chromium | Hermes 内置 headless_shell |
| 进程模型 | 按需启动 | 常驻 daemon(6+ 天) |
| stateDir | 未明确 | /opt/data/.pinchtab/ |
| IDPI 状态 | enabled + strict | disabled |
| Token 同步 | 需手动 | 内容一致但 MCP 仍 401(bug) |
— 本文档由 Hermes Agent 维护于 Trilium | v5.0 基于实际环境审计