Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Tracks the user's daily habits as streaks in memory and nudges them on Telegram in the evening when a live streak is about to break. The user marks a habit done with "did: [habit]" (e.g. "did: gym"); the agent counts consecutive days per habit, and each evening pings any habit done yesterday but not yet today — so a 12-day streak doesn't quietly die from one forgotten day. Stays silent when every active habit is already done for the day.
.claude/skills/nearai-habit-streak-keeper/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-14 | ✗→✓ | ▲ Improved | 163% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 93% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 88% | 0% |
| case-04 | ✓→✗ | ▼ Worse | 62% | 0% |
| case-08 | ✓→✗ | ▼ Worse | 55% | 0% |
You keep the user's daily habits going by tracking a streak for each one and nudging them in the evening when a live streak is about to break.
habits/streaks.md with memory_read before any change, then write the full file back with memory_write. Never overwrite from scratch and never drop existing habits.time tool. Never guess it. Whether a streak continued, broke, or is at risk comes from comparing the stored last-done date to today.did: — never keep a streak alive across a skipped day.HEARTBEAT_OK and stop — send no message.When the user says did: [habit] (e.g. did: gym):
habits/streaks.md with memory_read.time tool.memory_write.🔥 gym — 13-day streak. Keep it going. (or "streak started" on the first day / after a reset).Each habit is stored in habits/streaks.md like this:
- [habit] | streak: [N] | last done: [date]Create a routine that runs every day at 8:00 PM. The routine goal must contain these full steps as a self-contained prompt, because a routine does not keep any context from this conversation when it runs:
habits/streaks.md with memory_read.time tool.HEARTBEAT_OK and stop.Nudge format:
🔥 Streaks at risk — mark them before the day ends
- [habit]: [N]-day streak — not done yet today
- [habit]: [N]-day streak — not done yet today
Reply "did: [habit]" for each you've done.did: [habit] — mark a habit done for today (creates it on first use)show my streaks — list every habit with its current streak and last-done datedelete [habit] — stop tracking a habit| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 3,341 | 4,579 | +37% | 1 | 1 | 0% | 524 | 1,160 | +121% | 0 | 0 | — |
case-02 | fail→fail | 3,804 | 3,831 | +1% | 1 | 1 | 0% | 705 | 978 | +39% | 0 | 0 | — |
case-22 | fail→fail | 1,796 | 5,476 | +205% | 1 | 1 | 0% | 291 | 1,294 | +345% | 0 | 0 | — |
case-03 | fail→fail | 3,923 | 7,893 | +101% | 1 | 1 | 0% | 786 | 1,822 | +132% | 0 | 0 | — |
case-04 | pass→fail | 3,159 | 14,439 | +357% | 1 | 1 | 0% | 609 | 987 | +62% | 0 | 0 | — |
case-05 | pass→pass | 12,441 | 8,610 | -31% | 1 | 1 | 0% | 2,051 | 2,441 | +19% | 0 | 0 | — |
case-06 | pass→pass | 5,279 | 7,648 | +45% | 1 | 1 | 0% | 855 | 1,884 | +120% | 0 | 0 | — |
case-07 | fail→fail | 3,494 | 5,759 | +65% | 1 | 1 | 0% | 525 | 1,363 | +160% | 0 | 0 | — |
case-08 | pass→fail | 3,871 | 3,765 | -3% | 1 | 1 | 0% | 650 | 1,009 | +55% | 0 | 0 | — |
case-09 | pass→fail | 4,229 | 4,215 | -0% | 1 | 1 | 0% | 825 | 1,213 | +47% | 0 | 0 | — |
case-10 | pass→fail | 2,306 | 3,766 | +63% | 1 | 1 | 0% | 401 | 995 | +148% | 0 | 0 | — |
case-11 | pass→fail | 5,159 | 6,819 | +32% | 1 | 1 | 0% | 867 | 2,276 | +163% | 0 | 0 | — |
case-12 | fail→fail | 6,021 | 4,595 | -24% | 1 | 1 | 0% | 1,175 | 1,335 | +14% | 0 | 0 | — |
case-13 | fail→fail | 2,053 | 7,255 | +253% | 1 | 1 | 0% | 292 | 1,543 | +428% | 0 | 0 | — |
case-14 | fail→pass | 3,716 | 8,345 | +125% | 1 | 1 | 0% | 783 | 2,063 | +163% | 0 | 0 | — |
case-15 | fail→pass | 5,840 | 5,025 | -14% | 1 | 1 | 0% | 1,005 | 1,940 | +93% | 0 | 0 | — |
case-16 | fail→pass | 5,976 | 6,330 | +6% | 1 | 1 | 0% | 1,243 | 2,339 | +88% | 0 | 0 | — |
case-17 | pass→fail | 1,729 | 5,210 | +201% | 1 | 1 | 0% | 316 | 1,248 | +295% | 0 | 0 | — |
case-18 | fail→fail | 7,741 | 7,592 | -2% | 1 | 1 | 0% | 1,279 | 1,631 | +28% | 0 | 0 | — |
case-19 | pass→fail | 2,953 | 4,939 | +67% | 1 | 1 | 0% | 484 | 1,258 | +160% | 0 | 0 | — |
case-20 | pass→fail | 2,702 | 4,761 | +76% | 1 | 1 | 0% | 425 | 1,280 | +201% | 0 | 0 | — |
case-21 | pass→pass | 3,977 | 4,218 | +6% | 1 | 1 | 0% | 918 | 1,944 | +112% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 7 counted toward the lift figure. The other 15 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of -23 percentage points is the difference between those two pass rates over the 7 comparable cases. 9 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.