# /exec

`/exec` スキルは `kubectl exec` のAI版です。ターゲットを自然言語で説明すると、エージェントが適切なメカニズムを選択します。実行中のコンテナへの通常の `exec`、ターゲットに使えるシェルがない場合のエフェメラルデバッグコンテナ、またはNode上の特権シェルです。

セッションはあなたとエージェントの両方が同時にアタッチしている **tmux** ウィンドウ内で実行されます。あなたも入力でき、エージェントも入力でき、出力はリアルタイムで表示されます。

```text
/exec                              # prompts for a target
/exec api                          # shell into the api pod (container auto-picked)
/exec api/sidecar                  # shell into a specific container
/exec node worker-3                # root shell on a node
/exec debug api                    # ephemeral debug container alongside api
```

自然言語スコープ（Namespace、ラベルセレクター、ワークロード名）がサポートされています（[概要](/ja/reference/skills/overview/)を参照）。

:::note[ユーザー呼び出しのみ]
`/exec` は `disable-model-invocation: true` で提供されるため、エージェントは独自にシェルを開始しません。あなた（ユーザー）が明示的に `/exec` と入力した場合にのみ実行されます。これは以下の特権モードを踏まえた意図的な設計です。
:::

:::caution[セキュリティ]
`/exec` はあなたとエージェントの両方が入力できるインタラクティブシェルを開きます。Nodeおよびデバッグコンテナモードはホストレベルアクセス（`hostPID`、`hostNetwork`、`/host` にマウントされたホストファイルシステム）を持つ特権Podを作成します。ペインに表示されるもの — 貼り付けたSecret、環境変数、コマンド出力を含む — はすべてエージェントに読み取られ、モデルに送信される可能性があります。完全な信頼モデルについては[セキュリティ](/ja/concepts/security/)を参照してください。
:::

---

## 要件

`tmux` がインストールされ `$PATH` にある必要があります。これなしではスキルは実行されません。

---

## モード

エージェントはあなたの説明からターゲットを解決し、以下のいずれかを選択します。

### 1. Podコンテナ（デフォルト）

使用可能なシェルを持つ実行中のPodのデフォルト。`kubectl exec -it <pod> -c <container> -- <shell>` と同等で、Podにコンテナが1つだけまたは明らかにプライマリが1つある場合はコンテナが自動選択されます。

:::note[動作]
- シェルは自動検出されます（`bash`、次に `sh`、次に `ash`）
- `<pod>/<container>` として指定されない限り、コンテナはPodスペックから推測されます
- 使用可能なシェルがない場合は自動的にデバッグコンテナモードにフォールバックします
:::

### 2. デバッグコンテナ

ターゲットコンテナがdistroless、scratch、またはシェルがない場合に自動的にトリガー、または `/exec debug <pod>` で明示的にトリガー。`kubectl debug -it <pod> --target=<container> --image=<toolbox>` と同等で、ターゲットのプロセスNamespaceを共有するため、`/proc/<pid>/root` 経由でそのファイルシステムを、同じnetnsからそのネットワークを検査できます。

:::note[動作]
- ターゲットコンテナとプロセスNamespaceを共有します
- ターゲットのファイルシステムは `/proc/1/root` で表示されます
- デフォルトで `nicolaka/netshoot` を使用します（`--image` で変更可能）
:::

### 3. Node

ホストレベルデバッグ用のNode上の特権rootシェル（kubeletログ、`journalctl`、`crictl`、ネットワークNamespace）。`hostPID`、`hostNetwork`、`/host` にマウントされたホストファイルシステムを持つ、ターゲットNodeにスケジュールされた短期間の特権Podとして実装されます。

:::note[動作]
- Podは「default」Namespace内に作成されます（特に指定しない限り）
- Podはユーザーがエージェントに指示すると削除されます
- デフォルトで `nicolaka/netshoot` を使用します
:::

---

## セッションの開始方法

エージェントがターゲットを解決し、基礎となる `exec` または `debug` コマンドを開始すると：

1. わかりやすい名前（例：`kstack-exec-api-server`）で切り離されたtmuxセッションを開始します。
2. デスクトップ上で新しいターミナルウィンドウを開いてそのセッションにアタッチしようとします — シェルがあなたの前に表示されます。
3. チャットに正確な `tmux attach` コマンドを出力します。任意のターミナルから手動で接続できます（SSH経由、リモートエディター、またはウィンドウの起動が失敗した場合に便利）。

```text
Session ready.
  Target: pod/api-5f9c-bnt4m (container: server)
  tmux:   tmux attach -t kstack-exec-api-server
```

あなたとエージェントは同じペインを共有します。どちらでもコマンドを入力でき、どちらも完全な出力を確認できます。トークン消費を抑えるため、エージェントはウィンドウを控えめに読み取るので、最新の出力に追いつくよう促す必要があるかもしれません。セッションの終了をエージェントに指示すると、作成したPodをkillします。

---

## エージェントへの指示

スキルはセッションを開始するだけでなく、セッション内での動作についてエージェントに指示します。

- 質問に答えられる最小権限のモードを選択します — 通常execをデバッグコンテナより優先し、デバッグコンテナをNodeシェルより優先します。現在のモードでユーザーの質問に対応できない場合のみエスカレーションします。
- tmuxペインからトークン消費を抑えて読み取ります。大きなバッファを無断で再読み取りするのではなく、ユーザーにスクロールして戻るよう促します。
- ペインに表示されるもの（環境変数、コマンド出力、貼り付けたテキスト）はすべて機密性が高い可能性があるものとして扱います — ユーザーが求めない限りチャットにエコーバックしません。
- ユーザーが終了を合図したら、セッションを終了します。シェルを終了し、tmuxセッションをkillし、スキルが作成したPod（デバッグコンテナ、Nodeシェル用Pod）をすべて削除します。

---

## オプション

<dl>
  <dt>`--image <image>`</dt>
  <dd>NodeおよびデバッグコンテナモードのImage（デフォルト：<code>netshoot</code>）。</dd>

  <dt>`--attach`</dt>
  <dd>新しいセッションを開始する代わりに、既存のkstack tmuxセッションにエージェントをアタッチします。</dd>

  <dt>`--detach`</dt>
  <dd>切り離された状態で新しいセッションを開始します — ターミナルウィンドウは開かれません。手動でアタッチしてください。</dd>
</dl>

[概要](/ja/reference/skills/overview/)のグローバルフラグも適用されます。