Skip to content

Repository files navigation

Vana

Vana

一个会读 Apple Health 的健康助手。
打开就是聊天,没有仪表盘,没有账号,没有订阅。


你问「我最近睡得怎么样」,它自己去 Apple Health 里翻睡眠数据,再把结论讲给你听——不是把一堆 折线图摆在你面前让你自己看。

拍一张纸质化验单,它在本机把字认出来再讨论,照片不出这台设备;你说「我不能吃布洛芬」, 它记下来,以后每一次建议都绕开它;你早上收到的那条通知里写的是结论(「昨晚只睡了 6.2 小时, 比最近常态少 100 分钟」),不是「该打卡了」。

它自带钥匙。 所有模型调用都发给你自己配置的云端 provider——设置页里填一把 API key, 没有中间服务器,没有注册,没有订阅。

仓库、工程和 app 显示名都叫 Vana(仓库 Vana-iOS,Android 版在 Vana-Android),bundle id 是 com.pinapia.vana.ios(Android 那边是 com.pinapia.vana)。

大概是这样用的

:我这周是不是练得有点少

Vana · 查了锻炼、活动量 这周三次、合计 96 分钟,上周是五次 180 分钟。少的主要是周中——周二周四那两天平时都有,这周 空着。心率区间倒是没变,不是强度掉了,是次数掉了。

:(拍了一张化验单) 帮我看看

Vana 血红蛋白 132 g/L、白细胞 5.8、血小板 210,都在参考区间里。有两项标了箭头,我们逐个说 —— 另外,识别可能出错,几个关键数值麻烦你和纸上核一下。

:冬天要不要补点维 D

Vana ……记下了,你从今天开始试维 D 2000 IU。两周后我来问一句有没有变化。

它能做什么

读你的健康数据并解释它。 步数、睡眠、心率与 HRV、锻炼、体重与体成分、血压、体温血氧, 还有你已经连到「健康」App 的化验和体检记录。查什么、查几天由它自己决定,回复上方标着这一轮 用了哪些数据,展开还能看逐小时的图。

打开就有一句话。 第一屏不是先问你一个问题,而是先说现在是什么状况:昨晚睡多久、今天走了 多少、静息心率和平时比怎么样。这句话本地算出来立刻显示,模型润色好了再原地换掉——没配 key 也有。

拍照读化验单。 纸质化验单、药瓶、成分表,或者相册里已有的照片、医院导出的 PDF / Word / txt。文字识别全在本机做,发出去的只有文字——一张化验单上有姓名、就诊号、医院、医生签名, 而这次对话只需要那几行数值。发送之前每一张都点得开、改得动。

记住关于你的事。 「我睡够 7 小时才算好」「跑步伤膝盖」这类会一直成立的话被记下来,进往后 每次对话的开场。不记数字——「昨晚睡了 6.2 小时」明天就是错的。设置页里每一条都能看、能改、 能删,还标着这句是你手写的、你让它记的,还是它自己听出来的。

用药与补剂表。 在吃什么、需要时吃什么、试过什么没用、什么不能吃。最值钱的一列是「效果」 而不是剂量——它不是打卡本(Apple Health 已经有完整的用药追踪了),它记的是那次判断和后来的 结果。「不能吃」的那组永远排在它看到的第一行。约好两周后回访,到期那天早上它会来问一句。

记得上次聊过什么。 你说「上次你说的那个方法」,它会去翻以前的会话把当时的结论找回来,而 不是重新猜一遍。只在你自己提起过去时才会这么做。

早晚的 check-in。 时间自己定。通知正文是当天数据里真的有点意思的那件事,不是固定文案; 到期的回访、长期目标的周进展也走这里,而且是已经跑出结论的那句话。

按住说话。 词表跟着你走——你的药名、你惯用的说法、指标名,都提前喂给识别器,所以它认得出 「甘氨酸镁」和「HRV」。识别在本机,松手只填输入框,发不发你说了算。

