
1. WorkBuddy 不是“另一个AI工具”它是跨行业工作流的物理锚点你有没有遇到过这样的场景在建筑结构设计院工程师刚用 Midas Gen 完成一次复杂节点验算想把结果自动同步到飞书多维表格里让施工团队实时看到应力云图和安全系数阈值——但手动截图、复制粘贴、再人工填表一来一回半小时就没了在芯片设计公司Altium Designer 工程师调试完PCB布线后需要把关键信号完整性报告生成PDF并通过飞书机器人推送给测试组同时触发Obsidian笔记自动归档——可现有脚本要么只能发文字要么PDF格式错乱附件名还带乱码甚至在高校实验室研究生用Python跑完一组材料模拟数据想一键生成带LaTeX公式的Markdown报告同步到飞书知识库再自动生成Obsidian双向链接——结果卡在“怎么让飞书API识别数学公式”这一步折腾三天没搞定。这些不是孤立问题。它们共享一个底层症结工具链之间没有统一的语义接口只有数据孤岛没有工作流。WorkBuddy 正是在这个裂缝里长出来的——它不替代任何专业软件Midas Gen、Altium Designer、Obsidian也不试图做通用AI像Codex那样写代码而是把自己钉死在一个位置成为你本地工作环境与协作平台之间的“物理协议转换器”。它的核心能力藏在那些热搜词里mcpMCP 协议、playwright mcp、ida mcp、altium designer ai接口 mcp——这不是营销话术而是真实的技术定位。MCPModel Control Protocol本质是一套轻量级、可插拔的进程间通信规范允许不同进程以结构化方式交换指令与数据。WorkBuddy 的底层就是围绕 MCP 构建的它不自己训练模型而是把 Python 脚本、Playwright 自动化流程、甚至 IDA Pro 的逆向分析结果都封装成标准 MCP 消息再由飞书机器人、Obsidian 插件或本地 CLI 工具按需消费。所以当你搜“workbuddy 缓存目录怎么更改”真正要改的不是路径本身而是 MCP 消息队列的本地存储策略当你查“workbuddy skill”实际是在配置 MCP 的 Skill Registry——即定义“当飞书收到‘生成周报’指令时该调用哪个 Python 脚本、传什么参数、返回什么格式”。这解释了为什么它能横跨建筑、芯片、科研、内容运营等完全不相干的领域它解决的从来不是某个行业的具体问题而是所有行业共有的“最后一公里连接”问题——把专业工具的输出变成协作平台能理解、能触发、能沉淀的动作。我第一次在结构所看到它落地时工程师没打开任何AI界面只是右键点击 Midas Gen 的 .mgt 文件选择“Send to WorkBuddy → Sync to Feishu Table”3秒后飞书多维表格里已更新了67个字段包括“最大位移(mm)”、“塑性铰数量”、“超限构件ID列表”——全部带超链接直跳 Midas Gen 原文件对应位置。没有API密钥没有OAuth授权甚至没连外网。因为整个流程只发生在本地Midas Gen 通过 MCP 插件把结构数据序列化为 JSONWorkBuddy 进程监听到消息调用预置的飞书 SDK 将 JSON 映射到表格 schema再推送。这才是 WorkBuddy 的真实角色它不是站在云端的AI大脑而是蹲在你电脑硬盘里的工作流守门人。你用什么工具、写什么代码、连什么平台它都不干涉它只确保当你的专业工具产出结果时那个结果能被协作系统“看见”、被团队成员“用上”、被知识库“记住”。2. 六大实战案例拆解从需求痛点、MCP协议设计到落地细节2.1 案例一建筑结构所——Midas Gen 与飞书多维表格的零配置同步真实痛点结构工程师每天要导出数十个工况的验算结果位移、内力、配筋率手动整理进飞书表格供施工方查阅。错误率高常把“X向位移”填错列、时效差平均延迟4小时、追溯难无法关联原始.mgt文件。MCP协议设计逻辑WorkBuddy 并未开发 Midas Gen 的专属插件而是利用其开放的 COM 接口 Python win32com 库构建了一个轻量 MCP Adapter当用户右键选择“Send to WorkBuddy”Adapter 启动通过 COM 获取当前模型的GetResult()对象将结果结构化为 MCP 标准消息体{ protocol: mcp://midas-gen/v1, action: sync_result, payload: { model_id: SH-2024-087, case_name: 风荷载恒载组合, max_displacement: {x: 12.3, y: 8.7, z: 0.2}, critical_members: [B-12, C-05], source_file: D:\\Projects\\ShanghaiTower\\v3\\analysis\\SH-2024-087.mgt } }WorkBuddy 主进程监听mcp://midas-gen/v1端点收到后触发预设的feishu_table_sync.py脚本。落地关键细节字段映射不靠硬编码飞书表格的列名如“最大X向位移/mm”与 MCP payload 中的max_displacement.x字段通过 YAML 配置文件动态绑定# feishu_mapping.yaml table_id: tbl_xxx fields: - feishu_column: 最大X向位移/mm mcp_path: payload.max_displacement.x format: float:2 # 保留两位小数 - feishu_column: 超限构件ID mcp_path: payload.critical_members format: list_to_string文件链接直跳技术飞书表格中“源文件”列显示为超链接点击直接打开本地.mgt文件。实现方式是WorkBuddy 将source_file路径转为file://URL并在飞书 API 的text_element中嵌入link类型字段。实测发现飞书 Web 端需配合浏览器启用本地文件协议支持Chrome 默认禁用因此团队最终采用折中方案生成一个本地 HTTP 服务Python Flask将.mgt文件映射为http://localhost:8000/file/SH-2024-087.mgt再用飞书open_urlaction 触发。提示此方案要求所有工程师在同一局域网内运行 WorkBuddy且防火墙放行 8000 端口。我们后来将 Flask 服务改为仅响应来自127.0.0.1的请求并在飞书卡片中添加“仅限本机访问”提示规避安全风险。避坑经验Midas Gen 的 COM 接口在无图形界面的后台模式下会崩溃。解决方案强制 WorkBuddy 在启动时检测是否处于 GUI 环境os.environ.get(DISPLAY)或 Windows 的user32.GetForegroundWindow()若非 GUI 则拒绝处理 Midas Gen 请求飞书多维表格单次 API 调用最多更新 100 行。当单次验算结果超过 100 个构件时脚本需自动分批提交。我们用math.ceil(len(critical_members)/100)计算批次每批间隔 200ms避免触发飞书频率限制。2.2 案例二芯片设计公司——Altium Designer 信号完整性报告自动化归档真实痛点PCB 设计师完成布线后需手动运行 SI 分析导出 HTML 报告再截图关键波形图打包 PDF 发给测试组。过程耗时约25分钟且每次报告命名规则不一致如“SI_Report_20240801_v1.html” vs “Signal_Integrity_V2_2024-08-01.html”导致测试组难以快速定位最新版本。MCP协议设计逻辑Altium Designer 支持通过 Scripting APIDelphi/Pascal调用外部程序。团队编写了一个.pas脚本当用户点击“Export SI Report”菜单时脚本执行调用 Altium 内置GenerateSignalIntegrityReport()方法将生成的 HTML 报告路径、当前 PCB 版本号从Project.Version属性读取、关键参数如 RiseTime0.3ns, Length120mm打包为 MCP 消息通过curl向本地http://localhost:9000/mcp发送 POST 请求WorkBuddy 的 HTTP MCP 网关。消息体示例{ protocol: mcp://altium/si-report, action: archive_report, payload: { project_name: NPU-PCIe-Controller, pcb_revision: Rev_B.3, report_html: C:\\Reports\\NPU-PCIe-Controller_SI_20240801.html, parameters: {rise_time_ns: 0.3, trace_length_mm: 120} } }落地关键细节PDF 转换稳定性攻坚HTML 转 PDF 是最大瓶颈。最初用wkhtmltopdf但 Altium 生成的 HTML 含大量内联 SVG 波形图wkhtmltopdf渲染失真。后改用 Playwright 的page.pdf()方法在 Chromium 无头模式下加载 HTML 并截图成功率达100%。关键配置# si_pdf_converter.py from playwright.sync_api import sync_playwright def convert_html_to_pdf(html_path, pdf_path): with sync_playwright() as p: browser p.chromium.launch(headlessTrue, args[--no-sandbox, --disable-setuid-sandbox]) page browser.new_page() # 强制等待 SVG 渲染完成 page.goto(ffile://{html_path}, wait_untilnetworkidle) page.wait_for_timeout(2000) # 等待 JS 动画结束 page.pdf(pathpdf_path, formatA4, print_backgroundTrue) browser.close()Obsidian 双向链接自动生成PDF 生成后WorkBuddy 调用 Obsidian 的 Local REST API需开启Core Plugin Community Plugins REST API创建新笔记--- tags: [si-report, pcb] date: 2024-08-01 project: NPU-PCIe-Controller revision: Rev_B.3 --- # Signal Integrity Report - {{date}} ![[{{pdf_filename}}]] ## Key Parameters - Rise Time: {{rise_time_ns}} ns - Trace Length: {{trace_length_mm}} mm ## Related Files - [[NPU-PCIe-Controller Schematic]] - [[NPU-PCIe-Controller Layout]]其中{{ }}占位符由 Python 字符串模板引擎替换确保每次生成唯一笔记。避坑经验Altium Designer 的 Scripting API 在不同版本22.x vs 23.x中GenerateSignalIntegrityReport()返回值类型不同旧版返回字符串路径新版返回对象。我们在 MCP Adapter 中加入版本检测逻辑先调用Application.Version获取主版本号再分支处理Obsidian REST API 默认只允许 localhost 访问但某些企业网络策略会拦截127.0.0.1请求。解决方案在 Obsidian 设置中将Host改为0.0.0.0并在 WorkBuddy 的请求头中添加Origin: http://localhost绕过 CORS 检查。2.3 案例三高校材料实验室——Python 模拟数据一键生成 LaTeX 报告并同步飞书真实痛点研究生用 PythonNumPy/SciPy跑完分子动力学模拟得到stress_tensor.npy、energy_curve.csv等数据需手动用 Matplotlib 绘图、用 Pandas 整理表格、用 LaTeX 写报告再上传飞书。一份报告平均耗时3小时且公式排版易出错如\sigma_{ij}被误写为sigma_ij。MCP协议设计逻辑团队将整个流程封装为一个 Python CLI 工具matlab2report当用户在终端输入matlab2report --input stress_tensor.npy --output report.md时工具解析输入文件计算关键指标如 von Mises 应力、能量极小值点用 Jinja2 模板引擎渲染 LaTeX 源码.tex其中公式部分直接调用 SymPy 符号计算生成from sympy import symbols, latex, sqrt s11, s22, s33, s12, s13, s23 symbols(sigma_{11} sigma_{22} sigma_{33} sigma_{12} sigma_{13} sigma_{23}) vm_stress sqrt(0.5 * ((s11-s22)**2 (s22-s33)**2 (s33-s11)**2 6*(s12**2 s13**2 s23**2))) latex_vm latex(vm_stress) # 输出\sqrt{\frac{\left(\sigma_{11} - \sigma_{22}\right)^{2}}{2} \cdots}渲染完成后生成.tex文件并通过subprocess.run([lualatex, report.tex])编译为 PDF最后将 PDF 路径、LaTeX 源码、关键数据摘要打包为 MCP 消息发送至mcp://lab/report。落地关键细节飞书文档嵌入 PDF 的兼容方案飞书不支持直接嵌入 PDF但支持“文件卡片”。WorkBuddy 调用飞书upload_fileAPI 上传 PDF再用create_documentAPI 创建空白文档最后用add_blockAPI 插入file_card类型区块指向上传后的文件 ID。关键在于file_card的preview_type参数必须设为pdf否则飞书会当作普通附件显示LaTeX 公式在飞书中的降级处理为确保无 LaTeX 环境的同事也能阅读脚本额外生成 Markdown 版本将\sigma_{ij}自动转为σᵢⱼUnicode 下标用pandoc转换pandoc report.tex -f latex -t markdown -o report.md \ --filter pandoc-latex-math \ --wrappreserve飞书知识库自动归类上传 PDF 后WorkBuddy 调用飞书add_document_to_folderAPI根据project_name字段从输入文件名解析自动归入对应文件夹如材料学院/镍基合金/2024Q3。避坑经验LuaLaTeX 编译依赖大量字体包服务器环境常缺失lm-math或unicode-math。解决方案在 Docker 镜像中预装 TeX Live 完整版并用tlmgr install lm-math unicode-math确保飞书 API 上传大文件100MB需分片。我们设定阈值当 PDF 50MB 时自动启用分片上传逻辑先调用initiate_upload获取 upload_id再循环调用upload_chunk最后complete_upload。实测发现分片大小设为 4MB 时成功率最高太大易超时太小增加请求次数。2.4 案例四内容运营团队——飞书机器人自动抓取云文档并生成 H5 页面真实痛点市场部每周需将飞书云文档中的活动方案含图文、表格、投票链接同步到公司官网 H5 页面。过去靠人工复制粘贴常漏掉图片、错位表格、失效超链接上线前 QA 至少返工2轮。MCP协议设计逻辑飞书机器人本身不支持直接读取云文档 HTML 源码但可通过get_document_contentAPI 获取富文本结构化数据JSON 格式。团队编写了一个feishu2h5MCP Skill机器人监听飞书群消息当检测到WorkBuddy sync-to-h5指令时提取消息中包含的文档 URL调用飞书get_document_contentAPI获取文档的blocks数组每个 block 是段落、图片、表格等元素将 blocks 解析为 MCP 消息协议为mcp://feishu/doc-to-h5WorkBuddy 主进程接收后调用h5_generator.py渲染为响应式 HTML。消息体关键字段{ protocol: mcp://feishu/doc-to-h5, action: render_h5, payload: { doc_id: doc_xxx, blocks: [ {type: paragraph, text: 活动主题暑期宠粉季}, {type: image, url: https://xxx.feishucdn.com/xxx.jpg?Expiresxxx}, {type: table, rows: [[时间, 地点], [8.1-8.31, 全国门店]]} ] } }落地关键细节图片防盗链处理飞书 CDN 图片 URL 含时效签名直接嵌入 H5 会 403。解决方案WorkBuddy 在渲染前对每个image.url发起HEAD请求验证有效性若即将过期剩余 1 小时则调用飞书download_fileAPI 下载到本地再用base64编码嵌入 HTML 的img srcdata:image/jpeg;base64,xxx表格响应式适配飞书表格在手机端显示错乱。我们用 CSSmedia (max-width: 768px)为表格添加横向滚动容器.table-container { overflow-x: auto; -webkit-overflow-scrolling: touch; } .table-container table { min-width: 600px; /* 确保桌面端不缩放 */ }H5 免登录嵌入官网官网使用 Vue.js通过iframe srchttps://h5.xxx.com/activity?idxxx /嵌入。为避免 iframe 跨域限制H5 服务端设置Access-Control-Allow-Origin: https://www.xxx.com且前端在mounted()钩子中调用window.parent.postMessage({height: document.body.scrollHeight}, https://www.xxx.com)通知父页面调整 iframe 高度。避坑经验飞书get_document_contentAPI 对文档权限敏感若文档设为“仅指定人可见”即使机器人有权限也可能返回空 blocks。解决方案在调用前先用get_document_permissionAPI 检查文档权限若为restricted则向管理员发送告警消息H5 页面需 SEO 优化但飞书文档内容无title和meta description。我们在h5_generator.py中从第一个paragraph.text提取前30字作为 title从第二个 paragraph 提取前80字作为 description并注入head中。2.5 案例五IT 运维中心——Playwright 自动化巡检与异常告警闭环真实痛点运维需每日检查 12 个内部系统OA、CRM、ERP的登录页是否可访问、关键按钮是否可点击、首页数据是否刷新。过去用人工点检耗时1.5小时且凌晨故障无法及时发现。MCP协议设计逻辑Playwright 脚本system_health_check.py每日凌晨2点运行对每个系统执行访问 URL截图首屏检查document.title是否包含预期关键词如 OA 系统应为“XX集团OA”点击“我的待办”按钮验证是否跳转成功提取首页“今日新增工单数”文本与昨日值比对10% 触发告警。结果汇总为 JSON通过curl -X POST http://localhost:9000/mcp -d result.json发送至 WorkBuddy。消息体示例{ protocol: mcp://itops/health-check, action: report_status, payload: { timestamp: 2024-08-01T02:00:00Z, systems: [ { name: OA, status: healthy, uptime: 99.98, screenshot: screenshots/oa_20240801.png }, { name: CRM, status: unhealthy, error: Login button not clickable, screenshot: screenshots/crm_20240801.png } ] } }落地关键细节告警分级机制status字段定义三级healthy绿色、degraded黄色如响应时间 3s、unhealthy红色如按钮不可点击。WorkBuddy 根据status调用不同飞书机器人红色全体成员发送截图错误日志黄色仅通知值班工程师绿色静默记录不推送。截图自动 OCR 提取关键数据当status为unhealthy时WorkBuddy 调用pytesseract对截图进行 OCR提取错误信息如“502 Bad Gateway”并附加到告警消息中减少人工排查时间历史趋势图表生成每日报告存入 SQLite 数据库WorkBuddy 提供mcp://itops/trend指令可返回近7天各系统 uptime 折线图用 Matplotlib 生成 PNGbase64 编码。避坑经验Playwright 在无头模式下某些网站如基于 Angular 的 ERP的 JavaScript 加载不完整。解决方案在page.goto()后不等待load事件而等待特定 selector 出现page.wait_for_selector(button#login-btn, timeout10000)飞书机器人消息长度限制为 2000 字符。当systems数组超过5个异常项时消息会截断。我们改用“摘要详情链接”模式消息正文只列前3个异常末尾附查看详情按钮点击后跳转到飞书多维表格已预置查询视图自动筛选当日异常。2.6 案例六个人知识管理——Obsidian 与飞书云盘的双向同步真实痛点研究员用 Obsidian 写读书笔记、会议纪要但团队协作需在飞书云盘共享。过去靠手动导出 Markdown 为 PDF 再上传失去双向链接、无法搜索、修改不同步。MCP协议设计逻辑Obsidian 插件obsidian-feishu-sync监听文件变更事件vault.on(modify, callback)当检测到.md文件保存时读取文件 frontmatter如tags: [ai, paper]、date: 2024-08-01将文件内容、frontmatter、本地路径打包为 MCP 消息发送至mcp://obsidian/to-feishuWorkBuddy 接收后调用飞书create_fileAPI 创建新文档并将 Markdown 渲染为飞书富文本用markdown-it库解析映射标题为heading1、列表为bulleted_list_item同时飞书文档 ID 写入原文件 frontmatter 的feishu_id字段实现反向映射。落地关键细节双向链接保持技术Obsidian 的[[Note A]]语法在飞书端需转为超链接。WorkBuddy 解析 Markdown 时对每个[[xxx]]提取xxx在 vault 中搜索同名文件若存在则生成https://feishu.cn/doc/xxx链接若不存在则保留原文[[xxx]]并在飞书文档末尾添加“注此链接指向 Obsidian 内部笔记飞书端不可跳转”飞书云盘文件夹自动创建根据 frontmatter 的tags字段自动创建飞书云盘文件夹。如tags: [ai, paper]则路径为/知识库/AI/论文。API 调用链先list_folders查询是否存在/知识库/AI不存在则create_folder再在该 folder_id 下创建paper子文件夹冲突解决策略当 Obsidian 文件与飞书文档同时修改时WorkBuddy 不覆盖而是创建新版本并标注conflict-resolved-20240801-1423同时在两个平台发送告警“检测到双向修改冲突请手动合并”。避坑经验Obsidian 插件在modify事件中调用外部 HTTP 请求可能阻塞编辑器 UI。解决方案将 MCP 发送逻辑放入setTimeout(() { ... }, 0)使其异步执行飞书文档 API 对中文文件名支持不佳create_file时若name包含/或*会报错。我们在发送前用正则re.sub(r[\\/*?:|], _, filename)替换非法字符并在 frontmatter 中保留原始original_name字段用于溯源。3. WorkBuddy 的底层协议栈MCP 如何成为跨工具链的通用语言3.1 MCP 协议不是新发明而是对 IPC 的极简主义重构很多人初看mcp这个词会联想到某种高深的 AI 协议甚至误以为是 Meta 或 Google 推出的新标准。实际上MCPModel Control Protocol的诞生非常务实它源于一群被 Electron 应用 IPC 乱象折磨多年的开发者——他们发现无论用ipcRenderer.send()、contextBridge.exposeInMainWorld()还是remote模块最终都陷入“每个应用写一套通信逻辑”的泥潭。MCP 的核心思想是把 IPC 抽象为三个原子操作Publish进程 A 向指定主题topic发布一条结构化消息Subscribe进程 B 声明自己订阅某主题并提供回调函数处理消息Request/Response进程 A 向进程 B 发起请求B 处理后返回响应类似 RPC。这听起来像 MQTT 或 gRPC不完全是。MCP 的关键差异在于零中间件不依赖消息队列服务器如 RabbitMQ所有通信通过本地 Unix Domain SocketLinux/macOS或 Named PipeWindows完成启动即用Schema 优先每个 topic 必须声明 JSON SchemaWorkBuddy 启动时校验所有订阅者的 schema 兼容性。例如mcp://midas-gen/v1的 schema 定义了payload必须含model_id和source_file字段类型为 string否则拒绝订阅生命周期绑定MCP 连接与进程生命周期强绑定。当 Midas Gen 关闭时其发布的mcp://midas-gen/v1topic 自动注销WorkBuddy 不会收到“僵尸消息”。我们用一个真实对比说明其价值在未引入 MCP 前某芯片公司的 Altium Designer 自动化脚本需直接调用飞书 SDK 的upload_file方法。这意味着脚本必须硬编码飞书app_id、app_secret若飞书 API 升级如 v2 → v3所有 Altium 脚本都要重写无法复用到其他平台如想同步到 Confluence得重写另一套 SDK 调用。引入 MCP 后Altium 脚本只需import mcp_client client mcp_client.connect() client.publish(mcp://altium/si-report, { action: archive_report, payload: {...} })而飞书同步逻辑完全独立于 Altiumdef on_si_report(msg): # 这里处理飞书上传 feishu.upload_pdf(msg.payload.report_pdf) mcp_server.subscribe(mcp://altium/si-report, on_si_report)这就是 MCP 的威力它把“做什么”业务逻辑和“怎么做”平台对接彻底解耦。Altium 工程师只关心如何生成报告飞书工程师只关心如何上传双方通过mcp://altium/si-report这个契约协作互不侵入对方代码。3.2 WorkBuddy 的 MCP 实现为何选择 Rust Tokio 而非 PythonWorkBuddy 的核心进程workbuddy-core用 Rust 编写而非更易上手的 Python。这个选型背后是三个硬性约束毫秒级响应MCP 消息需在 50ms 内完成路由、校验、分发。Python 的 GIL 和解释器开销在高并发如同时处理 20 个 Playwright 巡检任务时延迟飙升至 200ms内存确定性本地缓存目录~/.workbuddy/cache需严格控制内存占用。Rust 的所有权模型确保每个 MCP 消息处理完毕后相关内存立即释放无 GC 暂停跨平台二进制分发Rust 的cargo build --release可生成单文件静态二进制Linux:workbuddy, Windows:workbuddy.exe无需用户安装 Python 环境或依赖库。我们做过压测在 16 核 CPU、32GB 内存的服务器上workbuddy-core持续接收 1000 QPS 的 MCP 消息平均 payload 2KBCPU 占用稳定在 12%内存波动 50MB同等条件下Python 版本用 asyncioCPU 占用达 45%内存泄漏导致 2 小时后增长至 1.2GB。Rust 的实现关键模块MCP Router基于tokio::sync::mpsc构建无锁消息队列每个 topic 对应一个 channel订阅者通过Receiver接收Schema Validator用serde_jsonjsonschemacrate预编译所有 topic 的 JSON Schema避免每次消息都解析 schemaPlugin Loader动态加载 Python/Node.js 插件通过dlopen调用 C ABI插件需导出mcp_handler函数接收str类型的 JSON 消息。注意WorkBuddy 的 Python SDKpip install workbuddy-sdk只是薄层封装真正的协议解析、路由、重试逻辑全在 Rust 核心中。SDK 的作用是让 Python 脚本能像调用本地函数一样publish(topic, payload)而无需关心底层 socket 通信。3.3 MCP Skill Registry如何让“技能”真正可复用、可组合WorkBuddy 的skill并非传统意义上的“功能模块”而是一个标准化的 MCP 消息处理器注册表。每个 Skill 必须满足声明式元数据在skill.yaml中定义name: feishu-table-sync version: 1.2.0 protocol: mcp://feishu/table description: Sync structured data to Feishu multi-dimensional table dependencies: - feishu-sdk3.0.0 - pandas1.5.0 entry_point: feishu_table_sync.main隔离式执行每个 Skill 在独立的 Python subprocess 中运行subprocess.Popen与 WorkBuddy 主进程内存隔离。即使某个 Skill 崩溃如pandas内存溢出也不会影响其他 Skill组合式调用Skill 可相互触发。例如obsidian-feishu-syncSkill 在上传飞书后可publish(mcp://notification/send, {message: Obsidian note synced to Feishu})触发notificationSkill 发送飞书消息。这种设计解决了企业级落地的最大障碍技能的治理与演进。新增一个 Skill如jira-issue-create