edmundmiller/opencode-canvas · Archived

flight

Flight canvas for comparing flights and selecting seats. Use when users need to browse flight options and book seats.

First seen Apr 2, 2026

Installation

$ npx skills add edmundmiller/opencode-canvas --skill flight

Stronger alternatives

This repository is archived — consider an actively maintained alternative.

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from edmundmiller/opencode-canvas.

npx skills add edmundmiller/opencode-canvas

Browse all from edmundmiller/opencode-canvas

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Declared

Repository health

License LICENSE
Default branch main
Open issues 0
Status Archived

Skill metadata

Parsed from SKILL.md frontmatter.

Declared agents opencode

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 4,090 B
  • docs SUMMARY.md 131 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 1 installs

SKILL.md

Flight Canvas

Cyberpunk-themed flight comparison and seat selection interface.

Example Prompts

Try asking:

  • "Find flights from San Francisco to Denver on January 15th"
  • "Book me a window seat on the cheapest nonstop to NYC"
  • "Compare morning flights from LAX to Seattle next Monday"
  • "I need a business class seat to Chicago with extra legroom"
  • "Show me United flights to Boston under $300"

OpenCode Tools

Low-Level (Spawn Flight Canvas)

Use canvas_spawn with:
  kind: "flight"
  scenario: "booking"
  config: {
    flights: [
      {
        id: "ua123",
        airline: "United Airlines",
        flightNumber: "UA 123",
        origin: { code: "SFO", name: "San Francisco International", city: "San Francisco", timezone: "PST" },
        destination: { code: "DEN", name: "Denver International", city: "Denver", timezone: "MST" },
        departureTime: "2026-01-08T12:55:00-08:00",
        arrivalTime: "2026-01-08T16:37:00-07:00",
        duration: 162,
        price: 34500,
        currency: "USD",
        cabinClass: "economy",
        aircraft: "Boeing 737-800",
        stops: 0,
        seatmap: {
          rows: 30,
          seatsPerRow: ["A", "B", "C", "D", "E", "F"],
          aisleAfter: ["C"],
          unavailable: ["1A", "1B", "1C", "1D", "1E", "1F"],
          premium: ["2A", "2B", "2C", "2D", "2E", "2F"],
          occupied: ["3A", "3C", "4B", "5D"]
        }
      }
    ]
  }

Scenarios

booking (default)

Interactive flight comparison and seat selection.

  • Shows flight options with airline, times, duration, and price
  • Interactive seat map for seat selection
  • Keyboard navigation between flights and seats
  • Returns selected flight and seat via IPC

Configuration

interface FlightConfig {
  flights: Flight[];
  title?: string;           // Header title
  showSeatmap?: boolean;    // Enable seat selection
  selectedFlightId?: string; // Pre-select a flight
}

interface Flight {
  id: string;
  airline: string;          // e.g., "United Airlines"
  flightNumber: string;     // e.g., "UA 123"
  origin: Airport;
  destination: Airport;
  departureTime: string;    // ISO datetime
  arrivalTime: string;      // ISO datetime
  duration: number;         // Minutes
  price: number;            // Cents
  currency: string;         // e.g., "USD"
  cabinClass: "economy" | "premium" | "business" | "first";
  aircraft?: string;        // e.g., "Boeing 737-800"
  stops: number;            // 0 = nonstop
  seatmap?: Seatmap;        // Optional seat selection
}

interface Airport {
  code: string;             // 3-letter code
  name: string;             // Full airport name
  city: string;
  timezone: string;
}

interface Seatmap {
  rows: number;
  seatsPerRow: string[];    // e.g., ["A", "B", "C", "D", "E", "F"]
  aisleAfter: string[];     // e.g., ["C"] = aisle after seat C
  unavailable: string[];    // Blocked seats
  premium: string[];        // Extra legroom/exit row
  occupied: string[];       // Already booked
}

Controls

  • Up/Down: Navigate between flights
  • Tab: Switch focus between flight list and seatmap
  • Left/Right/Up/Down (in seatmap): Move seat cursor
  • Space: Select/deselect seat
  • Enter: Confirm selection
  • Shift+Enter: Confirm immediately (skip countdown)
  • q or Esc: Cancel

Selection Result

interface FlightResult {
  selectedFlight: Flight;
  selectedSeat?: string;    // e.g., "12A"
}

Seat Legend

  • [ ] - Available seat
  • [X] - Occupied seat
  • [/] - Unavailable/blocked
  • [+] - Premium seat (extra legroom)
  • [*] - Currently selected

Tool Response

The canvas returns:

{
  success: true,
  data: {
    selectedFlight: { /* full flight object */ },
    selectedSeat: "12A"
  }
}
// or
{
  success: true,
  cancelled: true  // User pressed Esc/q
}
// or
{
  success: false,
  error: "Canvas requires a tmux session"
}