出门不带电脑,也能随时调用家里的知识库:MacBook + Mac mini + iPhone 协同保姆级教程

我最近把家里的设备重新捋了一遍:MacBook、Mac mini、iPhone,三台设备彻底打通。 为什么要折腾这个?很简单——我想出门的时候,不用随身背笔记本,也能随时随地调用我的知识库去写内容、写代码。

为什么要折腾这个?很简单——我想出门的时候,不用随身背笔记本,也能随时随地调用我的知识库去写内容、写代码。

以前我只有两个选择:要么笔记本走哪带哪,要么让笔记本在家里 24 小时开着不敢合盖。现在这套方案跑通之后,我的状态变成了:

整套方案用到的核心工具就三个:Syncthing(同步知识库)+ Tailscale(跨网络组网)+ SSH(远程控制),全部免费。

这篇文章我会把完整的配置过程写出来,包括我踩过的每一个坑。步骤会写得很细,新手照着做就能跑通。


一、先看全貌:这套系统长什么样

动手之前,先花一分钟搞清楚我们要搭的东西是什么结构,不然做到一半容易迷失。

```plaintext

┌─────────────────┐

│ iPhone │

│ 微信 / 飞书/TG │

│ Termius(SSH) │

│ UU远程(备选) │

│ Tailscale App │

└────────┬────────┘

│ Tailscale (100.x.x.x)

┌──────────────┼──────────────┐

▼ ▼

┌─────────────────┐ ┌─────────────────┐

│ Mac mini(主脑) │ │ MacBook(操作端)│

│ · Hermes+Gateway│ │ · 本地开发/创作 │

│ · 微信(唯一) │ │ · Obsidian │

│ · 飞书/TG 可选 │ │ · 飞书/TG 另 Bot│

│ · Codex/ChatGPT │ │ · 需要时 SSH 到 │

│ · Obsidian │◄─Syncthing─►│ Mini │

│ · 不休眠+自启 │ └─────────────────┘

└─────────────────┘

```

三台设备的分工,务必记住:

设备角色主要做什么
Mac mini主脑跑 Hermes、微信入口、知识库服务、远程执行任务
MacBook操作端写代码、深度改稿、本地调试
iPhone遥控器下指令、看结果、SSH、轻量补充

要达成这个状态,一共要做成 五件事:

  1. 用 Syncthing 让两台 Mac 的 Obsidian 知识库自动同步
  2. 让 Mac mini 常开不休眠,当 24 小时在线的主脑
  3. 用 Tailscale 把三台设备组成一个虚拟局域网(重点处理和国内代理的共存问题)
  4. 打开 SSH,让手机用 Termius 随时连进两台 Mac
  5. 在 Mac mini 上装 Hermes,接上微信,实现“发微信 = 下指令”

下面一件一件来。

开工前的准备清单

硬件:

软件:

软件用途装在哪
SyncthingObsidian 同步两台 Mac
Tailscale跨网络组网两台 Mac + iPhone
Termius手机 SSHiPhone
Hermes Agent常驻 AI Agent以 Mac mini 为主
Obsidian知识库两台 Mac
Clash Verge / Surge电脑代理两台 Mac
小火箭 Shadowrocket手机代理iPhone
ChatGPT / Codex 桌面端编程与对话建议 mini 也装

账号原则(先记住,后面会用到):


二、第一件事:用 Syncthing 同步 Obsidian 知识库

为什么先做这一步

后面 Hermes 要读知识库、你要在两台电脑之间无缝写笔记,全都依赖这一步。

先说一个重要结论:代码项目不要用 Syncthing 当主同步方式,代码后面单独走 Git。Syncthing 只负责知识库。

步骤 1:两台 Mac 都装上 Syncthing

官网下载或者 Homebrew 安装都行。装好启动后,浏览器打开本机管理界面,地址一般是:

```plaintext

http://127.0.0.1:8384

```

进去之后先把设备名改成好认的,比如我的两台分别叫:

步骤 2:让两台电脑互相认识(建立设备互信)

Syncthing 认设备靠的是一串 Device ID。流程是:一台复制自己的 ID,另一台添加它。

先在 MacBook 上,点右上角「操作」菜单,找到「显示 ID」:

