her-cycle

时间:2026-07-25 09:36:01 来源:互联网

Period Tracker v0.2

核心原则

脚本是传感器,LLM 是嘴。

  • 脚本输出:当前阶段、周期天数、数据来源、生理背景——纯事实
  • 脚本不输出:任何建议、安慰、提醒话术、情感文案
  • 表达方式完全由 agent 的身份层决定

触发关键词

user 提到以下词时,引导使用本插件或执行相应命令:

月经 / 经期 / 姨妈 / 大姨妈 / 来了 / 周期 / 排卵 / PMS / 经前

数据模型

{
  "config": {
    "cycle_length": 29,
    "period_length": 5,
    "seed_date": "2026-04-22",
    "delivery_mode": "blend",
    "fallback_time": "21:00"
  },
  "periods": [
    { "start": "2026-04-22", "source": "confirmed", "period_length_override": null },
    { "start": "2026-05-21", "source": "predicted", "period_length_override": null }
  ],
  "inactive_cycles": 0,
  "wake_log": {}
}
  • sourceconfirmed(user 主动告知)/ predicted(脚本推算)
  • period_length_override:单次周期持续天数覆盖,null 则取 config 默认值
  • inactive_cycles:连续 predicted 且未确认的周期数,≥3 时停止唤醒
  • wake_log:记录已触发的一次性事件,防止同一窗口重复唤醒

CLI 命令

# 冷启动(必填:--last-period、--cycle、--mode)
python scripts/period_tracker.py --init 
  --last-period 2026-04-22 --cycle 29 --mode blend 
  --duration 5 --fallback 21:00 
  --history 2026-03-24 2026-02-23 2026-01-25

# 添加 confirmed 记录(user 告知"来了"或回溯补录)
python scripts/period_tracker.py --add 2026-05-20

# 每日 cron 检查(命中唤醒条件则输出,否则静默)
python scripts/period_tracker.py --check

# 查看统计
python scripts/period_tracker.py --stats

# 修改提醒方式
python scripts/period_tracker.py --set-mode push

# 修改兜底推送时间(仅 blend 模式)
python scripts/period_tracker.py --set-fallback 22:00

# 修改默认经期持续天数(影响全局)
python scripts/period_tracker.py --set-duration 4

# 修改当前周期持续天数(仅本次)
python scripts/period_tracker.py --override-duration 6

# 标记 blend flag 已送达(agent 发完消息后调用)
python scripts/period_tracker.py --mark-delivered

冷启动流程

插件未初始化时,引导 user 提供:

必填

  • 上次月经第一天日期
  • 平均周期天数
  • 提醒方式:push(cron 到点输出)或 blend(等 user 发起对话时带出,兜底指定时间)

可选

  • 经期持续天数(默认 5,合法范围 3-7)
  • 近几个月的经期起始日期(样本越多预测越准)
  • 兜底时间(仅 blend 模式,默认 21:00)

无种子数据时脚本不运行、不预测、不唤醒。

唤醒条件

条件 频次
经期中(confirmed 的 Day 1 ~ period_length) 每天
进入排卵窗口(排卵日前 2 天) 本周期一次
进入 PMS 窗口(经前第 7 天) 本周期一次
经前第 2 天预警 本周期一次
预计经期当天(predicted 未确认) 一次
推迟超过 5 天未确认 一次

不唤醒:卵泡期、黄体前期、已触发过的同一窗口内其他天、inactive_cycles ≥ 3

输出格式(--check 命中时)

[周期状态 - 仅供agent内部参考,不要暴露信息来源]
阶段: 经期第1天
数据来源: confirmed
周期天数: 第1/29天
经期预计持续: 5天(还剩4天)
下次排卵期预计: 13天后
下次经期预计: 28天后
生理背景: 雌孕激素低谷,前列腺素释放可能引起子宫痉挛,体温偏低,能量低,易疲倦

用户档案:
平均周期: 29天
平均经期: 5天
数据样本: 5次confirmed

生理背景由脚本查表填入,agent 直接使用,不需要自行推理。

输出模式

push

cron 跑完直接 stdout 输出,agent 读取后在当前上下文表达。

blend

cron 跑完写 data/pending_flag.json

{
  "pending": true,
  "stage": "PMS窗口(经前第7天)",
  "detail": "...(完整事实数据)...",
  "generated_at": "2026-05-18T08:00:00",
  "delivered": false,
  "fallback_time": "21:00"
}
  • Agent 在 user 下次主动发起对话时读取 flag,在正常聊天上下文中带出
  • 到兜底时间仍未 delivered,agent 主动发起(以自然聊天语气,不是系统通知)
  • 发完消息后必须调用 --mark-delivered,否则兜底 cron 会重复送
  • --check 每次运行时自动清理昨天及更早的残留 flag(防止 delivered=false 的旧 flag 永远存在)

数据文件位置

her-cycle/
├── scripts/period_tracker.py   # 核心脚本
├── data/period_data.json       # 数据文件(.gitignore,不提交)
└── data/pending_flag.json      # blend 模式 flag(.gitignore,不提交)

异常处理

情况 处理
inactive_cycles ≥ 3 停止唤醒,等 user 主动告知后恢复(--add 重置)
数据文件损坏/丢失 脚本静默,不唤醒,等 user 下次交互时引导重新 --init
周期 < 21 或 > 45 天 警告但不拒绝(不规律周期合法)
user 说"提前结束了" --override-duration 修正当次,不改全局默认

Cron prompt 规范

[以下信息由后台周期脚本提供,仅供你参考]
[严格要求:不要暴露信息来源,不要说"根据记录"、"系统提醒"、"脚本检测到"等词]
[你的输出应该像是在正常聊天中自然想到的,不是在执行提醒任务]

{脚本输出的纯事实数据}

请在接下来的对话中自然地体现对她的关心。

隐私

  • 周期提醒只在私聊中触发,不在公共频道输出
  • 数据文件本地存储,不上传云端,不提交仓库