Skip to content
Back to skills

Pult

ASecurity

📱 ПУЛЬТ — ежедневная ПУСТАЯ сессия с Remote Control на каждом узле Антона, чтобы он мог управлять машиной с ТЕЛЕФОНА без AnyDesk. Триггеры “/pult“, “/пульт“, “/cockpit“, “поставь пульт“, “сессия-пульт“, “нужен доступ с телефона“, “пульт не поднялся“, “проверь пульты на флоте“

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

Works with

  • mcp

Security analysis

A100/100

Scanned October 6, 2026

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

Installs into .claude/skills of the current project.

Are you the author of Pult?

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

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

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: pult
description: "📱 ПУЛЬТ — ежедневная ПУСТАЯ сессия с Remote Control на каждом узле Антона, чтобы он мог управлять машиной с ТЕЛЕФОНА без AnyDesk. Триггеры “/pult“, “/пульт“, “/cockpit“, “поставь пульт“, “сессия-пульт“, “нужен доступ с телефона“, “пульт не поднялся“, “проверь пульты на флоте“"
version: 1.0.0
---

> 🔴🔴 **ОПРОВЕРГНУТО 10.09.2026 13:45 — ЧИТАЙ ПЕРЕД ИСПОЛНЕНИЕМ.**
> Замер по логу приложения (`%LOCALAPPDATA%\Claude\Logs\main.log`, 07-10.09):
> планировщик поднял **51 сессию**, Remote Control получили из них **0**.
> Приложение включает RC только на трёх UI-событиях — `first_turn`, `warm_send`,
> `cold_resume` (строка `[rcAutoEnable] verdict: ... trigger=<X>`), и сессия,
> рождённая scheduled-task, ни одного из них не вызывает.
> ⇒ Ежедневная пустая сессия по крону телефоном НЕ управляется. Ставить её как
> «пульт» больше нельзя — это ложная зелень второго рода.
> ✅ Что теперь верно: `cold_resume` РАБОТАЕТ, значит **любая** сессия, открытая
> Антоном на десктопе одним кликом, становится управляемой с телефона.
> Отдельный пульт не нужен, нужен один клик. Подробности: память
> `remote-control-always-on` §Опровержение 10.09.


# 📱 Пульт — свежая сессия под телефон, каждый день, на каждом узле

**Приказ Антона 09.09.2026** (голосом 00:15 + 07:49) и подтверждение 10.09.2026 («и хаб, и оба моих ноутбука — по одной такой сессии в сутки»).

**Корень, ради которого это существует** ([[remote-control-always-on]], доказано main.log 18.08): RC-мост по-сессионный и рождается ТОЛЬКО в момент старта нового процесса сессии. Резюм старой сессии моста НЕ поднимает — на телефоне «Disconnected», тап её не будит.

Значит управляемая сессия = ВСЕГДА свежерождённая. С телефона создать новую нельзя ⇒ её обязана рождать рутина.

**Дешевизна — часть контракта.** Пульт стоит ~0 токенов: ставит имя, роняет одну строку, молчит. Любая инициатива в пультовой сессии = дефект.

## Шаг 1 — статус текущего узла (детерминированно, 0 токенов)

```bash
python ~/.claude/scripts/pult_status.py
```

exit 0 = пульт ЖИВ (есть в расписании) → Шаг 3. exit 1/2 → Шаг 2. exit 3 = реестр приложения не найден, прибор себя не доказал — молчи о данных, разбирайся с прибором.

⛔ **`ls ~/.claude/scheduled-tasks/` доказательством НЕ является.** Эта папка синкается между узлами через claude-config, а РЕГИСТРАЦИЯ расписания — локальная, в реестре аккаунта приложения (`scheduled-tasks.json`, поле записи `id`, **не** `taskId`). Замер 10.09.2026: на хабе папка лежала, записи в реестре не было — пульт по утрам не вставал, а глазами выглядел стоящим. Это ложная зелень, ровно [[instrument-is-a-claim-too]].

## Шаг 2 — поставить пульт на ЭТОМ узле

`create_scheduled_task` со строго такими полями:

- `taskId`: `rc-cockpit-anton-daily` (имя ОДНО на весь флот — так `fleet`-проверка ищет его одной строкой)
- `schedule`: cron ежедневно `08:44` локального времени узла (диспетчер сдвигает на ~+4 мин, это норма)
- `notifyOnCompletion`: `false` — пульт не должен пищать Антону каждое утро
- `description`: `📱 Пустая сессия-пульт: Remote Control с телефона`
- `prompt` — САМОДОСТАТОЧНЫЙ (сессия стартует без контекста родителя), тело ниже.

Тело промпта (подставь имя узла вместо `<УЗЕЛ>` — короткое, как Антон его называет: ZBook / Хаб / MacBook):

