Proma:把 Chat、Agent、Skills、MCP 和微信桥接做进一个本地优先桌面应用

Proma: Chat, Agent, Skills, MCP, and WeChat Bridge in One Local-First Desktop App

Tech-Experiment #本地AI#桌面应用#Agent工作台#Claude SDK#MCP#Skills#微信桥接#开源#Electron#Pi Agent
更新于
🇨🇳 中文

GitHub:ErlichLiu/Proma · Stars:1,615
作者:ErlichLiu(erlich.fun)
商业版:proma.cool
许可:AGPL-3.0 · 运行时:Bun + Electron 39


一句话定位

Proma 不是又一个 ChatGPT 套壳。它的出发点是:一个可以长期沉淀个人工作流的 Agent 工作台。

简单问题用 Chat(快,多模型对比,不留包袱),复杂任务交给 Agent(工作区隔离、Skills 加持、MCP 扩展、结果持久化)。数据默认在 ~/.proma/,JSON 文件,随时备份,不依赖任何云服务。

有一个细节很有意思:它有 wechat-bridge.ts——可以用手机微信触发本机的 Agent 工作流。这和我们做 Heinu1 的思路高度重合,但做成了完整的桌面 GUI。


两套 Agent 运行时,按需切换

Proma 在同一个 Agent 输入框下方提供两个内核选择:

Claude Agent Runtime(默认)

基于 @anthropic-ai/claude-agent-sdk@0.3.201,走 Anthropic Messages API。支持 Anthropic 官方接口,也支持 DeepSeek、Kimi API、Kimi Coding Plan、智谱 Coding Plan、MiniMax、小米 MiMo 等 Anthropic 协议兼容端点。

Kimi Coding Plan 用户:Proma 已获 Kimi 官方白名单,接入 Kimi Coding Plan 不触发第三方客户端封号。

Pi Agent Runtime(实验性)

基于 @earendil-works/pi-coding-agent@0.80.3,把 Proma 里已配置的渠道动态注册为 Pi provider。支持的协议范围比 Claude Runtime 更广:

渠道类型ChatClaude AgentPi Agent
Anthropic / 兼容(DeepSeek、Kimi、智谱 Coding 等)✅✅✅
OpenAI、OpenAI Responses、Google、豆包、通义✅✗✅
OpenAI 兼容自定义端点✅✗✅
ChatGPT 订阅(Codex OAuth)—✅✅

实际含义:想用 Qwen、Gemini、GPT-4o 跑 Agent 任务的,切到 Pi Runtime 即可,不需要等 Anthropic 兼容层。


Chat vs Agent:清晰的模式划分

很多 AI 客户端把聊天和 Agent 混在一起,Proma 的设计是分开的:

Chat 适合:日常问答、翻译润色、附件总结、多模型对比输出、一次性对话。

Agent 适合:修改/创建/整理本地文件、多步骤调研报告、需要 MCP/Shell/Git 上下文的任务、需要权限确认或后台持续跟进的工作。

规则很直接:只需要回答时用 Chat,需要行动和交付结果时用 Agent。

Chat 模式支持:附件解析、图片输入、Markdown / Mermaid / KaTeX / 代码高亮、并排对话(多模型同时回答)、系统提示词、手动管理上下文长度。

Agent 模式支持:工作区文件隔离、Skills 加持、MCP Server 按需启用、长任务流式输出、计划确认(Plan Mode)、子任务拆分与可追踪协作 Agent / Task。


Skills & MCP:工作区级别的能力沉淀

这是 Proma 里最值得单独说的设计:每个工作区可以独立配置 Skills 和 MCP Server。

Skills:结构化指令文件(SKILL.md 格式),沉淀可复用的工作流。README 里的例子是 feedback-synthesis——把用户反馈、访谈记录和 issue 聚合成主题、证据和优先级建议。你可以给每个项目配置专属 Skills,而不是每次重复粘贴 prompt。

MCP Server:支持 stdio / HTTP MCP Server,可按需启用或关闭。不同工作区绑定不同的 MCP 工具集——代码仓库用代码分析 MCP,写作工作区用搜索 MCP,不同场景不互相干扰。

工作区数据结构:

~/.proma/agent-workspaces/{workspace-slug}/
├── workspace-files/   ← 工作区专属文件
├── mcp.json           ← 这个工作区的 MCP 配置
└── skills/            ← 这个工作区的 Skills

