5.8 KiB
| name | description | author | version | date |
|---|---|---|---|---|
| plan-holiday | 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. | Claude Code | 3.0.0 | 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):
- Destination: Where? Or "anywhere warm / anywhere cheap / surprise me"?
- 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
- Duration: Weekend (Fri-Sun), long weekend (Fri-Mon), or longer?
- 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
- 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
- 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
- Accommodation preference:
- (a) Hostel / budget
- (b) Hotel / mid-range
- (c) Airbnb / apartment
- (d) Whatever's cheapest
- 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
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)
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):
- holiday-flights (model: sonnet) — flights via CLI + raw APIs + web deals
- holiday-timing-safety (model: sonnet) — weather, FCDO advisory, visa for BG/UK + RO nationals
- 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
# 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]