Show HN: 역공학된 REWE API를 통해 식료품을 주문하는 CLI (Haskell)
요약
Haskell로 작성된 korb는 REWE API를 역공학하여 식료품 주문을 자동화하는 CLI 도구입니다. 이 도구는 에이전트 기반 커머스를 위해 설계되었으며, 사용자가 Claude와 같은 AI 에이전트를 통해 쇼핑 리스트를 관리하고 주문을 실행할 수 있도록 JSON 출력을 지원합니다.
핵심 포인트
- Haskell 기반의 CLI 도구로, REWE API를 프로그래밍 방식으로 제어하여 장바구니 생성 및 주문이 가능함
- AI 에이전트(예: Claude)가 사용자를 대신해 쇼핑 리스트를 확인하고 제품을 검색 및 추가할 수 있도록 설계됨
- 모든 출력이 JSON 형식을 지원하여 에이전트와의 연동성이 높음
- REWE의 Cloudflare TLS 핑거프린팅 및 mTLS 인증서 요구사항으로 인해 작동이 제한될 수 있음
REWE는 독립적인 에이전트 기반 커머스 (agentic commerce)를 반기지 않는 듯하며, 이 CLI를 적극적으로 차단하고 있습니다. 이는 타당한 선택이며, 저의 쇼핑 횟수가 줄어들겠지만 동시에 이해할 수 있는 부분이기도 합니다. 불행히도 이는 해당 CLI가 그들의 Cloudflare TLS 핑거프린팅 (TLS fingerprinting) 규칙에 따라 작동할 수도 있고, 작동하지 않을 수도 있음을 의미합니다.
korb
이 CLI를 사용하면 REWE API를 프로그래밍 방식으로 사용하여 장바구니를 생성하고, 거주 지역의 REWE 매장에서 픽업할 수 있도록 주문할 수 있습니다.
이 CLI는 Haskell로 직접 작성되었지만, 주로 에이전트 (agents)가 사용자를 대신하여 REWE 쇼핑을 정리하도록 설계된 CLI입니다. 모든 출력은 JSON 형식입니다.
korb_demo.mp4
저의 현재 엔드 투 엔드 (E2E) 흐름 (저는 korb를 실행하기 위해 Claude를 사용합니다)은 다음과 같습니다:
생각날 때 식료품 추가
Siri 단축어를 사용하여 공유된 마크다운 (markdown) 파일에 항목을 추가합니다. 주방에서 "쇼핑 리스트에 귀리 우유 추가해줘"라고 말하면 리스트에 추가됩니다.
주간 주문
에이전트에게 "korb를 사용해서 식료품을 사줘, X, Y, Z가 필요해"라고 말합니다. 에이전트는 기본 템플릿(korb orders history로 생성된 저의 평소 품목 및 수량)에서 시작하여, 쇼핑 리스트 파일과 저의 입력을 확인해 추가할 항목이 있는지 체크합니다.
템플릿 제안 조정
에이전트에게 무엇을 건너뛸지, 변경할지, 또는 추가할지 말합니다. 에이전트는 korb search 또는 korb favorites search를 통해 제품을 검색하고 korb basket add로 제품을 추가합니다.
검토 및 확인
에이전트가 전체 장바구니와 선택된 시간대를 출력합니다. 제가 확인하면 korb checkout order를 실행합니다.
쇼핑 리스트 정리
주문된 항목은 쇼핑 리스트에서 체크 표시됩니다.
쇼핑 리스트 파일이 저장된 디렉토리에는 이 과정을 설명하는 claude.md 파일도 있습니다.
**핵심(magic)**은 제가 항상 주문하는 항목들로 생성된 템플릿입니다. 에이전트에게 korb orders history를 사용하여 자주 주문하는 항목을 식별하라고 말하기만 하면 됩니다.
주의: 현재 기준으로 korb는 작동하지 않습니다 - REWE는 이것이 작동하는 것을 원하지 않습니다
현재 curl이 설치되어 있어야 합니다.
GitHub Releases에서 최신 릴리스를 다운로드하세요:
# macOS (Apple Silicon)
curl -L https://github.com/yannick-cw/korb/releases/latest/download/korb-aarch64-macos -o korb
# macOS (Intel)
...
그 다음:
chmod +x korb
mv korb /usr/local/bin/ # 또는 Linux에서는 sudo mv
GHC 9.12+ 및 Cabal이 필요합니다. 또한 REWE mTLS 클라이언트 인증서(client certificates)도 필요합니다.
git clone https://github.com/yannick-cw/korb.git
cd korb
# REWE 앱에서 mTLS 인증서 추출
...
# 1. REWE 계정으로 인증 (1회 수행, Chrome을 사용하여 링크를 가져오세요. Firefox는 이 작업이 작동하지 않습니다)
korb login --pretty
# 2. 픽업 매장(pickup store)을 찾아 설정 - 로컬에 저장되며, 한 번만 수행하면 됩니다
...
사용법: korb COMMAND [-p|--pretty] [-v|--version]
REWE 픽업 CLI
사용 가능한 옵션:
...
REWE 모바일 API를 위해 역공학(Reverse-engineered)된 OpenAPI 명세(specs):
현재 macOS 및 Linux를 지원합니다.
추천 엔진(korb suggestion threshold)은 Lean 4로 재구현되었으며, 수학적으로 증명된 5가지 속성을 가집니다: 추천 항목은 양의 빈도(positive frequency)를 가지며, 내림차순으로 정렬되고, 순서가 지정된 사용 가능한 제품에서 제공되며, 장바구니(basket) 항목을 제외하고, 수량 제한(count limit)을 준수합니다.
Haskell 테스트 스위트의 차분 랜덤 테스트(Differential Random Testing, DRT) 브릿지는 무작위 입력값을 생성하고, 두 구현체를 모두 실행하여 출력이 동일함을 단언(assert)합니다.
Lean 증명이 컴파일되고 DRT를 통과하면, Haskell 프로덕션 코드는 증명된 명세(spec)와 동일하게 동작합니다.
이는 AWS Cedar가 자신들의 권한 부여 엔진(authorization engine)을 검증하는 방식에서 영감을 얻었습니다.
또한 이 접근 방식을 블로그 포스트(Blog post)에 요약해 두었습니다.
아, 그리고 네, 이 프로젝트는 여기서 완전히 과잉 설계(overkill)된 것이며 단지 재미를 위한 것입니다.
- https://github.com/ByteSizedMarius/rewerse-engineering
- https://github.com/foo-git/rewe-discounts
- https://github.com/torbenpfohl/rewe-discounts
이 프로젝트는 비공식적이며 REWE와 관련이 없습니다. 통지 없이 변경될 수 있는 역공학된 API를 사용합니다. 사용 시 발생하는 위험은 사용자 본인에게 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 HN OpenAI Codex의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기