远程机器人:手机触发本机 Agent

这个功能对独立开发者特别实用。Proma 支持三种桥接:

  • 飞书 / Lark 机器人:在飞书群聊或私聊里发消息,触发本机 Agent 工作流,结果回复到飞书。
  • 钉钉机器人:同样的模式,接入钉钉群。
  • 微信桥接:wechat-bridge.ts 已经实现,让微信侧消息触发本机 Agent。

核心代码在 apps/electron/src/main/lib/ 下的三个文件:feishu-bridge.ts、dingtalk-bridge.ts、wechat-bridge.ts。

这意味着:你可以在路上用手机发一条微信,让家里的 Mac 跑一个多步骤 Agent 任务,完成后把结果发回来——不需要开电脑。这正是 Heinu1 做的事,但 Proma 做进了完整桌面应用里。


本地优先的数据设计

~/.proma/
├── channels.json           ← API Key 用 Electron safeStorage 加密
├── conversations.json      ← Chat 会话索引
├── conversations/{id}.jsonl← 对话内容(JSONL 追加日志)
├── agent-sessions.json     ← Agent 会话索引
├── agent-sessions/{id}.jsonl
├── agent-workspaces/       ← 工作区数据
│   └── {workspace-slug}/
│       ├── workspace-files/
│       ├── mcp.json
│       └── skills/
├── attachments/
├── user-profile.json
├── settings.json
└── sdk-config/

不使用本地数据库——所有内容是 JSON 配置文件和 JSONL 追加日志。好处:随时用 cat 查看、可以 git 版本控制、迁移到新电脑直接复制目录。

API Key 是唯一加密存储的字段(Electron safeStorage),其余数据全部明文可读。


语音输入

