К основному содержанию
скилл CX Codex

restaurant-booking — скилл для Claude Code: что делает

Бронирует столы в ресторанах через OpenTable и Resy с помощью браузерной автоматизации Notte. Помогает найти свободное время и оформить резерв без ручного ввода.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add gooseworks-ai/goose-skills --skill restaurant-booking -a claude-code
Открыть на GitHub

Что делает restaurant-booking

Скилл автоматизирует бронирование столиков на площадках OpenTable, Resy и прямых сайтах заведений. Для взаимодействия со страницами используется Notte через прокси-сервис Orthogonal. Инструмент поднимает сессию headless-браузера Chromium, открывает форму заведения, нажимает на нужный временной слот и заполняет контакты гостя.

Для работы скилла нужны имя, телефон и email гостя, а также авторизация. Учётные данные скрипт читает из ~/.gooseworks/credentials.json. Если этого файла в системе нет, перед запуском нужно выполнить команду npx gooseworks login. Дополнительно потребуется ключ Orthogonal или установленный пакет @orth/cli.

OpenTable держит слот бронирования всего 5 минут. Из-за этого лимита автоматизация должна отрабатывать сразу без пауз, иначе сессия сбросится до отправки формы подтверждения. После успешного бронирования данные резервации можно добавить в личный календарь командой gog calendar create.

Какие задачи решает

  • забронировать столик через OpenTable или Resy
  • проверить доступность свободных мест на выбранную дату
  • заполнить контактную форму гостя в браузере
  • сохранить подтверждённую бронь в календарь

Примеры запросов агенту

  • Забронируй стол на двоих в Foreign Cinema на завтра в 19:00 через OpenTable
  • Найди и оформи столик на четверых в Resy на имя John Doe, телефон 4155551234

Как установить restaurant-booking

1Через Skills CLI (Vercel)

npx skills add gooseworks-ai/goose-skills --skill restaurant-booking -a claude-code

2Вручную: положить файлы

~/.claude/skills/restaurant-booking/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/restaurant-booking/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о restaurant-booking

Как установить restaurant-booking в Claude Code?

Выполните команду npx skills add gooseworks-ai/goose-skills --skill restaurant-booking -a claude-code. Конфигурация сохранится в файле ~/.claude/skills/restaurant-booking/SKILL.md.

Что делает скилл restaurant-booking?

Он запускает сессию Chromium через Notte, переходит по ссылке ресторана, выбирает нужное время, заполняет форму контактов и отправляет заявку на резервацию.

Какие данные и сервисы нужны для работы скилла?

Требуются имя, почта и номер телефона гостя, авторизация через npx gooseworks login с ключом в ~/.gooseworks/credentials.json, а также ключ Orthogonal.

Исходный текст

SKILL.md · MIT
---
name: restaurant-booking
description: Book restaurant reservations via browser automation. Use when asked to make dinner reservations, book a table, or find availability at restaurants. Supports OpenTable, Resy, and direct restaurant booking sites.
source: orthogonal
---


# Restaurant Booking

## Setup

Read your credentials from ~/.gooseworks/credentials.json:
```bash
export GOOSEWORKS_API_KEY=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json'))['api_key'])")
export GOOSEWORKS_API_BASE=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json')).get('api_base','https://api.gooseworks.ai'))")
```

If ~/.gooseworks/credentials.json does not exist, tell the user to run: `npx gooseworks login`

All endpoints use Bearer auth: `-H "Authorization: Bearer $GOOSEWORKS_API_KEY"`


Book reservations using Notte browser automation via Orthogonal.

## Requirements

- Orthogonal CLI (`npm install -g @orth/cli`) or API key
- Guest info: name, email, phone

## Quick Flow

1. Start Notte session
2. Navigate to booking site (OpenTable preferred)
3. Select date/time/party size
4. Fill contact form
5. Submit and confirm

## CLI Method (Recommended)

### 1. Start a Notte Session

```bash
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/start"}'
  --body '{"browser_type":"chromium","headless":true,"solve_captchas":true,"idle_timeout_minutes":10}'
```

Save the `session_id` from the response.

### 2. Navigate to OpenTable

```bash
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/{session_id}/page/execute"}'
  --body '{"type":"goto","url":"https://www.opentable.com/r/{restaurant}?datetime=2026-02-17T19:00&covers=2"}'
```

### 3. Click Time Slot

```bash
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/{session_id}/page/execute"}'
  --body '{"type":"click","selector":"button:has-text(\"7:00 PM\")"}'
```

### 4. Select Seating (if prompted)

```bash
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/{session_id}/page/execute"}'
  --body '{"type":"click","selector":"button:has-text(\"Select\")"}'
```

### 5. Fill the Form