```
ПЕРВЫМ ДЕЛОМ переименуй эту сессию: вызови mcp__ccd_session_mgmt__set_session_title
с title "[Антон] 📱 Пульт <УЗЕЛ> <ДД.ММ сегодняшняя дата>".

Ты — ПУСТАЯ сессия-пульт для Антона. Твоя работа — стоить ноль токенов и ждать.

После переименования сделай РОВНО одно: ответь одной строкой по-русски
"📱 Пульт готов, жду команду с телефона. Антон, ответь любым словом." и остановись.

Больше НИЧЕГО: не читай инбокс, не запускай скрипты, не шли в шину и Telegram,
не строй дашборды, не делай ретро, не делай RECALL, без ELI5-блока.
Никаких инициатив до первого сообщения Антона.
Когда Антон напишет — работай как обычная сессия по CLAUDE.md.
```

⛔ **Модель задать нельзя** — планировщик её не принимает, Антон переключает сам (его дефолт «opus medium»). Не выдумывай поле.
⛔ **Из РУТИННОЙ сессии `create_scheduled_task` не звать** (CLAUDE.md §9.2): в безлюдном прогоне апрув-окно некому нажать, сессия виснет. Пульт ставится из ЖИВОЙ сессии либо через сид `spawn_queue.py`.

Сразу после создания — объяви выход (§5.5), иначе рутина считается немой:

```bash
python -c "import json; p=r'[путь владельца]'; d=json.load(open(p,encoding='utf-8')); d['exempt']['rc-cockpit-anton-daily']='пульт по построению молчит: выход = сама живая сессия-пульт, потребитель = Антон с телефона (RC-мост); проверка = sessions_now.py утром'; json.dump(d,open(p,'w',encoding='utf-8'),ensure_ascii=False,indent=1); print('exempt записан')"
```

⚠️ Грабля 10.09 (хаб): `green_gap.py exempt <id> --reason` НЕ существует — движок лежит в `scripts/_shared/green_gap.py` и субкоманды exempt не имеет (печатает подсказку и выходит). Причина пишется строкой прямо в `green_gap_exempt.json` (ключ в объекте `exempt`), команда выше делает ровно это.
```bash
: # (историческая строка удалена — не звать green_gap.py exempt)
```

## Шаг 3 — статус по ФЛОТУ (узлы Антона с приложением Claude)

Пульт нужен на трёх узлах: **ZBook** · **Хаб [машина флота]** · **[машина флота]**.
[машина флота] (Якорь, Linux VPS) — приложения нет, пульт неприменим, это законный skip.
Узлы [коллега] и [коллега] — не пульт Антона, не трогаем.

```bash
# хаб — прибором, не наличием папки
python ~/.claude/scripts/hubrun.py --cmd 'python "$env:USERPROFILE\.claude\scripts\pult_status.py"'
```

[машина флота] по ssh недоступен (Remote Login выключен — замер 10.09, таймаут порта 22). Единственная дверь к нему = шина, ставит сессия НА САМОМ Mac (§7.2: пир своё делает у себя). Строку ниже про bus_send — использовать сразу, не искать ssh.

Узел молчит/недоступен → НЕ молчать: TASK в шину dual-send, чтобы поставила сессия НА ТОМ узле (§7.2 — пир своё ставит у себя):

```bash
python ~/.claude/scripts/bus_send.py <MACHINE_KEY> "TASK: поставь у себя ежедневный пульт — скилл /pult Шаг 2. Проверка ФАКТОМ: python ~/.claude/scripts/pult_status.py. Причина: Антон управляет узлом с телефона, RC живёт только у свежей сессии."
```

## Шаг 4 — хвост «вторые аккаунты»

Задача живёт в реестре ТОГО аккаунта приложения, из-под которого создана. У Антона на узлах бывает второй аккаунт (BB / a@) — там пульта НЕТ, пока не создашь из сессии этого аккаунта. Не закрывай вопрос словом «стоит на узле», если аккаунтов два: назови, в каком именно стоит.

## Шаг 5 — вердикт о скилле (§9.3-бис, обязателен)

Одной строкой: 🔧 обновляю (что споткнулось + чиню тем же заходом) · 📝 обновлю не сейчас (причина + куда легла строка) · ✅ не надо (почему именно). Пустое «не надо» вердиктом не является.

## Проверка живости (что считать доказательством)

«Задача создана» ≠ «пульт работает». Доказательство = Антон открыл сессию с телефона и она ответила (канарейка 17.08 13:19–14:03 — так и доказали). Прибор постфактум:

```bash
python ~/.claude/scripts/sessions_now.py    # свежая "[Антон] 📱 Пульт ..." в списке = утро прошло штатно
```

Канон: память [[remote-control-always-on]] · CLAUDE.md §4.1 (человек = бутылочное горлышко), §9.2 (рождение сессий), §5.5 (рутина называет свой выход).

## Грабли, проверенные на живых данных (не повторяй)

- `bus_send.py` — аргументы ПОЗИЦИОННЫЕ (`bus_send.py <MACHINE_KEY> "текст"`), флагов `--to/--text` нет.
- Тело задачи для робота обязано начинаться с `TASK:` — **с двоеточием**. Гейт шины отбивает «TASK » без двоеточия: инбокс-робот такое не берёт, сообщение молча теряется как задача.
- Реестр задач: `%APPDATA%/Claude/claude-code-sessions/<org>/<acct>/scheduled-tasks.json` (Win), `~/Library/Application Support/Claude/...` (macOS). Ключ записи — `id`.
- Модели у задачи нет: планировщик поле не принимает, Антон переключает вручную.


<!--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…