145 lines
5.8 KiB
Markdown
145 lines
5.8 KiB
Markdown
---
|
|
name: plan-holiday
|
|
description: |
|
|
Plan holidays and search flights using Ryanair/Wizz Air direct APIs.
|
|
Use when: (1) user asks to plan a trip/holiday, (2) user asks to find or compare
|
|
flights, (3) "where should I go" / "weekend getaway", (4) need real-time flight
|
|
prices from London to European destinations. Covers full trip planning (flights,
|
|
itinerary, visa, deals) and standalone flight search.
|
|
No paid API keys or browser automation needed.
|
|
author: Claude Code
|
|
version: 3.0.0
|
|
date: 2026-03-15
|
|
---
|
|
|
|
# Holiday Planner
|
|
|
|
This skill has two modes. All domain knowledge lives in the agents — this file is purely orchestration.
|
|
|
|
## Mode Detection
|
|
|
|
- **Full trip plan**: "plan a trip", "plan a holiday", "where should I go", "weekend getaway", "plan my trip"
|
|
- **Flight search only**: "find flights", "search flights", "how much to fly to X", "flights from X to Y", "compare prices"
|
|
|
|
---
|
|
|
|
## FLIGHT SEARCH ONLY MODE
|
|
|
|
Spawn a single **holiday-flights** agent (model: sonnet) with the user's query. The agent has all Ryanair/Wizz Air API docs, CLI commands, open jaw strategy, and seat tips. No further orchestration needed — just relay its output.
|
|
|
|
---
|
|
|
|
## FULL TRIP PLANNING MODE
|
|
|
|
### Step 0 — Discovery (Brainstorming)
|
|
|
|
Before doing any research, understand what the user actually wants. Ask questions **one at a time**, preferring multiple choice when possible. Stop asking once you have enough to proceed — don't over-question.
|
|
|
|
**Extract these (skip any the user already provided):**
|
|
|
|
1. **Destination**: Where? Or "anywhere warm / anywhere cheap / surprise me"?
|
|
2. **Dates**: When? Specific dates, or flexible? If flexible:
|
|
- (a) Specific weekend (e.g., "May bank holiday")
|
|
- (b) Flexible within a month (e.g., "sometime in May")
|
|
- (c) Totally open — find the cheapest weekend
|
|
3. **Duration**: Weekend (Fri-Sun), long weekend (Fri-Mon), or longer?
|
|
4. **Budget**: What's the target? Per person or total?
|
|
- (a) Budget (under £200 total)
|
|
- (b) Mid-range (£200-500 total)
|
|
- (c) No real limit, just find the best value
|
|
5. **Trip type**:
|
|
- (a) Fly in and out of the same city
|
|
- (b) Open jaw — fly into one city, out of another
|
|
- (c) Not sure yet
|
|
6. **Vibe** — what kind of trip?
|
|
- (a) Culture & history (museums, architecture, walking tours)
|
|
- (b) Beach & relax
|
|
- (c) Food & nightlife
|
|
- (d) Adventure & outdoors (hiking, nature)
|
|
- (e) Mix of everything
|
|
7. **Accommodation preference**:
|
|
- (a) Hostel / budget
|
|
- (b) Hotel / mid-range
|
|
- (c) Airbnb / apartment
|
|
- (d) Whatever's cheapest
|
|
8. **Any must-dos or deal-breakers?** (e.g., "must see the Alhambra", "no hostels", "need beach access")
|
|
|
|
**Rules:**
|
|
- If the user's initial message already covers most of these, don't re-ask — just confirm your understanding and ask about the 1-2 gaps.
|
|
- Maximum 3 rounds of questions. If you still have gaps after 3, use sensible defaults.
|
|
- Present a brief summary of what you understood before moving to Step 1.
|
|
|
|
### Step 1 — Parse & Calendar Check
|
|
|
|
With discovery complete, resolve the concrete parameters:
|
|
|
|
#### Date Normalization
|
|
Always resolve departure to a **Friday** when using `explore`. If user gives non-Friday dates, use `search` instead. The `explore` CLI command requires a Friday date.
|
|
|
|
#### Bank Holiday Check
|
|
```bash
|
|
cd /Users/viktorbarzin/code/holiday-planner/backend && .venv/bin/python -c "
|
|
from app.bank_holidays import is_long_weekend
|
|
from datetime import date
|
|
print(is_long_weekend(date(YYYY, M, D)))
|
|
"
|
|
```
|
|
If True, the return date will be Monday instead of Sunday.
|
|
|
|
#### Calendar Conflict Check (best-effort)
|
|
```bash
|
|
bw-vault inject "76169a13-9830-48ee-b583-6cc9055ed03c" --as NEXTCLOUD_APP_PASSWORD -- env NEXTCLOUD_USER=admin ~/.venvs/claude/bin/python3 /Users/viktorbarzin/code/infra/.claude/calendar-query.py events --date <start> --days <length> --json
|
|
```
|
|
Uses `bw-vault inject` for secure credential injection. If the script fails, note "calendar check skipped" and proceed. If conflicts found, report them and ask user to confirm or shift dates.
|
|
|
|
### Step 2 — Phase 1: Parallel Research (3 agents)
|
|
|
|
Spawn ALL THREE agents in a **single tool call block** (parallel):
|
|
|
|
1. **holiday-flights** (model: sonnet) — flights via CLI + raw APIs + web deals
|
|
2. **holiday-timing-safety** (model: sonnet) — weather, FCDO advisory, visa for BG/UK + RO nationals
|
|
3. **holiday-deals** (model: sonnet) — accommodation, discount codes, cashback, free activities
|
|
|
|
Each agent prompt MUST include: destination, exact dates, budget, preferences, accommodation preference, vibe, and for open jaw trips the inbound/outbound airports.
|
|
|
|
### Step 2.5 — Phase 1 Output Validation
|
|
|
|
- If **flights returned NO results**: inform user and ask whether to proceed with web-search-only or abort. Do NOT spawn itinerary agent without flight times.
|
|
- If **timing-safety failed**: proceed but note "safety/visa data unavailable — verify independently."
|
|
- If **deals failed**: proceed without deals section.
|
|
|
|
### Step 3 — Phase 2: Sequential Planning (1 agent)
|
|
|
|
Spawn **holiday-itinerary** (model: opus) with ALL Phase 1 outputs combined plus the user's vibe/preferences from discovery. It synthesizes a day-by-day plan factoring in flight times, hotel location, weather, and safety.
|
|
|
|
### Step 4 — Present Final Plan
|
|
|
|
```markdown
|
|
# Trip Plan: [Destination], [Country]
|
|
**Dates**: Fri DD Mon - Sun/Mon DD Mon (N nights)
|
|
**Budget**: ~GBPX total
|
|
|
|
## Visa Requirements
|
|
| Who | Visa? | Details |
|
|
|-----|-------|---------|
|
|
| You (BG/UK) | ... | ... |
|
|
| Girlfriend (RO) | ... | ... |
|
|
|
|
## Flights
|
|
[Best option + booking link]
|
|
|
|
## Accommodation
|
|
[Top pick + discount codes]
|
|
|
|
## Day-by-Day Itinerary
|
|
[Full plan from itinerary agent]
|
|
|
|
## Budget Breakdown
|
|
[Itemized: flights, accommodation, food, activities, transport]
|
|
|
|
## Money-Saving Tips
|
|
[Cashback, codes, free activities]
|
|
|
|
## Safety Notes
|
|
[FCDO advisory, key warnings]
|
|
```
|