Open Workmate 是一款基于本地 C# 服务与大语言模型(LLM)驱动的 Chrome 浏览器插件。它能够通过自然语言与你的本地电脑进行交互,帮助你自动化处理 Excel、Word 文档,执行系统命令,甚至在侧边栏中直接渲染数据图表。
- 文档处理:读取/写入 Excel 和 Word 文件。
- 系统控制:执行本地系统命令(支持白名单安全拦截)。
- 完全本地化:前端通过 WebSocket 连接本地服务,数据不经过第三方中转服务器。
- 动态展示板:支持 AI 直接生成图表代码并在浏览器中渲染。
- 动态工作流 (Skills):你可以用自然语言编写业务 SOP,让 AI 自动组合执行多个步骤。
- 支持外接 MCP 生态:内置原生 MCP Client,一键接入开源社区海量模型上下文协议 (Model Context Protocol) 插件(如本地数据库查询、网页搜索等)。
- 进入
release/backend目录。 - 双击运行
OpenWorkmate.Server.exe。- 看到提示
Now listening on: http://127.0.0.1:8765(若 8765 被占用会自动尝试后续端口,如 8766)表示服务端启动成功。 - 实际地址会写入
%LocalAppData%\OpenWorkmate\local-service.json(供排障);Chrome 扩展与 WPS/Office 任务窗格会通过扫描127.0.0.1上的一段端口并请求引导接口自动发现服务,一般无需手改地址。 - 单实例(Windows):同一用户会话下只会运行一个后台进程;若再次启动会提示「已有实例在运行」。若默认端口被其它软件占用,唯一实例会自动顺延到配置范围内的下一个可用端口(策略 A)。本地调试需要多开进程时可在命令行追加
--allow-second-instance(会从启动参数中剥离,不会传给 ASP.NET Core)。 - 应用配置统一保存在本机
%LocalAppData%\OpenWorkmate\user-config.json。首次启动若该文件不存在,会自动生成一份默认配置;之后在浏览器扩展设置页中保存的 API Key、访问密钥等也会写入此文件。请勿将含真实密钥的user-config.json提交到公开仓库。
- 看到提示
- 打开 Chrome 浏览器,在地址栏输入
chrome://extensions/。 - 开启右上角的 开发者模式。
- 点击 加载已解压的扩展程序。
- 选择本项目中的
chrome-extension文件夹(或者解压release/chrome-extension.zip后选择解压的目录)。 - 插件安装成功后,点击浏览器扩展栏上的 Open Workmate 图标,即可在侧边栏打开聊天窗口。
第一次使用时,请点击侧边栏右上角的 ⚙️ 齿轮图标:
- 在 大模型设置 页面填写你的 API Key 和模型(默认配置兼容 OpenAI / Moonshot / DeepSeek 等接口)。
- 在 自定义技能 页面,你可以用自然语言写出“业务流程说明书”。
- 在 外部组件 (MCP) 页面,如果你有需要,可以配置第三方 MCP 服务的启动命令(比如
npx @modelcontextprotocol/server-postgres ...)。
服务端运行且插件连接成功后(状态显示为绿色的“已连接”),你可以对它发送如下指令:
-
执行系统命令
- "帮我看看 D 盘根目录下有哪些文件"
- "帮我用 ipconfig 查一下我的 IP 地址"
-
操作 Excel 文件
- "读取 D:\test\sales.xlsx 的 Sheet1,从 A1 到 C5 的数据"
- "帮我创建一个包含姓名和年龄的测试数据,保存到 D:\test\users.xlsx"
- 图表(xlsx 内原生图):后端 Excel 插件里与工作簿嵌入式图表相关的工具目前仅有
excel_charts_list(按工作表统计图表数量)。不提供插入、修改数据源或删除图表等能力(Open XML 可编程实现,但本仓库未封装)。要在对话里出图,请用下方「动态图表渲染」在浏览器中绘制。
-
操作 Word 文件
- "帮我读取 D:\test\report.docx 的前两段内容"
-
动态图表渲染
- "根据这周一到周五的气温(15, 18, 20, 16, 19),用 Echarts 帮我画一个折线图"
- (AI 会生成带有
<html_canvas>标签的代码,插件会自动解析并在下方以网页形式渲染图表)
- 本服务设计为本机助手:默认从
http://127.0.0.1:8765起尝试绑定(可在appsettings中配置WebSocket:Port与PortFallbackCount),信任边界是「能访问该端口的本机进程」。 - 不要将 8765 端口无防护地暴露到公网(例如不经认证的 frp/ngrok 转发)。若必须用非回环地址监听,请在
user-config.json中配置强随机的webSocketAuthToken,并在 Chrome 扩展选项页填写相同密钥;否则启动时会拒绝绑定(可使用--allow-public-bind显式承担风险,强烈不推荐)。 - HTTP API(
/api/*):未在user-config.json中配置webSocketAuthToken时仅允许本机 loopback 访问;配置后须携带请求头X-OpenWorkmate-Token或Authorization: Bearer,与 WebSocket 查询参数token使用同一密钥。 - 外部 MCP:配置的启动命令等价于在本机执行对应进程,请勿添加不可信来源的配置。
- CLI 插件:使用
cmd /c;在「RunEverything」模式下可执行任意命令,其它模式依赖人工确认,误点「允许」仍有风险。
- Origin 校验:WebSocket 与 CORS 按
WebSocket:AllowedOrigins前缀匹配,并允许常见chrome-extension:/// 本机调试来源。 - 命令与脚本策略:服务端内置
SecurityFilter,可按端配置白名单、AskEverytime或RunEverything(见扩展「MCP」页说明)。 - 测试连接防 SSRF:设置页「测试连接」默认禁止指向 localhost、内网与常见元数据地址;可在选项中勾选「允许内网/回环测试」写入
allowPrivateEndpointTests(会降低防护,仅供调试)。
- 在
backend目录下将appsettings.Example.json复制为appsettings.json,按需填写 API Key 等(或通过插件设置面板配置,使用user-config.json)。
项目基于 .NET 10 / C# 编写。工程为多目标框架:net10.0(默认,便于 dotnet run 控制台调试)与 net10.0-windows(含 Windows 托盘)。
cd backend
dotnet build
dotnet run- 调试日志网页(本机):服务启动后可在浏览器打开
http://127.0.0.1:8765/debug/logs.html(仅本机 loopback 可调GET /api/debug/log-files、/api/debug/log-tail),便于复制链接与他人对照日志。 - Windows 托盘模式:在 Windows 上执行
dotnet run -f net10.0-windows -- --tray,或使用 Visual Studio / Rider 启动配置 OpenWorkmateTray。托盘菜单「设置」会尝试用 Chrome 打开chrome-extension://<扩展ID>/options.html;扩展 ID 请在user-config.json中配置chromeExtensionId,或设置环境变量OpenWorkmate_CHROME_EXTENSION_ID(在chrome://extensions开启开发者模式后从列表复制)。
Chrome 插件基于 Manifest V3 编写,主代码在 sidepanel.html / sidepanel.js。修改后只需在 Chrome 扩展管理页点击“刷新”图标即可生效。