weather-skill
Fetches current weather conditions and forecasts for any location worldwide. Use this skill whenever the user asks about weather, temperature, rain, wind, forecast, climate conditions, or what to wear/pack for a trip. Triggers on queries like "what's the weather in X", "forecast for Y", "will it rain", "what should I pack for Z", "how hot/cold is it", "is it windy in X", or any travel-planning question where weather matters.
How do I install this agent skill?
npx skills add https://github.com/mateeb11/weather-forecast --skill weather-skillIs this agent skill safe to install?
- Gen Agent Trust Hubpass
The Weather Forecast Skill is a safe and reliable tool for fetching weather information. It uses the Python standard library to interact with established public APIs from Open-Meteo and OpenStreetMap. The skill is well-documented with clear instructions for the AI agent and includes appropriate error handling for network or input issues. No malicious patterns or dangerous capabilities were identified.
- Socketpass
No alerts
- Snykwarn
Risk: MEDIUM · No issues
- Runlayerpass
5 files scanned · No issues
What does this agent skill do?
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.
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/mateeb11/weather-forecast/weather-skill">View weather-skill on skillZs</a>