k-skill/docs/features/catchtable-sniper.md
choihyun-1110 a01a164a31
feat: add catchtable-sniper skill (#146)
* feat: add catchtable-sniper skill

* Make the Catchtable skill loadable and discoverable

The submitted skill landed under skills/ without YAML frontmatter, which broke the repo's auto-discovery contract and Codex skill loading. Move it to the root-level skill layout, add the required metadata block, and document the feature in the main README plus a dedicated guide so the PR ships in a usable state.

Constraint: This repository auto-discovers skills from root-level directories only
Constraint: Skill manifests must start with YAML frontmatter for Codex to load them
Rejected: Keep the nested skills/catchtable-sniper layout | validate-skills and the repo's documented convention reject it
Rejected: Add only README links without a feature guide | would create a broken documentation target
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Future skill PRs should follow docs/adding-a-skill.md and place each skill in its own root directory
Tested: node --test scripts/skill-docs.test.js
Tested: ./scripts/validate-skills.sh
Tested: git diff --check
Not-tested: End-to-end Catchtable reservation completion on a logged-in account

---------

Co-authored-by: Jeffrey (Dongkyu) Kim <vkehfdl1@gmail.com>
2026-04-22 16:20:38 +09:00

90 lines
3.7 KiB
Markdown

# 캐치테이블 예약 스나이핑 가이드
## 이 기능으로 할 수 있는 일
- 로그인된 Chrome 세션을 재사용해 캐치테이블 예약 페이지 진입
- 원하는 식당의 취소 슬롯/빈자리 폴링
- 여러 식당을 순차 감시하다가 먼저 열린 슬롯에 예약 시도
- 예약 오픈 시간에 맞춘 오픈런 시도
- dry-run 모드로 빈자리 발견까지만 알리고 최종 예약은 사용자에게 넘기기
## 먼저 알아둘 점
- 이 기능은 **Chrome MCP + 로그인된 캐치테이블 세션**이 있어야만 동작한다.
- 카카오/네이버 로그인 자동화는 하지 않는다.
- 결제 정보 자동 입력은 하지 않는다.
- 선결제 매장은 결제 단계에서 반드시 사용자가 직접 확인해야 한다.
- 서버 부하를 줄이기 위해 폴링 간격은 **30초 이상**으로 유지한다.
## 입력 형태
다음 정보를 자연어에서 추출해 사용한다.
- 식당명 또는 캐치테이블 URL
- 날짜 또는 날짜 범위
- 인원 수
- 시간대(선택)
- dry-run 여부
- 인원 유연 매칭 여부
- 예약 오픈 시각(오픈런 모드일 때)
예시:
- `온지음 5월 토요일 저녁 2인 빈자리 나오면 예약해줘`
- `온지음, 밍글스, 라연 중 5월 주말 2인 아무데나 먼저 뜨는 거 잡아줘`
- `라연 5월 예약 오픈이 4월 30일 오전 10시야, 그때 맞춰 2인 잡아줘`
- `밍글스 빈자리 뜨면 예약은 내가 할게, dry-run으로`
- `https://app.catchtable.co.kr/ct/shop/mingles 토요일 4명 자동예약`
## 동작 흐름
1. 캐치테이블 홈 또는 식당 페이지에 접속한다.
2. 로그인 상태를 확인한다.
3. 오픈런 모드면 지정 시각까지 대기 후 즉시 예약을 시도한다.
4. 일반 스나이핑 모드면 30초 간격으로 새로고침/재조회하며 슬롯을 감시한다.
5. 슬롯이 열리면 날짜/인원/시간을 선택하고 예약 흐름으로 진입한다.
6. 무료 예약이면 최종 예약 버튼까지 진행하고, 선결제 매장이면 결제 직전 단계에서 사용자 확인을 요구한다.
## 멀티 타겟 / 인원 유연 모드
### 멀티 타겟
- 여러 식당을 순차적으로 감시한다.
- 한 곳에서 예약 가능한 슬롯을 발견하면 나머지 감시는 즉시 중단한다.
### 인원 유연 매칭
- 예를 들어 2인 자리가 없을 때 4인 자리를 대안으로 확인할 수 있다.
- 대안 인원 슬롯을 발견하면 사용자에게 확인을 받고 다음 단계로 진행한다.
## dry-run 모드
`알림만`, `dry-run` 같은 표현이 있으면 예약 완료 대신 다음까지만 수행한다.
- 빈자리 발견
- 식당/날짜/시간/인원 요약
- 사용자가 직접 예약할 수 있도록 알림
## 제한사항
- 로그인 자동화 없음
- 카드/간편결제 정보 자동 입력 없음
- 캐치테이블 외 예약 플랫폼 미지원
- UI 변경 시 selector/흐름이 깨질 수 있음
## 검증 메모
2026-04-22 기준 로컬 검증에서 다음을 확인했다.
- 캐치테이블 식당 페이지 진입
- 예약 가능한 식당에서 날짜/인원/시간 선택
- 방문 확인 단계 진입
- 결제 방식 선택 단계 진입
다만 최종 예약 완료는 **로그인된 캐치테이블 세션이 없는 Chrome 프로필**에서는 검증할 수 없었다. 이 기능의 최종 성공 여부는 로그인된 사용자 세션과 실시간 좌석 상황에 직접 의존한다.
## 원칙
- 사용자의 로그인 자격 증명을 새 env var나 repo 문서에 추가하지 않는다.
- 사용자가 이미 로그인해 둔 브라우저 세션만 재사용한다.
- 결제나 취소 수수료가 얽힌 단계에서는 사용자 확인을 우선한다.