# Mac アプリ

> 自分のコーディングエージェントと Docker を使って Mac で Skynet を実行します。

Skynet Mac アプリは、Skynet を自分のコンピューター上で実行します。モデルの呼び出しは、Mac でサインイン済みのコーディング CLI を通じて送られます。そのため、これらの呼び出しの料金は CLI のプランが支払います。アプリを、ホストされた Skynet アカウントにリンクすることもできます。

## 要件

- Apple シリコン搭載の Mac。Intel 向けのビルドもありますが、Intel ハードウェアではテストされていません。
- Docker Desktop が起動しており、**Use Rosetta for x86_64/amd64 emulation** がオンになっていること。
- サインイン済みのコーディング CLI が 1 つあること。
  - Claude Code (`claude`) 2.1.226 以降、または
  - Codex (`codex`) 0.160.0 以降。

> [!WARNING]
> Codex は ChatGPT のサインインを使う必要があります。API キーによるサインインは対象外です。macOS のキーチェーンに保存されたログインも対象外です。

### Codex を設定する

Codex は認証情報をファイルに保存する必要があります。初回起動の前に、次の手順を行ってください。

1. `~/.codex/config.toml` を開き、次の行を追加します。

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

2. ChatGPT アカウントでサインインします。

```bash
codex login
```

## アプリをインストールする

ビルドはアドホック署名されており、公証されていません。quarantine フラグを削除するまで、macOS はアプリをブロックします。

1. `.dmg` ファイルを開きます。
2. **Skynet** を **Applications** にドラッグします。
3. ターミナルで次のコマンドを実行します。

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

4. **Applications** から Skynet を開きます。

> [!NOTE]
> 初回起動には数分かかります。アプリはローカルのサンドボックスイメージをビルドし、データベースを準備します。

## 起動時の処理

アプリは次の手順を順番に行います。

1. Docker と CLI を見つけられるように、ログインシェルから `PATH` を読み取ります。
2. Docker とコーディング CLI をチェックします。
3. Docker 内でローカルの Postgres データベースを起動します。
4. `linux/amd64` 向けのサンドボックスイメージ `skynet-local-sandbox` をビルドします。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** をクリックできます。

## ローカルでの実行

アプリでは、モデルの呼び出しは Mac 上の CLI を通じて行われます。モデルメニューでは、このモードは **ローカル** と表示されます。ヒントには「このコンピューターでサインイン済みのコーディングエージェント CLI で実行します。呼び出しの料金はご利用のプランが支払うため、このモデルの実行費用は $0 です。」と表示されます。

アプリ内での CLI の名前は **Claude Code** と **Codex** です。

> [!NOTE]
> アプリは、自身が起動するプロセスの環境から API キーを削除します。そのため、CLI は API キーではなく、あなたのサブスクリプションを使います。

### 提案エージェントを CLI で実行する

**提案エージェントを自分の CLI で実行** の設定は、提案エージェントをどこで実行するかを制御します。選択肢は **エージェントエンジン（既定）** と **オフ（サンドボックスの提案エージェント）** です。

**提案エージェントのアクセス権** は、CLI が操作できる範囲を設定します。

- **ワークスペースのみ** が既定です。各 CLI に組み込まれたサンドボックスに依存します。
- **フルアクセス** は、あなたのユーザー権限で CLI を実行します。

> [!WARNING]
> **フルアクセス** では、CLI はあなたがアクセスできるすべてのファイルを読み取り、変更し、削除できます。ネットワークにもアクセスできます。Claude の acceptEdits モードは、**ワークスペースのみ** の場合でも、ネットワークを隔離しません。

### アプリでのタグ付け

Mac アプリでの AI によるタグ付けには、独自のプロバイダーキーが必要です。**自分のキー** でモデルを選んでください。[タガーでデータにラベルを付ける](/docs/ja/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 を通じてウェブを検索・閲覧する。

リンクには、安全なサインインフロー（PKCE を使用した OAuth）を使います。アプリはトークンを暗号化して 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/ja/guides/submit)。
- ホストされたモデルについては、[請求](/docs/ja/concepts/billing) をお読みください。
- [セキュリティ](/docs/ja/security) をお読みください。

---

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