# Open WebUI を使用したコーディングエージェントへの接続

Cline は、Ollama でバックアップされたセルフホスト型 Open WebUI インスタンスを使用し、商用 API ではなくラボでホストされたモデルに対してアジャナイティックなコーディングを実行します。

**設定手順は以下の通り:** Open WebUI は `avogadro.nakaguchi.org:3000` で動作し、Ollama を介して `qwen3-coder:30b` を提供しています。

---

## 前提条件

- VS Code
- Open WebUI インスタンスのアカウント
- サーバーへのネットワークアクセス（プライベートアドレス `10.44.104.23` に解決されるため、**キャンパスネットワークまたは VPN が必要です** — VPN なしでは家から動作しません）
- WSL の推奨（[既知の問題](#known-issues)を参照）

---

## ステップ 1 — 認証トークンを取得

1. Chrome または Firefox で Open WebUI にログイン
2. `F12` → **Application** タブを押す
3. **Cookies** を展開 → Open WebUI のオリジンをクリック
4. `token` という名前のクッキーの値をコピー

これは `eyJ` で始まる長い文字列で、2つのドットを含みます。

> **注意:** このトークンは有効期限があります — デフォルトでは4週間で、SSO の場合より早く失効します。エージェントが401エラーを返すようになったら、再びコピーしてください。管理者に実際の API キーを要求することでこの問題を回避できます。

---

## ステップ 2 — トークンを確認

CMD で実行し、**1行で**:

```
curl -H "Authorization: Bearer YOUR_TOKEN" http://avogadro.nakaguchi.org:3000/api/models
```

JSON のモデル一覧が表示されれば成功です。

### 一般的な間違い

| 間違い | 結果 |
|---|---|
| `Bearer` の単語を省略 | `{"detail":"Not authenticated"}` |
| PowerShell で `curl` を実行 | `Invoke-WebRequest` にエイリアス化されているため、`curl.exe` を使用する |
| トークンの周囲に引用符を含める | 401 |

curl では `Bearer` が必要です（生のヘッダーを書いているため）。Cline の API キー欄では **`Bearer` 接頭辞は不要** です。Cline が自動的に追加します。

---

## ステップ 3 — モデル ID を確認

上記の JSON から `"id"` フィールドを見つけます。フレンドリーな表示名ではなく、**正確な文字列**を使用してください。

```
curl -H "Authorization: Bearer YOUR_TOKEN" http://avogadro.nakaguchi.org:3000/api/models | findstr "\"id\""
```

モデルが `"capabilities":["completion","tools"]` を報告していることを確認してください。`tools` がないとアジャナイティックな使用は動作しません — モデルはチャットできますがファイルや端末操作を呼び出しません。

---

## ステップ 4 — Cline を設定

VS Code の拡張機能パネルから **Cline** をインストールし、設定の歯車アイコンを開きます:

| フィールド | 値 |
|---|---|
| API プロバイダー | `OpenAI Compatible` |
| ベース URL | `http://avogadro.nakaguchi.org:3000/api` |
| API キー | トークン — **`Bearer` 接頭辞は不要** |
| モデル ID | `qwen3-coder:30b` またはワークスペースのバリアント |

URL は `/api` で終わるのに注意してください。**`/v1` ではありません**。

---

## ステップ 5 — 確認

Cline チャットで `hi` を送信します。

**成功:** 入力/出力数を示すトークン使用量の行付きで返答が表示されます。

**最初のリクエストは遅いです。** モデルが `"loaded":false` と表示される場合、Ollama はディスクから 18.5 GB をロードする必要があります。失敗と誤認しないように2分間待ってください。事前に curl コマンドで温めることで、設定の問題と誤認することを避けられます。

### エージェントループのテスト

接続とアジャナイティックな動作は別のものです。実際のプロジェクトフォルダを開いて次のように尋ねてください:

> このフォルダ内のファイルを読み取り、プロジェクトが何をするか要約してください

ツール呼び出しボックス — *"Cline は src/main.py を読みたい"* — が表示され、承認/拒否ボタンがあるはずです。これでツール呼び出しが動作することを確認できます。もし実行する予定のことをしか述べない場合は、ステップ4を見直してください。

---

## 既知の問題

### WSL では動作しますが、Windows の VS Code では動作しません

この設定中に発見された問題: 同じ設定で WSL Remote ウィンドウでは正常に返答するが、ネイティブ Windows VS Code では無限に待機します。

**除外済み:** プロキシ (`ProxyEnable = 0x0`, `AutoConfigURL` なし) や `Test-NetConnection avogadro.nakaguchi.org -Port 3000` が `TcpTestSucceeded : True` を返すことを確認しました。

**最も可能性が高い原因:** WSL Remote ウィンドウの拡張機能は、ローカル Windows インストールとは**別のストレージ**を使用します。設定は引き継がれません。Windows ウィンドウでは4つのフィールドが入力されていることを確認してください。

**診断:** `ヘルプ → 開発者ツールの切り替え → ネットワーク` で、クリアしてからメッセージを送信します。ホストへのリクエストがない場合、リクエストが構築されていないため、設定または拡張機能状態の問題です。ネットワークの問題ではありません。

**推奨:** WSL で作業してください。Cline は端末コマンドを実行するため、実際の bash シェルは PowerShell の引用符の癖やパス変換を回避します。`WSL: Open Folder in WSL` を使用してプロジェクトを開き、ファイルを `/mnt/c/` ではなく `~/` に保管してください。後者はファイルを多数読むと非常に遅くなるため、エージェントが動作するのに苦労します。

### リクエストのキャンセル

**キャンセル**ボタン、`Escape`、または `開発者: ウィンドウの再読み込み` を使用してください。クライアント側でのキャンセルは Ollama の生成を停止しません — 共有マシンでリトライを積み重ねるのは避けてください。

---

## 追加項目

以下のセクションを **既知の問題** の後ろに追加してください:

---

### PowerShell バージョン — `curl` の動作が異なる

**Windows PowerShell 5.1**（青いアイコン、事前にインストール）は `curl` を `Invoke-WebRequest` にエイリアス化しており、実際の curl とは `-H` を受け付けません。ヘッダーは無視され、`{"detail":"Not authenticated"}` やパラメータバインディングエラーが発生します（トークンが正しい場合でも）。

**PowerShell 7+** はそのエイリアスを削除しました。`curl` は本物の `curl.exe` を呼び出すため、この README のコマンドはそのまま動作します。

どのバージョンを使用しているか確認:

```powershell
$PSVersionTable.PSVersion
```

`5.1.x` が古いバージョンです。`7.x` が最新版です。

**更新方法:**

```powershell
winget install --id Microsoft.PowerShell --source winget
```

これは Windows PowerShell を置き換えるのではなく、別途インストールされます — **PowerShell 7**（黒いアイコン）がスタートメニューに表示されます。`winget` が利用できない場合は、[github.com/PowerShell/PowerShell/releases](https://github.com/PowerShell/PowerShell/releases) から MSI をダウンロードしてください。

**更新しない場合:** 明示的に `curl.exe` を呼び出す:

```powershell
curl.exe -H "Authorization: Bearer YOUR_TOKEN" http://avogadro.nakaguchi.org:3000/api/models
```

または CMD でコマンドを実行します。Windows 10 と 11 ではデフォルトで実際の curl が含まれています。

> **設定以外での重要性:** Cline はエージェントループの一部として端末コマンドを実行し、VS Code のデフォルトシェルを使用します。Windows の場合通常は PowerShell 5.1 であり、そのエイリアスと引用符はモデルが学習した bash 構文とは異なります。エージェントが作成するコマンドはコードとは無関係な理由で失敗することがあります。PowerShell 7 への更新が役立ちます。WSL での作業は問題を完全に回避します。

---

5.1 を使用している場合に知っておくと良い2つの違い: `Test-NetConnection` は両方のバージョンで動作するため、診断は影響を受けません。また、5.1 は `wget` と `ls` も PowerShell コマンドレットにエイリアス化しており、過去に貼り付けたシェルスニペットが同じように問題を引き起こします。