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

chatgpt-search — скилл для Claude Code: что делает и как установить

Скилл подключается к Chrome через CDP, отправляет запрос в ChatGPT и сохраняет структурированный ответ вместе с JSON гидратации.

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

Что делает chatgpt-search

Инструмент автоматизирует работу с веб-интерфейсом ChatGPT через Chrome DevTools Protocol. Скилл проверяет порт 9222, открывает вкладку https://chatgpt.com, внедряет перехватчик сетевых запросов fetch и отправляет текст через эмуляцию ввода. Затем он опрашивает DOM до появления ответа ассистента и выгружает сообщения, конфигурацию интерфейса и данные SSE в директорию /tmp.

Для работы обязательно нужен запущенный Chrome с флагом --remote-debugging-port=9222. Без активного отладочного порта на 127.0.0.1 скилл работать не сможет. Обычные запросы проходят в анонимном режиме без авторизации, но для платных моделей или личной истории придётся войти в аккаунт внутри этого же отладочного профиля вручную.

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

  • парсить ответы веб-версии ChatGPT без платного API-ключа
  • извлекать JSON гидратации страницы с метаданными сессии
  • перехватывать потоковые SSE-события диалога
  • выгружать переписку и ответы бэкенда в локальные JSON-файлы

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

  • Найди в ChatGPT свежие тренды фронтенда и сохрани JSON ответов
  • Сделай поиск в ChatGPT по запросу 'architecture patterns' и забери hydration
  • Спарси ответ ChatGPT на вопрос про настройку NGINX в файлы /tmp

Как установить chatgpt-search

1Через Skills CLI (Vercel)

npx skills add SeifBenayed/cloclo --skill chatgpt-search -a claude-code

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

~/.claude/skills/chatgpt-search/SKILL.md

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

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

Вопросы о chatgpt-search

Как установить chatgpt-search в Claude Code?

Запустите команду npx skills add SeifBenayed/cloclo --skill chatgpt-search -a claude-code в терминале. Также можно скопировать файл вручную по пути ~/.claude/skills/chatgpt-search/SKILL.md.

Что делает скилл chatgpt-search?

Он подключается к локальному Chrome через порт отладки, отправляет запрос в веб-интерфейс ChatGPT и извлекает ответ. Скилл сохраняет текст переписки, hydration JSON и перехваченные сетевые вызовы в /tmp.

Нужен ли аккаунт OpenAI для выполнения поиска?

Базовые запросы работают без входа в систему в анонимном режиме ChatGPT. Для доступа к личной истории или платным подпискам нужно один раз авторизоваться в окне отладочного Chrome вручную.

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

SKILL.md · MIT
---
name: chatgpt-search
description: |
  Search ChatGPT and extract the full response + hydration JSON that powers the UI.
  Attaches to a running Chrome instance (port 9222 by default), opens ChatGPT,
  submits a query, waits for the streamed response, and returns structured data:
  messages, product cards, hydration JSON, and API calls.
  Use when asked to "search chatgpt", "ask chatgpt", "chatgpt search",
  "get chatgpt response", or "scrape chatgpt".
allowed-tools: Browser,Bash,Read,Write,Glob,Grep
---

# ChatGPT Search — Extract structured response + hydration JSON

## Prerequisites

A Chrome instance must be running with `--remote-debugging-port=9222`.
If not running, launch it:

```bash
# Kill existing Chrome first
pkill -9 -f "Google Chrome" 2>/dev/null; sleep 2

# Launch with debug port + user's real profile copy
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
  --remote-debugging-port=9222 \
  --user-data-dir="$HOME/.claude/browser-profiles/chrome-debug-full" \
  --no-first-run &>/dev/null &
```

If the profile doesn't exist yet, create it by copying the user's real Chrome profile:
```bash
REAL="$HOME/Library/Application Support/Google/Chrome"
COPY="$HOME/.claude/browser-profiles/chrome-debug-full"
mkdir -p "$COPY"
cp "$REAL/Local State" "$COPY/" 2>/dev/null
cp -R "$REAL/Default" "$COPY/Default" 2>/dev/null
rm -rf "$COPY/Default/Cache" "$COPY/Default/Code Cache" 2>/dev/null
```

## Workflow

The user provides a search query. Execute these steps:

### Step 1: Verify Chrome is running with debug port

```bash
curl -s http://127.0.0.1:9222/json/version | head -1
```

If it fails, launch Chrome as described in Prerequisites.

