Skip to content
Back to skills

Whatsapp Pair

ASecurity

Привязать (или ПЕРЕпривязать) WhatsApp к этой машине — единственный шаг, который нельзя сделать за Антона, потому что… Триггеры «/whatsapp-pair», «/wa-pair», «подключи ватсап», «привяжи ватсап», «спарь ватсап», «ватсап отвалился», «ватсап не спарен», «перепривяжи whatsapp», «покажи QR ватсапа», «второй ватсап», «два ватсапа», «ватсап 2 аккаунта», «pair whatsapp», «relink whatsapp»

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 25, 2026
ai-agentspythonbashnodegit

Works with

  • mcp

Security analysis

A100/100

Scanned October 3, 2026

npx -y skills add tonydzi/second-brain-starter-kit --skill whatsapp-pair --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Whatsapp Pair?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Whatsapp Pair
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tonydzi-whatsapp-pair/badge)](https://www.skillsdirectory.com/skills/tonydzi-whatsapp-pair)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: whatsapp-pair
description: "Привязать (или ПЕРЕпривязать) WhatsApp к этой машине — единственный шаг, который нельзя сделать за Антона, потому что… Триггеры «/whatsapp-pair», «/wa-pair», «подключи ватсап», «привяжи ватсап», «спарь ватсап», «ватсап отвалился», «ватсап не спарен», «перепривяжи whatsapp», «покажи QR ватсапа», «второй ватсап», «два ватсапа», «ватсап 2 аккаунта», «pair whatsapp», «relink whatsapp»"
version: 1.0.0
---

OBJECTIVE: за один заход вернуть WhatsApp из RED в GREEN. Мою часть (мост, QR, страница,
детект, проверка) делаю сам; от Антона нужен ровно один физический жест — поднести телефон
к экрану. Финал = не «страница открылась», а зелёный вердикт независимого пробника.

## Почему скилл вообще есть (замеры, не теория)
- ⚠️ **21.09.2026, замер хаба: `read-only mode` — это НЕ «ватсап отвалился», и перепривязка тут не лечит.** Оба MCP (`mcp__whatsapp__*` и `mcp__whatsapp2__*`) вернули «another process holds the WhatsApp connection» с PID 47960 и 44656 — то есть рельса ЗАНЯТА чужой живой сессией, мост при этом здоров. Чужие PID НЕ убиваем. Прежде чем звать Антона с телефоном, отличи одно от другого: `python ~/.claude/scripts/wa_broker.py --status`.
- ⚠️ **Порт owner-брокера = 8791, а не 8768.** Документированный в старых сидах `127.0.0.1:8768` на хабе закрыт (`Test-NetConnection` → False), а owner слушает на **8791** и отвечает `{"error":"Unauthorized"}` на голый GET; токена в открытых конфигах (`~/.claude/*.json`, `scripts/*.py`) нет, значит HTTP-дверь без токена бесполезна и «порт закрыт» про 8768 — не доказательство смерти рельсы. Проверять надо ОБА порта и называть в отчёте именно поверхность.
- ⚠️ **LEGACY stdio инстансы = лок-война, а не один занявший.** 20.09 их было 2, 21.09 — **34**. Растущий список в `--status` означает, что процессы-сироты плодятся и отбирают лок друг у друга; это отдельный класс поломки (кандидат в reaper), а не повод перепривязывать аккаунт.
- 01.07 → 05.08.2026 мост стоял мёртвым **35 суток**: `auth_info/creds.json` пуст, входящие не
  доходили (возможны потерянные лиды). Рецепт починки каждый раз добывался заново — по кускам
  из трёх заметок и двух скриптов. Теперь он один и исполняемый.
- Терминальный ASCII-QR на Windows = мозаика, телефон её не берёт (видно в `server.log` живьём).
- QR живёт ~20с. Антон сканировал протухший и получал «check your connection and try again
  later» — это НЕ проблема сети, это старый код. Отсюда страница, которая сама берёт свежий.
- Антон не работает в терминале: ему нужно окно, куда просто смотришь.

## Движок (вся логика там, скилл — тонкая обёртка)
`python "$USERPROFILE\.claude\scripts\wa_qr_live.py"` · паспорт: `~/.claude/scripts/docs/wa_qr_live.md`

| команда | что делает |
|---|---|
| `--check` | диагноз без побочек: привязан? среда цела? сколько живых клиентов? |
| (без флагов) | боевой заход: мост + QR + живая страница `http://127.0.0.1:8799` |
| `--selftest` | проверка детали без телефона (гоняется в регресс-сетке) |
| `--heal-patch` | вернуть вендору печать сырого QR (её сносит любой `npm update`) |
| `--force` | погасить чужих whatsapp-клиентов и стартовать всё равно |
| `--account wa2` | работать со ВТОРЫМ аккаунтом (комбинируется с любой командой выше) |

Коды выхода: `0` привязан · `1` таймаут/QR не пришёл · `2` уже привязан · `3` среда не готова
· `4` крэш. Дефолтный таймаут 900с; `--port` если дефолтный занят.

## Два аккаунта на одной машине (с 03.09.2026)

Вендор кладёт ВСЁ состояние (auth_info, store, lock) под `$XDG_DATA_HOME/whatsapp-mcp`,
поэтому второй аккаунт = тот же вендор с другим XDG. Изоляция полная: свой линк, свой лок,
AUTH_KEY_DUPLICATED МЕЖДУ аккаунтами невозможен — блокирует только второй клиент ТОГО ЖЕ
аккаунта (движок различает их по argv-маркеру `--wa-account=<имя>`).

| | main | wa2 |
|---|---|---|
| auth/store | `~\.local\share\whatsapp-mcp\` | `~\.local\share\wa-wa2\whatsapp-mcp\` |
| страница QR | порт 8799, `~\.claude\whatsapp-mcp\` | порт 8809, `~\.claude\whatsapp-mcp-wa2\` |
| MCP-сервер | `whatsapp` | `whatsapp2` (env XDG_DATA_HOME зашит в `.claude.json`) |
| пробник | `wa_probe.py --json` | `XDG_DATA_HOME=$USERPROFILE/.local/share/wa-wa2 python wa_probe.py --json` |

Спаривать оба можно ПАРАЛЛЕЛЬНО: две страницы на двух портах, Антон сканирует каждую
своим телефоном/аккаунтом. Патч QR_RAW один на двоих (общий dist вендора).

## Ход работы

**Шаг 0. Диагноз — до всякой стройки.**
```bash
python "$USERPROFILE\.claude\scripts\wa_qr_live.py" --check
```
- `привязан : ДА` → скан НЕ нужен. Молчание канала при живых кредах — это другая болезнь
  (демон/лок/вендор), иди в `wa_probe.py --json` и `wa_broker.py --status`, не гоняй Антона за телефоном.
- `среда : ...патч...` → сперва `--heal-patch`, потом заново. Без патча QR виден только кашей.
- `живых клиентов : N>0` → второй клиент на одном линке даёт **AUTH_KEY_DUPLICATED** и рвёт
  привязку у всех. Гаси их (или `--force`), но сперва пойми, кто это: node с живым
  родителем-`claude.exe` — легальная сессионная копия, а не зомби.

**Шаг 1. Спроси, телефон в руках?** Коды сгорают по одному каждые 20с, окно 15 минут. Запускать
«на всякий случай» = жечь цикл впустую. Одна строка: «телефон рядом? запускаю».

**Шаг 2. Подними страницу.**
```bash
python "$USERPROFILE\.claude\scripts\wa_qr_live.py"
```
Запускать **в фоне** (`run_in_background`), иначе блокирует сессию на весь скан. Скрипт печатает
адрес страницы. Дальше — обязательно доведи картинку до глаз Антона, а не просто дай URL:
- открой `http://127.0.0.1:8799` в браузере (preview) и **дай скриншот** — канон §2.5 «убедись,
  что он видит»;
- назови вслух путь `%USERPROFILE%\.claude\whatsapp-mcp\index.html` — ссылки у Антона не кликаются;
- инструкция на самой странице уже написана (Настройки → Связанные устройства → Привязка устройства).

**Шаг 3. Жди и следи.** Страница сама показывает поколение кода и переключается на «готово».
Со стороны сессии смотри `status.json`: `state=QR` + растущий `generation` = живой цикл;
`generation` не растёт больше минуты = мост встал, смотри `server.log`.

**Шаг 4. Проверь ЧУЖИМ прибором (обязательно).** Свой же скрипт не считается доказательством —
сторож не живёт в том, что сторожит:
```bash
python "$USERPROFILE\.claude\scripts\wa_probe.py" --json
```
`status:"GREEN"` = готово. `RED` с «МОЛЧИТ N суток» сразу после привязки — нормально: креды есть,
а свежих сообщений ещё нет; перепроверь после первого входящего, не объявляй победу заранее.

**Шаг 5. Прибери верстак.** Фоновый процесс сам гасит мост и не оставляет клиентов. Проверь
`--check` → `живых клиентов : 0`. Если привязка удалась — сними задачу
`10-Tasks/task-2026-08-05-wa-qr-relink.md` и пни `connector-health-daily`, чтобы табло позеленело.

## Границы
- **Скан = руки Антона.** Обойти нечем: не пароль из store и не OTP. Если он НЕ у экрана хаба —
  это не «жди», а другая рельса: `node "$USERPROFILE\.claude\scripts\wa_pair.mjs" <телефон без +>`
  просит у WhatsApp 8-значный код (телефон → Связанные устройства → «Связать по номеру телефона»).
  Код доезжает текстом в Telegram, QR — нет. Страница для этой рельсы не нужна.
- **Ничего наружу.** Скилл не шлёт ни одного сообщения в WhatsApp; привязка устройства обратима
  (телефон → Связанные устройства → выйти) и не Tier-2.
- **Не чинит доставку.** Спаренный мост ≠ работающая рассылка: тем занимается `wa_broker.py`
  (один владелец линка на машину) и связка демонов MCP.

## Грабли, за которые уже платили
1. `npm update` сносит патч `QR_RAW_BEGIN` → QR исчезает молча. `--check` это ловит.
2. `terminate()`/`kill()` на Windows не валит node надёжно → накапливаются клиенты → следующий
   заход ловит AUTH_KEY_DUPLICATED. Движок гасит через `taskkill /F /T`.
3. stdio-сервер гасит сам себя, как только закрыт stdin. Движок держит трубу открытой, поэтому
   отдельный `keepalive.js` больше не нужен.
4. «Профиль отвечает, чаты видны» ≠ мост жив: это локальный кэш, он врал нам 26 дней.
   Доказательство живости = свежесть данных + наличие кредов, и только оно.

Канон: память [[whatsapp-mcp-integration]] (стек, пути, патчи), [[whatsapp-dead-since-july-and-watchdog-lied]]
(почему сторож молчал), [[hub-connectors]]; CLAUDE.md §2.5 (покажи экран), §5.5 (сторож), §5.8 (тест+док+счётчик).


<!--kit-footer-->

---

**Like this skill?** It is one of 100 in [second-brain-starter-kit](https://github.com/tonydzi/second-brain-starter-kit): the second brain we built for ourselves and run every day at Palo Alto AI Research Lab. Install the whole set with `npx skills add tonydzi/second-brain-starter-kit`. Everything is open source and free, so take what you need.

Flagships worth a look on their own: [secondop-panel](https://github.com/tonydzi/secondop-panel) (a second opinion from a panel of external models), [claude-memory-tidy](https://github.com/tonydzi/claude-memory-tidy) (stop your agent's memory from rotting), [telegram-mcp-kit](https://github.com/tonydzi/telegram-mcp-kit) (your own Telegram over MCP in about 15 minutes).

Author: **Anton Dziatkovskii**, Palo Alto AI Research Lab. Telegram [@tonydzi](https://t.me/tonydzi) - WhatsApp [+1 341 222 9178](https://wa.me/13412229178) - X [@Tony_Stef_](https://x.com/Tony_Stef_)

**Engineers: want to test-drive this setup?** Message me. I hand out free starter seeds to engineers who test and report back, and custom skill requests are welcome.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…