Siri。 「问 Vana 昨晚睡得怎么样」——不需要 Apple Intelligence,本地算完直接念。

家庭成员。 给家人各建一份完全隔离的数据(会话、记忆、用药表、化验单各自一套)。 Apple Health 归机主那个成员——切到家人时健康工具整个不出现,因为那本来就不是她的数据; 她那边靠化验单、用药表和聊过的内容回答。

隐私对话。 一条不留本机痕迹的会话:不存会话文件、不抽记忆、不落照片。它照样认得你 (读记忆),但什么都不写下来。

其余几样。 上网查它不知道的事(需要另外一把 serper.dev 的 key,不填就不出现);只到城市的 粗定位(季节、气候、时差、当地就医方式);五种说话风格(均衡 / 数据派 / 教练 / 陪伴者 / 直说);它还在写回复的时候你可以接着说下一句,它会在下一个工具轮接住。

隐私

  • 健康数据只读,一个字都不写回 Apple Health。
  • API key 只进 Keychain,不落 UserDefaults、不进任何日志。
  • 照片和文件不出本机,发给模型的只有识别出来的文字。
  • 没有后端。除了你自己配的模型服务(和可选的搜索服务),这个 app 不连任何服务器, 没有埋点、没有分析 SDK。
  • 位置只到城市,坐标一个字都不进 prompt;授权面板里连「精确位置」的开关都不露出来。
  • 会话、记忆、用药表、化验单都存在 app 自己的沙盒里,而且不进设备备份——代价是换手机时 这些数据不跟着走。
  • 但要说清楚:你的问题和查到的健康聚合值会发给你选的那家云端模型。这是这类 app 的地基, 含糊其辞才是真的逗人玩。

上手

暂时没有上架,自己编译装到手机上。需要 macOS + Xcode 26,以及旁边有一份 aikitswift 的 checkout(云端请求走它)。两份要并排 放:

git clone https://github.com/zjywill/aikitswift
git clone https://github.com/zjywill/Vana-iOS
brew install xcodegen
cd Vana-iOS && xcodegen && open Vana.xcodeproj

装好之后第一次打开:设置页里选 provider 和模型(默认 anthropic / claude-sonnet-5,目录里有 几十家可选,只列支持工具调用的),填上那家的 API key,再回到聊天界面授权 Apple Health。

模拟器里没有健康数据——开发者页面有一个生成模拟数据的按钮。

开发

project.yml 是工程的唯一事实来源,增删文件后要重新跑 xcodegen,不要手改 .xcodeproj。 两套测试都要过:

(cd AgentRuntime && swift test)
xcodebuild -project Vana.xcodeproj -scheme Vana -destination 'platform=iOS Simulator,name=iPhone 17' test

AgentRuntime/ 是仓库内一个不认识 HealthKit、也不 import 任何模型 SDK 的通用 agent core; Vana/ 是 app 本身。每一处「为什么是这样」写在 CLAUDE.md 里,用药那块另见 MEDICATIONS.md,上架相关的在 APPSTORE.md

故意不做的

  • 不做提醒和打卡。Apple Health 从 iOS 26 起就有完整的用药追踪了,做第二套只会两边对不上, 而在这里漏一次提醒的代价是真的。
  • 不做本地交互作用数据库。那是给一个 Vana 兜不住的结论背书。按一般知识说注意点、把结论 指向药师,是这里唯一诚实的形态。
  • 不做多设备同步和家庭共享账号。要后端,而且把全家人的健康数据放上一台服务器是另一个 量级的承诺。
  • 不做「读出回答」。这个 app 的回答密集全是数字、日期、区间和表格,念出来是灾难。
  • 不做端上模型(曾经有过,体验没到可用标准,先撤了)。

免责

Vana 不是医疗器械,说的话不构成诊断或治疗建议,尤其不给任何剂量建议。身体上的事,该问医生 还是要问医生。急症请直接就医。

许可

MIT。拿去用、改、发布都行,带上版权声明就好。

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages