愿景板最大的问题是:贴上去那一刻热血沸腾,到了周二你盯着它,完全不知道该干嘛。SlothSteps 想补的就是这段空白——把"我该做什么"这件事,交给一个从不离开你笔记本的模型。
![]()
用法很直接:拍一张你的愿景板照片,或者粘几条笔记进去。本地运行的 Gemma 模型读出图里的目标,你从中挑一个作为本周焦点,SlothSteps 负责写出一条具体动作,时长控制在 1 到 10 分钟。之后每周一次打卡,一个按钮就够。
打卡只有三个选项:
- Done:完成,这周的事到此为止。
- Too big:太大了,让 agent 把同一条动作改小。
- Skip:跳过,没有压力,未完成的焦点会顺延到下周。
作者举的例子挺能说明问题。目标写成"幸福"这种虚得不能再虚的词,它给出的第一步是"放一首你最喜欢的歌",标称 3 分钟。作者说,这正是他想要的懒散程度。
这套东西服务的是哪类人?目标死在"我到底从哪儿开始"那一刻的人。SlothSteps 拿掉的是规划环节——选哪个、怎么拆、下一步多大。留给你的只有一张照片、每周一次点击、十分钟。
提醒机制也做了减法:你自己选一个打卡日,下载一个循环日历事件。这个事件里不含任何目标或步骤细节,应用本身从不主动发通知。
模型不选工具,工作流选
技术实现上有个设计决定值得单独说。Gemma 通过 Ollama 在本地跑,默认型号是 gemma3:4b,它干两件活:读愿景板图片提取目标,以及撰写每一条动作。上传的照片只在请求期间留在内存里,不写盘。
关键在于:模型从不自己决定调用哪个工具。作者的理由是小尺寸本地模型在工具选择上不可靠,所以由 Mastra 的确定性工作流决定下一步发生什么,模型只被要求返回一个带类型定义的对象,用 Zod schema 约束结构化输出。围绕这个 agent 有三个工具——extract_goals、pick_next_step、shrink_step,每个都会校验模型答案,失败时重试一次,并把具体错在哪告诉模型。三个工作流 scanBoard、planWeek、shrinkStep 负责编排顺序。
"小"这件事被做成了可校验的规则。一条步骤必须以动作动词开头、落在 1 到 10 分钟内、并且指向一个具体的东西。"plan""think about""work on"这类含糊动词会被拒绝并重试。点 Too big 之后,新步骤必须和旧步骤不同,且耗时不能更长。
数据落在本地:目标、步骤和运行元数据存在 ./data 下的 SQLite 文件里,已加入 gitignore。runs 表只存元数据——耗时、token 数、重试次数、错误类型,不存目标文本和图片。界面和 API 用 Next.js 加 TypeScript。
为什么本地权重重要
作者的理由很朴素:愿景板是你最私人的东西之一,把希望写下来钉在墙上。用闭源 API 意味着把这张照片传到别人的服务器。换成通过 Ollama 运行的开放权重模型,照片和目标都不离开笔记本,而且任何人都能读代码验证这一点。
由此还带出几件事:没有费用也没有速率限制,一个每周只花十分钟的应用不该挂着计费表;换模型只是一个环境变量(OLLAMA_MODEL);好步骤的规则写在仓库里,而不是藏在某个接口后面。
安装门槛也不高,装好 Ollama 之后三条命令:
- ollama pull gemma3:4b
- npm install
- npm run dev
作者自己算了一笔账:本周规划时间 0 分钟,而搭这个应用花了大约 10 小时——这笔账他表示不聊了。完成的步骤数是 1,就是那首"放你最喜欢的歌",他说效果比过去大多数规划都好。点 Too big 的次数多到数不清,每次应用都毫无怨言地把步骤改小。周一早上的存在性焦虑明显降低——不用决定人生怎么办,只需要决定接下来 5 分钟干嘛。
这个项目是为 DEV 的 Hacktoberfest 开源 AI 挑战赛第三周"Slow and Steady"提交的。慢而稳,确实适合本地 AI:它不是最快的选项,但它是你自己的。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.