弹出来的窗口里有一串设备标识和二维码,点「复制」把 ID 复制下来:

然后到 Mac mini 的 Syncthing 界面,点「添加远程设备」:

把刚才复制的 Device ID 粘进去,起个设备名,保存:

这时候另一台电脑会弹出一个「新设备」的连接请求,点「添加设备」接受:

确认设备信息,保存:

两边状态都变成 「已连接」,这一步就成了。

步骤 3:共享知识库文件夹

设备连上了,但文件还不会自动传——共享文件夹是另外一步,这是我踩的第一个坑,后面细说。

先在 MacBook(有完整知识库的那台) 上操作。

如果你不知道 Obsidian 库在哪,有个小技巧:在 Obsidian 里对着库名右键 →「复制路径」,直接拿到完整路径:

然后在 Syncthing 界面点「添加文件夹」:

在弹出的设置窗口里:

  1. 文件夹路径:粘贴刚才复制的 Obsidian Vault 路径
  2. 文件夹标签:起个名字,比如 Obsidian-Vault
  3. 切到「共享」标签页,勾选 Mac-mini-Jason
  4. 同步类型选 发送并接收(Send & Receive)

如果文件夹已经建过、只是没共享,就点文件夹的「编辑」,在共享页勾选目标设备再保存:

保存之后,Mac mini 那边会弹出共享邀请,点「共享」接受:

接受时选一个本地存放路径(建议单独目录,路径尽量简单),同步类型同样设为「发送并接收」:

搞定之后就能看到同步进度开始跑了:

第一次同步大库可能比较慢,要等索引和传输跑完,不要中途反复开关。

踩坑 1:设备「已连接」,文件夹却一直「非共享」

这是我遇到的第一个坑,症状长这样:

原因: 设备互信成功,只说明两台机器能看见对方。文件夹共享是另一步——必须一端 Share、另一端 Accept,还要选好本地路径。只加了设备、没走完文件夹共享流程,就会出现这种「连上了但不传文件」的状态。

处理:

  1. 回到有完整内容的那台(通常是 MacBook),打开该文件夹设置
  2. 确认「共享」里勾选了目标设备
  3. 同步模式确认是「发送并接收」
  4. 到 Mac mini 重新接受共享、指定本地目录
  5. 刷新两边界面,文件夹不再是「非共享」、开始出现同步进度,才算真的通了

一句话记住:「设备已连接」不等于「文件夹在同步」。

建议顺手做的两个设置

第一,加 <strong>.stignore</strong> 忽略无用文件,比如:

第二,给 AI 单独建一个子目录,别一上来就把整个私人库无限权限交给 Hermes:

```plaintext

Vault/

└── Hermes-Knowledge/

├── MEMORY.md

├── USER.md

├── Projects/

└── Daily/

```

之后 Hermes 只指向 Hermes-Knowledge/ 这个目录。

重要提醒:Syncthing 是同步,不是备份。 一边删了文件,另一边也会跟着删。至少再加个 Time Machine,或者定期把库拷一份到硬盘/网盘。


三、第二件事:让 Mac mini 常开不休眠

Mac mini 是主脑,它一睡着,整套系统就瘫了。所以要把休眠彻底关掉。

打开终端,执行:

```bash

sudo pmset -a sleep 0

sudo pmset -a disablesleep 1

```

再补一个后台 caffeinate 保险:

```bash

nohup caffeinate -dims >/dev/null 2>&1 &

```

实际执行起来长这样:

这样 Mac mini 就会一直醒着,随时待命。


四、第三件事:Tailscale 组网(国内用户重点看代理共存)

Syncthing 解决了“同一个局域网里同步”,但你出门之后,手机和家里的 Mac mini 就不在一个网络里了。这时候就需要 Tailscale——它能把你所有设备组成一个虚拟局域网,不管设备在哪,都能像在家里一样互相访问。

步骤 1:两台 Mac 安装 Tailscale

官网下载安装包,一路继续:

安装过程中会弹出“Tailscale 想添加 VPN 配置”的系统提示,点「允许」:

接着是权限授予页面,点「Grant permissions」:

系统会跳到「登录项与扩展」设置,把 Tailscale 的网络扩展开关打开,点完成:

