# Політика приватності Skipper

Редакція від 22 вересня 2026 року. Стосується застосунку Skipper для macOS,
застосунку Skipper Remote для iOS і ретранслятора `skipperwow.com`, через який
вони зв'язуються між собою.

## Коротко

Skipper — застосунок, який живе на твоєму Маку. У нього немає облікового
запису, немає входу за паролем, немає аналітики, немає збирача збоїв і немає
сервера, куди він складав би твою роботу.

Три канали, і тільки три, можуть винести щось за межі Мака. Перші два вмикаєш ти
сам, перевірка оновлень увімкнена одразу:

1. **Remote Control** — дзеркало терміналів на твоєму телефоні. Вміст
   зашифровано між Маком і телефоном; ретранслятор бачить шифротекст.
2. **Публічне посилання на дошку задач** — сторінка із задачами для тих, кому ти
   дав посилання. Тут наскрізного шифрування **немає**: текст задач іде через
   ретранслятор усередині TLS.
3. **Перевірка оновлень** — звичайний HTTPS-запит до джерела випусків. Вона
   увімкнена одразу, і в ній їде тільки версія застосунку.

Плюс два, які ведуть не до нас: вкладки «Сервер» ходять по SSH на твої власні
машини, а вебхук іде на адресу, яку ти сам вписав.

Усе інше — проєкти, панелі, задачі, історія терміналів, ключі — залишається на
диску твого Мака.

## Хто відповідає за дані

Ivan Chabanenko, приватний підприємець (Einzelunternehmen), Lutherstraße 12,
39112 Magdeburg, Німеччина. Він же володіє ретранслятором `skipperwow.com` і
машиною, на якій той працює. Повні юридичні відомості — на сторінці Impressum.

Запитати будь-що про ці дані — або скористатися правами за GDPR на доступ,
виправлення, видалення чи перенесення того, що тебе стосується:
<support-skipper@chbnk.one>. Ти також можеш поскаржитися до наглядового органу;
для цього оператора це Landesbeauftragter für den Datenschutz Sachsen-Anhalt
(ст. 77 GDPR).

## Що Skipper зберігає на твоєму Маку

Усе це лежить у `~/Library/Application Support/Skipper` (у збірки Dev — у
`Skipper-Dev`), нікуди саме не йде і зникає разом із цією текою.

- **Структура роботи.** Проєкти, їхні сітки панелей, робочі каталоги, заголовки
  панелей, прив'язки агентів — файл `state.json`.
- **Задачі, епіки, розклад, вкладення.** Вкладення до задачі — це копія файлу,
  яку Skipper поклав собі.
- **Хвіст історії панелі.** Щоб після перезапуску було видно, чим скінчився
  минулий хід, Skipper зберігає останні рядки виводу кожної панелі: не більше
  2000 рядків на панель, не більше 8 МБ на весь флот, і не довше ніж сім днів.
- **Ключі та перепустки.** Довгоживучий ключ X25519 для Remote Control, токен
  кімнати в ретранслятора, список спарених телефонів, токен дошки. Файли з
  правами `0600` у каталозі з правами `0700`.
- **Журнал Remote Control.** Лише події зв'язку та помилки — під'єднався,
  відпав, відмова спарювання. Ані шифротексту, ані розшифрованого вмісту в
  журнал не пишеться. Кільце на 2000 записів у пам'яті плюс файл, який
  перезаписується по колу після 2 МБ.
- **Ключі SSH.** Якщо ти попросив Skipper завести ключ для сервера, він викликає
  системний `ssh-keygen`, і пара залишається в `~/.ssh`. Назовні йде лише
  відкрита половина — до `authorized_keys` того сервера, і тільки за твоєю
  командою.

Нічого з переліченого Skipper не надсилає нікуди сам собою.

## Що йде в мережу

### Remote Control (дзеркало терміналів на телефоні)

Вимкнений типово. Працює лише після того, як ти увімкнув його і спарив телефон,
звіривши коди на двох екранах.

- **Куди.** `wss://skipperwow.com/v1/ws` — ретранслятор на орендованій машині в
  Німеччині (Hetzner).
- **Що їде.** Вміст екранів панелей, розбір повідомлень агента, список задач,
  каталог запусків, твої натискання з телефона — тобто все, що ти бачиш на
  телефоні, і все, що ти з нього набираєш.
- **Як захищено.** Кожен кадр зашифровано ChaCha20-Poly1305 на ключах, які Mac і
  телефон вивели самі (обмін X25519 під час спарювання). Ключі не покидають
  пристроїв: у ретранслятора їх немає і ніколи не було.
- **Що бачить ретранслятор.** Шифротекст і маршрут: ідентифікатор кімнати,
  ідентифікатор пристрою, ідентифікатор сесії панелі, грубий клас події
  (`activity` / `attention` / `git`), номер по порядку і час отримання. Він не
  вміє прочитати жодного рядка твого термінала.
