# ai& CLI

Source: https://docs.aiand.com/ja/cli/

ai& CLI (`aiand`) は、ブラウザ経由でサインインし、API キーの管理を代行するコマンドラインツールです。コーディングエージェントを ai& で動かすための設定、プロンプトの送信、さらにモデルカタログ・リクエストログ・使用量の確認といったコンソールでの日常的な作業をターミナルから行えます。ソースコードは [github.com/aiandlabs/aiand-cli](https://github.com/aiandlabs/aiand-cli) で公開しています。

```bash
npm install -g @aiand/cli
aiand code                 # サインインし、OpenCode を設定して ai& 上で起動
aiand run "hello"          # またはプロンプトを 1 つだけ送信
```

## インストール

Node.js 22 以降が必要です。

<Tabs syncKey="os">
<TabItem label="npm">

```bash
npm install -g @aiand/cli
```

</TabItem>
<TabItem label="macOS / Linux">

```bash
curl -fsSL https://raw.githubusercontent.com/aiandlabs/aiand-cli/main/install.sh | bash
```

</TabItem>
<TabItem label="Windows">

```powershell
irm https://raw.githubusercontent.com/aiandlabs/aiand-cli/main/install.ps1 | iex
```

</TabItem>
</Tabs>

インストールスクリプトはシェルのプロファイルを編集して `aiand` を `PATH` に追加します。この変更を行わない場合は `AIAND_NO_MODIFY_PATH=1` を設定してください。

### アップデートとアンインストール

アップデートするには、インストールコマンドをもう一度実行します。

アンインストール時、インストールスクリプトはまず aiand が設定したすべてのコーディングエージェントを無効化してから CLI を削除します。`~/.config/aiand` 以下のプロファイルと認証情報は残ります。

<Tabs syncKey="os">
<TabItem label="npm">

```bash
aiand init --off
npm uninstall -g @aiand/cli
```

</TabItem>
<TabItem label="macOS / Linux">

```bash
bash ~/.aiand/cli/install.sh uninstall
```

</TabItem>
<TabItem label="Windows">

```powershell
& "$env:USERPROFILE\.aiand\cli\install.ps1" uninstall
```

</TabItem>
</Tabs>

## サインイン

```bash
aiand login
```

`aiand login` を実行するとブラウザが開きます。サインインを承認すると組織の [API キー](/ja/organizations/api-keys/) が作成されます。キー名は `aiand@<hostname>` となるため、コンソールでマシンごとに見分けられます。ブラウザでのサインインが完了できない場合 (ブラウザがない、タイムアウトした、ターミナルがない等) は、任意のデバイスで承認するコードによるサインインに切り替わります:

```
  Your code   BCDF-GHJK
  Approve at  https://api.aiand.com/auth/device?user_code=BCDF-GHJK
```

コンソールで作成済みのキーを使う場合:

```bash
aiand login --paste                # 入力を伏せ字で表示するプロンプト
aiand login --with-token < key.txt # 標準入力からキーを読み込む
```

`aiand whoami` はサインイン中のユーザー、組織、キーの有効期限を表示します。`aiand status` はこれに加えて、キーの保存先と設定済みのコーディングエージェントを表示します。

`aiand logout` は、`aiand login` で作成したキーを無効化するか確認します。貼り付けたキーはこのマシンから削除されるだけなので、コンソールで無効化してください。

### キーの保存先

キーは OS のキーチェーンが利用できる場合はそこに、利用できない場合は `~/.config/aiand/` 以下の暗号化ファイルに保存されます。このファイルの暗号鍵は同じ場所に置かれるため、ちょっと覗かれる程度は防げますが、ディレクトリを読める人からは保護できません。`AIAND_KEY_STORAGE=plaintext` を設定すると、所有者のみが読める平文ファイルに保存します。

`aiand login` で作成したキーの有効期間は 30 日です。CLI は有効期限の 3 日前から、または API がキーを拒否した時点で、キーを自動的にローテーションします。貼り付けたキーを CLI がローテーションや無効化することはありません。

<Aside type="tip">
  CI やスクリプトでは `aiand login` を使わずに `AIAND_API_KEY` を設定してください。CLI
  はそのキーを直接使い、ディスクには何も書き込みません。
</Aside>

## コマンド

| コマンド                              | 内容                                                                  |
| ------------------------------------- | --------------------------------------------------------------------- |
| `aiand login` / `aiand logout`        | このマシンのセッションを開始・終了                                    |
| `aiand whoami`                        | ユーザー、組織、キーの有効期限                                        |
| `aiand status`                        | サインイン状態と各コーディングエージェントの設定                      |
| `aiand code`                          | OpenCode を ai& 上で起動 (必要なら先に設定)                           |
| `aiand <agent>`                       | 同様にコーディングエージェントを ai& 上で起動                         |
| `aiand <agent> on` / `off` / `status` | コーディングエージェントを ai& を使うよう設定・設定を解除・確認       |
| `aiand init`                          | インストール済みのコーディングエージェントを検出してまとめて設定      |
| `aiand run-agent <agent>`             | 設定を変更せず、1 セッションだけコーディングエージェントを ai& で実行 |
| `aiand restore <agent> --force`       | エージェントの設定を aiand が変更する前の状態に戻す                   |
| `aiand run <prompt>`                  | プロンプトを 1 つ送信し、回答を stdout にストリーミング               |
| `aiand chat`                          | 対話形式の会話                                                        |
| `aiand models`                        | モデルカタログ (請求通貨建ての料金付き)                               |
| `aiand logs`                          | 最近のリクエスト (`--follow` で新しいリクエストを追跡)                |
| `aiand usage`                         | リクエスト数とトークン数 (前の期間との比較付き)                       |
| `aiand orgs`                          | 所属している組織                                                      |
| `aiand config`                        | プロファイルと既定値                                                  |
| `aiand key export`                    | アクティブなキーを出力 (他のツールへのパイプ用)                       |

ほとんどのコマンドは `--json` に対応し、すべてのコマンドで `--help` を使えます。

## コーディングエージェント

CLI は 3 つのコーディングエージェントに対応しています。`<agent>` には次のいずれかを指定します:

| エージェント | コマンド                               | ガイド                                       |
| ------------ | -------------------------------------- | -------------------------------------------- |
| OpenCode     | `aiand opencode` (または `aiand code`) | [OpenCode](/ja/integrations/opencode/)       |
| Claude Code  | `aiand claude`                         | [Claude Code](/ja/integrations/claude-code/) |
| Codex        | `aiand codex`                          | [Codex](/ja/integrations/codex/)             |

`aiand <agent>` はエージェントを ai& 上で起動します。サインインしていなければサインインを行い、エージェントがインストールされていなければインストールを提案します。エージェントがまだ ai& 向けに設定されていなければ先に `on` を実行するため、以後はエージェント本来のコマンドでも ai& が使われます。

```bash
aiand claude             # Claude Code を ai& 上で起動 (必要なら先に設定)
aiand claude on          # Claude Code が ai& を使うよう設定
aiand claude status      # Claude Code の現在の設定を確認
aiand claude off         # aiand が追加した設定だけを削除
aiand run-agent claude   # このセッションだけ ai& を使い、設定は変更しない
aiand init --all         # インストール済みのすべてのエージェントを設定
```

エージェント名より後の引数は、`aiand claude -p "explain this repo"` のようにそのままエージェントに渡されます。aiand 自身のフラグはエージェント名より前に置き (`aiand --profile work codex`)、aiand がサブコマンドとして解釈してしまう引数の前には `--` を付けてください (`aiand opencode -- status`)。モデルを指定するには `on` に `--model <id>` を渡します。

`on` は最初に変更する前にエージェントの設定のスナップショットを取り、`off` は aiand が追加した設定だけを削除します。aiand が変更する前の設定をそのまま復元するには `aiand restore <agent> --force` を実行します。`on` が各エージェントに書き込む内容は、それぞれのガイドを参照してください。

<Aside type="note">
  キーがローテーションされると、CLI は設定済みのエージェントも更新するため、`on`
  を再実行しなくてもそのまま使い続けられます。
</Aside>

## プロンプトの実行

```bash
aiand run "why is the sky blue?"
cat main.ts | aiand run "review this file"
aiand run -m deepseek-ai/deepseek-v4-flash --system "be terse" "summarize CAP theorem"
aiand run --no-stream --json "hello" | jq .usage
aiand chat
```

パイプで渡した入力はプロンプトの後ろに追加されます。回答は stdout に、それ以外は stderr に出力されるため、`aiand run "..." > out.md` で回答だけを保存できます。回答の後にはモデル、トークン数、コスト、所要時間、リクエスト ID を示すフッターが表示されます。`-q` で非表示にできます。

`-m` を省略すると、プロファイルのモデル、またはカタログの推奨デフォルトモデルが使われます。`-m auto` を指定すると、アカウントが対応していればリクエストごとに ai& がモデルを選びます。[自動選択](/ja/models/auto/) を参照。既定のモデルは `aiand config set model <id>` で設定できます。

`aiand chat` では `/help` と入力するとセッション内コマンドが一覧表示されます。たとえば `/model <id>` でモデルを切り替えられます。

## モデル・ログ・使用量

```bash
aiand models --capability vision   # カタログを絞り込む
aiand logs --range 1h --errors     # 失敗したリクエストのみ
aiand logs --follow                # 新しいリクエストを追跡
aiand usage --range 30days
aiand usage --metrics              # 詳細な内訳
```

- `aiand models` は [カタログ](/ja/models/catalog/) を、100 万トークンあたりの請求通貨建て料金とともに一覧表示します。サインインしていなくても使え、その場合は USD 建てになります。`--search`、`--capability`、`--sort` で絞り込みや並べ替えができます。
- `aiand logs` は [リクエストログ](/ja/analytics/logs/) を表示します。`--range` には `15m`、`1h`、`6h`、`24h` (デフォルト)、`7days`、`30days` を指定できます。
- `aiand usage` は [使用量](/ja/billing/usage/) を前の期間と比較して要約します。`--range` には `1h`、`24h`、`7days` (デフォルト)、`30days`、`3months` を指定できます。

ログと使用量は、このマシンだけでなく組織全体が対象です。

## 組織とプロファイル

CLI のキーはサインイン時に選んだ 1 つの組織にスコープされます。`aiand orgs` で所属している組織を一覧できます。別の組織で作業するには、コンソールでデフォルトの組織を変更してから `aiand login --force` を実行してください。

プロファイルごとにサインインは独立しているため、プロファイルごとに別の組織のキーを持てます:

```bash
aiand login --profile work
aiand --profile work usage
aiand config use work              # デフォルトのプロファイルにする
```

組織が API リクエストにどう適用されるかは [組織の切り替え](/ja/organizations/switching/) を参照してください。

## 設定

```bash
aiand config                       # 現在の設定
aiand config set model deepseek-ai/deepseek-v4-flash
aiand config profiles              # プロファイル一覧
aiand config path                  # ファイルの場所
```

設定は `~/.config/aiand/config.json` (または `$XDG_CONFIG_HOME` 以下) に保存されます。認証情報は別のファイルに保存されるため、設定ファイルは共有しても安全です。優先順位はフラグ、環境変数、保存済みプロファイルの順です。

| 変数                   | 効果                                                                                 |
| ---------------------- | ------------------------------------------------------------------------------------ |
| `AIAND_API_KEY`        | このキーを使用 (サインイン不要、何も保存しない)                                      |
| `AIAND_PROFILE`        | 使用するプロファイル                                                                 |
| `AIAND_BASE_URL`       | API エンドポイント (デフォルト `https://api.aiand.com`)                              |
| `AIAND_AUTH_URL`       | サインイン用エンドポイント (API と異なる場合)                                        |
| `AIAND_CONFIG_DIR`     | 設定と認証情報の保存場所                                                             |
| `AIAND_HOME`           | エージェントの設定を探すホームディレクトリ (WSL から Windows のホームを使う場合など) |
| `AIAND_KEY_STORAGE`    | `keychain`、`file`、`plaintext` のいずれか                                           |
| `AIAND_NO_BROWSER=1`   | ブラウザを開かず、サインイン用のリンクを表示                                         |
| `AIAND_UPDATE_CHECK=0` | 1 日 1 回のアップデート通知を無効化                                                  |
| `NO_COLOR`             | 色付き表示を無効化                                                                   |

## 終了コード

| コード | 意味                                                                |
| ------ | ------------------------------------------------------------------- |
| `0`    | 成功                                                                |
| `1`    | リクエストエラーまたは使い方の誤り (メッセージでどちらか分かります) |
| `2`    | サインインしていない、またはセッションを更新できなかった            |
| `3`    | サインインが拒否された、またはコードの有効期限が切れた              |
| `70`   | CLI のバグ (スタックトレースが表示されます)                         |
| `127`  | 不明なコマンド、またはコーディングエージェントが未インストール      |
| `130`  | 中断された (Ctrl-C)                                                 |

`aiand status` はサインイン済みなら、ai& に接続できずキーを確認できない場合でも `0` を返し、サインインしていない場合のみ `1` を返します。そのため、これを判定に使うスクリプトは障害時も動作し続けます。

不具合の報告や機能のリクエストは [GitHub](https://github.com/aiandlabs/aiand-cli/issues) で受け付けています。
