doordash — скилл для Claude Code: поиск ресторанов и корзина
Скилл для работы с DoorDash через CLI: ищет рестораны, показывает меню, ведёт корзину и историю заказов.
npx skills add imoonkey/openweb --skill doordash -a claude-codeЧто делает doordash
Скилл даёт агенту пять операций DoorDash: searchRestaurants ищет заведения по ключевому слову, getRestaurantMenu отдаёт карточку магазина и полное меню, getOrderHistory показывает прошлые заказы, addToCart и removeFromCart правят корзину. Вызовы идут через openweb doordash exec, например openweb doordash exec searchRestaurants '{"query": "pizza"}'.
Порядок работы жёсткий: сначала searchRestaurants даёт storeId, потом getRestaurantMenu — itemId, name, displayPrice и menuBook.id. Для addToCart нужны все шесть полей сразу: storeId, itemId, itemName, currency, unitPrice в центах и menuId. Если передать часть, сервер вернёт BAD_USER_INPUT. Цена в unitPrice — центы, а не доллары, так что displayPrice придётся пересчитать самому.
getOrderHistory требует авторизации и отдаёт заказы постранично через limit и offset. В результатах поиска попадаются не магазины, а подсказки по продуктам — их отсекают по resultType. Ещё две мелочи, на которых легко споткнуться: removeFromCart возвращает null вместо подытога и списка заказов, если удалённый товар был последним в корзине, а formattedAddress в истории заказов часто пустой.
Какие задачи решает
- найти ресторан по запросу и получить его
storeId - посмотреть меню заведения и выбрать позицию с ценой
- собрать все шесть полей для добавления товара в корзину
- удалить позицию из корзины по
cartIdиitemId - просмотреть прошлые заказы постранично
Примеры запросов агенту
- Найди пиццерии рядом и покажи меню первой
- Добавь в корзину 12-дюймовую пиццу с сыром из этого меню
- Покажи последние 5 заказов
Как установить doordash
1Через Skills CLI (Vercel)
npx skills add imoonkey/openweb --skill doordash -a claude-code2Вручную: положить файлы
~/.claude/skills/doordash/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/doordash/
1Через Skills CLI (Vercel)
npx skills add imoonkey/openweb --skill doordash -a codex2Вручную: положить файлы
.agents/skills/doordash/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add imoonkey/openweb --skill doordash -a cursor2Вручную: положить файлы
.cursor/skills/doordash/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install imoonkey/openweb doordash2Вручную: положить файлы
.github/skills/doordash/SKILL.md1Через Skills CLI (Vercel)
npx skills add imoonkey/openweb --skill doordash -a gemini-cli2Командой платформы
gemini skills install https://github.com/imoonkey/openweb --path src/sites/doordashВручную: положить файлы
.devin/skills/doordash/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add imoonkey/openweb --skill doordash -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о doordash
Как установить doordash в Claude Code?
Выполните npx skills add imoonkey/openweb --skill doordash -a claude-code. Скилл встанет в ~/.claude/skills/doordash/SKILL.md.
Что делает скилл doordash?
Даёт агенту доступ к DoorDash: поиск ресторанов, меню, история заказов и операции с корзиной через команды openweb doordash exec.
Почему addToCart возвращает BAD_USER_INPUT?
Сервер требует все шесть полей: storeId, itemId, itemName, currency, unitPrice в центах и menuId. Значения берутся из ответа getRestaurantMenu, для аккаунтов США currency — "USD".
Исходный текст
SKILL.md · MIT
# DoorDash
## Overview
Food delivery marketplace — search restaurants, browse menus, view order history, manage cart.
## Workflows
### Search and browse menu
1. `searchRestaurants(query)` → pick restaurant → `storeId`
2. `getRestaurantMenu(storeId)` → browse categories → pick item → `itemId`, `name`, `displayPrice`, `menuBook.id`
### Add to cart, then remove
1. `searchRestaurants(query)` → `storeId`
2. `getRestaurantMenu(storeId)` → pick item → `itemId`, `name` (→ `itemName`), `displayPrice` (→ `unitPrice` in cents), `menuBook.id` (→ `menuId`)
3. `addToCart(storeId, itemId, itemName, currency='USD', unitPrice, menuId, quantity)` → `addCartItemV2.id` (→ `cartId`), `addCartItemV2.orders[0].orderItems[0].id` (→ `itemId` for remove)
4. `removeFromCart(cartId, itemId)` → updated cart (subtotal/orders are `null` when cart becomes empty)
### Review past orders
1. `getOrderHistory(limit)` → order list with items, totals, timestamps
## Operations
| Operation | Intent | Key Input | Key Output | Notes |
|-----------|--------|-----------|------------|-------|
| searchRestaurants | search restaurants by keyword | query | name, storeId, categories, imageUrl | entry point; includes non-store results (check resultType) |
| getRestaurantMenu | get store detail + full menu | storeId ← searchRestaurants | storeHeader, menuBook (id → menuId), itemLists (id, name, displayPrice) | optional: menuId, fulfillmentType |
| getOrderHistory | list past orders | limit, offset | orders (store, items, grandTotal, timestamps) | paginated; requires auth |
| addToCart | add menu item to cart | storeId ← searchRestaurants; itemId, itemName, unitPrice (cents), menuId ← getRestaurantMenu; currency='USD' | addCartItemV2.id (cartId), addCartItemV2.orders[0].orderItems[0].id | write op; all six input fields are server-required |
| removeFromCart | remove item from cart | cartId, itemId ← addToCart | removeCartItemV2 (subtotal/orders null if cart now empty) | write op; mutation takes `cartId`/`itemId` directly — no `RemoveCartItemInput` wrapper |
## Quick Start
```bash
# Search for restaurants
openweb doordash exec searchRestaurants '{"query": "pizza"}'
# Get a restaurant's menu (returns itemId, name, displayPrice, menuBook.id)
openweb doordash exec getRestaurantMenu '{"storeId": "245613"}'
# View recent orders
openweb doordash exec getOrderHistory '{"limit": 5}'
# Add item to cart — all six fields required by upstream
openweb doordash exec addToCart '{"addCartItemInput": {"storeId": "245613", "itemId": "23864478062", "itemName": "12 Inch Plain Cheese Pizza", "currency": "USD", "unitPrice": 1440, "menuId": "57979746", "quantity": 1}}'
# Remove item from cart (cartId + itemId from addToCart response)
openweb doordash exec removeFromCart '{"cartId": "<addCartItemV2.id>", "itemId": "<addCartItemV2.orders[0].orderItems[0].id>"}'
```
## Known Limitations
- `addCartItemInput` requires six fields (storeId, itemId, itemName, currency, unitPrice in cents, menuId) — partial input returns `BAD_USER_INPUT`. All values come from `getRestaurantMenu`; `currency` is `"USD"` for US accounts.
- `removeFromCart` returns nulls for subtotal/currencyCode/fulfillmentType/restaurant/orders when the removed item was the last one in the cart (cart UUID still returned).
- `formattedAddress` in order history is often null.
- Search results include non-store items (grocery suggestions) — filter via `resultType`.
© imoonkey · MIT · imoonkey/openweb