feat: proactive weather ability#233
Conversation
Implement weather capability to fetch and summarize weather data based on user location. Signed-off-by: Melody Gui <122416115+melodygui@users.noreply.github.com>
Signed-off-by: Melody Gui <122416115+melodygui@users.noreply.github.com>
Added a README for the Proactive Weather ability, detailing installation and usage instructions. Signed-off-by: Melody Gui <122416115+melodygui@users.noreply.github.com>
🔀 Branch Merge CheckPR direction: ✅ Passed — |
✅ Community PR Path Check — PassedAll changed files are inside the |
✅ Ability Validation Passed |
🔍 Lint Results✅
|
Signed-off-by: Melody Gui <122416115+melodygui@users.noreply.github.com>
Signed-off-by: Melody Gui <122416115+melodygui@users.noreply.github.com>
Added methods to handle city updates and location parsing for weather checks. Signed-off-by: Uzair Ullah <uzairullahmail@gmail.com>
Signed-off-by: Uzair Ullah <uzairullahmail@gmail.com>
Refactor weather fetching and geocoding to use asyncio for better performance. Signed-off-by: Uzair Ullah <uzairullahmail@gmail.com>
Signed-off-by: Uzair Ullah <uzairullahmail@gmail.com>
uzair401
left a comment
There was a problem hiding this comment.
Hi @melodygui , I’ve applied several fixes and improvements to improve stability, SDK compliance, and voice UX.
In main.py, I added a voice format guard to prevent markdown in spoken output, wrapped blocking HTTP calls in asyncio.to_thread(), and introduced a proper city save confirmation flow along with support for updating the saved city via natural phrases. KV handling was improved with a create-or-update pattern and helper functions for cleaner access, along with a one-time city override so user queries don’t overwrite saved preferences. I also removed duplicate and redundant calls and ensured flow cleanup is handled correctly.
In background.py, I fixed a critical bug with saved value access that was causing crashes, removed unnecessary technical details from alerts, added a voice format guard, and fixed JSON handling to prevent corruption.
Approved for community.
As part of our process, abilities go through a 30-day evaluation period where we monitor performance, identify any issues, and make necessary improvements. Once everything meets our quality standards, we proceed with publishing to the marketplace with full credit to the original author.
We truly appreciate your effort and encourage you to continue developing and submitting more abilities.
What does this Ability do?
Provides on-demand weather queries with a concise voice-friendly forecast summary, and runs a background daemon that silently monitors conditions every 10 minutes and proactively interrupts the conversation if severe weather is detected. Also writes local_weather.md to persistent storage so the Personality stays passively aware of local weather conditions throughout the session.
Suggested Trigger Words
Type
External APIs
Testing
Checklist
community/my-ability-name/main.pyfollows SDK pattern (extendsMatchingCapability, hasregister_capability+call)README.mdincluded with description, suggested triggers, and setupresume_normal_flow()called on every exit pathprint()— usingeditor_logging_handlerredis,user_config)asyncio.sleep()orasyncio.create_task()— usingsession_tasksAnything else?
This ability uses the new background.py daemon infrastructure introduced in the March 2026 SDK update. It is an Interactive Combined ability: main.py handles the reactive weather query flow and background.py runs as a persistent daemon for the entire session.