# 常见问题 — herdr-web

> 装之前先看看，卡住了再回来：代码会不会经过别人的服务器、把终端挂到网上安不安全、手机上复制粘贴为什么是反的、锁屏断了怎么办、passkey 点了没反应、Windows 怎么装、没有域名能不能用。

[herdr-web](/) [指南](/guides.md) [常见问题](/faq.md)

常见问题

# 装之前先看看，卡住了再回来

一问两三句答完。怎么装、有哪些配置项看 [README](https://github.com/zbysir/herdr-web/blob/master/README.zh-CN.md)，进阶用法看 [指南](/guides.md)，「为什么这么设计」在仓库的 [docs/dev](https://github.com/zbysir/herdr-web/tree/master/docs/dev) 里。

01信任

## 它跑在哪儿，谁能连上

### 我的代码会经过别人的服务器吗？

不会。它是一个 Go 二进制，跑在你自己的机器上，网页嵌在这个二进制里面，浏览器直接连它，没有中转服务器，也没有账号。默认只听 `127.0.0.1`；要从外面连是你自己配隧道或域名，那条路也只在你的机器和你的手机之间。唯一的出站请求是查更新（GitHub Releases）， `HERDR_WEB_UPDATE_CHECK=0` 关掉之后这个进程一个出站请求都没有。

### 把一个终端挂到网上，安全吗？

这东西等于一个 HTTP 上的 shell，门是按这个前提设计的：一台设备配一次，一次性配对码换一份 per-device 凭据，服务端只存 sha256（这台机器上的 agent 天天读不可信内容，凭据文件被读走是日常风险）；配对码只能由坐在机器前的人产生，网页上任何路径都不出码；暴露出去又没 TLS 就拒绝启动；猜码指数退避 + 按 IP 封锁。主口（默认 7788）在代码里就只服务本地网络，要走公网得另开一个口。威胁模型和每条为什么这么设计在 [SECURITY.md](https://github.com/zbysir/herdr-web/blob/master/docs/dev/SECURITY.md)。

### 手机丢了怎么办？

`herdr-web revoke`，或者在设置 →「设备」里踢掉，下一个请求立刻 401。凭据绑设备、不绑 IP，所以换网换网段都不掉线，撤销也只撤那一台，别的设备不用重配。

### 开源吗？收费吗？

MIT，代码在 [GitHub](https://github.com/zbysir/herdr-web) 上，npm 包是 `@bysir/herdr-web`。没有云服务，所以既没有账号也没有订阅。

02用起来

## 第一天最容易卡住的那几件事

### 为什么手机上看 diff 没有 commit 按钮？

刻意的，网页这边一律只读。会改仓库的事（ `add` / `commit` / `checkout`）留在终端里做。出问题时你要看得见输出，而「一个从公网点得到的按钮」和「在终端里敲一行」的风险完全不对称。看 diff 这块存在的理由只有三件终端做不到的事：折行、按词高亮、按文件分开看，别的都不该往里加。

### 为什么网页这边只做了这么几块界面？

默认留在终端里。只有当小屏 \+ 触屏把 TUI 本身弄坏了（长行不能折、要在几十上百个里挑一个、终端里滚一下得等对面重画一整屏），或者那件事根本不在终端里（相机、系统剪贴板，还有语音和系统通知），才在网页这边另做一层。所以有 diff、文件浏览、面板一览和发件箱，而没有网页版的 workspace 管理器。那件事会改状态，而且在电脑前 herdr 自己那套快得多。判据写在 [TUI-VS-GUI.md](https://github.com/zbysir/herdr-web/blob/master/docs/dev/TUI-VS-GUI.md)。

### 在手机上复制粘贴怎么是反的？

因为 herdr 复制到的是跑 herdr 那台机器的剪贴板，不是你手机的。你在手机上框选， herdr 弹「copied 84 chars」，那 84 个字进的是那台 Mac，手机上粘出来还是上一次的东西。所以有两个按钮：📋 取（服务端读机器上的剪贴板交给网页）和 📥 粘（读手机剪贴板、按括号粘贴送进终端）。做不成自动同步：浏览器只在用户手势里给读写剪贴板，定时器里偷偷做是不给的。

### 发件箱是什么？为什么不直接对着终端说？

它是这个项目的主功能：在平板上说一段、说错的字框选重说就改掉、攒够了整段投进 agent 的输入行。直接对着终端说的话，每停一下就发出去一次、改不了字，而 agent 那个输入框在屏幕上是活的（它自己会重画），你打的字和它画的会打架。

### agent 干完活怎么告诉我？

它停下来等你回答、或者刚跑完时，右上角弹一张卡片，卡上带它说的那段话，顶栏 ▦ 上点一个红点；点卡片就跳过去，开一次面板一览红点才灭。想在锁屏、切到别的 app 时也收到，就去设置 →「终端」打开系统通知。那一下必须你自己点，浏览器只在用户手势里给权限弹窗。

### 锁屏回来就断了，能不能一直连着？

留不住：锁屏时系统把整个页面挂起，WebSocket 跟着断，网页里没有任何开关能拦住这件事。所以改成断了自己连（退避 0.4→8 秒、最多 8 次，页面不可见时压根不试）。重连本来也没有代价，pane 都活在 herdr server 里，敲一下 `herdr` 就 attach 回去，屏幕和断开前一样。

### 呼输入法时闪一下，底下几行还被键盘盖住？

呼键盘会让视口重排，而一次重排就是清画布 \+ SIGWINCH + herdr 清屏重画，几十毫秒的黑。现在那一下用一张冻帧盖住，等新画面画上再淡出。代价是键盘升起的那 300~500ms 里终端还是老行数（底下几行被盖着），换来的是只闪一次而不是三次。视口是一格一格变过来的，每一格都够触发一次重排。细节在 [MOBILE.md](https://github.com/zbysir/herdr-web/blob/master/docs/dev/MOBILE.md)。

03装和连

## 装在哪、怎么连、连不上怎么办

### 没有公网 IP、也没有域名，能用吗？

能。同一个 Wi-Fi 下，扫启动横幅上那个二维码就进去了。一共四档：只本机、局域网自签 TLS、走隧道到公网，或者自己的域名 + 真证书。各自要准备什么、授权方式有什么不同，在 [首页那张表](/#deploy) 和 [DEPLOY.md](https://github.com/zbysir/herdr-web/blob/master/DEPLOY.md) 里。

### 只在局域网里用，也要配 https 吗？

建议配。http 不是 secure context：剪贴板 API 和 `OSC 52` 在那儿压根不存在（上面那两个复制粘贴按钮直接废掉），passkey 也用不了。局域网直连那条路更硬。https 页面对 `http://` 目标的请求算 active mixed content，浏览器无条件拦死。自签就够用；用 DNS-01 签一张真证书最省事，不需要公网可达，只要能改一条 TXT 记录。

### passkey 点下去什么都没发生，也不报错？

多半不是你取消了。WebAuthn 规范故意让几乎所有失败都报同一个错（不让网页试探某台设备上有没有某把 passkey），所以「人划掉了」和「浏览器因为这个页面的证书被跳过过而不肯做」在错误对象上一模一样。先用配对码进去，然后把证书修好； `HERDR_WEB_TLS=proxy` 时证书是前面那一层的事，那一层不对的话域名、RP ID 全对也按不动。

### Windows 上怎么装？

没有原生版，在 WSL 里装：浏览器里那个终端需要一个真 PTY，herdr 自己也走 unix socket。WSL 里就是完整的 linux 版，装完在 Windows 的浏览器上开 `http://localhost:7788/` 照样用。

### 一定要装 herdr 吗？

默认一连上就进 herdr，产品的一大半（面板一览、投稿到 agent 的 pane、提示卡）都是围着它转的。不想要就 `HERDR_WEB_ONCONNECT=` 留在普通 shell 里，那时它就是个在手机上能用的浏览器终端。

### 它会不会跟正在跑的 agent 抢那台机器？

这条是刻意省着来的：顶栏「改动」那个绿点12 秒一拍、页面不可见时不问，服务端还压了 2 秒缓存；补丁页滚到跟前才读、一次只读一个文件；跑 git 一律带 `--no-optional-locks`，不然 `git status` 会去抢 `.git/index.lock`，而失败落在正在同一个仓库里干活的 agent 头上，这边一点症状都看不到。

### 合上笔记本出门，agent 就停了？

合盖是一个显式的睡眠请求， `caffeinate` 那种 power assertion 盖不过去。推荐做法（和不装 app 的那条命令、它的四个坑）在这篇里： [合上盖子出门，让 Mac 上的 agent 继续跑](/guides/macawake.md)。

没答到你那条，去 [issues](https://github.com/zbysir/herdr-web/issues) 提一句。

[herdr-web](/) MIT · @bysir/herdr-web [GitHub](https://github.com/zbysir/herdr-web)

> 全站页面清单：[/llms.txt](/llms.txt)
