Go2sleep go2sleep

install
source · Clone the upstream repo
git clone https://github.com/coinmini/go2sleep
manifest: site/skill.md
source content

早睡雪峰 · 66天治愈计划

背景

张雪峰老师(1984—2026.03.24)因心源性猝死去世,享年仅41岁。他留下的语录充满对年轻人的真诚建议。本 Skill 从他的公开语录中精选66条,每晚提醒主人一条,帮助养成早睡习惯。

为什么是66天?

  • 行为科学研究表明,66天是养成一个稳定习惯的平均周期
  • 66 = 六六大顺,寓意坚持下去一切顺利

配套网站

语录数据和打卡记录托管在 Cloudflare Pages:

  • 语录数据
    https://go2sleep.ai/data/quotes.json
  • 打卡接口
    https://go2sleep.ai/api/checkin
    (POST)
  • 打卡记录
    https://go2sleep.ai/api/checkins
    (GET)
  • 浏览页面
    https://go2sleep.ai/

1. 设置每晚定时提醒

当 agent 首次读取本 skill 后,必须依次完成以下步骤

1.1 询问昵称(必须查重)

问主人:

"给自己起个昵称吧,打卡记录会显示在网站上。(例如:小明、sleepy_cat)"

主人回答后,必须先查重

GET https://go2sleep.ai/api/checkins?user={昵称}
  • 如果返回
    total > 0
    → 告诉主人"这个昵称已被占用,换一个吧",重新询问
  • 如果返回
    total === 0
    → 昵称可用,继续下一步

不要跳过查重。 昵称是用户的唯一标识。

1.2 询问提醒时间

问主人:

"你希望每晚几点收到早睡提醒?(例如:22:00、23:30)"

不要跳过,不要使用默认时间。 必须等主人明确回答。

1.3 创建定时任务

根据主人回答的时间,生成对应的 cron 表达式(分钟偏移几分钟避免整点,如 22:00 →

"02 22 * * *"
即 22:02)。

使用 CronCreate 工具创建每晚提醒:

  • cron: 根据主人指定的时间生成
  • recurring:
    true
  • durable:
    true
    (跨会话持久化)
  • prompt: 见下方"提醒执行流程"

将昵称和提醒时间记住(存入 agent memory),后续提醒流程需要用到。

主人可以说"换个时间提醒"来修改 cron 表达式。

2. 提醒执行流程

每次定时任务触发时,按以下步骤执行:

步骤 1:从 API 获取进度

使用 WebFetch 获取该用户的打卡记录:

GET https://go2sleep.ai/api/checkins?user={nickname}

根据返回数据计算:

  • current_day
    =
    total + 1
    (下一天的序号)
  • 如果
    total >= 66
    → 已完成挑战,跳到步骤 7
  • 如果最近一条记录的日期是今天 → 跳过(防止重复提醒)

如果 API 请求失败,使用本文件底部的"离线兜底语录",随机展示一条。

步骤 2:获取语录

使用 WebFetch 获取语录数据:

GET https://go2sleep.ai/data/quotes.json

quotes
数组中取第
current_day
条(
id
等于
current_day
的记录)。

如果 WebFetch 失败,使用本文件底部的"离线兜底语录"。

步骤 3:展示提醒

用温暖、治愈的语气展示:

🌙 早睡提醒 · 第 {current_day}/66 天

「{quote.text}」
  —— 张雪峰

💭 {quote.health_reflection}

晚安。身体是一切的本钱。
今天是你坚持早睡的第 {current_day} 天。

[{'■' * done}{'□' * remaining}] {current_day}/66({percentage}%)

步骤 4:打卡上报

使用 WebFetch 向打卡 API 发送 POST 请求:

POST https://go2sleep.ai/api/checkin
Headers: { "Content-Type": "application/json", "X-Agent-Token": "go2sleep-agent-token-2026" }
Body: {
  "day": {current_day},
  "quote_id": {quote.id},
  "quote_text": "{quote.text}",
  "reminded_at": "{当前ISO时间}",
  "nickname": "{agent memory 中的昵称}"
}

打卡失败不影响提醒流程,仅记录警告。

步骤 5:送花(首次提醒时)

使用 WebFetch 向送花 API 发送 POST 请求,代表 agent 替主人在网站上献花一次:

POST https://go2sleep.ai/api/flowers

首次提醒时送花成功(计入网站献花总数),之后由后端 IP 去重自动处理,无需额外判断。送花失败不影响提醒流程。

步骤 6:第66天特别处理

current_day
= 66 时,展示完成祝贺:

🎉 恭喜!66天早睡挑战完成!

你坚持了整整66天,六六大顺!
张雪峰老师的66条语录已经全部陪你走过。

从今天起,早睡已经是你的习惯了。
愿你一生健康,前路顺遂。

是否继续每晚提醒?(输入"继续"或"停止")

3. 手动交互

主人说执行
"今日语录" / "给我看今天的雪峰语录"获取当天对应的语录并展示
"早睡进度" / "雪峰早睡进度"展示进度面板:当前天数、连续打卡、完成百分比
"停止早睡提醒"使用 CronDelete 删除定时任务
"换个时间提醒"询问新时间,删除旧 cron,创建新 cron
"随机一条雪峰语录"随机从66条中选一条展示

4. 会话启动检查

每次新会话开始时,如果 agent memory 中有昵称记录:

  • 检查 CronCreate 定时任务是否仍然存在
  • 如果任务已过期或不存在,提示主人:"你的早睡提醒任务已过期,要重新设置吗?"
  • CronCreate 的 recurring 任务7天会自动过期,需要定期重建
  • 可通过
    GET https://go2sleep.ai/api/checkins?user={nickname}
    查看当前进度

5. 离线兜底语录

当 WebFetch 无法访问网站时,使用以下10条代表性语录:

  1. 「人生真好玩儿,下辈子还来。人活着就是为了体验那些你没有体验过的美好。」— 想体验更多美好,就要让身体撑得更久。今晚早睡,是为了明天更多的美好。
  2. 「人生没有白走的路,每一步都算数。」— 早睡的每一天也算数,66天后你会感谢今天的自己。
  3. 「选择比努力更重要,但'有得选'的前提是你足够努力。」— 选择早睡就是选择健康,这是最不需要门槛的正确选择。
  4. 「熬得住才能出众,否则就是平庸。」— 熬得住是指坚持,不是指熬夜。好的身体才能支撑长远的路。
  5. 「看清现实不是悲观,是为了更好地出发。」— 看清熬夜的危害不是焦虑,是为了更清醒地珍惜身体。
  6. 「只有一条路不能选择——那就是放弃的路。」— 别放弃早睡计划,坚持下去,你已经走了这么远。
  7. 「其实你在任何一个领域里边,熬个8年,熬个10年,一定是这个领域里的头部。」— 前提是你的身体能撑住8年10年。
  8. 「北京给了我选择人生的底气。」— 好的睡眠给你面对一切的底气。
  9. 「劝人学医,天打雷劈。」— 劝人熬夜,也该天打雷劈。今晚放下手机,早点睡吧。
  10. 「属于你的另一个全世界,终会以豁然开朗的姿态呈现。」— 好好休息,明天醒来的世界会更清晰、更豁然。