- **Що він зберігає.** Ті самі поля плюс сам шифротекст — у базі Postgres на тій
  самій машині. Плюс хеші SHA-256 токена Мака й токенів авторизації пристроїв:
  самі bearer-токени ретранслятору не відомі. Якщо сповіщення ввімкнено, поруч із
  парою зберігається сирий APNs-токен телефона — непрозора адреса доставки Apple,
  а не ключ до вмісту. Його видаляють після відкликання пристрою.
- **Скільки.** Події підчищаються: залишаються останні 500 подій кімнати **або**
  все за останні 24 години — що більше. Решта видаляється. Ніщо з цього не живе
  тижнями.
- **Артефакти.** Якщо ти відкрив телефону сторінку з Мака — теку на ньому або
  локальний сервер на ньому ж, — її вміст їде тим самим зашифрованим каналом і
  видно лише спареному пристрою. Публічного посилання в артефактів немає, а
  третьої адреси — чужого хоста — не буває взагалі.

### Сповіщення на телефон

Якщо ти дозволив сповіщення, ретранслятор просить Apple (APNs) розбудити твій
телефон.

- У самому сповіщенні їде заглушка («Skipper», «Update») і той самий
  зашифрований шматок, що й основним каналом. Текст повідомлення телефон
  розшифровує сам, у себе.
- Ретранслятор бачить APNs-токен, щоб адресувати доставку; Apple бачить цей токен,
  факт доставки і час. Вмісту не бачить ані Apple, ані ретранслятор.
- Частіше ніж одне сповіщення на дві секунди на пристрій не надсилається.

### Публічне посилання на дошку задач

Вимкнене типово, вмикається окремо для кожного робочого простору. Посилання живе,
поки ти його не вимкнув, але задачі за ним видно лише поки запущено застосунок:
знімка дошки на ретрансляторі немає навмисно, і коли Mac не на зв'язку, сторінка
не показує нічого.

Тут чесне попередження, а не дрібний шрифт: **наскрізного шифрування в дошки
немає.** Ретранслятор пересилає тіла кадрів між Маком і браузером і сам їх не
розбирає та не зберігає — але з'єднання захищене лише TLS, тобто технічно
власник ретранслятора міг би прочитати текст задач. Якщо задача містить те, чого
ніхто, крім тебе, бачити не повинен, — не публікуй цю дошку.

- **Куди.** `https://skipperwow.com/b/<ідентифікатор>`.
- **Що їде.** Заголовки і тексти задач, їхні статуси, і — якщо режим це дозволяє
  — задачі, які хтось створив просто на сторінці. Шлях до твоєї теки на сторінку
  не потрапляє ніколи: у дошки є окрема назва, яку задаєш ти.
- **Що зберігає ретранслятор.** Лише ідентифікатор посилання, хеш SHA-256 токена
  дошки і мітку збірки (`dev` / `live`). Жодної задачі він не зберігає: єдине
  джерело задач — твій Mac.
- **Пароль.** У режимі «за паролем» пароль перевіряє Mac, а не ретранслятор.
  Skipper тримає в себе лише його розтягнутий хеш; самого пароля не зберігає
  ніде і в журнал не пише.
- **Відкликання.** Зміна режиму або пароля перевипускає посилання: старе
  перестає працювати.

### Перевірка оновлень

Skipper питає в джерела випусків, чи немає нової версії: звичайний HTTPS-GET.
Їде лише заголовок `User-Agent` на кшталт `Skipper/<версія>`. Ані ідентифікатора
встановлення, ані імені машини, ані чогось про твою роботу Skipper при цьому не
надсилає. Завантаження образу — такий самий звичайний запит по файл.

Джерело за замовчуванням — `https://skipperwow.com/updates/`, тобто та сама
орендована машина, на якій стоїть ретранслятор. Адресу можна змінити в
налаштуваннях: поле «Откуда узнавать о выпусках» у розділі «Обновления».

### Вкладки «Сервер»

Skipper запускає системний `ssh` до хостів із твого `~/.ssh/config`. З'єднання
йде напряму з твого Мака на твій сервер, ретранслятор у цьому не бере участі й
про це нічого не знає. Skipper володіє рівно одним файлом у твоєму `~/.ssh` —
`config.d/skipper.conf`, і твій власний `config` не переписує.

### Вебхук

Якщо ти вписав адресу вебхука, Skipper після завершення роботи надішле туди POST
із підсумком. Що там опиниться, вирішуєш ти, обираючи, що класти в підсумок;
адреса теж твоя. Ми цієї адреси не знаємо і трафік через себе не пускаємо.

## Застосунок на телефоні (Skipper Remote)