Proma 内置豆包流式语音识别:

  • `Ctrl + “ 触发识别
  • 再次按下结束,自动输入到 Proma 的当前输入框
  • 在 Proma 外部使用:识别结果输入到当前光标位置,无光标则写入剪贴板

这让它在某些场景下可以无键盘操作——说出任务,Agent 执行,说出反馈,继续推进。


技术栈

层技术
运行时Bun(monorepo 工具链)
桌面框架Electron 39
前端React 18 + TypeScript + Jotai
样式Tailwind CSS + Radix UI
富文本输入TipTap
Markdown / 图表 / 公式React Markdown + Beautiful Mermaid + KaTeX
代码高亮Shiki
构建Vite + esbuild
分发electron-builder
Agent RuntimeClaude SDK 0.3.201 + Pi 0.80.3

仓库结构是 Bun workspace monorepo:packages/shared(共享类型 + IPC 常量)、packages/core(Provider Adapter + SSE + 代码高亮)、packages/ui(共享 React 组件)、apps/electron(Electron 主应用)。

# 开发
bun install
bun run dev       # Vite + Electron + 热重载

# 构建
bun run electron:build

# 类型检查
bun run typecheck

架构核心:Agent Orchestrator

Agent 的调度入口在 agent-orchestrator.ts:接收任务、选择运行时(Claude 还是 Pi)、设置工作区环境变量、调用对应 SDK、管理事件流和错误。

两套适配器:

  • adapters/claude-agent-adapter.ts:Claude SDK 封装,含工作区文件注入、Skills 加载、MCP 启动
  • adapters/pi-agent-adapter.ts:Pi SDK 封装,把已启用渠道动态注册为 provider
  • adapters/runtime-routing-agent-adapter.ts:根据会话内核路由到对应适配器

渲染进程 Agent IPC 监听器在应用顶层全局挂载——这是一个重要工程决策:避免切换页面时丢失流式事件、权限请求或后台任务状态。


开源版 vs 商业版

开源版(AGPL-3.0)商业版(proma.cool)
下载GitHub Releasesproma.cool/download
模型渠道需自备 API Key内置渠道 + 订阅方案
功能完整完整 + 内置渠道
限制修改后分发或 SaaS 需开放源码商业授权豁免 AGPL

开源版在功能上完整,适合自备 API Key 的用户。商业版的差异主要是省去了配置渠道的步骤。

AGPL-3.0 意味着:如果你把 Proma 改了,对外提供 SaaS 服务,必须开放修改后的完整源码——包括网络交互层。想集成到闭源产品,需要单独商业授权。


与同类工具对比

PromaCherry StudioOpen WebUICursor
定位Agent 工作台 + 多协议多模型 Chat 客户端本地模型 UIAI 代码编辑器
Agent 运行时Claude SDK + Pi SDK✗基础内置
Skills & MCP✅ 工作区级别✗基础插件
远程机器人✅ 微信/飞书/钉钉✗✗✗
本地数据✅ 全 JSON/JSONL部分部分部分
语音输入✅ 豆包流式✗部分✗
开源许可AGPL-3.0Apache-2.0Apache-2.0闭源

Proma 最独特的组合是:完整 Agent 运行时 + 工作区 Skills + 远程机器人桥接。这三样加在一起,在开源桌面 AI 客户端里目前没有直接竞品。


核心判断

Proma 解决的是一个真实存在的场景空白:你想在本地用 Claude/Pi 做真正的 Agent 工作(不只是聊天),但不想每次都开终端、配置 SDK、手动管理工作区。

1615 Stars,开源 6 个月。两套 Agent 运行时 + 工作区 Skills + 微信/飞书桥接,这个功能组合在桌面 AI 客户端里确实少见。

如果你现在在用 Heinu1 这类”手机触发 Claude 工作”的方案,Proma 的 wechat-bridge + Agent Workspace 值得参考——尤其是它把 Skills 做到工作区级别、MCP 按工作区启用关闭这两个设计,是可以直接借鉴的架构思路。


参考资源

© 2026 Author: Mycelium Protocol

🇬🇧 English

GitHub: ErlichLiu/Proma · Stars: 1,615
Author: ErlichLiu (erlich.fun)
Commercial: proma.cool
License: AGPL-3.0 · Runtime: Bun + Electron 39


One-Line Positioning

Proma is not yet another ChatGPT wrapper. Its starting point is: an Agent workspace for long-term accumulation of personal workflows.

Simple questions go to Chat (fast, multi-model comparison, no overhead); complex tasks go to Agent (workspace isolation, Skills support, MCP extensions, persistent results). Data lives in ~/.proma/ by default — JSON files, backed up any time, with no dependency on any cloud service.

One detail stands out: it has a wechat-bridge.ts — you can trigger on-device Agent workflows from your phone via WeChat. This closely mirrors the thinking behind Heinu1, but realized as a full desktop GUI.


Two Agent Runtimes, Switch on Demand

Proma offers two kernel choices beneath the same Agent input box:

Claude Agent Runtime (Default)

Based on @anthropic-ai/claude-agent-sdk@0.3.201, routed through the Anthropic Messages API. Supports the official Anthropic endpoint as well as Anthropic-protocol-compatible endpoints: DeepSeek, Kimi API, Kimi Coding Plan, Zhipu Coding Plan, MiniMax, Xiaomi MiMo, and more.

Kimi Coding Plan users: Proma is on Kimi’s official whitelist, so connecting via Kimi Coding Plan will not trigger a third-party client ban.

Pi Agent Runtime (Experimental)

Based on @earendil-works/pi-coding-agent@0.80.3, dynamically registering the channels already configured in Proma as Pi providers. Its protocol coverage is broader than the Claude Runtime:

Channel TypeChatClaude AgentPi Agent
Anthropic / compatible (DeepSeek, Kimi, Zhipu Coding, etc.)✅✅✅
OpenAI, OpenAI Responses, Google, Doubao, Qwen✅✗✅
OpenAI-compatible custom endpoints✅✗✅
ChatGPT subscription (Codex OAuth)—✅✅

Practical implication: if you want to run Agent tasks with Qwen, Gemini, or GPT-4o, just switch to Pi Runtime — no need to wait for an Anthropic-compatible layer.


Chat vs Agent: Clear Mode Separation

Many AI clients blur the line between chat and agent. Proma’s design keeps them distinct:

Chat is for: everyday Q&A, translation and polishing, attachment summarization, multi-model comparison output, one-off conversations.

Agent is for: modifying/creating/organizing local files, multi-step research reports, tasks that require MCP/Shell/Git context, work that needs permission confirmations or background follow-up.

The rule is straightforward: use Chat when you only need an answer; use Agent when you need action and a deliverable result.

Chat mode supports: attachment parsing, image input, Markdown / Mermaid / KaTeX / code highlighting, side-by-side conversations (multiple models answering simultaneously), system prompts, and manual context-length management.

Agent mode supports: workspace file isolation, Skills augmentation, on-demand MCP Server enabling, long-task streaming output, Plan Mode for confirmation, and subtask decomposition with trackable collaborative Agents / Tasks.


Skills & MCP: Workspace-Level Capability Accumulation

This is the design in Proma most worth singling out: each workspace can independently configure its own Skills and MCP Servers.

Skills: structured instruction files in SKILL.md format that accumulate reusable workflows. The README example is feedback-synthesis — aggregating user feedback, interview notes, and issues into themes, evidence, and prioritization suggestions. You can configure dedicated Skills per project instead of pasting the same prompt every time.

MCP Server: supports stdio / HTTP MCP Servers, enabled or disabled on demand. Different workspaces bind to different MCP toolsets — a code repository uses a code-analysis MCP, a writing workspace uses a search MCP, without cross-contamination between contexts.

Workspace data structure:

~/.proma/agent-workspaces/{workspace-slug}/
├── workspace-files/   ← workspace-specific files
├── mcp.json           ← MCP config for this workspace
└── skills/            ← Skills for this workspace

Remote Bot: Trigger On-Device Agent from Your Phone

This feature is especially practical for indie developers. Proma supports three bridge types:

  • Feishu / Lark bot: send a message in a Feishu group chat or DM to trigger on-device Agent workflows; results reply back to Feishu.
  • DingTalk bot: same pattern, connected to DingTalk groups.
  • WeChat bridge: wechat-bridge.ts is already implemented, letting WeChat-side messages trigger on-device Agents.

The core code lives in three files under apps/electron/src/main/lib/: feishu-bridge.ts, dingtalk-bridge.ts, wechat-bridge.ts.

This means: you can send a WeChat message from your phone while out and about, have your Mac at home run a multi-step Agent task, and receive the results when it’s done — without opening your laptop. This is exactly what Heinu1 does, but Proma delivers it inside a full desktop application.


Local-First Data Design

~/.proma/
├── channels.json           ← API Keys encrypted with Electron safeStorage
├── conversations.json      ← Chat session index
├── conversations/{id}.jsonl← Conversation content (JSONL append log)
├── agent-sessions.json     ← Agent session index
├── agent-sessions/{id}.jsonl
├── agent-workspaces/       ← Workspace data
│   └── {workspace-slug}/
│       ├── workspace-files/
│       ├── mcp.json
│       └── skills/
├── attachments/
├── user-profile.json
├── settings.json
└── sdk-config/

No local database — all content is JSON config files and JSONL append logs. Benefits: inspect with cat any time, version-control with git, migrate to a new machine by copying the directory.

API Keys are the only encrypted field (Electron safeStorage); all other data is stored in plaintext.


Voice Input

Proma includes Doubao streaming speech recognition built-in:

  • `Ctrl + “ triggers recognition
  • Press again to stop; input is automatically placed in Proma’s current input field
  • When used outside Proma: recognition result is typed at the current cursor position, or written to the clipboard if there is no cursor

