From k-skill
Assists with Korean KOBUS 고속버스 timetable lookup and reservation via official HTTP/API flows. Covers route resolution, seat selection, temporary hold, and payment-entry handoff.
How this skill is triggered — by the user, by Claude, or both
Slash command
/k-skill:express-bus-bookingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Use this skill for Korean 고속버스 / KOBUS timetable lookup and reservation assistance. The preferred workflow is HTTP/API-first: resolve routes, query timetables, inspect remaining seats and fares, and only use browser automation when endpoint discovery or an official web-only step blocks progress.
Use this skill for Korean 고속버스 / KOBUS timetable lookup and reservation assistance. The preferred workflow is HTTP/API-first: resolve routes, query timetables, inspect remaining seats and fares, and only use browser automation when endpoint discovery or an official web-only step blocks progress.
This skill is intentionally separate from 시외버스. KOBUS terminal codes, route structures, and checkout pages differ from Tmoney 시외버스. Use intercity-bus-booking for 시외버스/Tmoney flows.
고속버스 예매, 고속버스 시간표, 고속버스 예약, 프리미엄 고속버스, or 우등 고속버스.Do not use this for:
intercity-bus-booking.https://www.kobus.co.kr.See references/kobus-http-flow.md for session-proven endpoint details and parameter examples.
Fetch either the main page or route/search page with cookies enabled:
GET https://www.kobus.co.kr/main.do
GET https://www.kobus.co.kr/mrs/rotinf.do
Use a realistic desktop User-Agent and a cookie jar.
POST /mrs/readRotLinInf.ajax
The response is JSON and can include rotInfList, tfrInfList, len, and codeYn. Prefer code-confirmed routes over display-name matching because terminal names are not always unique.
POST /mrs/alcnSrch.do
Typical fields include:
deprCd=010
arvlCd=700
pathDvs=sngl
pathStep=1
deprDtm=YYYYMMDD
busClsCd=0
rtrpChc=1
timeLinkMin=00
timeLinkMax=23
Parse the returned HTML for schedule rows/cards and fnSatsChc(...) onclick arguments. Respect mrsPsbYn=N or any equivalent booking-disabled marker.
POST /mrs/satschc.do
Send the original search form fields plus selected values from fnSatsChc(...), commonly including:
deprTime
alcnDeprTime
alcnDeprTrmlNo
alcnArvlTrmlNo
indVBusClsCd
cacmCd
dcDvsCd
prvtBbizEmpAcmtRt
chldSftySatsYn
dsprSatsYn
The response should include form#satsChcFrm and hidden fare/seat values such as adltFee, rmnSatsNum, totSatsNum, and terminal/time fields.
POST /mrs/setPcpy.ajax
Submit the satsChcFrm hidden fields plus selected seat/count fields. A successful response includes:
MSG_CD=S0000
pcpyNoAll
satsNoAll
ESTM_AMT
DC_AMT
TISSU_AMT
Treat the hold as short-lived. If testing, if the user does not proceed, or if a new seat is chosen, release it explicitly.
POST /mrs/cancPcpy.ajax
Use the same relevant form fields plus the returned pcpyNoAll and satsNoAll. A successful response returns MSG_CD=S0000.
Use the bundled helper for KOBUS lookup and optional temporary holds:
python3 express-bus-booking/scripts/kobus_express_booking.py \
--depart-code 021 \
--arrive-code 500 \
--date 20260520 \
--select-index 1 \
--hold-first-seat \
--output-dir /tmp/kobus-hold
For Seoul to Gwangju, the verified KOBUS route is 센트럴시티(서울) code 021 to 광주(유·스퀘어) code 500. A successful hold returns MSG_CD=S0000, pcpyNoAll, satsNoAll, fare amounts, and saves a local auto-submit helper for the official KOBUS payment-information page. Final card entry and payment remain manual. Cancel abandoned holds with /mrs/cancPcpy.ajax using the saved cancel fields.
A plain official checkout URL is not enough because KOBUS expects a POST body containing the selected schedule, seat, fare, and hold identifiers. The practical user-facing pattern is:
setPcpy.ajax.Desktop action:
https://www.kobus.co.kr/mrs/stplcfmpym.do
Mobile-friendly action:
https://www.kobus.co.kr/mrs/stplcfmpym.do?keep=/mrs/pay
The POST body should include the original seat form fields plus returned hold values such as pcpyNoAll, satsNoAll, estmAmt, dcAmt, tissuAmt, and nonMbrsYn=Y when using a non-member checkout flow.
KOBUS common JavaScript can redirect narrow/mobile screens to /mblIdx.do unless location.href contains a mobile-allowed path fragment such as /mrs/pay. In testing, posting to:
/mrs/stplcfmpym.do?keep=/mrs/pay
preserved the same checkout POST body while making the final browser URL contain /mrs/pay, avoiding the client-side mobile-main redirect condition. Use this variant for Discord/mobile users, but still verify with the user because in-app browsers may add their own quirks.
If mobile still lands on the homepage, recommend opening the helper link in a normal external browser or desktop browser. Do not keep retrying holds indefinitely; cancel stale holds.
Keep candidate lists concise and actionable:
고속버스 서울경부 → 부산 / 2026-05-09
1. 00:30 심야우등 / 천일고속 / 잔여 10석 / 성인 47,600원
2. 13:50 우등 / ...
When a hold/checkout helper is created, state that the next step opens the official KOBUS payment page and that payment remains manual.
For Discord/mobile, provide links as normal text links, not fenced code blocks, so the user can tap them directly.
cancPcpy.ajax.?keep=/mrs/pay helper action for mobile; otherwise KOBUS JS may send the user to /mblIdx.do.MSG_CD=S0000 before sending a checkout helper link.cancPcpy.ajax./mrs/pay marker variant when sent to mobile-heavy platforms.npx claudepluginhub nomadamas/k-skill --plugin k-skillSearches Korean 시외버스 (intercity bus) timetables, fares, and seat availability via the official Tmoney HTTP API. Assists up to checkout handoff without submitting payment.
Queries live Wellington-region Metlink bus data via a CLI for stops, routes, arrivals, alerts, and vehicle positions. Use only for Metlink buses, not trains, ferries, or cable car.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.