两台 Mac 都装好后,用同一个账号登录。然后在终端执行:

```bash

tailscale status

```

确认两台设备都在列表里,并记下各自的 IP,比如我的:

你也可以在 Tailscale 的管理后台网页看到所有设备和在线状态:

步骤 2:处理代理共存(国内用户必做,不做等于白装)

这是整套流程里最容易翻车的地方。

国内常见的 Clash / Surge 开 TUN 模式后,会接管全局路由。而 Tailscale 用的是 100.64.0.0/10 这个网段。如果不把这个网段排除出代理,就会出现一个非常迷惑的状态:

看着在线,实际不通——因为流量被代理拐走了。

处理办法(Clash Verge / Mihomo 为例): 打开配置文件编辑:

在规则里加一条直连:

```yaml

rules:

- IP-CIDR,100.64.0.0/10,DIRECT,no-resolve

```

在 TUN 配置里加排除网段:

```yaml

tun:

enable: true

stack: system

auto-route: true

auto-detect-interface: true

route-exclude-address:

- 100.64.0.0/10

```

保存后重载配置,再 ping 对端的 Tailscale IP 测试。

用 Surge 的同理:在规则 / TUN 旁路里让 100.64.0.0/10 直连,不要进代理链。

踩坑 2:Clash 配置一保存就「订阅配置校验失败」

我改配置的时候还遇到过一保存就报错的情况,提示类似 payloadRule、某条 IP-CIDR6 不合法。

原因: 当前内核对某些 IPv6 写法不兼容,或者规则格式不严谨(缺 no-resolve、网段写错、缩进问题)。

处理:

  1. 先删掉有问题的 IPv6 相关行
  2. 只保留明确可用的这一条:- IP-CIDR,100.64.0.0/10,DIRECT,no-resolve
  3. TUN 的 route-exclude-address 也只先放这一段
  4. 保存成功后再逐步加别的规则,一次别改太多,不然出错都不知道是哪行的问题

踩坑 3:Tailscale DNS 和代理 DNS 打架

如果排除了网段之后还是时好时坏、部分域名解析异常、浏览器“什么都访问不了”,多半是 Tailscale 默认接管了 DNS(MagicDNS),和 Clash/Surge 的 DNS 方案叠在一起打架了。

在每台 Mac 上执行:

```bash

sudo tailscale set --accept-dns=false

```

或者在 Tailscale Settings 里把「Use Tailscale DNS settings」取消勾选:

然后重新测试普通上网、tailscale status 和 ping。不是每个人都必须关,但在国内代理环境下,这是高频有效的手段。


五、第四件事:iPhone 上的 Tailscale(重点踩坑区)

手机这块的坑最多,我直接把结论和过程都告诉你。

核心限制:iOS 上 VPN 只能活一个

iOS 对 Network Extension 类 VPN 的限制很严,同一时间基本只能有一个真正生效。所以:

远程和翻墙,没法同时稳住。

踩坑 4:小火箭内置 Tailscale,看着在线,实际不通

我试过一条“聪明”路线:不装官方 App,用小火箭自带的 Tailscale 功能 + Auth Key(在 Tailscale 后台 Settings → Keys → Auth keys 创建)登录,想着这样翻墙和组网就能共存了。

实际结果:

原因: 控制面(设备注册)成功,不代表数据面(真实发包)通。小火箭的内置实现和官方客户端在打洞/中继上有差异,国内网络下更容易出现「看着在、连不上」。

结论记住这句:列表“在线” ≠ 真的能通。以 ping 通、SSH 能进为准,不以设备列表好看为准。

目前最稳的用法:接受切换,不硬双开

场景操作
要 SSH / 远程管电脑打开官方 Tailscale,关闭小火箭
日常上网翻墙打开小火箭,关闭官方 Tailscale

听起来不优雅,但接受「用哪个开哪个」这一次切换,成功率远高于折腾双开。别信“完美并行”的说法,至少目前的 iOS 上不现实。

怎么确认手机真的进组了

在 Mac mini 上执行:

```bash

tailscale status

```


六、第五件事:打开 SSH,让手机连上两台 Mac

组网通了,接下来让手机真正“遥控”电脑。