This enables keyboard-free operation in some scenarios — speak the task, Agent executes, speak the feedback, continue moving forward.


Tech Stack

LayerTechnology
RuntimeBun (monorepo toolchain)
Desktop frameworkElectron 39
FrontendReact 18 + TypeScript + Jotai
StylingTailwind CSS + Radix UI
Rich-text inputTipTap
Markdown / Charts / FormulasReact Markdown + Beautiful Mermaid + KaTeX
Code highlightingShiki
BuildVite + esbuild
Distributionelectron-builder
Agent RuntimeClaude SDK 0.3.201 + Pi 0.80.3

The repository is structured as a Bun workspace monorepo: packages/shared (shared types + IPC constants), packages/core (Provider Adapter + SSE + code highlighting), packages/ui (shared React components), apps/electron (Electron main application).

# Development
bun install
bun run dev       # Vite + Electron + hot reload

# Build
bun run electron:build

# Type check
bun run typecheck

Architecture Core: Agent Orchestrator

The Agent scheduling entry point is agent-orchestrator.ts: receives tasks, selects the runtime (Claude or Pi), sets workspace environment variables, invokes the corresponding SDK, and manages the event stream and errors.

Two adapters:

  • adapters/claude-agent-adapter.ts: Claude SDK wrapper, including workspace file injection, Skills loading, MCP startup
  • adapters/pi-agent-adapter.ts: Pi SDK wrapper, dynamically registering enabled channels as providers
  • adapters/runtime-routing-agent-adapter.ts: routes to the appropriate adapter based on the session’s kernel

