AI First、中文优先、单用户的自托管个人效率系统:待办、稍后读、习惯、线程与复盘住在同一个安静的工作区里——对内有常驻 Agent 替你整理、拆解、起草和记住偏好,对外提供 skill,让 Claude、Codex 等其他 Agent 直接操作同一份数据。不追赶协作,不制造焦虑,一个账户就是全部。演示站点 vital.aimo.plus,源码在 GitHub。
产品理念
Vital 是 AI First,同时追求 Calm Productivity(安静而有行动力):打开后先看到「接下来做什么」,而不是系统本身;Agent 在后台工作,提议要你点头才落地。
- 一个闭环,而不是一堆工具:链接先丢进收集箱,读完一键转为任务;任务完成后自动汇入当天的复盘;复盘里沉淀的想法再变成明天的行动。Agent 负责发现线程、拆小推迟的任务、起草方案、生成日报,并把你的纠正写成长期记忆。
- 内容先于容器:待办、阅读、复盘都是可直接操作的信息行,不是卡片堆;结构靠排版、发丝线和疏密节奏表达。
- 状态有意义,但不制造焦虑:逾期只着色日期,绝不把整条任务染红;没有红点、没有 KPI 大数字。
- 单用户,数据归自己:Postgres 里的每一行都是自己的数据,随时可以迁走;LLM 密钥按需配置,用多少、花多少都在用量页可见。
视觉主题为 Emerald Garden(翡翠园):暖白纸面、翡翠绿、深墨,以及暗色下的发光薄荷。
Agent · AI First 的两条路径
Vital 把 Agent 当成产品的一部分,而不是外挂聊天窗。
对内:worker 里的后台 Agent 观察任务、习惯与反馈,按调度策略自己跑,产出可采纳的提议——线程聚类与一句话现状、把反复推迟的任务拆小、为「可交给 Agent」的任务起草方案、按当天完成与结转生成日报、从纠正里蒸馏长期记忆、把洞察写成一句人话推送。提议不会偷偷改数据:你可以在今天看板、线程页和「系统行为」里采纳、忽略或纠正,手写的记忆优先级最高。
对外:仓库自带可安装的 skill(skills/vital/SKILL.md),Claude、Codex、Cursor 等任何能跑 skill 的 Agent 都可以用 vt_ 个人访问令牌调用同一套 HTTP API——今天的任务、抓稍后读、搜索、写日报周报,都有写好的典型工作流。对内 Agent 和对外 skill 操作的是同一份数据:你在网页里改的,Claude 看得到;Claude 建的任务,今天看板上立刻出现。
功能速览
待办:信息行不是卡片——集合、标签、优先级、估时、截止、提醒与重复规则;列表 / 看板 / 周视图三种看法;一句话建任务时模型自动识别日期、优先级和摘要。
稍后读:粘贴链接自动抽取正文,列表 + 双栏阅读器;归档、收藏、转任务、挂线程、加入报告;Chrome 扩展一键收集当前页。
复盘:日 / 周 / 月 / 年报共用一个 Markdown 编辑器,进行中的任务和稍后读可自动填进报告;往期用日历热度图回顾;配置模型后日报支持一键生成。
搜索与命令面板:⌘K 一步跳转;完整搜索由 Meilisearch 关键词 + Qdrant 向量召回 + 重排序驱动,未配置检索组件时自动降级。
多端:Web(Vite / React)+ Desktop(Tauri 2)+ Mobile(Expo)+ Chrome 扩展(MV3 / WXT)四端共用同步协议与同一份 Fastify 后端;pnpm workspace + Turbo monorepo,跨端共享 zod DTO 与生成的 API client。
技术难点
AI First 的双向接口。 Agent 既要能读也要能写:API 目录由服务端路由自动生成(pnpm gen:vital-skill),skill 文档与实现不漂移;对内 Agent 与外部 skill 走同一同步协议,不会产生「影子写入」。
后台 Agent 的可恢复调度。 状态不在进程内存,全部落在 PostgreSQL:防抖、冷却、租约、重试、每日模型预算(默认每用户每天 100 次),进程重启也能接着跑;每个功能可单独路由到不同模型。
四端一份 API。 Web 走 cookie auth,Desktop / Mobile / 扩展走 bearer token,两种认证在同一份 Fastify 路由上并存;zod DTO 前后端共享,client 由 schema 生成,四端类型零手工对齐。
搜索质量。 中文优先语料下,纯关键词召回对语义查询乏力,纯向量对精确串乏力;Meilisearch + Qdrant 混合召回再重排序,是在自托管资源预算内能跑起来的折中。