Agent skill

Scandinavia Transit

by borski in borski/travel-hacking-toolkit

Search trains, buses, and ferries in Norway (Entur), Sweden (ResRobot), and Denmark (Rejseplanen).

MITAuto-check: notesBackend & APIs

Install Scandinavia Transit

skills CLI
$ npx skills add borski/travel-hacking-toolkit --skill scandinavia-transit -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install borski/travel-hacking-toolkit scandinavia-transit --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/borski/travel-hacking-toolkit.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/travel-hacking-toolkit/skills/scandinavia-transit .claude/skills/scandinavia-transit && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
scandinavia-transit
GitHub stars
688
Token cost
~4.5k tokens
SKILL.md length
1,373 words
Files
1
Skills in repo
46
Repo updated
First seen
Licence
MIT

At a glance

Search trains, buses, and ferries in Norway (Entur), Sweden (ResRobot), and Denmark (Rejseplanen).

  • Works in 8 steps: "How do I get from A to B?" → "What trains leave from X?" → "What's near me?" → …
  • Backend & APIs work in your project
  • SKILL.md covers Norway: Entur (Journey Planner…, Sweden: ResRobot v2.1, Denmark: Rejseplanen API 2.0 and Cross-Border Routes, plus 2 more sections
  • Calls curl and jq; reaches rejseplanen.dk and api.entur.io; needs REJSEPLANEN_API_KEY and RESROBOT_API_KEY

What it does

Scandinavia Transit is an agent skill from borski/travel-hacking-toolkit. Search trains, buses, and ferries in Norway (Entur), Sweden (ResRobot), and Denmark (Rejseplanen). Intra-Scandinavia ground transport with schedules and Danish fare pricing.

Its SKILL.md is about 4.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Backend & APIs. It works with GraphQL. The repository describes itself as: AI-powered travel hacking and search with cash, points, miles, and award flights. Drop-in skills and MCP servers for Claude, Codex, and OpenCode. The licence is MIT.

When your agent uses it

  • Backend & APIs work in your project

Example prompts

  • “/scandinavia-transit”

Requirements

  • A credential in RESROBOT_API_KEY
  • A credential in REJSEPLANEN_API_KEY

Workflow steps

8 steps, taken from the step headings in SKILL.md.

  1. "How do I get from A to B?"
  2. "What trains leave from X?"
  3. "What's near me?"
  4. "What ferry to Ærø?"
  5. "I know the train number."
  6. "What can I reach in 2 hours?"
  7. "Any disruptions?"
  8. Multi-country trips

What it can do on your machine

Read from SKILL.md and the folder at commit db82131. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • curl
    • jq

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • rejseplanen.dk
    • api.entur.io
    • api.resrobot.se

    Also links to:

    • labs.rejseplanen.dk
    • trafiklab.se
    • developer.entur.org

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • REJSEPLANEN_API_KEY
    • RESROBOT_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Scandinavia Transit loads about 4.5k tokens when it runs. Until then it costs about 48 tokens; SKILL.md has 1,373 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~48
When it runs · the whole SKILL.md, loaded when a task matches
~4.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:75
    `RESROBOT_API_KEY` in `.env`. Use `accessId` query parameter. Free key at [trafiklab.se](https://www.trafiklab.se). 30,0
  • NoteMentions a .env fileSKILL.md:124
    `REJSEPLANEN_API_KEY` in `.env`. Pass as `accessId` query parameter. Apply at [labs.rejseplanen.dk](https://labs.rejsepl

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from borski/travel-hacking-toolkit at commit db82131, republished under its MIT licence (© borski). 1,373 words, ~4,508 tokens.

Download SKILL.mdSave it as .claude/skills/scandinavia-transit/SKILL.md (or your agent's skills folder).
name
scandinavia-transit
description
Search trains, buses, and ferries in Norway (Entur), Sweden (ResRobot), and Denmark (Rejseplanen). Intra-Scandinavia ground transport with schedules and Danish fare pricing.
category
destinations
summary
Trains, buses, ferries in Norway, Sweden, and Denmark. Includes Danish fare/zone pricing.
api_key
Entur + Trafiklab + Rejseplanen
license
MIT

Scandinavia Transit Skill

Search ground transport (trains, buses, ferries) within Norway, Sweden, and Denmark using their national transit APIs.

Sources:

Norway: Entur (Journey Planner v3)

Open GraphQL API. No key needed (but a client name header is required). Covers ALL Norwegian transit: Vy trains, buses, ferries, trams, metro. 60+ operators.

Trip Search (Oslo to Bergen example)
bash
curl -s -X POST "https://api.entur.io/journey-planner/v3/graphql" \
  -H "Content-Type: application/json" \
  -H "ET-Client-Name: $ENTUR_CLIENT_NAME" \
  -d '{"query": "{ trip(from: {place: \"NSR:StopPlace:59872\"}, to: {place: \"NSR:StopPlace:548\"}, numTripPatterns: 5) { tripPatterns { startTime duration legs { mode expectedStartTime expectedEndTime fromPlace { name } toPlace { name } line { publicCode name authority { name } } } } } }"}' | jq '.data.trip.tripPatterns[] | {start: .startTime, duration_min: (.duration / 60), legs: [.legs[] | {mode: .mode, from: .fromPlace.name, to: .toPlace.name, line: .line.publicCode, operator: .line.authority.name, depart: .expectedStartTime, arrive: .expectedEndTime}]}'
Find Stop IDs

Stop IDs use the format NSR:StopPlace:XXXXX. Find them via the Geocoder:

bash
curl -s "https://api.entur.io/geocoder/v1/autocomplete?text=Oslo%20S&size=3" \
  -H "ET-Client-Name: $ENTUR_CLIENT_NAME" | jq '[.features[] | {name: .properties.name, id: .properties.id, type: .properties.layer}]'
Key Stop IDs
CityStop IDName
Oslo SNSR:StopPlace:59872Oslo S
BergenNSR:StopPlace:548Bergen stasjon
StavangerNSR:StopPlace:4130Stavanger
TrondheimNSR:StopPlace:41742Trondheim S
BodoNSR:StopPlace:49484Bodo stasjon

Use the Geocoder to find any stop. Works for airports, ferry terminals, bus stops too.

Departure Board
bash
curl -s -X POST "https://api.entur.io/journey-planner/v3/graphql" \
  -H "Content-Type: application/json" \
  -H "ET-Client-Name: $ENTUR_CLIENT_NAME" \
  -d '{"query": "{ stopPlace(id: \"NSR:StopPlace:59872\") { name estimatedCalls(numberOfDepartures: 10) { expectedDepartureTime destinationDisplay { frontText } serviceJourney { journeyPattern { line { publicCode name transportMode } } } } } }"}' | jq '.data.stopPlace | {name: .name, departures: [.estimatedCalls[] | {time: .expectedDepartureTime, destination: .destinationDisplay.frontText, line: .serviceJourney.journeyPattern.line.publicCode, mode: .serviceJourney.journeyPattern.line.transportMode}]}'
Notes
  • GraphQL API. POST only. One endpoint: https://api.entur.io/journey-planner/v3/graphql
  • Set ET-Client-Name header on all requests.
  • No rate limit key, but respectful usage expected.
  • Schema explorer: https://api.entur.io/graphql-explorer/journey-planner-v3
  • Covers some cross-border routes into Sweden via Vy and SJ Nord.

Sweden: ResRobot v2.1

REST API via Trafiklab. Covers ALL Swedish transit: SJ trains, regional buses, ferries, metro, commuter rail.

Authentication

RESROBOT_API_KEY in .env. Use accessId query parameter. Free key at trafiklab.se. 30,000 calls/month.

Trip Search (Stockholm to Gothenburg)
bash
curl -s "https://api.resrobot.se/v2.1/trip?originId=740000001&destId=740000002&format=json&accessId=$RESROBOT_API_KEY" | jq '[.Trip[] | {start: .LegList.Leg[0].Origin.time, date: .LegList.Leg[0].Origin.date, duration: .duration, legs: [.LegList.Leg[] | {mode: .type, name: .name, from: .Origin.name, to: .Destination.name, depart: .Origin.time, arrive: .Destination.time}]}] | .[0:5]'
Find Stop IDs
bash
curl -s "https://api.resrobot.se/v2.1/location.name?input=Stockholm&format=json&accessId=$RESROBOT_API_KEY" | jq '[.stopLocationOrCoordLocation[] | .StopLocation | {name: .name, id: .extId}] | .[0:5]'
Key Stop IDs
CityStop IDName
Stockholm C740000001Stockholm Centralstation
Gothenburg C740000002Goteborg Centralstation
Malmo C740000003Malmo Centralstation
Uppsala740000025Uppsala Centralstation
Linkoping740000009Linkoping Centralstation
Trip Parameters
ParamRequiredDescription
originIdYesDeparture stop ID
destIdYesArrival stop ID
dateNoYYYY-MM-DD (default today)
timeNoHH:MM (default now)
formatNojson or xml
numTripsNoNumber of results (default 5)
productsNoBitmask for transport types
Notes
  • REST API. Base: https://api.resrobot.se/v2.1/
  • Includes cross-border Oresund trains to Copenhagen.
  • No pricing data. Schedule/route only.

Denmark: Rejseplanen API 2.0

REST API (HAFAS v2.50.4.1). Covers ALL Danish transit: DSB InterCity/InterCityLyn, S-Tog, Metro, regional trains, buses, express buses, night buses, ferries, Flextur. Unique: includes fare/zone pricing data.

Docs: https://labs.rejseplanen.dk (login required). XSD schemas: https://www.rejseplanen.dk/api/xsd

Authentication

REJSEPLANEN_API_KEY in .env. Pass as accessId query parameter. Apply at labs.rejseplanen.dk. 50,000 calls/month free (non-commercial).

Common Parameters
ParamDescription
accessIdRequired. API key.
formatjson or xml. Always use format=json.
langDefault da. Use lang=en for English.
Product Bitmask
ValueProductDescription
1ICInterCity
2ICLInterCityLyn (express)
4ReRegional train
8OtherECE, Eurostar, RailJet, Togbus, DSB Udland
16S-TogCopenhagen commuter rail
32BusLocal bus
64ExpressBusExpress bus (250S, X-bus)
128NightBusNatbus
256FlexturDemand-responsive transport
1024MetroCopenhagen Metro

Trains only = products=31. All transit = omit param.

Key Stop IDs
StopextIdName
København H8600626København H
CPH Lufthavn8600858CPH Lufthavn
Odense St.8600512Odense St.
Aarhus H8600053Aarhus H
Aalborg St.8600020Aalborg St.
Svendborg St.8600551Svendborg St.
Svendborg Færgehavn100200261Svendborg Færgehavn
Ærøskøbing Havn (færge)100200222Ærøskøbing Havn (færge)

Location Endpoints
location.name (Search by Name)
bash
curl -s "https://www.rejseplanen.dk/api/location.name?accessId=$REJSEPLANEN_API_KEY&input=København&format=json&type=S" | jq '[.stopLocationOrCoordLocation[] | .StopLocation | {name: .name, id: .extId, lat: .lat, lon: .lon}] | .[0:10]'
ParamRequiredDescription
inputYesSearch query
typeNoS (stops), A (addresses), P (POI), or combine
maxNoNoMax results (default 10, max 1000)
productsNoProduct bitmask filter
r, refCoordLat, refCoordLongNoRadius + reference coordinate for distance ranking
location.nearbystops (Stops Near Coordinate)
bash
curl -s "https://www.rejseplanen.dk/api/location.nearbystops?accessId=$REJSEPLANEN_API_KEY&originCoordLat=55.672793&originCoordLong=12.564590&r=500&format=json" | jq '[.stopLocationOrCoordLocation[] | .StopLocation | {name: .name, id: .extId, dist: .dist}] | .[0:10]'

Requires originCoordLat/originCoordLong. Optional: r (radius, default 1000m), maxNo, type, products.

location.details

Single location details by full HAFAS ID (URL-encoded).

location.data

Locations in a numeric ID range (llId to urId).

Filtered location search. Same params as location.name plus additional filters.

location.boundingbox

All stops in a geographic box (llLat/llLon to urLat/urLon).

addresslookup

Addresses near a coordinate. Reverse geocoding. Requires originCoordLat/originCoordLong.


Trip Planning Endpoints
trip (Route Planning)
bash
curl -s "https://www.rejseplanen.dk/api/trip?accessId=$REJSEPLANEN_API_KEY&originId=8600626&destId=8600551&date=2026-08-28&time=08:00&format=json&lang=en" | jq '[.TripList.Trip[] | {duration: .duration, legs: [.LegList.Leg[] | {name: .name, type: .type, from: .Origin.name, to: .Destination.name, depTime: .Origin.time, arrTime: .Destination.time, track: .Origin.track}]}] | .[0:3]'
ParamRequiredDescription
originIdYes*Origin stop extId
destIdYes*Destination stop extId
originCoordLat/LongYes*Origin by coordinate (alt to originId)
destCoordLat/LongYes*Destination by coordinate (alt to destId)
dateNoYYYY-MM-DD
timeNoHH:MM
searchForArrivalNo1 = search by arrival time
numFNoForward results (1-6)
numBNoBackward results (0-3)
maxChangeNoMax transfers (0-11)
productsNoProduct bitmask
operatorsNoComma-separated operator codes
linesNoLine filter
viaNoVia stop ID
avoidNoAvoid stop ID
passlistNo1 = include intermediate stops
tariffNo1 = include fare/zone pricing
polyNo1 = include polyline
contextNoScroll token for paging
originWalk/Bike/CarNoAccess mode distance
destWalk/Bike/CarNoEgress mode distance
rtModeNoFULL, INFOS, OFF, REALTIME, SERVER_DEFAULT

All departures in a time window. Same params as trip.

recon (Trip Reconstruction)

Reconstruct trip from ctxRecon token. Params: ctx (required), poly, passlist, tariff.

reachability (All Reachable Stops)

All stops reachable within time/transfer budget. Params: originId or coordinates, duration (1-1439 min), maxChange (0-11), forward, products.


Departure and Arrival Boards

Default duration: 60 minutes.

departureBoard / arrivalBoard
bash
curl -s "https://www.rejseplanen.dk/api/departureBoard?accessId=$REJSEPLANEN_API_KEY&id=8600626&date=2026-08-28&time=08:00&format=json&lang=en" | jq '[.DepartureBoard.Departure[] | {name: .name, time: .time, direction: .direction, track: .track, rtTime: .rtTime}] | .[0:10]'

Params: id (required), date, time, duration (0-1439), maxJourneys, products, operators, passlist.

multiDepartureBoard / multiArrivalBoard

Multiple stations in one call. Pass multiple id params.

nearbyDepartureBoard / nearbyArrivalBoard

Stations near a coordinate. Params: originCoordLat/Long, r (default 1000m), maxStops (default 30).


Line and Journey Endpoints
Show full SKILL.md (549 more words)Show less
lineinfo

Line details on a date. Requires lineId, date.

linesched

Full schedule for a line on a date. Requires lineId, date.

linesearch

All lines by operator. Requires operators (comma-separated, from datainfo).

linematch

Match lines by pattern string.

trainSearch

Find journeys by train name. Returns first/last stop only.

journeyDetail

Full stop list for a journey. Requires id (journey ref from trip/board). Optional: fromId/toId, poly, rtMode.

journeyMatch

Like trainSearch but full details for first match only.

journeypos

Real-time vehicle positions in bounding box. Requires llLat/llLon/urLat/urLon.


Tariff / Pricing Endpoints

Denmark uses zone-based pricing via Rejsekort. Unique in Scandinavia.

EndpointPurpose
trip with tariff=1Inline pricing in trip results
spPriceSeason pass price by origin/destination
spPriceForZonesPrice per day for zone count in fare set
spDailyZonalPricesFull zone price matrix, all passenger types
spPriceReconstructionPrice from trip reconstruction context
spRefundSeason pass refund calculation
spCheckSeason pass validation (SELF system)
spZoneCheckCheck zone connectivity and metro zones
stRoutesTariff routes between origin/destination
stRoutesAddonTariff routes from single origin
stStopsTariff zones and stops (mode=DSB)
trfStopDefault stop for a zone
convertZonesTariff details for context
zoneFromCoordinateZone lookup by lat/lon

Travel Detail Endpoints
gisroute

Walking/cycling route details from trip result. Requires ctx (GIS reference).

himsearch

Real-time disruption messages. Filterable by products, operators, lines, dates, stops.


System Information
datainfo

All operators, products, categories. Use to discover operator codes.

bash
curl -s "https://www.rejseplanen.dk/api/datainfo?accessId=$REJSEPLANEN_API_KEY&format=json" | jq '[.DataInfo.operators.Operator[] | {name: .name, id: .id}] | .[0:20]'
tti

Timetable data pool info: ID, creation date, type (ST/ADR/POI), validity period.


Response Structure
  • extId: Numeric stop ID (use for queries). id is the full HAFAS string.
  • rtTime/rtDate: Real-time actual/predicted times (when different from scheduled time/date).
  • Leg type: JNY (journey), WALK (walking), TRSF (transfer).
  • JourneyDetailRef: Use with journeyDetail for full stop list.

Cross-Border Routes

RouteCovered ByNotes
Oslo to StockholmEntur + ResRobotSJ trains, ~6 hours
Malmö to CopenhagenResRobot + RejseplanenØresund trains, 35 min
Gothenburg to OsloEntur + ResRobotVy/SJ, ~4 hours
Stockholm to CopenhagenResRobotSJ/DSB, ~5 hours via Malmö
Copenhagen to MalmöRejseplanenØresund trains from Danish side

When to Use

Load this skill when:

  • Planning train/bus/ferry routes between Scandinavian cities
  • Checking schedules and durations for ground transport
  • Finding stop IDs for trip planning
  • Comparing train vs flight for intra-Scandinavia legs
  • Looking up Danish transit fares/zones
  • Checking real-time disruptions (himsearch)
  • Tracking live vehicle positions (journeypos)

Do not:

  • Use for booking (search/schedule only)
  • Use for flights (use Seats.aero, SerpAPI, or Duffel)
  • Expect pricing from Entur or ResRobot (only Rejseplanen has pricing)

Search Workflows

1. "How do I get from A to B?"

Step 1: Pick API by country (Norway=Entur, Sweden=ResRobot, Denmark=Rejseplanen, cross-border=both).

Step 2: Find stop IDs:

bash
# Norway
curl -s "https://api.entur.io/geocoder/v1/autocomplete?text=Flåm&size=3" \
  -H "ET-Client-Name: $ENTUR_CLIENT_NAME" | jq '[.features[] | {name: .properties.name, id: .properties.id}]'

# Sweden
curl -s "https://api.resrobot.se/v2.1/location.name?input=Malmö&format=json&accessId=$RESROBOT_API_KEY" | jq '[.stopLocationOrCoordLocation[] | .StopLocation | {name: .name, id: .extId}] | .[0:5]'

# Denmark
curl -s "https://www.rejseplanen.dk/api/location.name?accessId=$REJSEPLANEN_API_KEY&input=Svendborg&format=json&type=S&lang=en" | jq '[.stopLocationOrCoordLocation[] | .StopLocation | {name: .name, id: .extId}] | .[0:5]'

Step 3: Trip search with date and time. Step 4 (Denmark): Add tariff=1 for pricing.

2. "What trains leave from X?"
bash
curl -s "https://www.rejseplanen.dk/api/departureBoard?accessId=$REJSEPLANEN_API_KEY&id=8600626&duration=120&products=31&format=json&lang=en" | jq '[.DepartureBoard.Departure[] | {time: .time, name: .name, direction: .direction, track: .track}]'
3. "What's near me?"
bash
curl -s "https://www.rejseplanen.dk/api/location.nearbystops?accessId=$REJSEPLANEN_API_KEY&originCoordLat=55.6736&originCoordLong=12.5681&r=500&format=json&lang=en" | jq '[.stopLocationOrCoordLocation[] | .StopLocation | {name: .name, id: .extId, dist: .dist}]'

Or nearbyDepartureBoard to skip stop lookup.

4. "What ferry to Ærø?"
bash
curl -s "https://www.rejseplanen.dk/api/trip?accessId=$REJSEPLANEN_API_KEY&originId=100200261&destId=100200222&date=2026-08-28&time=08:00&format=json&lang=en" | jq '[.TripList.Trip[] | {legs: [.LegList.Leg[] | {name: .name, from: .Origin.name, to: .Destination.name, depTime: .Origin.time, arrTime: .Destination.time}]}] | .[0:5]'
5. "I know the train number."

trainSearch to find it, then journeyDetail with the ref for full stops.

6. "What can I reach in 2 hours?"
bash
curl -s "https://www.rejseplanen.dk/api/reachability?accessId=$REJSEPLANEN_API_KEY&originId=8600626&duration=120&maxChange=2&format=json" | jq '.'
7. "Any disruptions?"
bash
curl -s "https://www.rejseplanen.dk/api/himsearch?accessId=$REJSEPLANEN_API_KEY&format=json&lang=en" | jq '.'
8. Multi-country trips

Search from both ends. Øresund trains appear in both ResRobot and Rejseplanen.

Tips
  • Always format=json. Always lang=en for Rejseplanen.
  • Use extId (numeric) for queries, not the long HAFAS id string.
  • Check rtTime/rtDate for delays.
  • passlist=1 shows intermediate stops.
  • maxChange=0 for direct connections only.
  • Page with numF/numB or context scroll tokens.
  • Product bitmask is additive. Omit for all types.

© borski, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in plugins/travel-hacking-toolkit/skills/scandinavia-transit of borski/travel-hacking-toolkit.

Open the folder on GitHubat commit db82131

Compare with similar skills

Scandinavia Transit next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Scandinavia Transit compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Scandinavia Transit this skillborski/travel-hacking-toolkit688—~4.5kAutomated safety check: NotesMIT
Nodejs Backend Patternsever-works/ever-works16218 repos~4kAutomated safety check: PassAGPL-3.0
Use Yaakmountain-loop/yaak19k—~1.9kAutomated safety check: PassMIT
API DesignerJeffallan/claude-skills12k1 repos~2kAutomated safety check: PassMIT
GraphQL Operations with CodegenChrisWiles/claude-code-showcase6.1k3 repos~1.5kAutomated safety check: PassNone
Nestjs Trpctrycompai/crm11k—~2.8kAutomated safety check: PassMIT

Similar skills

  • Nodejs Backend Patterns

    ever-works/ever-works

    Build production-ready Node.js backend services with Express/Fastify, implementing middleware patterns, error handling, authentication, database integration, and API design best practices.

    162 GitHub starsUsed in 18 repos~4k tokens
    Backend & APIsAuto-check passed
  • Use Yaak

    mountain-loop/yaak

    A skill your agent uses when the user mentions Yaak, a Yaak workspace, or the yaak command, or asks to call, hit, or smoke test HTTP/REST endpoints, save or organize API requests for reuse or manual…

    19k GitHub stars~1.9k tokensUpdated 3 days ago
    Backend & APIsAuto-check passed
  • API Designer

    Jeffallan/claude-skills

    Designs REST and GraphQL APIs from resource modeling to an OpenAPI 3.1 contract, with versioning, pagination and RFC 7807 error handling.

    12k GitHub starsUsed in 1 repo~2k tokens
    Backend & APIsAuto-check passed
  • GraphQL Operations with Codegen

    ChrisWiles/claude-code-showcase

    Sets the rules for writing GraphQL queries and mutations in .gql files, running codegen, and using generated Apollo hooks with proper error and loading handling.

    6.1k GitHub starsUsed in 3 repos~1.5k tokens
    Backend & APIsAuto-check passed
  • Nestjs Trpc

    trycompai/crm

    Build end-to-end type-safe tRPC APIs inside NestJS using the nestjs-trpc adapter — @Router/@Query/@Mutation/@Subscription decorators, TRPCModule.forRoot, injectable middlewares and context, Zod…

    11k GitHub stars~2.8k tokensUpdated 29 days ago
    Backend & APIsAuto-check passed
  • API Design Principles

    jh941213/my-cc-harness

    REST 및 GraphQL API 설계 원칙 가이드. An agent skill from jh941213/my-cc-harness.

    125 GitHub starsUsed in 18 repos~3.4k tokens
    Backend & APIsAuto-check passed

More from borski/travel-hacking-toolkit

All 46 skills in this repo
  • Amex Travel

    borski/travel-hacking-toolkit

    Search Amex travel portal for cash prices, MR points pricing, IAP discounts, and FHR/THC hotel benefits via Patchright.

    688 GitHub stars~3.1k tokensUpdated 5 days ago
    Auto-check passed
  • Chase Travel

    borski/travel-hacking-toolkit

    Search Chase UR travel portal via Patchright for cash prices, points pricing, Points Boost offers, and Chase Edit hotel benefits.

    688 GitHub stars~2.8k tokensUpdated 5 days ago
    Auto-check passed
  • Deutsche Bahn

    borski/travel-hacking-toolkit

    Deutsche Bahn train schedules, journey planning, and departures across Germany and into neighboring countries (Austria, Switzerland, Netherlands, France, Belgium).

    688 GitHub stars~1.5k tokensUpdated 5 days ago
    Auto-check passed
  • Sutochno

    borski/travel-hacking-toolkit

    Search Sutochno.ru (СУТОЧНО.РУ), a Russian short-term apartment-rental platform where you book directly from owners and pay in rubles (Mir card / bank transfer).

    688 GitHub stars~2.1k tokensUpdated 5 days ago
    Auto-check passed
  • Ticketsatwork

    borski/travel-hacking-toolkit

    Search TicketsAtWork (EBG corporate perks) for hotels, theme park tickets, attractions, and rental cars via Patchright.

    688 GitHub stars~4.2k tokensUpdated 5 days ago
    Auto-check passed
  • Vrbo

    borski/travel-hacking-toolkit

    Search VRBO (Vrbo / Expedia Group) vacation rentals including entire homes, condos, and cabins via Patchright browser automation.

    688 GitHub stars~1.7k tokensUpdated 5 days ago
    Auto-check passed

Works with

Categories

Questions about Scandinavia Transit

What does Scandinavia Transit do?

Search trains, buses, and ferries in Norway (Entur), Sweden (ResRobot), and Denmark (Rejseplanen). Scandinavia Transit is an agent skill from borski/travel-hacking-toolkit. Search trains, buses, and ferries in Norway (Entur), Sweden (ResRobot), and Denmark (Rejseplanen).

When should I use Scandinavia Transit?

Scandinavia Transit fits situations like: backend & APIs work in your project.

How do I install Scandinavia Transit in Claude Code?

Run `npx skills add borski/travel-hacking-toolkit --skill scandinavia-transit -a claude-code`. Or copy the skill folder (plugins/travel-hacking-toolkit/skills/scandinavia-transit in borski/travel-hacking-toolkit) into .claude/skills/scandinavia-transit in your project. Claude Code loads it when a task matches its description.

How do I install Scandinavia Transit in Codex?

Run `npx skills add borski/travel-hacking-toolkit --skill scandinavia-transit -a codex`. Or copy the skill folder (plugins/travel-hacking-toolkit/skills/scandinavia-transit in borski/travel-hacking-toolkit) into .agents/skills/scandinavia-transit in your project. Codex loads it when a task matches its description.

Can I use Scandinavia Transit in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add borski/travel-hacking-toolkit --skill scandinavia-transit -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/scandinavia-transit, .gemini/skills/scandinavia-transit, .github/skills/scandinavia-transit and .opencode/skills/scandinavia-transit in your project.

What does Scandinavia Transit need to run?

Going by SKILL.md and its folder, Scandinavia Transit needs the command-line tools its instructions call (curl and jq) and credentials named REJSEPLANEN_API_KEY and RESROBOT_API_KEY. Our summary lists: A credential in RESROBOT_API_KEY; A credential in REJSEPLANEN_API_KEY.

Does Scandinavia Transit access the network?

SKILL.md names 6 domains. In commands or code: rejseplanen.dk, api.entur.io and api.resrobot.se; the agent is likely to contact these when it follows the instructions. As links in the text: labs.rejseplanen.dk, trafiklab.se and developer.entur.org. This is read from the text; nothing was executed.

Is Scandinavia Transit safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Scandinavia Transit use?

Scandinavia Transit is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Scandinavia Transit use?

About 4.5k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Scandinavia Transit?

Skills that share tags, products or a category with Scandinavia Transit: Nodejs Backend Patterns (ever-works/ever-works, 162 stars), Use Yaak (mountain-loop/yaak, 19k stars), API Designer (Jeffallan/claude-skills, 12k stars) and GraphQL Operations with Codegen (ChrisWiles/claude-code-showcase, 6.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Scandinavia Transit?

borski (a GitHub user) maintains it in borski/travel-hacking-toolkit, which has 688 GitHub stars. The repository holds 46 skills in this directory. The repository was last updated on October 5, 2026.

Source: borski/travel-hacking-toolkit on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.