Help us improve
Share bugs, ideas, or general feedback.
From open-itin
Generate travel itineraries in the Open Itinerary format. Use when the user asks to plan a trip, create an itinerary, or generate a .oitinerary.kdl file.
npx claudepluginhub thatxliner/claude-plugins --plugin open-itinHow this skill is triggered — by the user, by Claude, or both
Slash command
/open-itin:open-itinThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You generate travel itineraries in the **Open Itinerary** format (file extension: `.oitinerary.kdl`)
Creates p5.js generative art with seeded randomness, noise fields, and interactive parameter exploration. Use for algorithmic art, flow fields, or particle systems.
Share bugs, ideas, or general feedback.
You generate travel itineraries in the Open Itinerary format (file extension: .oitinerary.kdl)
When asked to create an itinerary, follow this process:
Ask the user (or infer from the prompt):
If any of these are missing, ask the user before proceeding.
Spawn subagents to research simultaneously. Each subagent should return structured data:
Stops agent — Research 3-8 stops per day. For each stop return:
Routes agent — For each leg between stops:
Days agent — Assemble the day-by-day timeline:
Run all three agents in parallel. Each must return data conforming to the types below — no freeform responses.
After collecting research, assemble the full itinerary document (see Format Reference below). Then validate it:
cd agent-format && bun run src/cli.ts validate <file>
If validation fails, fix the errors and re-validate.
Write the validated itinerary to examples/<slug>.oitinerary.kdl. Also print a human-readable summary.
It's an open format based off of KDL.
itinerary "<name>" {
summary "<one-sentence description>"
tz "<IANA timezone>" // e.g. "America/Los_Angeles"
cur "<ISO 4217>" // e.g. "USD"
tags "<tag1>, <tag2>" // comma-separated
generated_by "<model-name>"
created_at "<ISO 8601>"
{stop} // 1+ stops
{route} // 0+ routes
{day} // 1+ days
}
stop "<id>" {
name "<display name>"
goal "<purpose — one sentence>"
cat "<category>" // optional
addr "<address>" // optional
coord <lat> <lng> // optional, 2 positional values
place_id "<ns:id>" // optional, e.g. "gplaces:ChIJ..."
tz "<IANA>" // optional
dur min=<hours> max=<hours> // optional, decimal hours
cost amt=<number> cur="<ISO 4217>" // optional
dep "<HH:MM>" // optional
arr "<HH:MM>" // optional
url "<url>" // optional
note "<text>" // optional
{alt} // optional
}
Categories: accommodation | food | drink | attraction | nature | viewpoint | transport | rest | shopping | activity | other
alt {
name "<name>"
goal "<purpose>"
cat "<category>" // optional
addr "<address>" // optional
dur min=<hours> max=<hours> // optional
note "<text>" // optional
}
route "<id>" {
from "<stop-id>"
to "<stop-id>"
mode "<mode>"
dur min=<hours> max=<hours> // optional
dist <km> // optional
dep "<HH:MM>" // optional
arr "<HH:MM>" // optional
cost amt=<number> cur="<ISO 4217>" // optional
url "<url>" // optional
note "<text>" // optional
}
Modes: drive | fly | train | bus | walk | bike | transit | ferry | other
day date="<YYYY-MM-DD>" {
note "<text>" // optional
tz "<IANA>" // optional
{item} // timeline items
{flex} // flex blocks
}
item type="stop" ref="<stop-id>"
item type="route" ref="<route-id>"
item type="note" txt="<text>"
flex pick=<n> {
option type="stop" ref="<id>"
option type="route" ref="<id>"
option type="note" txt="<text>"
}
name, goal, and a practical notemode and note (traffic tips, scenic options, logistics)from and to must match stop idsmin=1.5 max=2.5 (not minutes)"golden-gate-bridge", not "goldenGateBridge"flex block per day for optional choicesalt blocks as alternativesWhen spawning the Stops agent:
Research stops for a {N}-day trip to {destination}. For each day, find 3-6 stops covering accommodation, food, attractions, and viewpoints. Return as a structured list with: id (kebab-case), name, goal, category, address, duration (min/max hours), cost (amt + cur), url, and a practical one-sentence note. For 2-3 major stops per day, include 1-3 alternatives. Categories must be one of: accommodation, food, drink, attraction, nature, viewpoint, transport, rest, shopping, activity, other.
When spawning the Routes agent:
Given these stops: [list stop ids], plan routes between consecutive stops. For each leg: id (kebab-case from-to), from/to (stop ids), mode, duration (min/max hours), distance (km), and a practical one-sentence note about the route.
When spawning the Days agent:
Given these stops and routes, assemble a day-by-day timeline. Each day must have: items (stops and routes in order), 1-2 inline notes for meals/tips, and at least one flex block with 2-3 options. Morning starts around 8-9am, evening ends by 10pm.
The KDL format saves 60-80% tokens vs JSON. The agent-format/src/cli.ts tokens command shows exact savings:
cd agent-format && bun run src/cli.ts tokens <file>