先说清楚 SSH 是干嘛的:安全的远程命令行控制。适合看日志、重启 Hermes、跑命令、改配置;它不是“远程桌面”,手机上是敲命令,不是拿鼠标点屏幕。

步骤 1:在 Mac 上打开远程登录

每台要被远程的 Mac 都做一遍:

  1. 系统设置 → 通用 → 共享
  2. 打开 远程登录
  3. 「允许访问」里加入你的用户

验证一下:

```bash

sudo systemsetup -getremotelogin

# 期望输出:Remote Login: On

```

我当时 Mac mini 一直连不上,查了半天,就是因为远程登录压根没开(踩坑 5:Connection refused 基本都是这个原因)。

步骤 2:确认真实用户名(踩坑 6)

这个坑很阴间:macOS「用户与群组」里显示的是全名/显示名(比如 Orange),但 SSH 用的是短用户名(常见是小写,比如 orange)。按显示名硬填,密码怎么输都是错。

终端执行:

```bash

whoami

```

这条命令的输出,才是 SSH 该填的用户名。

步骤 3:先在本机测 SSH 通不通

远程之前,先证明本机 SSH 服务是好的。在 Mac mini 上:

```bash

ssh orange@127.0.0.1

```

首次出现指纹提示,输入 yes。

踩坑 7:本机都连不上,报 <strong>Broken pipe</strong>。 这说明 sshd 服务状态异常,重载一下:

```bash

sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist

sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist

```

再测,直到本机能登进 shell。记住排查原则:本机都挂,先修服务,别先怀疑手机端。

步骤 4:手机 Termius 添加主机

  1. 打开 Termius → New Host
  2. 填写:
字段示例
Label`Mac Mini`
IP / Hostname`100.106.195.45`(Mini 的 Tailscale IP)
Port`22`
Username`orange`(以 `whoami` 输出为准)
PasswordMac 登录密码
  1. 保存并连接,首次信任 host key

同样的方法再加一条 MacBook(前提是 MacBook 上也开了远程登录)。

进阶:改用密钥登录(踩坑 8 在这)

先用用户名 + 密码跑通最省事。如果密码方式总失败,再上密钥:

  1. Termius 里 Generate Key(推荐 Ed25519)
  2. 复制公钥——就是 ssh-ed25519 AAAA... 开头的那一整行
  3. 在 Mac 上:

```bash

mkdir -p ~/.ssh

chmod 700 ~/.ssh

nano ~/.ssh/authorized_keys

# 粘贴公钥一整行

chmod 600 ~/.ssh/authorized_keys

```

nano 保存方法:Ctrl+O → 回车 → Ctrl+X。如果底部在问 File Name to write,直接回车确认。

踩坑 8:把脚本碎片当成了公钥。 Termius 的 Export Key 页面有一堆自动安装脚本的参数,我一开始把那玩意粘进 authorized_keys 了,结果里面出现 Generated By Termius 之类的奇怪内容,登录必然失败。记住:公钥必须是以 <strong>ssh-ed25519</strong> 或 <strong>ssh-rsa</strong> 开头的一整行,别的都不是。

SSH 报错速查

报错优先检查
Connection refused远程登录没开
Connection timed out代理没排除 Tailscale 网段;手机是否真在组网里(用官方 App)
Permission denied用户名(`whoami`)或密码错误
本机 127.0.0.1 也失败先重载 `ssh.plist` 修本机 sshd

七、第六件事:Mac mini 装 Hermes,接上微信

到这一步,基础设施全通了。最后把“大脑”装上。

安装和账号(踩坑 9 预警)

按官方方式安装(Desktop 或 install.sh)。安装过程中如果出现 Nous Portal 套餐选择($0 / $20 / $200),注意:

踩坑 9:我一开始以为“同一个 Google 账号登录 = 同一个 Agent”,两边记忆自动打通。错。

内容是否自动共享
Portal 订阅额度✅ 是
本地记忆 / 会话❌ 否(都在各自机器的 `~/.hermes/` 里)
Obsidian 知识库❌ 否(要靠 Syncthing / Git 自己解决)

