MdMonitor Blog Build log, release notes, and product stories

我写了一个小工具,专门帮我在“逛仓库”时不打断心流

2026-03-06 · Available since v0.6.0

我平时有个高频动作:

  1. 在各种文章、社区、Issue、Showcase 里看到有意思的仓库
  2. 先把链接存下来,免得丢
  3. 再手动 git clone 到本地,准备后面读代码

听起来很简单,但一天重复几十次以后,就会变成典型的“微打断”:

每次都要在“看内容”和“做记录”之间来回切,心流很容易断掉。

于是我给自己写了一个 macOS 菜单栏小工具:MdM(Clipboard Repo Monitor)

这个工具解决什么问题

核心目标就一句话:

当我在浏览仓库时,只管继续浏览。记录和 clone 这件事自动发生。

具体来说,当你复制了一个 Markdown 链接,比如:

[Some Repo](https://github.com/owner/repo)

MdM 会自动:

  1. 识别是不是 GitHub 仓库链接
  2. 把它追加到当天文件 links_yyyyMMdd.md
  3. 执行 git c1 https://github.com/owner/repo.git(我自己的 clone 工作流)

并且做了“当天去重”:同一天同一个仓库不会重复记录、不会重复 clone。

为什么我觉得它有效

它不是“省掉一个大步骤”,而是省掉了大量“很小但高频”的动作切换。

这些切换在单次看起来不重,但非常影响连续思考:

MdM 把这些机械动作后台化之后,我的体验是:

我现在的使用方式

如果当天做了很多探索,最后只要看 links_yyyyMMdd.md,就能快速回顾“我今天到底看了什么”。

一个小结

这类工具的价值不在于“技术炫酷”,而在于它是否真正嵌入你的日常节奏。

对我来说,MdM 做到的是:

如果你也有类似习惯(经常边浏览边收集仓库),这种自动化值得试一试。它不会改变你怎么思考,但会减少你被迫中断思考的次数。

实现细节:剪贴板监听与 Markdown 解析

MdM 的监听模型是“轻量轮询 + 变更触发”:

Markdown 解析采用正则提取 [label](link),并支持开关控制:

这么做的好处是:默认行为保守,误触少;需要批量处理时再显式打开。

实现细节:URL 规范化与去重策略

识别到链接后,不会直接用原始 URL,而是先做规范化:

去重键使用 owner/repo,并且是“当天去重”:

我当时有考虑“全局去重”,但最后选择“按天去重”,因为我更关心“今天看了什么”,而不是永久只收录一次。

实现细节:菜单栏交互、日志与预览窗口

菜单栏交互上,我踩过一个典型坑:点击时有 beep 但不弹窗。
最终方案是把动作放到菜单关闭后异步执行,并统一走窗口管理器。

当前设计要点:

日志设计上,我故意做得“可排障优先”:

这样在“看起来没反应”的时候,不靠猜,直接看日志就能知道卡在哪一段。

实现细节:为什么选 MarkdownUI 做渲染

一开始我用的是 AttributedString(markdown:),但在复杂 Markdown 下(列表、换行、表格等)展示不够稳定,阅读体验一般。

后来换成 MarkdownUI,核心原因是:

预览窗口现在也不仅是“看一篇内容”,而是“左侧历史文件列表 + 右侧预览 + 一键复制原文”,更贴近我实际回顾和再利用的流程。

这次开发里,我最意外的一点

坦白说,我以前几乎没有做过 Swift 桌面应用开发。

但这次从需求到上线可用版本,我用 Codex 把整个流程跑了下来:需求拆解、PRD、待办流转、代码实现、调试修复、测试回归、文档补齐,全部一条线推进。

最夸张的是:从我们开始协作到现在,我甚至还没有打开过 Xcode。

我基本只做两件事:

  1. 说清楚我要什么(比如“保持心流”“默认中文”“更新失败静默”)
  2. 在真实使用里给出反馈(比如“这里没弹窗”“这里会 beep”“日志不够可观测”)

剩下的实现细节,Codex 很快就能落到代码里,再通过回归测试把质量兜住。

对我来说,这不是“AI 帮我写了几个函数”,而是把一个完整的小产品从 0 到 1 推出来了。

我希望它继续进化的方向

现在这个版本已经能稳定支持我的主流程,但后面我还想做几件事:

如果你也有类似工作流,欢迎拿这个思路改成你自己的版本。
工具不需要“大而全”,只要能精准减少你每天最烦的重复动作,它就有价值。

结语

MdM 对我最大的意义,不是自动化本身,而是把“动作成本”降到几乎感觉不到。

当记录和 clone 变成无感动作,注意力就能更长时间停留在真正重要的事情上:理解代码、判断价值、建立自己的技术地图。

如果你最近也在被各种“微打断”消耗,不妨给自己做一个这种小工具。
一次投入,长期复利。