我们正在重建 Monica
摘要
作者宣布,在十年后从头开始重建 Monica 个人 CRM,并记录整个过程,探讨软件开发中决策的演进。
暂无内容
查看缓存全文
缓存时间: 2026/09/01 17:43
# 我们正在重建 Monica — Monica 博客
来源:https://www.monicahq.com/en/blog/we-are-rebuilding-monica/
我们正在从头开始重建 Monica,这个新系列将记录这一过程。
这是名为**构建 Monica** 系列的第一篇文章。我想用这个系列来记录从零开始重建开源个人 CRM 项目 Monica 的过程。我会讨论我们试图解决的问题、过程中做出的决策,以及一些可能未如预期般奏效的尝试。
大约十年前,我开始构建 Monica,因为我在记住关于人的事情上很糟糕。我会忘记某人孩子的名字、上次见面时我们谈论了什么,或者他们几个月前告诉我的一些重要事情。我想要一个可以写下这些事情的地方,主要是为了弥补我糟糕的记忆力,于是我开始使用一个专业的 CRM(https://highrisehq.com/)。
这不是一个很好的解决方案。这个软件是为销售员设计的,而我不是销售员,而且当我只想着记住朋友和家人的信息时,我也不太想为一个旨在帮我赚钱的工具付费。我寻找更合适的工具,但没有找到,于是我决定自己动手构建。
这个小项目最终变成了 Monica。我把代码放在 GitHub 上,发布到 Hacker News(https://news.ycombinator.com/item?id=14497295),然后事情变得有点疯狂。原来,并非只有我一个人在寻找这样的东西。Alexis 最终加入我成为联合创始人,多年来,成千上万的人使用了 Monica,贡献了代码,进行了翻译,报告了 bug,并将其安装在自己的服务器上。该项目现在在 GitHub 上拥有超过 25,000 颗星,已成为最知名的开源个人 CRM 之一。
我对 Monica 成为今天的样子感到非常自豪。但在长时间致力于此之后,我达到了这样一个阶段:当前版本不再是我今天会构建的个人 CRM。
## 近十年的决策
当我开始构建 Monica 时,我显然没有十年的关于如何在软件中表达人际关系的经验。大多数决策都是在问题出现时做出的。我们需要联系人,所以我构建了联系人模块。我们需要关系,所以我添加了关系功能。然后是提醒、活动、礼物、笔记、宠物、地址和许多其他功能。
以这种方式构建软件本身并无特别不妥。Monica 就是这样成长起来的,许多决策在当时也是合理的。但在近十年后,它们累积起来。新的想法不得不围绕多年前的决策来设计,而那些曾经看起来只是实现细节的东西,逐渐成为你可以用产品做什么的限制。
随着时间的推移,这使得 Monica 的某些部分变得比应有的更难改变。更重要的是,我对一些最初的决策改变了看法。
## 如果我今天会构建什么?
在某个时候,我开始问自己一个简单的问题:如果 Monica 不存在,而我必须利用过去十年所学到的一切来构建一个个人 CRM,它会是什么样子?
这很快引出了一些比 Monica 应该具有哪些功能更基本的问题。在 Monica 中,一个人到底是什么?人与人之间的关系应该如何运作?Monica 应该如何代表用户本人?当某人生活中重要的事情不是另一个人,而是一个动物、一个组织或其他完全不同的东西时会发生什么?当人类关系不自然遵循时间表时,提醒应该如何工作?一个活动应该代表什么?Monica 最初应该为你定义多少这些内容?
关系是一个很好的例子。存储 Monica 是 Ross 的姐妹这一点似乎并不特别复杂。但如果 Monica 是 Ross 的姐妹,那么 Ross 也是 Monica 的兄弟。亲子关系意味着子女关系。有些关系有方向性,而另一些则没有。现实中的家庭包括离婚、再婚、继子女、同父异母/同母异父的兄弟姐妹、收养以及各种无法很好地适应预定义列表的结构。不同的文化对家庭关系的描述也不同。
我花了大量时间思考新版的关系设计,我现在将关系视为一个独立的领域,而不是附加在联系人上的属性。现在这对我来说显而易见。但在我们设计 Monica 的最初版本时,这并不明显。
定制性是我改变了看法的另一个领域。历史上,Monica 主要定义了什么是联系人以及可以存储哪些信息,我们围绕该结构添加了定制功能。对于 v3 版本,我们希望扭转这一点。Monica 仍然会提供良好的默认设置,因为没人想在添加第一个联系人之前配置五十件事,但你的生活不应该非要适应我们为所有人决定的数据库模式。
一旦你开始在这个层面上进行更改,仅仅重新设计几个界面是不够的。基础也需要改变。
## 我希望 v3 版本成为什么
Monica v3 并不是现有产品搭配一个更漂亮的界面。界面会发生很大变化,我希望它比我们现在使用的大多数软件感觉上更有趣、更个性化,但这只是工作的一部分。
我想构建一个非常强大的系统,用于记录一个人生活中的重要人物和关系。我并不是特别希望为了简单而优化一切,如果结果是一个只能代表简单生活的产品。我更愿意为那些不想配置任何东西的人提供良好的默认设置,同时为那些想要配置的人提供对其 Monica 运作方式的巨大控制权。
这意味着将关系视为一等概念,让人们决定哪些信息对他们重要。Monica 需要处理的远不止附加在联系人上的预定义字段列表。困难的部分在于,在不最终变成用于管理你朋友和家人的企业软件的前提下完成所有这些,因为那将会相当糟糕。
也有一些我不希望改变的东西。隐私和数据所有权对 Monica 仍然至关重要。该项目将继续保持开源和可自行托管。如果你打算花数年时间将你生活中一些最私密的信息输入到某个软件中,我认为你应该尽可能多地控制这些信息。
我也不希望 Monica 来决定某人对你有多重要。它可以帮你记住事情、组织信息,并告诉你已经有一段时间没有和某人联系了。但关系本身仍然由你来维护。
## 带着十年的经验重新开始
当然,“重新开始”并不完全准确。当我在 2017 年创建 Monica 时,我有一个想法和一个想要解决的问题。这一次,我们拥有近十年的处理该问题的经验、与用户的数千次对话、来自世界各地的贡献者、两代产品以及一个相当长的清单,上面列出了我们不会再以同样方式做的事情。
在开发 v3 版本的过程中,我希望更多地公开记录这些。在一些从表面上看相当简单的东西背后,存在着数量惊人的难题,特别是当你开始认真思考关系、提醒、定制性以及如何在数据库中表示像人类生活这样混乱的东西时。我将写下这些问题,也将记录我们正在做出的技术和设计决策,以及那些尝试后并未奏效的事情。
这就是**构建 Monica** 系列将要探讨的内容。我不知道我会多久发布一篇文章,也不想仅仅为了拥有一个发布计划而发明一个发布计划。当我们有有趣的事情可以讨论时,我就会写作。
2017 年,我基于当时对这个问题的理解构建了 Monica。近十年后,我对那个问题的理解已大不相同。这就是我们正在重建它的原因。
相似文章
从成瘾、监狱和重罪记录后从零开始重建
个人叙述:克服成瘾、监禁和重罪记录,通过软件开发和开源贡献重建人生。
后续跟进:CRMy,因为我的 OpenClaw 代理总是丢失客户上下文。寻求对最新版本的直言不讳的反馈。
CRMy 的作者正在寻求关于其架构和价值主张的反馈,这是一款专为 OpenClaw 工作流设计的客户上下文引擎。该工具旨在通过提供类型化、可审计的状态层,而非传统的 CRM 界面,来解决代理上下文保留和数据完整性问题。
我决定回归手写代码
作者在重构一个 Kubernetes 仪表盘工具时反思道,虽然借助 AI 进行“氛围编程”(vibe-coding)能加速功能开发,但在缺乏人工监督的情况下,往往会导致架构臃肿和技术债务。
我们为SaaS构建了一个MCP服务器(约150个工具)——现在Claude运行我们的项目管理。经验教训。
SaaS公司TRCR构建了一个MCP服务器,为AI代理提供约150个工具,并分享了与Claude内部试用的六个关键教训:代理暴露了API缺陷,工具描述如同产品文案,自包含上下文至关重要,OAuth 2.1虽痛苦但值得,将代理与账单数据结合威力强大,内部试用改变了产品路线图。
@rauchg:基于 http://eve.dev 和 @nextjs 构建的开源智能体 CRM。模型无关,可自托管或无服务器部署,多……
Guillermo Rauch 宣布了一个基于 eve 代理框架和 Next.js 构建的开源智能体 CRM。它模型无关、可自托管、支持多渠道和无头架构,具有持久化代理、沙箱、人在回环和评估支持。