Політика приватності Skipper
Редакція від 22 вересня 2026 року. Стосується застосунку Skipper для macOS, застосунку Skipper Remote для iOS і ретранслятора skipperwow.com, через який вони зв'язуються між собою.
Коротко
Skipper — застосунок, який живе на твоєму Маку. У нього немає облікового запису, немає входу за паролем, немає аналітики, немає збирача збоїв і немає сервера, куди він складав би твою роботу.
Три канали, і тільки три, можуть винести щось за межі Мака. Перші два вмикаєш ти сам, перевірка оновлень увімкнена одразу:
- Remote Control — дзеркало терміналів на твоєму телефоні. Вміст зашифровано між Маком і телефоном; ретранслятор бачить шифротекст.
- Публічне посилання на дошку задач — сторінка із задачами для тих, кому ти дав посилання. Тут наскрізного шифрування немає: текст задач іде через ретранслятор усередині TLS.
- Перевірка оновлень — звичайний 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) за описаним у репозиторії протоколом, але зовнішнього аудиту безпеки він не проходив. Ми кажемо це прямо, бо «шифрується» без цього застереження читається як обіцянка, якої ніхто не давав.
Зміни
Якщо політика зміниться, зміниться і дата на початку цього файлу, а сам файл поїде з найближчим випуском. Минулі редакції залишаються в історії репозиторію.