两个 AI 助手共用一套技能 | Gitea 同步 + 软链配置
PC 上装 WorkBuddy,NAS 里跑 Octop,两个 AI 助手要共用同一套技能。
这篇讲怎么把这件事跑通:技能库放哪、仓库和本地目录怎么对接、路径怎么兼顾两端系统、怎么保证不失联。都是我自己跑通的配置,踩过的坑一并写上。
一、先看这套方案适合谁
手上有两个 AI 助手,或者打算再装一个(PC + NAS 的组合)。
NAS 上能在 Docker 跑 Gitea。
需要两个 AI 助手同步 skills 。
二、为什么能共用:先确认两个助手同源
我 PC 上跑 WorkBuddy,NAS 上跑 Octop,两个助手都出自腾讯的 AI Agent 体系,技能的写法和加载方式完全一致。
这是整件事的前提。我在 PC 端写好一个技能,NAS 端直接就能用;反过来也一样。
如果两个助手来自不同厂商,技能格式不通,那就只能各写一套,谈不上共用。

三、技能库放哪:NAS 上自部署 Gitea
技能的新建和修改并不频繁,不需要实时同步,定时检查就够。所以我的选择是异步同步。
在 NAS 上自部署一个 Gitea,给两个助手各建账号、加入同一个组织,建一个共管仓库,专门放统一的技能。
想省事的话,一个账号、不同令牌和提交身份也可以,同样能区分彼此。

这样谁改了技能,直接推到 Gitea,再给对方留言说明改了什么。
这样做的好处:
(1)Gitea 记录所有修改,修改留痕,出问题能回查、能回退。
(2)Gitea 天然是个留言板,两个助手可以互相交接。

相比 API 调用,这种方式更稳,不受网络波动和某一方不在线的影响。
外网怎么访问:
Octop 访问 NAS 本地部署的 Gitea 没有障碍,内网 IP + 端口就行。
WorkBuddy 在外网时,可以走 Tailscale、DDNSTO、花生壳、节点小宝这类虚拟内网或内网穿透。技能更新的数据量很小,免费服务完全够用。

建议多备几条免费隧道,让 Agent 做降级策略,哪条临时挂了自动切换。

四、仓库和技能目录怎么对接:两种软链
不能直接把仓库目录当技能目录用。仓库里还有别的东西,而技能目录要求技能文件夹平铺在根下,混在一起既增加 Token 开销,也干扰助手管理技能。
另存一份副本?工作量翻倍,还容易出错。所以用软链。

方式一:目录联接(junction)
一条目录联接指向本机的技能目录,所有技能就都接到 Gitea 仓库了。
我的 WorkBuddy 端用的就是这种,好处是省事。
要注意 git reset --hard 这类命令有穿透目录联接删掉真实技能文件的风险,每日自动备份一定要配。

方式二:符号链接(symlink)
逐条给每个技能建符号链接,管理粒度精细到单个技能。助手可以自己决定哪些技能走 Git,哪些是纯本地独有。
我的 Octop 端用的是这种。比如家庭记账这种活,24 小时在线的 Octop 配合飞书记账群更合适,账本数据也在 NAS 上,没必要同步给 WorkBuddy。
代价是技能目录名一改就断链,要让 Octop 在同步时加一个自动检测、自动修复软链的机制。

两种方式的对比:

五、路径怎么兼顾 Windows 和 Linux
同一套技能要在 Windows 和 NAS 的 Linux 上通用,路径就不能写死,更不能让两端的助手去猜。
我的做法是:技能里所有路径引用全部用变量写,提前约定好目录对应关系;或者直接在每个技能里写明变量路径在 PC 和 Docker 容器内分别对应哪个目录。
两端的助手执行技能、看到变量名时,会自动转换为自己设备上的路径。

调用工具名也不一样,比如 Windows 是 Bash/Read/Write,Octop 是 execute/read_file/write_file,这些也要在技能里写清楚。
六、怎么保证不失联:定时轮询 + 每日备份
实际操作中,可以要求助手每次改完技能就主动推送,再让另一个助手去拉——但这有点傻。
我把「改完技能要主动推送」写进了两端的 AGENTS.md,再设一个定时轮询任务,自动定时拉取 Gitea 上的更新。
备份同样重要。哪怕 Gitea 上已经有一份,我还是设了每日本地备份,以防万一。
七、Gitea 部署清单(Compose 直接抄)
把下面这段存成 docker-compose.yaml:
services:
gitea:
image: docker.gitea.com/gitea:latest
container_name: gitea
restart: unless-stopped
ports:
- "3000:3000" # Web
- "222:22" # SSH
volumes:
- /volume1/docker/gitea/git-data:/data
environment:
- GITEA__server__SSH_PORT=222
- GITEA__server__SSH_LISTEN_PORT=22
部署后注册账号,在「设置 - 应用」里添加 API 令牌给两个助手,然后让它们带令牌去 NAS IP:端口号 连接就行了。

八、几个容易踩的坑
git reset --hard会穿透目录联接:这是 junction 方案最大的风险,真实技能文件会被删掉,每日备份必须配好。技能目录改名会断链:symlink 方案的通病,要让助手在同步时自动检测并修复。
路径不要写死:两端目录结构不同,写死就只能在一边跑。
工具名要写清:Windows 和 Linux 端的工具名不一样,技能里不写明,助手会调用失败。
别省备份:Gitea 上有一份不等于本地有,改坏了回不去的时候,备份是唯一的退路。
总结
一句话:同源是前提,Gitea 是媒介,软链是对接方式,备份是底线。
跑通之后,改一个技能,两端都跟得上。
