一个帮助人们在副业、学习和个人项目中持续行动的开源实验。
把长期目标,变成中断之后也能重新开始的下一步。
很多人并不缺目标或待办事项;困难往往出现在已经承诺行动,却没有开始或中途被打断之后。
FocusLoop 的首个 MVP 只验证一件事:当用户报告“没开始”或“中断”后,是否愿意借助一个低压力的 AI 建议,选择并推进一个恢复下一步(Recovery next step)。
日常使用时,产品应先呈现“当前这一小步”,而不是一张大表单:用户一眼就能选择现在开始,或如实说明这一步还没开始、做了一半被打断。目标契约仅在首次创建或计划调整时出现。
创建一个个人项目目标
→ 定义一项下一步、完成标准与行动时间窗口
→ 报告未开始或中断
→ 选择:开始 / 缩小 / 改期 / 跳过
→ 记录最小结果,并继续下一步
首发版本是本地优先、单用户、无需账户的 Web 应用。它不提供可靠后台提醒、服务端记忆或自动日历管理;我们先验证恢复闭环是否对真实用户有价值。
我们优先寻找:有全职工作、每周可投入 3–10 小时、已经推进某个个人项目至少 4 周,但近期常在启动或中断后失去节奏的成年人。
开源是共创渠道,不是产品价值的证明。我们更关心你是否会在真实中断后愿意回来,选择一个恢复下一步。
- GitHub Issues:公开的 bug、功能建议与工程讨论。
- 私密反馈:中断原因、压力感和恢复体验等个人内容,请通过一对一访谈或私密表单提交;不建议发布在公开 Issue 中。
- 自动读写日历、邮件、短信或社交平台消息
- 心理咨询、诊断、治疗或情绪陪伴
- 摄像头、屏幕、计时器、在线状态等被动监控,以及评分、排名或羞耻式激励
- 多人协作、公开打卡社区、硬件联动
- 自行创建目标、擅自修改计划或提高提醒强度的自主 Agent
需要 Node.js 24+。在仓库根目录执行:
node --test
python -m http.server 4173- 工具链: 原生 HTML、CSS 与 ES Modules;不引入构建工具或运行时依赖。Node.js 仅用于执行
node --test和语法检查。 - 本地持久化: 目标契约以 JSON 写入浏览器
localStorage的focusloop.goal-contracts.v1键。数据不会被上传、同步或发送到服务端;清除浏览器站点数据会清除这些契约。 - 自动化测试:
node --test覆盖目标契约的创建、必填校验、编辑身份保持,以及本地存储的重开读取与删除。npm run check检查浏览器脚本语法(若 PowerShell 阻止npm,可直接运行node --check src/goal-contract.js、node --check src/goal-contract-store.js和node --check src/app.js)。 - 浏览器验收: 启动本地服务器后,创建一个完整契约;刷新页面确认它仍存在;编辑“下一步”并保存;最后删除它并再次刷新,确认列表为空。该流程覆盖首个 Demo 的创建 → 重开 → 编辑 → 删除主路径。
Agent 是仅监听 127.0.0.1 的 FastAPI 本机服务。它提供多厂商模型清单与恢复建议 API;首批预设厂商为火山方舟 Ark 与 DeepSeek。建议只在用户主动选择“改成更小一步”时生成,且必须经过用户编辑或确认后才会保存。
将 agent/.env.local.example 复制为 agent/.env.local,在其中填写所用厂商的 API Key 和模型名。该文件被 Git 忽略;Key 不会写入目标契约、浏览器 localStorage、日志或 FocusLoop 服务端。不要提交或分享该文件。
首次使用请创建项目虚拟环境并安装依赖:
C:\ProgramData\anaconda3\python.exe -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r agent\requirements.txt
.\.venv\Scripts\python.exe -m pytest agent\tests
.\.venv\Scripts\python.exe -m uvicorn agent.main:app --host 127.0.0.1 --port 8001可在浏览器打开 http://127.0.0.1:8001/api/providers 检查本机配置是否已读取。日常使用无需进入 API 文档;网页会在“改成更小一步”中读取已配置的本机 Agent。
然后在浏览器打开 http://localhost:4173。Demo 默认使用浏览器本地存储;清除浏览器站点数据会删除已保存的目标契约。