```bash
# First name
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/{session_id}/page/execute"}'
  --body '{"type":"fill","selector":"input#firstName","value":"John"}'

# Last name
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/{session_id}/page/execute"}'
  --body '{"type":"fill","selector":"input#lastName","value":"Doe"}'

# Email
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/{session_id}/page/execute"}'
  --body '{"type":"fill","selector":"input#email","value":"[email protected]"}'

# Phone
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/{session_id}/page/execute"}'
  --body '{"type":"fill","selector":"input#phoneNumber","value":"4155551234"}'
```

### 6. Accept Terms

```bash
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/{session_id}/page/execute"}'
  --body '{"type":"click","selector":"text=I agree to the restaurant"}'
```

### 7. Submit Reservation

```bash
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/{session_id}/page/execute"}'
  --body '{"type":"click","selector":"button:has-text(\"Complete reservation\")"}'
```

### 8. Verify Confirmation

```bash
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"notte","path":"/sessions/{session_id}/page/scrape"}'
  --body '{"only_main_content":true}'
```

Look for "confirmed" in the response.

## API Method (curl)

```bash
# Start session
curl -X POST "https://api.orth.sh/v1/run" \

  -H "Content-Type: application/json" \
  -d '{
    "api": "notte",
    "path": "/sessions/start",
    "body": {
      "browser_type": "chromium",
      "headless": true,
      "solve_captchas": true,
      "idle_timeout_minutes": 10
    }
  }'

# Execute actions (same pattern)
curl -X POST "https://api.orth.sh/v1/run" \

  -H "Content-Type: application/json" \
  -d '{
    "api": "notte",
    "path": "/sessions/{session_id}/page/execute",
    "body": {"type":"goto","url":"https://www.opentable.com/..."}
  }'
```

## Key Selectors (OpenTable)

| Field | Selector |
|-------|----------|
| First name | `input#firstName` |
| Last name | `input#lastName` |
| Email | `input#email` |
| Phone | `input#phoneNumber` |
| Terms checkbox | `text=I agree to the restaurant` |
| Submit | `button:has-text('Complete reservation')` |
| Time slots | `button:has-text('7:00 PM')` |
| Seating select | `button:has-text('Select')` |

## Finding Restaurant IDs

Search OpenTable and extract from URL:
- `restref=1906` → Foreign Cinema
- Restaurant slug in URL path

Example URL format:
```
https://www.opentable.com/r/{restaurant-slug}?restref={id}&datetime={YYYY-MM-DDTHH:MM}&covers={n}
```

## Tips

- OpenTable holds table for 5 minutes - move fast
- Use `fill` action with `value` param (not `type` with `text`)
- Click terms via label text, not checkbox directly
- No credit card needed - reservations are free
- Confirmation email sent automatically

## Resy Alternative

If restaurant uses Resy:
```
https://resy.com/cities/{city}/venues/{restaurant}?date={YYYY-MM-DD}&seats={n}
```

Similar flow but different selectors. Scrape page first to identify form fields.

## After Booking

1. Create calendar event with `gog calendar create`
2. Add attendees and location
3. Include confirmation number in description

© gooseworks-ai · MIT · gooseworks-ai/goose-skills

Похожие скиллы

Все скиллы по теме «Браузер и парсинг» →
ego-browser citrolabs Скилл подключает Chromium-браузер ego-lite к ИИ-агенту для автоматизации сайтов, тестирования интерфейсов и сбора данных с сохранением авторизованных сессий пользователя. CX Codex +1 12 200установок pinchtab pinchtab Скилл управляет браузером через PinchTab: открывает страницы, читает элементы, заполняет формы и выгружает результаты. Нужен для сценариев, где агенту требуется действовать в браузере. CX Codex +1 892установок agent-browser vercel-labs Скилл управляет браузером через CLI: открывает страницы, заполняет формы, нажимает кнопки и проверяет веб-приложения. Подходит для задач, где агенту нужно действовать в интерфейсе. CX Codex +1 1 200 000установок anti-detect-browser antibrow Запускай Chromium с подлинным отпечатком устройства через Playwright API. Каждый профиль получает одну согласованную личность, которая сохраняется между запусками и используется для тестирования, скрейпинга и многоаккаунтной работы. CX Codex +1 137 300установок playwriter remorses Скилл управляет открытым Chrome через расширение Playwriter и код Playwright. Пригодится для сайтов с JavaScript, авторизацией и подгружаемым содержимым. CX Codex +1 5 800установок puppeteer-automation Mindrally Скилл для браузерной автоматизации на Puppeteer: навигация, клики, скриншоты, PDF и перехват сетевых запросов в headless Chrome. CX Codex +1 1 800установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой