# Приложение для Mac

> Запускайте Skynet на своём Mac с вашим агентом для программирования и Docker.

Приложение Skynet для Mac запускает Skynet на вашем компьютере. Оно отправляет вызовы моделей через CLI для программирования, в котором вы вошли на своём Mac, поэтому эти вызовы оплачивает тариф вашего CLI. Приложение также можно связать с вашей учётной записью в облачном Skynet.

## Требования

- Mac с процессором Apple silicon. Сборки для Intel существуют, но на оборудовании Intel их никто не тестировал.
- Запущенный Docker Desktop с включённой настройкой **Use Rosetta for x86_64/amd64 emulation**.
- Один CLI для программирования, в котором выполнен вход:
  - Claude Code (`claude`) версии 2.1.226 или новее, или
  - Codex (`codex`) версии 0.160.0 или новее.

> [!WARNING]
> Codex должен использовать вход через ChatGPT. Вход с API-ключом не подходит. Вход, сохранённый в связке ключей macOS (Keychain), тоже не подходит.

### Настройка Codex

Codex должен хранить учётные данные в файле. Выполните эти шаги перед первым запуском:

1. Откройте `~/.codex/config.toml` и добавьте эту строку:

```toml
cli_auth_credentials_store = "file"
```

2. Войдите со своей учётной записью ChatGPT:

```bash
codex login
```

## Установка приложения

Сборки подписаны ad hoc и не нотаризованы. macOS блокирует их, пока вы не снимете флаг карантина.

1. Откройте файл `.dmg`.
2. Перетащите **Skynet** в **Applications**.
3. Выполните эту команду в Терминале:

```bash
xattr -dr com.apple.quarantine /Applications/Skynet.app
```

4. Откройте Skynet из папки **Applications**.

> [!NOTE]
> Первый запуск занимает несколько минут. Приложение собирает локальный образ песочницы и готовит базу данных.

## Что происходит при запуске

Приложение выполняет эти шаги по порядку:

1. Читает `PATH` из вашей оболочки входа, чтобы найти Docker и ваш CLI.
2. Проверяет Docker и ваш CLI для программирования.
3. Запускает локальную базу данных Postgres в Docker.
4. Собирает образ песочницы `skynet-local-sandbox` для `linux/amd64`. Docker запускает его через Rosetta.
5. Обновляет схему базы данных.
6. Запускает локальный API и веб-приложение и показывает веб-приложение в окне.

### Проверки при первом запуске

Приложение показывает список проверок: **Docker**, **Coding CLI**, **Signed in**, **Usage limit**, **Local services** и **Account**. Если проверка не проходит, приложение показывает экран с инструкцией:

| Экран                      | Что сделать                                                                 |
| -------------------------- | --------------------------------------------------------------------------- |
| **Install Docker Desktop** | Установите Docker Desktop.                                                  |
| **Start Docker**           | Запустите Docker Desktop.                                                   |
| **Install a coding CLI**   | Установите Claude Code или Codex.                                           |
| **Update your coding CLI** | Обновите CLI до минимальной версии, указанной выше.                         |
| **Sign in to your CLI**    | Войдите в CLI в Терминале.                                                  |
| **Usage limit reached**    | Дождитесь времени сброса. После сброса новые задания снова можно запускать. |

Исправив проблему, нажмите **Check again**. Нажмите **Open logs**, чтобы посмотреть файлы логов. На экране **Usage limit reached** можно нажать **Open Skynet anyway**.

## Локальные запуски

В приложении вызовы моделей идут через CLI на вашем Mac. В меню моделей этот режим называется **Локально**. Подсказка гласит: «Вызовы оплачивает ваш тариф, поэтому эта модель добавляет к запуску $0.»

В приложении CLI называются **Claude Code** и **Codex**.

> [!NOTE]
> Приложение удаляет API-ключи из окружения процессов, которые оно запускает. Поэтому CLI использует вашу подписку, а не API-ключ.

### Запуск генератора предложений в вашем CLI

