Skip to content

Add life-admin-tracker: voice renewals and expiry tracking with proactive nudges - #359

Open
hassan1731996 wants to merge 5 commits into
openhome-dev:devfrom
hassan1731996:feature/life-admin-tracker
Open

Add life-admin-tracker: voice renewals and expiry tracking with proactive nudges#359
hassan1731996 wants to merge 5 commits into
openhome-dev:devfrom
hassan1731996:feature/life-admin-tracker

Conversation

@hassan1731996

Copy link
Copy Markdown
Contributor

What This Does

A persistent voice assistant that tracks everything with an expiry date — passports, MOT, car insurance, subscriptions, warranties, boiler services — and automatically reminds you before they're due. Log once by voice, never forget a renewal again.

Why This Is Different from Alexa

Feature Alexa Life Admin Tracker
Remembers renewals across sessions No Yes — permanently
Proactive expiry alerts No Yes — automatic
Natural date input ("next March") No Yes — LLM extraction
Grouped urgency alerts No Yes
Subscription cost intelligence No Yes
Renewal chaining (auto-asks next date) No Yes
Multiple urgencies in one message No Yes

Key UX Decisions

  • ADD is 3 exchanges max — item name → date → confirmation. If item + date in trigger, single exchange.
  • CHECK is instant — no questions, groups by urgency tier, speaks most critical first.
  • RENEW chains — marks done, immediately asks for next date, resets nudge cycle.
  • COST gives monthly + annual subscription totals across all tracked subscriptions.

Background Daemon

Runs hourly. Nudge schedule per item:

  • 90 days out: first heads-up (fires once)
  • 30 days out: second alert (fires once)
  • ≤ 7 days: daily until renewed
  • Multiple urgencies batched into a single spoken message

SDK Patterns

  • Storage: create_key first with success check, fallback update_key
  • Exit detection: whole-word token set intersection (not substring match)
  • Daemon call(): background_daemon_mode set before CapabilityWorker
  • resume_normal_flow() in finally block and at top of watch_loop()
  • Outer while True loop with user_response() for multi-turn sessions
  • Stale trigger echo filter in outer loop

@hassan1731996
hassan1731996 requested review from a team as code owners August 2, 2026 13:38
@github-actions

github-actions Bot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

🔀 Branch Merge Check

PR direction: feature/life-admin-trackerdev

Passedfeature/life-admin-trackerdev is a valid merge direction

@github-actions

github-actions Bot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

✅ Community PR Path Check — Passed

All changed files are inside the community/ folder. Looks good!

@github-actions github-actions Bot added ci-cd CI/CD and automation community-ability Community-contributed ability official-ability Official ability maintained by OpenHome documentation Documentation improvements templates Starter templates labels Aug 2, 2026
…king with proactive daemon nudges

- Tracks passports, MOT, insurance, subscriptions, warranties by voice
- LLM extracts dates from natural speech (next March, in 3 years, etc.)
- ADD flow: 3 exchanges max; single-exchange if item+date in trigger
- CHECK groups items by urgency (urgent/soon/upcoming) spoken in priority order
- RENEW chains automatically: marks done, asks for next date, resets nudge cycle
- COST intent: subscription spend summary with monthly and annual totals
- Background daemon: hourly check, nudges at 90/30/7-day thresholds (each once), daily inside 7-day window
- Multiple urgencies batched into one spoken message
- Outer while loop with user_response() for multi-turn sessions
@hassan1731996
hassan1731996 force-pushed the feature/life-admin-tracker branch from e9c651e to a16b65a Compare August 2, 2026 13:49
@github-actions

github-actions Bot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

✅ Ability Validation Passed

📋 Validating: community/life-admin-tracker
  ✅ All checks passed!

@github-actions

github-actions Bot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

🔍 Lint Results

__init__.py — Empty as expected

Files linted: community/life-admin-tracker/background.py community/life-admin-tracker/main.py

✅ Flake8 — Passed

✅ All checks passed!

@uzair401 uzair401 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @hassan1731996, hope you're doing great.Great work on this one, the renewal tracking is genuinely useful and the daemon nudge de-duplication is done really well.

Two things:

In main.py the EXIT_WORDS set includes "all", and the follow-up loop checks for exit before classifying intent, so normal phrases like "show me all my renewals" or "list all" end the session instead of listing. I think "all" was added to catch "that's all", but it over-reaches. Better to drop the bare "all" and match the phrase "that's all" / "thats all" instead.

One nice improvement: setup asks the user for their name, but you can read it from the platform profile instead. The memory system keeps user_profile.md and user_summary.md in persistent storage, so you can pull them with read_file("user_profile.md", in_ability_directory=False) (and user_summary.md) and use the name from there, only asking if they're empty. Just read them, never write them, they're platform owned. There's more in docs/Agent-Memory-and-Context-Injection.md.

Same idea as I mentioned on the other PR, pulling the name and other details from the profile instead of asking each time automates the data gathering and saves the user the manual back and forth, which makes for a much smoother UX.

Thanks for this, nice work.

@Rizwan-095
Rizwan-095 deleted the branch openhome-dev:dev August 4, 2026 06:20
@Rizwan-095 Rizwan-095 closed this Aug 4, 2026
@Rizwan-095 Rizwan-095 reopened this Aug 4, 2026
hassan1731996 and others added 3 commits August 9, 2026 16:24
…ead name from platform profile

- Remove bare 'all' and 'thats' from EXIT_WORDS; add EXIT_PHRASES set for
  full-phrase exits ('that's all', 'thats all') to prevent false exits on
  commands like 'show me all my renewals' or 'list all'
- Update _is_exit() to check EXIT_PHRASES via substring before token check
- Read user name from user_profile.md / user_summary.md on setup; only ask
  if platform profile is empty
@hassan1731996
hassan1731996 requested a review from uzair401 August 14, 2026 21:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci-cd CI/CD and automation community-ability Community-contributed ability documentation Documentation improvements official-ability Official ability maintained by OpenHome templates Starter templates

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants