一台 Mac 在本地监控行情,并把提醒发送到自己的手机,iMarketMessage v0.2.0-beta发布

半个月前,我发布了 iMarketMessage v0.1.0-alpha。那一版已经可以读取行情、判断规则、保存状态,再把提醒写入本地 outbox,但消息到这里就停下了。它还不能独立完成配对和真实发送,也没有一套可以长期启用的后台服务。

我当时有意把边界停在那里。因为写出一个消息文件很容易,真正把它送进自己的 iMessage,又不让规则有机会改变收件人,牵涉到权限、配对、去重和后台运行。任何一处含糊,都会让一个本来想省心的工具变得不值得信任。

现在,v0.2.0-beta 把这段路接上了。

项目的起点仍然是我自己的需要:长期持有标普 500 ETF,一年大约安排十二次加仓。平时不想天天盯盘,当 VIX 进入我关心的区域时,希望 Mac 提醒我重新看一眼。它不替我买入,也不判断底部,只负责把“每天惦记着”变成“条件到了再来看”。

这次更新以后,提醒可以从本地规则出发,经过受限的消息队列和 paired-self 配对,最终到达我的手机。它也从一个只适合我自己的脚本,往可以由别人设置证券代码、涨跌幅和冷却时间的 Mac 工具走了一步。

从能运行,到敢让它一直运行

把脚本包进窗口不算太难,难的是让它在我不看着的时候仍然可信。

行情提醒最怕两种错误。一种是该提醒的时候没有提醒,另一种是同一件事反复提醒。后者看上去只是烦,实际上会很快耗尽一个人对工具的信任。前者更隐蔽:界面还在,后台服务却早已停了,人会误以为一切正常。

所以这次 v0.2.0-beta 更新,花得最多的时间并不是增加更多技术指标,而是把几个基础问题做实:规则和运行状态留在本机;后台监控与消息发送彼此独立;同一个事件有去重和冷却;App 退出后服务仍能运行;睡眠唤醒、系统重启和升级重装之后,原来的规则与配对还在。

我也没有只看程序返回的“成功”。第一次配对时,我把自己的 iMessage 地址写错了。程序正常提交,消息却没有真正到达。这件小事反而提醒我,系统说“已经交给 Messages”,和手机真的收到,是两回事。后来改正地址,手动发送和后台发送都在设备上确认收到,才算走完了这条链路。

从行情变化、规则判断、本地队列到本人手机提醒的完整链路

我们随后又做了几轮更接近日常使用的测试:退出主 App,后台继续跑;让 Mac 睡眠再唤醒;重启系统;停用服务;卸载后重新安装。测试规则最后删除,正式规则、配对和去重状态保留下来。原先电脑里另一个 iMessage 工具也恢复运行,两套服务使用不同的目录和队列,没有混在一起。

这些过程谈不上漂亮,却比一张功能列表更接近我理解的“可用”。一个个人工具,只有在主人离开屏幕以后仍知道自己该做什么,也知道什么不该做,才开始有一点长期使用的资格。

我给 iMessage 留下的边界

iMessage 是这个项目最特别的地方,也是最需要克制的地方。

iMM 只允许先配对一个“本人地址”。消息队列里没有收件人字段,某一条行情规则也不能临时指定另一个号码或地址。后台发送时,目标只能重新从本机配对文件读取。这样做少了一些灵活性,却避免它从“给自己提醒”变成一个可以随意发消息的工具。

主 App 不读取 Messages 数据库,不读取通讯录,也没有 gh:、Codex 调用或双向命令。它只负责判断规则、写入一条受限的本地消息,再由用户明确启用的 companion 提交给 Messages。第一次使用时仍需用户亲自批准 macOS 的相关权限。

我给它留下的边界很简单:只提醒,不交易;只发给自己,不群发;规则尽量留在本机;能不用云端的部分就不用云端;权限不够时明确失败,而不是偷偷绕过去。

这也让我重新确认了一件事:个人自动化真正需要设计的,往往不是“它还能做什么”,而是下面这些更朴素的问题:

这些问题想清楚以后,功能反而可以慢慢加。

现在可以做什么,还不能做什么

iMarketMessage v0.2.0-beta 已经作为开源的 source-first beta 发布。目前支持 macOS 14+,可以设置证券代码、数据源、收盘价或单日涨跌幅条件,把多个条件按 AND 组合,并设置交易日冷却和“只在首次进入区域时提醒”。VIX 日线可以直接读取 Cboe 数据,其他证券目前提供 Alpha Vantage 的自带密钥适配方式。

但它还不是一个面向普通用户、下载后双击就能放心安装的正式产品。

现在公开的是源码和本机构建路径,使用者需要完整 Xcode。生成的 App 是本机测试用的 ad-hoc 签名版本,还没有 Developer ID 签名、Apple 公证,也没有经过更多不同 Mac、不同权限状态和不同目标地址的测试。iMessage 自动化依赖 macOS 与 Messages 的现有行为,我不会把一次实机成功写成长期兼容的承诺。

因此,这次更新更像把一件“只在我电脑上能用的东西”,推进到了“别人可以审查源码、自己构建并开始测试”的阶段。下一步值不值得继续走向签名、公证和更简单的安装,要看真实测试者能否顺利完成权限、配对和后台运行,也要看这种本地优先的提醒方式,是否真的解决了他们的问题。

我越来越喜欢从这种小需求开始做工具。不是先想它能卖给多少人,而是先问:我会不会持续使用,它有没有替我省下一点注意力,它的边界是不是经得起生活里的意外。

至少到现在,VIX 的提醒已经不需要我每天惦记。它安静地留在 Mac 里,条件到了,再到手机上叫我一声。这就是这个项目目前最真实的意义。

项目与版本说明:

本文记录的是个人工具的设计与使用过程,不构成投资建议。VIX 规则只用于提醒我重新查看自己的长期投入计划,不自动交易,也不代表市场底部或未来收益。行情数据可能延迟、缺失或修订。

文章皆为原创,转载文章请注明出处。人到中年,记录内心秩序、资产护航与数字能力。愿你莫白来。