### Step 2: Attach + enable network log + open ChatGPT

```
Browser { action: "new_session", session_id: "chatgpt", cdp_url: "http://127.0.0.1:9222" }
Browser { action: "enable_network_log", session_id: "chatgpt" }
Browser { action: "new_tab", url: "https://chatgpt.com", session_id: "chatgpt" }
```

Wait 5 seconds for page load.

### Step 3: Inject fetch/SSE interceptor

```
Browser { action: "evaluate", session_id: "chatgpt", value: "window.__sse=[];window.__api=[];const _f=window.fetch;window.fetch=async function(...a){const url=typeof a[0]==='string'?a[0]:a[0]?.url||'?';const m=a[1]?.method||'GET';const rb=a[1]?.body;const resp=await _f.apply(this,a);const ct=resp.headers.get('content-type')||'';const cl=resp.clone();if(ct.includes('event-stream')){const rd=cl.body.getReader();const dc=new TextDecoder();let full='';(async()=>{try{while(true){const{done,value:v}=await rd.read();if(done)break;full+=dc.decode(v,{stream:true});}}catch{}window.__sse.push({url,m,s:resp.status,sz:full.length,body:full,ts:Date.now()});})();}else{cl.text().then(t=>{if(t.length>30)window.__api.push({url,m,s:resp.status,sz:t.length,body:t,ts:Date.now()});}).catch(()=>{});}return resp;};'ok'" }
```

### Step 4: Type query + submit

Use real CDP key events for React compatibility:

```
Browser { action: "click", selector: "#prompt-textarea, textarea", session_id: "chatgpt" }
```

Then type each character of the query using `send_keys` — but for long queries, use `evaluate` with the native setter:

```
Browser { action: "evaluate", session_id: "chatgpt", value: "Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype,'value').set.call(document.querySelector('#prompt-textarea,textarea'),'THE QUERY HERE');document.querySelector('#prompt-textarea,textarea').dispatchEvent(new Event('input',{bubbles:true}));'typed'" }
```

Wait 800ms, then submit:

```
Browser { action: "evaluate", session_id: "chatgpt", value: "(function(){var btn=document.querySelector('[data-testid=\"send-button\"],button[aria-label*=\"Envoyer\"],button[aria-label*=\"Send\"]');if(btn&&!btn.disabled){btn.click();return 'sent';}var btns=[...document.querySelectorAll('button')];var s=btns.find(function(b){return b.querySelector('svg')&&!b.disabled&&b.closest('[class*=\"composer\"]');});if(s){s.click();return 'sent-svg';}return 'no-btn';})()" }
```

### Step 5: Wait for response

Poll every 5 seconds for up to 60 seconds, checking message count:

```
Browser { action: "evaluate", session_id: "chatgpt", value: "document.querySelectorAll('[data-message-author-role]').length" }
```

Stop when message count >= 2 (user + assistant).

### Step 6: Extract results

**Messages (user + assistant full text):**
```
Browser { action: "evaluate", session_id: "chatgpt", value: "(function(){var msgs=document.querySelectorAll('[data-message-author-role]');var r=[];msgs.forEach(function(m){r.push({role:m.getAttribute('data-message-author-role'),text:m.textContent.trim()})});return JSON.stringify(r);})()" }
```

**Hydration JSON (session, config, feature flags):**
```
Browser { action: "evaluate", session_id: "chatgpt", value: "var e=document.querySelector('script[type=\"application/json\"]');e?e.textContent:''" }
```

**Intercepted SSE streams (conversation stream + search product updates):**
```
Browser { action: "evaluate", session_id: "chatgpt", value: "JSON.stringify((window.__sse||[]).map(function(s){return{url:s.url,method:s.m,status:s.s,size:s.sz}}))" }
```

To get a specific SSE body (e.g., index 0):
```
Browser { action: "evaluate", session_id: "chatgpt", value: "(window.__sse||[])[0]?.body||''" }
```

**Intercepted API calls:**
```
Browser { action: "evaluate", session_id: "chatgpt", value: "JSON.stringify((window.__api||[]).filter(function(a){return a.url.includes('backend')}).map(function(a){return{url:a.url,method:a.m,status:a.s,size:a.sz}}))" }
```

**CDP network log (all HTTP requests/responses):**
```
Browser { action: "get_network_log", session_id: "chatgpt", filter: "backend" }
```

### Step 7: Save to /tmp