The renderer-process Agent IPC listener is mounted globally at the application’s top level — this is an important engineering decision: it prevents losing streaming events, permission requests, or background task state when navigating between pages.


Open-Source vs Commercial

Open-Source (AGPL-3.0)Commercial (proma.cool)
DownloadGitHub Releasesproma.cool/download
Model channelsBring your own API KeyBuilt-in channels + subscription plans
FeaturesFullFull + built-in channels
RestrictionsModifications distributed or served as SaaS must open-source the codeCommercial license exempts from AGPL

The open-source edition is feature-complete and suited for users who supply their own API Keys. The commercial edition’s main difference is that channel configuration is handled for you.

AGPL-3.0 means: if you modify Proma and offer it as a SaaS service, you must release the full modified source code — including the network interaction layer. Integrating into a closed-source product requires a separate commercial license.


Comparison with Similar Tools

PromaCherry StudioOpen WebUICursor
PositioningAgent workspace + multi-protocolMulti-model Chat clientLocal model UIAI code editor
Agent runtimeClaude SDK + Pi SDK✗BasicBuilt-in
Skills & MCP✅ Workspace-level✗BasicPlugin
Remote bot✅ WeChat/Feishu/DingTalk✗✗✗
Local data✅ Full JSON/JSONLPartialPartialPartial
Voice input✅ Doubao streaming✗Partial✗
Open-source licenseAGPL-3.0Apache-2.0Apache-2.0Closed-source

Proma’s most distinctive combination is: full Agent runtime + workspace Skills + remote bot bridges. Taken together, these three have no direct competitor among open-source desktop AI clients at present.


Core Assessment

Proma addresses a real gap: you want to do genuine Agent work locally with Claude/Pi (not just chat), but you don’t want to open a terminal, configure the SDK, and manage workspaces by hand every time.

1,615 Stars, open-sourced for 6 months. Two Agent runtimes + workspace Skills + WeChat/Feishu bridges — this feature combination is genuinely rare among desktop AI clients.

If you’re currently using a setup like Heinu1 for “phone-triggered Claude work,” Proma’s wechat-bridge + Agent Workspace is worth studying — especially the designs of workspace-level Skills and per-workspace MCP enable/disable. These are architectural ideas you can borrow directly.


References

© 2026 Author: Mycelium Protocol

💬 评论与讨论

使用 GitHub 账号登录后发表评论

关于本站 · 免责声明

🍄 Mushroom Research Blog 是非营利、免费公开的个人科技观察博客与公众号 XStack18,不接受商业合作、不代表任何企业或机构立场,也不谋求商业利益。我们以个人视角客观中立地记录和分析 AI、Web3 等领域的最新模型发布与技术动态——不止转述新闻标题或二手信息,而是给出有独立思考的深入分析,希望帮更多人获得有价值的一手科技认知。

⚠️ 文中介绍的开源代码与模型,仅供学习交流与技术借鉴。它们大多仍处于早期阶段,有待进一步研究和验证,请勿直接用于工作或生产环境;如需采用,请先自行充分测试,并核实其许可证与安全性。
Open-source code and models featured here are shared for learning and reference only. Most are early-stage and still need further study and verification — please don't use them directly in your work or in production. Test them thoroughly and check their licenses and security first.

  1. 本站文章均为作者基于公开信息的个人研究与观点整理,不代表文中提及的任何公司、产品、模型的官方立场,未与其构成商业关联或合作关系。
  2. 科技行业信息更新极快,我们尽力保证内容准确、及时,但不对完整性、实时性做绝对保证,具体请以相关企业/项目官方公告为准。
  3. 文中引用的第三方商标、产品名称、图片、数据等版权归原权利人所有,我们会尽量注明来源;如你认为存在版权疑问或侵权,请通过下方邮箱联系我们,收到通知后会尽快核实处理(更正、加注来源或删除)。
  4. 文章内容仅为技术科普与个人观点,不构成投资、法律或其他专业建议,据此进行任何决策的后果需自行判断和承担。

📮 侵权 / 勘误 / 合作咨询:hello@mushroom.cv