Adds a new Phase 4 section to the cli-builder skill that teaches how to wrap a CLI tool in an agentskills.io-compliant SKILL.md wrapper, creating the two-layer architecture: CLI as execution engine + skill as trigger surface. Includes a complete worked example (weather-cli) with frontmatter conventions, essential commands, gotchas, and auth wiring documentation. Signed-off-by: Jasper <magnus@groktop.us>
3.8 KiB
Skill Wrapper Example — weather-cli
A complete worked example of an agent-skills-compliant wrapper around a hypothetical weather API CLI. This follows the Phase 4 pattern: the SKILL.md triggers discovery, the CLI binary provides execution.
Directory Structure
weather-cli/
├── weather-cli # CLI binary (built with Phases 1-3)
└── SKILL.md # Skill wrapper (Phase 4)
SKILL.md
---
name: weather-cli
description: >-
Query current weather, forecasts, and historical data from the OpenWeather
API. Use when the user asks about the weather, forecasts, temperature,
precipitation, wind, or climate conditions for a location.
license: MIT
compatibility: Requires weather-cli binary on PATH, OPENWEATHER_API_KEY
set in environment or ~/.openweather.env
metadata:
tags: [weather, climate, api-client, openweather]
---
# Weather CLI
Query weather data from the OpenWeather API — current conditions, 7-day
forecasts, and historical records for any location.
## When to Use
- User asks "what's the weather in [city]" or "is it going to rain today"
- User asks about forecasts, temperature trends, wind, humidity, or pressure
- User asks "how hot/cold/windy was it on [date]"
- User wants to check weather across multiple locations
Do NOT use for: severe weather alerts (use a dedicated alert skill),
long-term climate projections, or weather data not available via
OpenWeather API.
## Setup
Credentials are read from the `OPENWEATHER_API_KEY` environment variable
or `~/.openweather.env`. If the agent gets a 401, guide the user to
set up an API key at https://openweathermap.org/api and set the env var.
Default units are metric. Pass `--units imperial` for Fahrenheit/mph.
## Essential Commands
### current — Current conditions for a location
```bash
weather-cli current "Raleigh, NC" # metric, human-readable
weather-cli current "London, UK" --json # metric, machine-readable
weather-cli current "New York, NY" --units imperial # Fahrenheit/mph
Output fields: temperature, feels_like, humidity, wind_speed,
conditions (text description), pressure, visibility.
forecast — 7-day forecast
weather-cli forecast "Raleigh, NC" # human table
weather-cli forecast "Raleigh, NC" --json --days 3 # 3-day forecast as JSON
JSON shape: [{"date", "high", "low", "conditions", "precip_chance"}, ...].
The precip_chance field is 0-100 (percentage). conditions uses
OpenWeather's label strings (Clear, Clouds, Rain, etc.).
history — Historical data for a date
weather-cli history "Raleigh, NC" --date 2026-05-15
weather-cli history "London, UK" --date 2025-12-25 --json
Historical data is available for dates up to 5 days before the current date (free tier) or full history (paid plans). The CLI will warn if data is unavailable for the requested range.
Location Format
Accepts city names ("Raleigh, NC"), ZIP codes ("27601"), or
latitude,longitude pairs ("35.78,-78.64"). City names with commas
should be quoted. For disambiguation, prefer "City, State/Country"
format over bare city names.
Known Gotchas
- City name ambiguity:
"London"resolves to London, UK. Use"London, OH"or"London, Ontario"for other cities. - Units apply per-command:
--unitsis not sticky. Set it on every command or override withWEATHER_CLI_UNITS=imperialenv var. - Rate limit: 60 requests/minute on free tier. Cache repeated location queries rather than fetching the same city twice.
- The
conditionsfield uses OpenWeather's English labels regardless of locale. Always compare against"Clear","Clouds","Rain","Snow","Drizzle","Thunderstorm", or"Atmosphere"(fog, haze, etc.).