travel · git:20260925.aa67184 · 2026-09-25 · sha256 0026a035a4399b08

travel git:20260925.aa67184A

Immutable. This exact content is served forever at /api/v1/blob/0026a035a4399b08.

---
name: travel
description: "Plans trips: flights and stays found and compared, a booking handed over, and a day-by-day page. Use it for a fare, a place to stay, or a whole trip."
---

# Travel

Three scripts: the page is this skill's, and the weather and the money are `data-report`'s, which
every bot has. No key, a few lines of output; chain the ones a step needs with `&&` in one bash
call. `S=<this skill's dir>/scripts`, `D=$THURSDAY_SKILLS/data-report/scripts`.

| Script | Does |
|---|---|
| `node $D/weather.mjs "<place>[, <CC>]" <from> [<to>] [--f]` | The forecast a line a day, or past the 16 days it reaches, what the same days were like the last five years. `--f` prints °F |
| `node $D/fx.mjs <amount> <FROM> <TO[,TO…]>` | The amount at today's rate, with the rate's date and where it came from |
| `node $S/itinerary.mjs <trip.json> [--name <file>]` | The trip as one page in your `artifacts/` folder: a photo and a map link per stop, costs added up. Uses the browser only for a `"photo"` page url |

**Flights come from a published search; the rest from a page on the user's screen.** Nothing
here reads another site by script: a search page moves without notice, and a wrong price is worse
than none.

- **With Kiwi connected** — `search-flight` on the `kiwi` server, among your own tools or under
  `## Connected tools` in your prompt — flights are that tool (`tool_search` it for the exact
  inputs): places or airport codes, dates and the party in, and for each flight its price, both
  legs' times and stops, and its booking link.
- **Without it, and for a stay**, the results are the user's to choose from, so the search opens
  on their screen — `--headed`, the `browser` skill — and you read it there. The answer then ends
  by saying that connecting Kiwi in Settings › Connectors finds flights without a window. Google's
  search pages take the search in their address:

```
https://www.google.com/travel/flights?q=Flights to LIS from LHR on 2026-11-12 through 2026-11-15 for 2 adults&curr=USD&hl=en
https://www.google.com/travel/search?q=hotels in Alfama, Lisbon&hl=en
```

Percent-encode the `q` before passing it to a command. What those pages carry, and what they do not:

- **The flights `q` is a sentence:**
  `Flights to <TO> from <FROM> on <depart>[ through <return>][ for N adults[ and M children]]`,
  with airport codes or city names. Anything more — nonstop, the cabin, one way — is set on the
  page. A `q` it did not follow opens the Flights front page, so check the page names your route
  and your dates before you read a price off it.
- **Google Hotels prices are in the machine's currency**, whatever `curr=` or `gl=` says — its
  footer names the address it read that from — and the number on a result row is one night.
  Convert with `fx.mjs` before comparing against a budget, and name the currency you read.
  Google Flights does honour `curr=`.
- **A stay's dates and guests are set on the page.** Google Hotels opens on dates and a party of
  its own, whatever the address says: set the check-in, the check-out and the guests there, and
  read no price until the page shows them.
- **A price is what the page showed at that moment.** Give it with the day you read it, in your
  answer and on the page, and never from memory. It is a quote until it is booked.

Where the rest is written down:

- A whole trip, from the question to the page: `references/plan.md`
- Handing a booking over: `references/book.md`
- The page's JSON, field by field: `references/itinerary.md`