Настройка **Запускать генератор предложений в моём CLI** определяет, где работает агент — генератор предложений. Варианты: **Движок агента (по умолчанию)** и **Выкл. (изолированный генератор)**.

**Доступ генератора предложений** задаёт, к чему может обращаться CLI:

- **Только рабочая область** — значение по умолчанию. Этот вариант опирается на собственную песочницу каждого CLI.
- **Полный доступ** запускает CLI с правами вашего пользователя.

> [!WARNING]
> С вариантом **Полный доступ** CLI может читать, изменять и удалять любой файл, доступный вам, и обращаться к сети. Режим acceptEdits в Claude не изолирует сеть, даже с вариантом **Только рабочая область**.

### Разметка в приложении

Для разметки с помощью ИИ в приложении для Mac нужен ваш собственный ключ провайдера. Выберите модель в разделе **Ваш собственный ключ**. См. [Разметка данных в разметчике](/docs/ru/guides/tagger).

## Связь с учётной записью Skynet

Приложением можно пользоваться без учётной записи. Для этого нажмите **Use without signing in**. Чтобы синхронизироваться с облачной учётной записью, свяжите приложение с ней.

### Связывание этого Mac

1. На шаге **Sign in to Skynet** приложение открывает страницу **Link a Mac** в браузере по умолчанию.
2. Если браузер попросит, войдите в Skynet.
3. Проверьте список под заголовком **После связывания этот Mac сможет:**.
4. Нажмите **Связать этот Mac**. Страница покажет «Возвращаемся в приложение для Mac…».

Если вход не удался или вы его отменили, приложение показывает **Try again** и **Use without signing in**.

После связывания Mac может:

- Видеть ваше имя и адрес электронной почты.
- Видеть ваш баланс.
- Синхронизировать ваши запуски с учётной записью.
- Использовать облачные модели с оплатой из вашего баланса.
- Использовать ваши подключённые источники данных.
- Искать и просматривать веб-страницы через Skynet.

Для связи используется безопасный процесс входа (OAuth с PKCE). Приложение хранит свои токены на Mac в зашифрованном виде. Когда вы разрываете связь, Skynet отзывает токены.

### Ограничения связи

| Ограничение                                  | Значение                                   |
| -------------------------------------------- | ------------------------------------------ |
| Связанных Mac на одну учётную запись         | 10                                         |
| Время жизни токена доступа                   | 1 час, затем приложение обновляет его      |
| Тайм-аут неактивной связи                    | 30 дней без использования                  |
| Максимальный срок связи                      | 365 дней                                   |

После тайм-аута неактивности или по истечении максимального срока свяжите Mac снова.

### Статус связи

Приложение показывает одно из состояний: **Локальный режим**, **Связан с этим Mac**, **Войти для синхронизации** или **Связано (офлайн)**.

## Локальные сервисы и данные

Все локальные сервисы слушают только `127.0.0.1`:

| Сервис          | Диапазон портов   |
| --------------- | ----------------- |
| API             | 48100–48119       |
| Веб-приложение  | 48120–48139       |
| Postgres        | 48140–48159       |

Приложение хранит данные в `~/Library/Application Support/Skynet`. В папке `logs/` находятся `desktop.log`, `api.log`, `frontend.log`, `migrate.log` и `sandbox-build.log`.

Когда вы закрываете приложение, оно останавливает веб-приложение, API, Postgres и все контейнеры заданий.

### Сброс приложения

> [!WARNING]
> Эти команды удаляют все локальные данные, включая локальные запуски и наборы данных.

Сначала закройте приложение. Затем выполните:

```bash
docker volume rm skynet-local-pgdata
rm -rf ~/Library/Application\ Support/Skynet
```

## Что дальше

- [Начните запуск](/docs/ru/guides/submit).
- Прочитайте об [оплате](/docs/ru/concepts/billing) облачных моделей.
- Прочитайте раздел [Безопасность](/docs/ru/security).

---

Source: https://staging.skynetml.com/docs/ru/guides/mac-app