Save all extracted data to `/tmp/chatgpt-search-*.json`:
- `/tmp/chatgpt-search-messages.json` — user + assistant messages
- `/tmp/chatgpt-search-hydration.json` — UI hydration JSON
- `/tmp/chatgpt-search-sse.json` — SSE stream data (if captured)
- `/tmp/chatgpt-search-api.json` — API call responses

### Step 8: Report

Present the assistant's response to the user, and list saved files with sizes.

## Output format

```
## ChatGPT Search: [query]

### Response
[Full assistant message text]

### Files saved
- /tmp/chatgpt-search-messages.json (X KB) — conversation messages
- /tmp/chatgpt-search-hydration.json (X KB) — UI hydration data
- /tmp/chatgpt-search-sse.json (X KB) — SSE streams
- /tmp/chatgpt-search-api.json (X KB) — API responses

### Metadata
- Model: [from hydration or conversation init]
- Session ID: [from hydration]
- Country: [from hydration]
```

## Important notes

- ChatGPT works without login for basic queries (anonymous mode)
- For authenticated queries, the user must log in manually in the debug Chrome
- The fetch interceptor captures SSE streams (conversation + search/product_update)
- CDP network log captures JSON API calls but NOT SSE stream bodies
- Always close the session when done: `Browser { action: "close_session", session_id: "chatgpt" }`

© SeifBenayed · MIT · SeifBenayed/cloclo

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

Все скиллы по теме «Браузер и парсинг» →
agent-browser vercel-labs Скилл управляет браузером через CLI: открывает страницы, заполняет формы, нажимает кнопки и проверяет веб-приложения. Подходит для задач, где агенту нужно действовать в интерфейсе. CX Codex +1 1 200 000установок webapp-testing официальный anthropics Скилл запускает проверки локальных веб-приложений через Playwright: помогает отлаживать UI, делать скриншоты и смотреть логи браузера. 186 758установок computer-use stablyai Скилл ведёт видимое окно приложения через orca computer: читает дерево доступности, кликает, печатает и снимает скриншоты. Нужен, когда задача упирается в интерфейс. CX Codex +1 239 600установок browser-use browser-use Даёт агенту живой Chrome через CDP: клики, ввод, скриншоты и страницы, которым нужен JS или ваша логин-сессия. CX Codex +1 98 200установок playwright-cli microsoft Скилл, который даёт агенту браузер: открыть страницу, кликнуть по элементу, снять снимок и разобрать тесты Playwright. CX Codex +1 195 700установок last30days mvanhorn Собирает посты и реакции по любой теме за последние 30 дней из Reddit, X, YouTube, TikTok, Hacker News, Polymarket, GitHub и веба. Пригодится, когда нужно понять, что реально говорят люди, а не что пишут в обзорах. CX Codex +1 53 000установок

Из того же набора10

review-pr Разбирает диф ветки по чек-листу: баги, безопасность, производительность, тесты. Выдаёт вердикт — апрув, правки или обсуждение. CX Codex +1 ★ 116звёзд репо product-self-knowledge Направляет агента в официальную документацию Anthropic при вопросах о Claude Code, Claude API и Claude.ai вместо устаревших данных из памяти модели. CX Codex +1 ★ 116звёзд репо pdf-reading Скилл для чтения PDF-файлов с диска: извлечение текста, растеризация страниц, анализ таблиц, картинок и вложений. CX Codex +1 ★ 116звёзд репо file-reading Скилл-маршрутизатор: подсказывает агенту, каким инструментом открыть загруженный файл — PDF, DOCX, XLSX, CSV, JSON, картинку или архив. CX Codex +1 ★ 116звёзд репо docx Скилл для создания, чтения и редактирования документов .docx через инструмент Document, правку XML и скрипты сборки. CX Codex +1 ★ 116звёзд репо debug Разбирает ошибки, сбои тестов и неожиданное поведение: ищет причину в коде и предлагает исправление. По умолчанию скилл только диагностирует и не меняет файлы. CX Codex +1 ★ 116звёзд репо commit Скилл смотрит на проиндексированные изменения и пишет сообщение коммита по conventional commits. Пригодится, когда правки уже готовы, а формулировать лень. CX Codex +1 ★ 116звёзд репо browse Скилл управляет браузером через визуальную проверку страниц: открывает сайты, заполняет формы и сверяет результат. Пригодится для проверки интерфейса или работающего сайта. CX Codex +1 ★ 116звёзд репо

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

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