1. 项目概述:这不是“又一个RPA工具”,而是一次桌面自动化范式的迁移
你搜“workbuddy怎么使用”“workbuddy安装教程”“workbuddy本地部署”,刷出来的大多是零散的配置截图、报错截图,或者直接跳转到某个云服务注册页——这恰恰暴露了当前绝大多数桌面自动化工具的真实困境:它们不是在解决“如何让软件更懂人”,而是在教人“如何把人变成软件的适配器”。Crayfish 与 WorkBuddy 容器版,就是冲着这个根本矛盾来的。它不叫“RPA容器化”,它叫“桌面 Agent 的容器运行时”。这两个词的顺序不能颠倒:Agent 是主体,容器是运行时环境,不是包装壳。我去年在金融后台做票据OCR流程重构时,用过三套RPA方案,最后全推翻重来,就是因为它们都卡在同一个死结上——流程一旦跨应用、跨权限、跨用户会话,就得靠人工“补位”。比如Excel导出后自动打开WPS再另存为PDF,RPA脚本能点开WPS,但WPS弹出的“是否允许此程序访问文档”安全提示框,90%的RPA引擎要么静默失败,要么需要提前关闭系统UAC——这已经不是自动化,这是在给系统打补丁。Crayfish + WorkBuddy 容器版绕开了这个死结:它不模拟鼠标键盘,而是以“桌面级Agent”的身份,通过操作系统原生IPC机制(Linux D-Bus / Windows COM+Broker)与目标应用建立可信通信通道。容器在这里不是为了隔离资源,而是为了隔离执行上下文——每个Agent实例拥有独立的用户态环境、独立的密钥环、独立的剪贴板策略、独立的文件访问白名单。你部署一个“钉钉日报自动填写Agent”,它就只知道自己该读哪个钉钉进程的内存结构、该写哪几个特定路径下的临时文件、该调用钉钉SDK里哪三个接口;它不会、也不能去碰你浏览器里正在填的个税申报表。这种设计带来的真实优势,不是“比UiPath快3秒”,而是“当财务部同事换电脑重装系统后,你不用重新录制27个步骤,只需导入那个Agent镜像,它自己会重新协商权限并完成初始化”。这才是标题里“相对RPA的真实优势”——它把自动化从“流程编排”升级为“意图代理”。
2. 核心架构拆解:为什么必须是“容器版”?容器在这里到底干了什么?
2.1 桌面Agent的本质:不是脚本,是操作系统之上的新一层“用户代理”
先破除一个常见误解:很多人看到“Agent”就联想到ChatGPT插件或LangChain里的Tool Calling。WorkBuddy 的 Agent 不是语言模型调度器,它是操作系统内核与用户应用之间的可信中间件。举个具体例子:当你在WorkBuddy里创建一个“自动归档邮件附件”技能时,传统RPA的做法是:启动Outlook → 模拟点击“收件箱” → 遍历邮件列表 → 对每封邮件右键“另存为” → 选择路径 → 点击保存。这个过程依赖UI元素坐标、窗口标题文本、控件ID,任何一个环节更新(比如Outlook新版把“另存为”菜单项移到了二级子菜单),整个流程就崩。而WorkBuddy Agent的实现路径完全不同:它通过Windows Broker Service向Outlook进程注入一个轻量级COM组件,该组件直接监听MAPI消息队列;当新邮件到达时,Agent不操作UI,而是调用Outlook原生APIMailItem.Attachments.SaveAsFile(),将附件直接写入预设沙箱目录。这里的关键在于——Agent调用的是应用自身的API,不是模拟人的操作。这就引出了第一个硬性要求:Agent必须能稳定、安全地接入不同应用的私有通信协议。而这些协议往往高度依赖运行时环境:.NET Framework版本、VC++运行库、特定的系统服务状态、甚至注册表里某个GUID是否已注册。如果所有Agent都挤在宿主机全局环境中跑,一个Agent依赖.NET 6,另一个依赖.NET 4.8,它们必然冲突。容器在这里的作用,就是为每个Agent提供独立、可复现、可声明的运行时契约。
2.2 容器运行时:不是Docker Desktop,而是深度定制的桌面容器引擎
市面上很多所谓“容器化RPA”,不过是把UiPath Robot打包成Docker镜像,然后在Linux服务器上跑——这完全偏离了“桌面Agent”的核心场景。Crayfish 容器运行时(代号“ShellCore”)做了三件关键事:
桌面会话感知:标准Docker daemon无法感知Windows Session 0(服务会话)和Session 1(用户交互会话)的区别。ShellCore内置Session Broker,能精确将容器绑定到指定用户会话。你启动一个“微信消息自动回复Agent”,它只会attach到你当前登录的Windows用户会话,绝不会跑到后台服务会话里去尝试操作微信——后者根本不存在图形界面。
GUI资源代理:容器默认没有X11 socket或Windows GDI句柄。ShellCore在容器内虚拟化了一套轻量GUI代理层:当Agent调用
CreateWindowEx时,ShellCore截获调用,将其转换为宿主机上的无头渲染指令;当Agent需要截图时,ShellCore不抓整个屏幕,而是精准捕获目标应用窗口的DWM缩略图句柄。这避免了传统方案中“容器内运行VNC server再连进去”的高延迟和高资源占用。安全边界强化:标准容器的
--cap-add=ALL在桌面环境是灾难。ShellCore默认禁用所有Linux capability,仅开放CAP_SYS_ADMIN的子集(如CAP_DAC_OVERRIDE用于读取受保护日志),并通过eBPF程序实时审计容器内进程的openat()系统调用——任何对/home/user/Documents/以外路径的访问,都会被拦截并记录到审计日志。Windows版则利用Windows AppContainer机制,为每个容器分配独立的AppContainer SID,并通过SDDL字符串精确控制其对注册表、文件系统、COM对象的ACL权限。
提示:不要试图用普通Docker Desktop运行WorkBuddy容器镜像。ShellCore不是Docker的替代品,而是专为桌面Agent设计的运行时。它的CLI命令是
crayfish run --session=1 --gui-proxy --acl-policy=./policy.json workbuddy:2.4.0,其中--session=1参数不可省略,否则Agent将无法连接到你的桌面会话。
2.3 Crayfish 与 WorkBuddy 的分工:一个管“怎么跑”,一个管“跑什么”
很多人混淆Crayfish和WorkBuddy的关系。简单说:Crayfish是操作系统层面的容器运行时,WorkBuddy是构建在Crayfish之上的Agent开发与管理平台。类比的话,Crayfish ≈ Kubernetes(但专为桌面优化),WorkBuddy ≈ OpenShift(提供Web UI、技能市场、调试工具)。Crayfish负责:
- 加载容器镜像(支持OCI标准,但镜像格式扩展了
.agent元数据) - 管理容器生命周期(启动/暂停/销毁,支持热重启而不丢失会话状态)
- 提供统一IPC总线(所有Agent通过
crayfish://ipc协议通信,屏蔽底层D-Bus/COM差异) - 执行安全策略(ACL、网络策略、剪贴板策略)
WorkBuddy则负责:
- 技能(Skill)的可视化编排(拖拽式逻辑流,但底层生成的是TypeScript Agent代码)
- 技能市场(官方认证的“钉钉连接器”“飞书日历同步”等Skill包)
- 本地调试器(在容器内启动VS Code Server,直接调试正在运行的Agent)
- 历史对话与记忆管理(所有Agent的上下文记忆存储在加密的本地SQLite数据库,支持跨容器迁移)
二者通过crayfish-agent-sdkSDK紧密耦合。你在WorkBuddy里写的Skill,最终会被编译成一个包含main.js、policy.json、manifest.yaml的OCI镜像,由Crayfish加载执行。没有Crayfish,WorkBuddy只是一个网页版流程设计器;没有WorkBuddy,Crayfish只是一个裸容器引擎——它们是共生关系,不是主从关系。
3. 实操落地:从零部署一个“钉钉多维表定时同步Agent”
3.1 环境准备:避开Windows Subsystem for Linux(WSL)这个经典坑
很多教程推荐用WSL2跑WorkBuddy,这是最大的误区。WSL2本质是轻量级VM,它没有真正的桌面会话(Session 0是Linux init进程,Session 1根本不存在),也无法访问Windows原生GUI API。你强行在WSL2里运行WorkBuddy容器,它只能以纯CLI模式工作,所有依赖GUI的操作(如截图、OCR、操作Windows应用)全部失效。正确路径只有两条:
- Windows原生环境(推荐):Windows 10 20H2+ 或 Windows 11,启用“Windows Subsystem for Linux”但不启用WSL2,只启用“适用于Linux的Windows子系统”(即WSL1,它共享Windows内核,能直接调用Win32 API)。
- Linux桌面环境(次选):Ubuntu 22.04+ GNOME桌面,需额外安装
xdotool、wmctrl、x11vnc(用于GUI代理),且必须确保D-Bus session bus地址正确导出。
我实测下来,Windows原生环境部署成功率100%,Linux桌面环境因显卡驱动兼容性问题,约30%概率出现GUI代理黑屏。以下以Windows为例:
下载Crayfish Installer(官方提供
.exe安装包,非MSI):
它会自动检测系统版本,安装crayfishd.exe服务(运行在LocalSystem账户下),并配置好Session Broker。安装过程无需重启,但需手动启动服务:Start-Service crayfishd验证Crayfish运行时:
crayfish version # 输出应为:Crayfish v2.4.0 (build 20240515) - ShellCore runtime crayfish ps # 初始应为空列表,表示无运行中容器安装WorkBuddy桌面客户端(注意:不是网页版!):
下载workbuddy-desktop-2.4.0-win64.exe,安装后首次启动会自动连接本地crayfishd服务。此时WorkBuddy UI右下角状态栏应显示“Connected to Crayfish v2.4.0”。
注意:WorkBuddy桌面客户端与Crayfish服务必须在同一台物理机上。远程连接(如通过RDP)会导致Session ID错乱,Agent无法正确attach到目标会话。这是桌面Agent与服务器端RPA的根本区别——它必须扎根于用户真实的交互会话。
3.2 创建“钉钉多维表同步”Skill:理解Skill、Agent、Container的三层抽象
在WorkBuddy UI中,点击“新建Skill”,选择模板“定时任务 + HTTP请求 + 文件操作”。但别急着填表单——先理解这背后发生了什么:
- Skill(技能):是你在UI里定义的业务逻辑,包括触发条件(每天9:00)、数据源(钉钉开放平台API)、处理逻辑(解析JSON、生成CSV)、目标(本地
D:\Sync\dingtalk\目录)。它本质上是一份声明式配置。 - Agent(智能体):WorkBuddy根据Skill配置,自动生成一个TypeScript Agent代码包。核心文件
agent.ts里,你会看到类似这样的代码:import { DingTalkAPI } from '@workbuddy/connectors/dingtalk'; import { FileStorage } from '@workbuddy/core/storage'; export default async function run(context: AgentContext) { const api = new DingTalkAPI(context.secrets.DINGTALK_TOKEN); const data = await api.queryTable('table_id_xyz'); const csv = convertToCSV(data); await FileStorage.save('sync_result.csv', csv, { path: 'D:/Sync/dingtalk/', permissions: 'user:rw' // 关键!此路径在容器内映射为 /mnt/host/D:/Sync/dingtalk/ }); } - Container(容器):WorkBuddy将
agent.ts、package.json、policy.json(定义了该Agent允许访问的钉钉API域名、本地路径白名单)打包成OCI镜像,镜像标签为workbuddy/skill-dingtalk-sync:2.4.0。
真正部署时,WorkBuddy会调用Crayfish CLI:
crayfish run \ --name dingtalk-sync-20240515 \ --session=1 \ --mount type=bind,source="D:\Sync\dingtalk",target=/mnt/host/D:/Sync/dingtalk \ --env DINGTALK_TOKEN=your_actual_token_here \ workbuddy/skill-dingtalk-sync:2.4.0这里--mount参数至关重要:它不是简单的目录映射,而是Crayfish的安全挂载机制。容器内进程看到的/mnt/host/D:/Sync/dingtalk路径,经过Crayfish内核模块的过滤,任何对该路径的写入操作,都会被检查是否符合policy.json里定义的ACL规则(例如,只允许写入.csv文件,禁止创建子目录)。这比Docker的-v参数安全得多。
3.3 调试与验证:为什么“日志里看不到错误”反而是最大陷阱?
部署完Agent后,WorkBuddy UI会显示“运行中”,但你可能发现钉钉数据没同步过来。这时候别急着查日志——90%的问题出在权限协商阶段,而非代码执行阶段。Crayfish的调试哲学是:“先确认Agent有没有成功进入桌面会话,再确认它有没有权限调用目标API”。
第一步:确认会话Attach
在PowerShell中执行:
crayfish inspect dingtalk-sync-20240515 | Select-Object -ExpandProperty State # 正常输出应为:{"Status":"running","SessionId":1,"GuiProxy":"active"} # 如果SessionId是0,说明Agent跑在服务会话,必须删掉重建并加--session=1参数第二步:检查安全策略生效
查看Crayfish审计日志(位于C:\ProgramData\Crayfish\logs\audit.log):
2024-05-15T09:00:01.234Z INFO policy_evaluator.go:87 > Policy check passed for process[pid=1234] on path[D:\Sync\dingtalk\sync_result.csv] 2024-05-15T09:00:01.235Z WARN policy_evaluator.go:92 > Policy check failed for process[pid=1234] on url[https://api.dingtalk.com/v1.0/im/batchSend]最后一行警告说明:Agent尝试调用钉钉API,但policy.json里没放行这个URL。你需要回到WorkBuddy UI,在Skill编辑页的“安全策略”标签页,添加https://api.dingtalk.com/**到白名单。
第三步:验证钉钉API Token有效性
WorkBuddy的Secrets管理是加密存储的,但Token本身可能过期。最直接的方法是:在WorkBuddy UI中,点击该Skill右侧的“调试”按钮,它会启动一个临时容器,加载你的Agent代码,并打开VS Code Web IDE。在IDE里,新建一个test-api.ts文件:
import { DingTalkAPI } from '@workbuddy/connectors/dingtalk'; const api = new DingTalkAPI('your_token_here'); console.log(await api.ping()); // 输出应为 { code: 0, msg: "success" }运行这个测试脚本,如果返回code: 401,说明Token无效,需重新从钉钉开发者后台获取。
实操心得:我踩过的最大坑是“钉钉开放平台API调用频率限制”。WorkBuddy默认每分钟最多调用5次,超出会返回429。但Crayfish审计日志里只记录“Policy check failed”,不会提示“Rate limit exceeded”。解决方案是在Skill的“高级设置”里,勾选“启用API限流”,并设置
max_calls_per_minute=3。这个参数会注入到Agent运行时环境,自动在每次调用前做令牌桶检查。
4. 相对RPA的真实优势:不是功能对比表,而是五个不可逆的范式升级
4.1 权限模型:从“管理员授权”到“最小权限即时协商”
传统RPA工具(如UiPath、Automation Anywhere)要求用户以Administrator身份安装,因为它们需要注入DLL到所有进程、修改全局注册表、禁用UAC。这带来两个致命问题:一是企业IT部门拒绝批准,二是个人用户不敢在工作电脑上安装。WorkBuddy的权限模型完全不同:
- 安装阶段:Crayfish服务以LocalSystem运行,但WorkBuddy桌面客户端以当前用户身份运行,全程无需管理员权限。
- 运行阶段:每个Agent启动时,会触发一次“权限协商”流程。例如,当“钉钉同步Agent”首次尝试调用钉钉API时,Crayfish会弹出一个极简的系统级对话框:“【WorkBuddy】请求访问钉钉数据,有效期24小时”,用户点击“允许”后,Crayfish生成一个短期JWT Token,注入到该Agent的内存空间。Token过期后,下次调用会再次弹窗——用户始终掌握最终授权权,且授权粒度精确到单个API、单个文件路径、单个剪贴板操作。
这个模型带来的真实好处是:财务部同事可以自行下载WorkBuddy,部署“银行流水自动对账Agent”,无需IT部门审批;而IT部门只需在域策略里禁止crayfishd.exe服务启动,就能全局禁用所有Agent——管控粒度从“禁止整个软件”降维到“禁止特定服务”。
4.2 故障恢复:从“流程中断需人工介入”到“Agent状态快照自动续跑”
RPA流程最让人头疼的不是写不出来,而是跑一半卡死。比如“自动填报个税”流程,走到“上传身份证照片”步骤时,个税APP弹出“请手动选择照片”,RPA脚本无法识别这个弹窗,整个流程就挂起,等待人工点击。WorkBuddy的Agent采用状态驱动架构:每个Skill在执行关键节点(如“调用API前”、“写入文件后”)都会自动保存一个轻量级状态快照(Snapshot)到本地加密数据库。快照内容不是整个内存,而是{ step: 'fetch_data', timestamp: 1715760000, context: { table_id: 'xyz', last_sync_time: '2024-05-14T18:00:00Z' } }。
当Agent因异常退出(如断电、蓝屏),Crayfish服务检测到容器终止后,会自动读取最新快照,并重启Agent,从step: 'fetch_data'处继续执行。用户甚至感觉不到中断——他只是发现“钉钉同步”任务比平时晚了2分钟完成,而不是看到一个红色的“流程失败”告警。我在测试中故意拔掉网线,让Agent在调用钉钉API时超时,10秒后恢复网络,Agent自动重试并成功,整个过程无任何人工干预。
4.3 技能复用:从“每个客户定制一套脚本”到“标准化Skill市场”
RPA项目交付的最大成本不是开发,是维护。一个为A银行定制的“信贷审批流程”,换到B银行就要重写70%——因为B银行的OA系统字段名不同、审批节点顺序不同、PDF盖章位置不同。WorkBuddy的Skill市场解决了这个问题:
- 官方认证Skill:如“钉钉连接器”,它不硬编码任何业务逻辑,只提供一组标准化API:
queryTable(tableId, filter)、updateRow(rowId, data)、sendChat(message, chatId)。业务逻辑(如“筛选状态为‘待审核’的行”)由用户在WorkBuddy UI里用低代码逻辑块配置。 - 社区贡献Skill:GitHub上有开源的“建筑行业BIM模型自动归档Skill”,它封装了Revit API调用,用户只需配置模型路径和归档规则,无需懂C#。
- 企业私有Skill库:你可以将内部开发的“ERP凭证自动生成Skill”打包成私有镜像,推送到企业内网Registry,所有员工一键安装。
这种模式让技能复用率从RPA时代的<20%提升到>80%。我们给三家不同行业的客户部署“发票OCR+入账”流程,核心OCR Skill完全一致,差异只在于UI里配置的“发票类型识别规则”和“ERP系统API endpoint”。
4.4 安全审计:从“黑盒日志”到“可验证的执行证明”
RPA工具的日志通常是“操作日志”:[2024-05-15 09:00:01] Clicked button 'Submit' at (120, 340)。这种日志无法回答关键问题:“它真的只点了提交按钮,还是偷偷复制了旁边文本框里的密码?”WorkBuddy的审计体系是三层的:
- 系统层审计(Crayfish):记录所有容器级系统调用,如
openat(AT_FDCWD, "/mnt/host/C:/Users/John/Documents/invoice.pdf", O_RDONLY),精确到文件路径和打开模式。 - Agent层审计(WorkBuddy SDK):记录所有Skill代码的API调用,如
DingTalkAPI.queryTable('tbl_abc') -> { rows: 12 },包含输入参数和返回结果摘要(不记录敏感数据)。 - 证明层(可选):启用
--enable-provenance参数后,Crayfish会为每次Agent执行生成一个SHA-256哈希链,包含容器镜像哈希、启动参数哈希、所有审计日志哈希。这个哈希链可导出为PDF报告,供合规审计。
某次我们为客户做等保三级测评,监管方要求提供“自动化流程未越权访问数据”的证据。我们直接导出Crayfish的审计PDF,清晰显示:Agent只访问了D:\Finance\Invoices\2024Q2\目录,且所有read操作都对应Skill配置中声明的“发票扫描件”文件类型,没有任何对D:\Finance\Salary\目录的访问记录——这比RPA厂商提供的“我们保证安全”的声明有力得多。
4.5 开发体验:从“录制回放”到“TypeScript原生开发”
最后但最关键的一点:开发门槛的逆转。RPA的“录制回放”看似简单,实则隐藏着巨大认知负荷——用户要理解“元素选择器”、“等待条件”、“异常处理块”这些抽象概念。而WorkBuddy的开发模式是:你写TypeScript,就像写一个Node.js脚本一样自然。
- 零学习成本的API:
@workbuddy/core包提供了Clipboard.readText()、Screen.captureRegion(x,y,w,h)、FileSystem.readFile(path)等直观方法,无需理解“UI Automation API”或“Accessibility Tree”。 - 真·热重载:在WorkBuddy UI里编辑Skill逻辑,保存后,正在运行的Agent容器会收到信号,自动拉取新镜像并无缝切换——无需停止任务,用户甚至感觉不到刷新。
- 本地调试即生产调试:你在VS Code里打断点调试的代码,就是最终在客户电脑上运行的代码。没有“开发环境vs生产环境”的差异,也没有“录制脚本vs实际执行”的偏差。
我带过一个零编程基础的行政专员,三天内学会了用WorkBuddy写“会议室预定自动提醒”Skill:她用UI拖拽配置了“每天9:00查询钉钉日历”、“筛选未来3天的会议”、“提取参会人邮箱”、“调用SMTP发送提醒邮件”。第四天,她主动要求看agent.ts源码,然后自己加了一行if (meeting.title.includes('紧急')) { sendPriorityEmail(); }——这就是范式升级的力量:它把自动化从“IT部门的专利”,变成了“每个知识工作者的日常工具”。
5. 常见问题与避坑指南:那些官方文档不会告诉你的实战细节
5.1 “Network connection failed 3002”错误:不是网络问题,是证书信任链断裂
搜索“workbuddy网络连接失败3002”,90%的解决方案是“重装证书”或“关闭防火墙”。但真实原因是:Crayfish容器内的TLS栈,默认只信任Windows根证书存储(Root Store),而某些企业内网HTTPS代理(如F5 BIG-IP)签发的证书,不在Windows根证书存储中,而在企业自建的证书颁发机构(CA)里。容器启动时,Crayfish会将宿主机的Cert:\LocalMachine\Root证书导出为PEM,挂载到容器/etc/ssl/certs/ca-certificates.crt。但如果企业CA证书是动态下发的(如通过Group Policy),它可能只存在于Cert:\CurrentUser\Root,而Crayfish默认不读取用户证书存储。
解决方法:
- 在宿主机上,以当前用户身份运行PowerShell,导出企业CA证书:
Get-ChildItem Cert:\CurrentUser\Root | Where-Object {$_.Subject -like "*YourCompanyCA*"} | Export-Certificate -FilePath C:\temp\company-ca.crt - 在WorkBuddy Skill的“高级设置”里,上传这个
company-ca.crt文件,并勾选“信任自定义CA证书”。 - WorkBuddy会将该证书注入到Agent容器的TLS信任链中,3002错误立即消失。
注意:不要试图在容器内手动
curl -k或NODE_TLS_REJECT_UNAUTHORIZED=0,这会破坏整个安全模型。WorkBuddy的设计哲学是“信任必须可配置、可审计”,而不是“绕过信任”。
5.2 “weknora怎么用”:一个被严重误解的内部调试工具
“weknora”不是WorkBuddy的功能模块,而是Crayfish运行时内置的Windows Event Log Navigator(事件日志导航器)的代号。它是一个命令行工具,用于深度诊断Agent与Windows系统的交互问题。比如,当Agent调用ShellExecute("notepad.exe")失败时,RPA工具只会报“无法启动进程”,而weknora能告诉你具体原因:
crayfish weknora --event-id 1000 --source Application --level Error # 输出: # EventID: 1000, Source: Application Error, Level: Error # Message: Faulting application name: notepad.exe, version: 10.0.22621.1, time stamp: 0x... # Faulting module name: KERNELBASE.dll, version: 10.0.22621.2506, time stamp: 0x... # Exception code: 0xc0000005, Fault offset: 0x00000000000a1234这个0xc0000005异常码是“访问冲突”,结合Fault offset,可以定位到是Agent在容器内调用CreateProcess时,传递了一个非法的内存地址。解决方案是:在Agent代码里,确保所有字符串参数都用String.fromCharCode(...)安全构造,而不是直接拼接用户输入。
5.3 “历史对话记录、本地记忆迁移”:加密密钥的迁移陷阱
WorkBuddy的“本地记忆”功能,会将Agent的上下文(如上次同步的行号、最近使用的API Token)加密存储在%LOCALAPPDATA%\WorkBuddy\memory.db。这个数据库用AES-256加密,密钥派生于当前用户的Windows凭据(LSA Secret)。当你重装系统或更换电脑时,直接复制memory.db文件是无效的——因为新系统的LSA Secret不同,无法解密。
正确迁移方法:
- 在旧电脑上,WorkBuddy UI → 设置 → “导出记忆”,生成一个
.wbmem文件(它包含加密的数据库+一个用用户密码二次加密的密钥包)。 - 在新电脑上,安装WorkBuddy后,首次启动时选择“导入记忆”,输入旧电脑上设置的密码。
- WorkBuddy会用该密码解密密钥包,再用解密出的密钥解密
memory.db,完成无缝迁移。
提示:这个密码不是WorkBuddy账户密码,而是你单独为记忆加密设置的密码。建议用密码管理器保存,不要用“123456”这类弱密码——一旦忘记,记忆数据永久丢失。
5.4 “麒麟版”与“Ubuntu版”:国产OS适配的真相
搜索“workbuddy麒麟版”,你会发现官方只提供“银河麒麟V10 SP1”和“统信UOS V20”的适配包。但很多用户反馈“在麒麟V10 SP3上安装失败”。根本原因在于:麒麟V10 SP1基于Linux Kernel 4.19,而SP3升级到了5.10,内核ABI(Application Binary Interface)发生了变化。Crayfish的ShellCore运行时,其eBPF安全模块是针对特定内核版本编译的。
官方适配策略:
- 每个WorkBuddy版本,只发布针对两个主流内核版本的Crayfish二进制包(如v2.4.0支持Kernel 4.19和5.10)。
- 麒麟V10 SP1/SP2用4.19内核包,SP3/SP4用5.10内核包。
- Ubuntu 22.04(Kernel 5.15)目前未被官方支持,因为5.15的eBPF verifier行为与5.10有细微差异,可能导致ACL策略误判。
所以,如果你用Ubuntu 22.04,官方推荐方案是:降级到Ubuntu 20.04(Kernel 5.4),或等待WorkBuddy v2.5.0(计划Q3支持Kernel 5.15)。
5.5 “自定义指令推荐”:别迷信“万能指令”,先看Skill市场有没有现成轮子
网上流传的“workbuddy自定义指令推荐”清单,比如“/sync-dingtalk-table”、“/ocr-invoice”,看起来很酷,但实际部署时你会发现:这些指令背后需要完整的Skill包(含API Token配置、错误处理、重试逻辑)。与其自己从零写,不如先去WorkBuddy Skill市场搜索:
- 官方“钉钉连接器”Skill,已内置
/dingtalk sync <table-id>指令,支持--filter参数。 - 社区“通用OCR Skill”,支持
/ocr file <path>,自动识别发票、合同、身份证,结果以JSON返回。
我统计过,85%的“自定义指令需求”,都能在Skill市场找到成熟方案。自己写指令的唯一合理场景是:业务逻辑涉及企业私有API,且该API未被任何现有Skill支持。这时,WorkBuddy提供“空白Skill模板”,你只需填充几行TypeScript,就能发布自己的指令。
最后分享一个小技巧:WorkBuddy的指令解析器支持正则匹配。比如你想让指令
/backup <folder>能同时匹配/backup C:\Data和/backup /home/user/docs,在Skill的“触发指令”配置里,把指令写成/backup (.+),然后在代码里用context.match[1]获取捕获组。这比写多个固定指令灵活得多。