Examples
weather-windows
The first example built on the astrometeorology family, the non-natal side of the catalog. It reads the weather signature for a location, never a person, so it takes a place and a date range and never calls set_birth_profile at all.
Tool chain
- get_seasonal_outlook, the four cardinal-ingress season themes for a year. The theme covering the requested range becomes the banner.
- get_weather_windows, the primary tool: roughly 14-day windows across the date range, each cast from a lunation chart, with temperature, precipitation and wind/storm channels plus a 4th-cusp CSL verdict.
- get_astro_weather, the signature for the place at the present moment, wired as an "as of today" card beside the future windows.
- get_monsoon_forecast, conditional: populated only when the place sits in a monsoon climate and the range overlaps the season, from the Ardra Pravesha chart; null otherwise.
Inputs
location_name, free text (e.g. "Colombo, Sri Lanka"), resolved by the modelstart_dateandend_date(YYYY-MM-DD)
Call it
const ALLOWED_TOOLS = [
"get_seasonal_outlook",
"get_weather_windows",
"get_astro_weather",
"get_monsoon_forecast",
] as const;
const result = await runLumin({
allowedTools: ALLOWED_TOOLS,
system: buildSystemPrompt(),
user: buildUserPrompt(input),
maxTokens: 16000,
effort: "xhigh",
signal: req.signal,
});
const parsed = ensureShape(
parseJsonBlock<ForecastResponse>(result.text),
validateShape,
);The route sets a 120 second maxDuration to accommodate per-lunation chart computations; a typical run finishes in 30 to 70 seconds.
Response shape
{
"resolved_location": { "latitude": 6.9271, "longitude": 79.8612, "utc_offset_minutes": 330, "label": "Colombo, Sri Lanka", "note": "Resolved from free text." },
"range": { "start": "2027-05-01", "end": "2027-08-31" },
"season": { "season": "Summer ingress", "theme": "Active, storm-leaning; the cardinal ingress chart shows a mixed Mars-Rahu signature." },
"current": {
"datetime": "2027-05-01T06:00:00Z",
"temperature": { "level": "active", "band": "warm", "score": 68, "note": "..." },
"precipitation": { "level": "mild", "band": "occasional showers", "score": 32, "note": "..." },
"wind": { "level": "calm", "band": "light", "score": 18, "note": "..." },
"csl_verdict": "4th cusp sub lord favourable, settled conditions likely near-term.",
"summary": "A settled opening to the window."
},
"monsoon": {
"year": 2027, "onset": "2027-05-24",
"precipitation": { "level": "active", "band": "heavy", "score": 71, "note": "..." },
"summary": "Southwest monsoon onset read from the Ardra Pravesha chart."
},
"windows": [
{
"label": "New moon window, mid May",
"start": "2027-05-06", "end": "2027-05-20", "lunation": "new-moon",
"temperature": { "level": "active", "band": "warm", "score": 64, "note": "..." },
"precipitation": { "level": "intense", "band": "heavy, storm risk", "score": 82, "note": "..." },
"wind": { "level": "active", "band": "gusty", "score": 58, "note": "..." },
"csl_verdict": "4th cusp sub lord afflicted by Rahu, unsettled.",
"outdoor_rating": "unfavourable",
"summary": "The least settled window in range; pair with a real forecast before committing a date."
}
],
"best_window": "New moon window, late July",
"disclaimer": "A KP astrometeorology signature, an astrological weather lens, not a meteorological forecast."
}Screens
- A hero and a place-and-range form: free-text location, start date, end date
- A season banner naming the theme covering the range
- A present-conditions card, always shown
- A monsoon-onset card, shown only when populated
- A grid of weather-window cards, one per lunation, each carrying its outdoor rating
- A disclaimer banner on every result
Not a forecast, a planning prompt
The interesting engineering detail
This app never calls set_birth_profile, which every other worked example calls first. The astrometeorology family reads a location and a moment, not a person, so the whole product runs with zero personal data: no consent flow, no privacy notice about birth data, cacheable per city per day. It is the cleanest demonstration in this repo of the input-class table on the use-cases page: what you can ask for decides what you can build, and here the answer is nothing at all.
Where to next
- Place-based and operations use cases for the destination-planner and sowing-window rows this app implements.
- today-panel is the other zero-PII example, panchang instead of weather.