登录同一个账号,只共享额度和计费,不会合并两台机器的本地状态。所以正确姿势是:以 Mac mini 为主实例,用 Obsidian + Syncthing 做跨设备的“外置记忆”——这正是我们第一步就做好知识库同步的原因。重要偏好、项目状态,写进 MEMORY.md / USER.md,两边都能读到。

主模型怎么选

场景建议
Mini 上常驻、微信高频调用DeepSeek 这类低成本模型
难任务、重要决策临时切 Claude Sonnet 等
重编程继续用 Codex,不必强行让 Hermes 包办

接微信 / 飞书 / TG 的关键规则(踩坑 10、11)

这里有一条铁律:

平台规则
个人微信一个微信号对应一套 token,同一时间只能被一个 Gateway 使用
飞书可以创建多个应用,但同一个 App ID 同时只能一个 Gateway
Telegram可以创建多个 Bot,每个 Token 同时只能一个轮询方

踩坑 10:我在两台电脑都起了微信 Gateway,第二台直接启动失败,日志提示已有 Gateway 正在使用该 token。个人微信的凭证同一时间只能被一个实例占用,两台机器抢必冲突。

踩坑 11:飞书/TG 同理,同一个 App ID 或 Bot Token 挂两个实例,第二个起不来。多机器 = 多个 Bot / 多个应用,不要共享凭证。

推荐落地方案:

保持常驻 + 安全建议

顺手把 ChatGPT / Codex 桌面端也装上


八、代码项目怎么办:用 Git,别用 Syncthing

结论先行:代码要同步到 Mini,但走 Git,不要用 Syncthing 当代码主同步。

原因很实在:

推荐流程:

  1. 代码放 GitHub / GitLab 私有库
  2. Mac mini 上:

```bash

git clone <repo>

cd <project>

# npm install / pnpm i / pip install ...

```

  1. Mini 上改完 → commit → push;MacBook → pull。反过来也一样

环境注意:

远程写代码的姿势:


九、日常工作流:这套系统怎么用起来

配置完不是终点,说说我现在的实际用法。

写代码:

知识库:

自媒体创作:

  1. 微信/飞书随手丢链接、截图、一句话灵感
  2. Hermes 按模板生成初稿,写进知识库
  3. 回到任意一台 Mac,在 Obsidian 里改(反正是同步的)
  4. 成品归档,方便后续改写成多平台版本

十、故障排查:固定这个顺序,别盲改

远程突然挂了,别上来就重装软件、乱改配置。按这个顺序查,多数故障前三步就能定位:

配一张症状速查表,建议存进笔记:

症状最先查什么
Syncthing 不传文件文件夹是否完成 Share / Accept
Tailscale 在线但 SSH 超时代理是否排除 `100.64.0.0/10`;手机是否用官方 App
小火箭与 Tailscale 互踢iOS VPN 互斥,接受场景切换
Connection refused远程登录是否打开
密码总是错用户名是否是 `whoami` 的输出
本机 SSH 也失败重载 `ssh.plist`
微信第二台挂不上是否重复占用同一个 token
两边 Hermes 记忆不通Portal 账号不合并本地 Agent,靠知识库同步

十一、上线检查清单(复制到笔记里逐项打勾)

同步

网络

SSH

Agent

代码(如需要)


最后

整套方案一句话总结:

用 Syncthing 同步知识库,用 Tailscale 组网,用 SSH 当手机遥控器,用 Mac mini 跑唯一的微信 Hermes;代码走 Git,代理给 Tailscale 让路,iOS 上接受「远程时切官方 Tailscale」。

配置一个晚上,之后出门只带手机:发条微信让家里的 AI 查资料写初稿,需要动手就 Termius 连上去敲两行命令,回家打开 MacBook,所有内容已经同步好等着你。

然后保险起见的话,还可以给每个设备安装一个UU远程,这样更加保险,使用起来更加便利。

这就是目前我这套多设备 AI 工作台里,相对可复现、也相对稳的做法。踩过的坑都写在上面了,照着做,你会比我顺利得多。

本文首发于 X:查看原帖与评论 ↗

不想折腾?杂货铺有现货 ENC 美国卡 ¥158、Giffgaff 英国卡 ¥79 起现货——支付宝/微信下单当天核单发货,配保姆级教程,有问题 X 私信秒回。 进店逛逛 →
⚓688 航线