weather-skill
npx skills add https://github.com/mateeb11/weather-forecast --skill weather-skill
Agent 安装分布
Skill 文档
Weather Skill
Provides current weather and forecasts for any location using two free APIs:
- Nominatim (OpenStreetMap) for geocoding locations â
scripts/geocode.py - Open-Meteo for weather data â
scripts/fetch_weather.py
Workflow
- Understand the user’s request. Extract the location, time range, and whether they’re planning travel. See examples below.
- Geocode the location by running
scripts/geocode.py "<location>". It returns JSON withdisplay_name,lat,lon, and anambiguousflag. If ambiguous, ask the user to clarify. - Fetch weather by running
scripts/fetch_weather.pywith the lat/lon and appropriate flags. See script usage below. - Respond to the user with a clear summary. See example outputs below.
- If travel intent is detected, also read
references/clothing_guide.mdand include relevant clothing advice.
Scripts
Geocode: scripts/geocode.py
Converts a location string to coordinates.
python scripts/geocode.py "Tokyo"
python scripts/geocode.py "King Abdullah Financial District, Riyadh"
python scripts/geocode.py "Times Square, New York"
Returns JSON:
{
"display_name": "Tokyo, Japan",
"lat": 35.6764,
"lon": 139.6500,
"importance": 0.82,
"ambiguous": false
}
If ambiguous is true, an alternatives list is included â ask the user which they meant.
Weather: scripts/fetch_weather.py
Fetches weather data for given coordinates.
# Current conditions only
python scripts/fetch_weather.py --lat 35.6764 --lon 139.65 --resolution current
# Hourly forecast (good for today, tomorrow, next 12 hours, specific day)
python scripts/fetch_weather.py --lat 35.6764 --lon 139.65 --resolution hourly
# Daily forecast (good for multi-day ranges, next week, etc.)
python scripts/fetch_weather.py --lat 35.6764 --lon 139.65 --resolution daily
# Custom timezone (default is "auto" which uses the location's timezone)
python scripts/fetch_weather.py --lat 35.6764 --lon 139.65 --resolution hourly --timezone Asia/Tokyo
# Include historical data when user asks about past weather
python scripts/fetch_weather.py --lat 35.6764 --lon 139.65 --resolution daily --past-days 7
Returns JSON with meta, current, hourly, and/or daily sections depending on resolution.
Example JSON response (--resolution current):
{
"meta": {
"lat": 35.6764,
"lon": 139.65,
"timezone": "Asia/Tokyo",
"resolution": "current",
"forecast_days": 16,
"past_days": 0
},
"current": {
"time": "2026-02-25T14:00",
"temperature_c": 12.3,
"apparent_temperature_c": 10.8,
"weather_code": 1,
"weather_description": "Mainly clear",
"wind_speed_kmh": 14.2,
"humidity_pct": 48,
"precipitation_mm": 0.0
},
"hourly": null,
"daily": null
}
The script always requests forecast_days=16 (max forecast horizon).
Use --past-days only for past weather requests (0..92).
How to Interpret User Requests
The agent should interpret the user’s natural language to determine three things:
1. Location
Extract the place name from the query. Examples:
- “Weather in Jeddah now” â
"Jeddah" - “Forecast for London this weekend” â
"London" - “I’m going to Tokyo next week” â
"Tokyo" - “How windy will it be in AlUla on Friday?” â
"AlUla"
If no location is mentioned, ask the user.
2. Time Range, Resolution, and Past Weather
| User says | Resolution | past_days |
Notes |
|---|---|---|---|
| “now” / “current” / no time specified | current (also include hourly for next 24h) |
0 |
Forecast request always uses 16 days. |
| “today” / “tonight” / “tomorrow” / “tomorrow morning” | hourly |
0 |
Use hourly data to answer specific time windows. |
| “this weekend” / “on Friday” / “hourly for next 12 hours” | hourly |
0 |
Filter the returned series in the response. |
| “next 3 days” | hourly |
0 |
Summarize from hourly data. |
| “next 7 days” / “next week” / “first week of March” | daily |
0 |
Summarize relevant days from daily data. |
| “March” / “in April” / “05/01 to 06/30” | daily |
0 |
If outside forecast horizon, clearly state limits. |
| “past weather” / “last 3 days” / “yesterday” | daily (or hourly for short windows) |
set from request | If user says “past” without a number, default to 7. |
The user may specify dates in various formats (MM/DD, DD/MM, “May 1st”, “1 March”, etc.) â interpret based on context and filter the returned timeline accordingly. Use the current year unless another year is stated or implied.
Use daily for ranges > 3 days, hourly for shorter windows, current for right-now queries (but still include hourly for context).
Default (no time specified): current conditions + next 24 hours hourly.
Remember: Forecast is fixed to 16 days. For past requests, use past_days (0..92).
3. Travel Intent
Detect if the user is planning to go somewhere. Look for keywords like: pack, wear, travel, visiting, going to, headed to, trip, vacation, holiday, outing, flight, should I bring
If travel intent is detected â also include clothing guidance (see below).
Example Outputs
Example 1: Simple current weather
User: “What’s the weather in Jeddah now?”
Response:
Weather in Jeddah, Saudi Arabia
Right now it’s Clear sky with a temperature of 28°C (feels like 30°C). Wind is light at 12 km/h from the north, and humidity is at 45%. No precipitation expected.
Next few hours:
- 3 PM: 29°C, Clear sky, 0% rain
- 4 PM: 28°C, Partly cloudy, 0% rain
- 5 PM: 26°C, Clear sky, 0% rain (and so on…)
Example 2: Weekend forecast
User: “Forecast for London this weekend”
Response:
Weekend Forecast for London, UK
Saturday, Mar 1: Highs of 11°C, lows of 5°C. Moderate rain expected (70% probability, ~4mm). Wind up to 25 km/h.
Sunday, Mar 2: Highs of 13°C, lows of 6°C. Partly cloudy, 20% rain chance. Lighter wind at 15 km/h.
Overall: A wet Saturday clearing into a drier Sunday. Bring an umbrella for Saturday.
Example 3: Travel planning with clothing advice
User: “I’m going to Tokyo next week â what should I pack?”
Response:
Tokyo, Japan â Next Week Forecast (Mar 3â9)
Day High Low Conditions Rain Wind Mon 12°C 4°C Partly cloudy 10% 15 km/h Tue 10°C 3°C Slight rain 65% 20 km/h … … … … … … What to Wear: Expect cold conditions (lows near 3°C) with rain mid-week. Pack:
- Warm layers: fleece or wool sweater + insulated jacket
- Waterproof jacket and umbrella for Tuesday/Wednesday
- Closed-toe waterproof shoes
- Scarf and light gloves for mornings/evenings
See: clothing_guide.md â sections: cold, rainy
Example 4: Specific condition query
User: “How windy will it be in AlUla on Friday?”
Response:
Wind Forecast for AlUla, Saudi Arabia â Friday, Feb 28
Wind speeds will peak at 35 km/h in the early afternoon, settling to around 15 km/h by evening. Morning winds are lighter at ~10 km/h.
â ï¸ Moderately windy conditions expected midday â secure loose items and consider a windbreaker if you’ll be outdoors.
Warnings
Include warnings when conditions are notable:
- Extreme heat: temp ⥠40°C
- Extreme cold: temp ⤠-10°C
- Strong wind: ⥠50 km/h
- Heavy rain: ⥠20mm precipitation
Clothing Guidance
When travel intent is detected, read references/clothing_guide.md and include relevant advice in the response.
Error Handling
- Location not found: Ask the user to be more specific (add city, country).
- Ambiguous location: Present the alternatives and ask which one.
- API failure / network blocked: Scripts return a JSON error envelope instead of a traceback:
{ "error": { "code": "NETWORK_UNAVAILABLE", "message": "Unable to reach remote weather service.", "details": "URLError: ...", "retryable": true, "hint": "Enable outbound network access or rerun with elevated permissions." } } - Error codes:
INVALID_INPUT: bad user input (invalidpast_days, missing location, no results).NETWORK_UNAVAILABLE: DNS/connectivity/timeouts to upstream weather APIs.UPSTREAM_API_ERROR: upstream HTTP/API response issues.
- Exit codes:
0: success.1: usage or input validation failures.2: network/upstream API failures.
- Operational guidance: If network is blocked in a sandbox, request elevated permissions or run scripts from an environment with outbound internet access.
- Beyond forecast horizon: Inform them of the 16-day limit, return what’s available.
- No time specified: Default to current + next 24 hours.