Друга половина Remote Control — окремий застосунок для телефона, **Skipper
Remote**. Сам по собі він не показує нічого: на екрані лише те, що надсилає Мак,
з яким ти його спарував. Облікового запису, входу та аналітики в нього немає —
так само, як у Мака.

Що він тримає на телефоні:

- **Пару.** Бірер і два ключі сеансу — у Keychain телефона, у групі застосунків,
  яку застосунок ділить зі своїм розширенням сповіщень. Вони читаються після
  першого розблокування — саме це дозволяє розшифрувати сповіщення при згаслому
  екрані — і телефон вони не залишають.
- **Курсор доставки.** Які кадри цей пристрій уже бачив, щоб після перепідключення
  не показати прочитане вдруге.
- **Ідентифікатор пристрою, який він вигадує собі сам** — `d_` і вісім знаків. Не
  серійний номер телефона, не рекламний ідентифікатор, нічого з виданого
  системою. Мак і ретранслятор адресують ним цей пристрій, і більше він ні для
  чого.
- **Журнал зв'язку** того самого вигляду, що й маковський: підключилися,
  відвалилися, відмовлено — і жодного рядка виводу термінала. 2000 записів у
  пам'яті плюс файл, який ротується після 2 МБ.

Видалення застосунку видаляє все це.

Назовні йде те, що ти ним робиш: клавіші, які ти набираєш у дзеркалі панелі, і
дії, які ти в ній натискаєш. Вони їдуть запечатаними ChaCha20-Poly1305 на твій
Мак через той самий ретранслятор, який бачить шифротекст.

Камера потрібна рівно для одного — прочитати QR парування, показаний на Маку.
Знімок нікуди не зберігається й нікуди не надсилається. Застосунок не просить ні
контактів, ні фотографій, ні геопозиції, рекламного ідентифікатора в нього немає,
і чужих SDK у ньому немає зовсім: уся його криптографія — епловська (X25519,
ChaCha20-Poly1305).

## Чого Skipper не робить

- Не збирає аналітику і статистику використання.
- Не надсилає звітів про збої.
- Не вимагає облікового запису і не знає твоєї пошти.
- Не читає і не надсилає вміст файлів твоїх проєктів — окрім тих, що ти сам
  відкрив у панелі, яка дзеркалиться на спарений телефон, або сам віддав йому
  артефактом.
- Не віддає дані третім особам, не продає їх і не показує реклами.
- Не зберігає на ретрансляторі жодної задачі, жодного рядка термінала у
  відкритому вигляді.

## Хто ще бере участь

- **Hetzner Online GmbH** (Німеччина) — орендована машина, на якій працює
  ретранслятор. Фізичний доступ до диска, на якому лежать шифротекст і маршрутні
  мітки.
- **Apple** — доставка сповіщень через APNs, як описано вище.
- **Джерело випусків** — той сервер, у якого Skipper питає про оновлення, бачить
  факт запиту й IP-адресу, як будь-який сайт. За замовчуванням це
  `skipperwow.com` — той самий власник і та сама машина, що й у ретранслятора.

## Як усе видалити

- **Спарений телефон.** Відклич пристрій у налаштуваннях Remote Control: Mac
  видаляє його зі свого списку і знімає його рядок у ретранслятора.
- **Remote Control цілком.** Вимкнення зі стиранням видаляє локальні ключі, пару
  і список пристроїв. Уже накопичені події в ретранслятора підуть самі за
  правилом вище — не пізніше ніж за 24 години після останньої.
- **Публічна дошка.** Вимкни посилання — воно перестає працювати одразу, а рядок
  посилання на ретрансляторі більше нічого не обслуговує.
- **Усе локальне.** Видали `~/Library/Application Support/Skipper` (і
  `Skipper-Dev`, якщо ставив збірку Dev). Більше Skipper ніде нічого про тебе не
  тримає.

## Про чесність формулювань

Skipper — застосунок, написаний однією людиною. Шифрування Remote Control
зібране з перевірених примітивів CryptoKit (X25519, ChaCha20-Poly1305) за
описаним у репозиторії протоколом, але **зовнішнього аудиту безпеки він не
проходив**. Ми кажемо це прямо, бо «шифрується» без цього застереження читається
як обіцянка, якої ніхто не давав.

## Зміни

Якщо політика зміниться, зміниться і дата на початку цього файлу, а сам файл
поїде з найближчим випуском. Минулі редакції залишаються в історії репозиторію.


---

Page: https://skipperwow.com/uk/privacy/ · Markdown: https://skipperwow.com/uk/privacy/index.md
Other languages: English: https://skipperwow.com/privacy/ · Deutsch: https://skipperwow.com/de/privacy/
Skipper — https://skipperwow.com/ · Support: support-skipper@chbnk.one
