Plan a trip day by day and check the budget

Trip plans from a chat rarely add up. Here the plan is made with prices, a budget check with fresh eyes adds them up and sends the plan back while it is over budget, and the final plan comes with a list of what to book in what order.

3 steps in 3 stages · 3 subagents · a kit of 7 files

Free. Built in your browser; nothing is uploaded. No API key, no account.

How it runs

Steps in the same stage start at the same time. Each subagent gets only what its incoming edges carry, and a step in a fresh context never sees the reasoning of the steps before it. A gate decides whether the work passes, and a failed gate re-runs the work it checks.

  1. Stage 1
    • Plan the days · Worker

      sonnet · WebSearch, WebFetch

  2. Stage 2
    • Check the budget · Checker

      opus · WebSearch, WebFetch · fresh context

      Gate: The costs add up to the stated total, the total is within the budget, and every price has a source or is marked as an estimate.

  3. Stage 3
    • Final plan · Writer

      sonnet · WebFetch

Use it when

  • You have a destination, dates and a budget.
  • You want prices checked, not estimated.
  • You want to know what to book first.

Change these first

  • Say what the budget includes, for example without flights.
  • Add must-see places or pace preferences to your request.

Need a workflow built for your team? Fixed-price packages

What you get

An orchestrating SKILL.md, one Claude Code subagent per step with its own tools and model, and the same skill as a Cursor rule. Your agent runs it with its own subagents; nothing on this site calls a model.

plan-a-trip-skill-kit.zip7 files
  • .claude/skills/plan-a-trip/SKILL.mdorchestrator
  • .claude/skills/plan-a-trip/graph.skill.mdgraph source
  • .claude/agents/plan-a-trip-itinerary.mdsubagent
  • .claude/agents/plan-a-trip-budget-check.mdsubagent
  • .claude/agents/plan-a-trip-final-plan.mdsubagent
  • .cursor/rules/plan-a-trip.mdcCursor rule
  • README.mdreadme
.claude/skills/plan-a-trip/SKILL.md
---
name: plan-a-trip
description: "Plans a trip day by day with costs from the web, checks that the costs add up and stay within the budget, then writes the final plan and a booking list."
---

# plan-a-trip

Plans a trip day by day with costs from the web, checks that the costs add up and stay within the budget, then writes the final plan and a booking list.

This skill is a graph: each step has its own prompt and context, and only the payloads named below move between steps.

## Plan

Run the stages in order. Every model step runs in its own subagent; do not do a step's work yourself. Only command steps and approvals are yours to run. Steps in the same stage do not depend on each other: start them together, in one message with several subagent calls.

The input (`trip`) is the user's goal: their request, word for word, handed on under `### trip`. Ask for it if the user has not given one.

### Stage 1 · 1 step

- **PLAN THE DAYS** (`itinerary`) → subagent `plan-a-trip-itinerary`
  - Hand it: the user's goal.
  - Expect: `day_plan` (markdown).

### Stage 2 · 1 step

- **CHECK THE BUDGET** (`budget_check`) → subagent `plan-a-trip-budget-check` · fresh context
  - Hand it: the user's goal; the output of PLAN THE DAYS (`itinerary`). Nothing else: no notes of your own, no other step's reasoning, no earlier conversation.
  - Expect: `checked_plan` (markdown).
  - Gate: The costs add up to the stated total, the total is within the budget, and every price has a source or is marked as an estimate. It ends with `GATE: PASS` or `GATE: FAIL` and one line per step to redo.
  - On `GATE: FAIL`: re-run only the steps it names, handing each its previous output and its line of the verdict; keep every other output (at most 2 times). Then re-run, in plan order, every step between a re-run step and this one (commands too), so this step judges fresh outputs, not stale ones. Then run this step again. If it still fails, stop and show the user the gate result.

### Stage 3 · 1 step

- **FINAL PLAN** (`final_plan`) → subagent `plan-a-trip-final-plan`
  - Hand it: the user's goal; the output of CHECK THE BUDGET (`budget_check`).

## Final answer

Return the output of **FINAL PLAN** to the user as it is.


… 19 more lines in the kit

Run it in a Claude chat

Add Skill Graph to Claude as a connector, then ask. Claude runs each step and the connector checks every answer before the next one starts.

Set up the connector

Ask Claude

Use Skill Graph to run the plan-a-trip workflow on: 4 days in Lisbon in May for two people, budget 1,500 euros without flights.

The graph file

The whole workflow is one Markdown file, graph.skill.md: the steps and edges in the frontmatter, one prompt per step below it. The guide explains every field.

graph.skill.md · 78 lines
---
name: plan-a-trip
description: Plans a trip day by day with costs from the web, checks that the costs add up and stay within the budget, then writes the final plan and a booking list.
spec: skill-graph/1
topology:
  nodes:
    - id: trip
      type: input
      label: TRIP DETAILS
    - id: itinerary
      type: worker
      label: PLAN THE DAYS
      model: sonnet
      tools: [WebSearch, WebFetch]
    - id: budget_check
      type: verifier
      label: CHECK THE BUDGET
      isolated_context: true
      model: opus
      tools: [WebSearch, WebFetch]
      gate: The costs add up to the stated total, the total is within the budget, and every price has a source or is marked as an estimate.
      on_fail: retry
      max_retries: 2
    - id: final_plan
      type: synthesizer
      label: FINAL PLAN
      model: sonnet
      tools: [WebFetch]
  edges:
    - from: trip
      to: [itinerary, budget_check, final_plan]
    - from: itinerary
      to: budget_check
      contract: day_plan
    - from: budget_check
      to: final_plan
      contract: checked_plan
contracts:
  day_plan:
    format: markdown
    description: A day-by-day plan; every item has a cost with its source or an estimate mark, and the plan ends with the total.
  checked_plan:
    format: markdown
    description: The plan with corrected costs and total, and what was changed to fit the budget.
---

# Node Prompts & Edge Contracts

## @node: itinerary
Plan this trip:

{{trip}}

Make a day-by-day plan: where to stay, how to get around, what to see and do, and where to eat. Search the web for current prices. Keep the total within the budget if one is given; if none is given, plan a mid-range trip.

Return the plan in Markdown, one section per day. Give every item a cost with its source link, or mark it "estimate". End with a cost table by category and the total.

## @node: budget_check
You are checking a trip plan someone else made, as a careful travel agent would.

The trip details: {{trip}}

The plan:
{{itinerary}}

Add up the costs yourself and compare with the stated total. Check the budget. Open the sources of the three biggest costs and confirm the prices. Check that the days are realistic: travel times, opening days.

Return the plan with corrected costs and total, then a short list of what you changed.

## @node: final_plan
Write the final trip plan from the checked version:

{{budget_check}}

The traveller's details: {{trip}}

Return Markdown: a one-paragraph summary with the total cost, the day-by-day plan, the budget table, and a booking checklist in the order to book things.