> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sambanova.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Codex

[Codex](https://github.com/openai/codex) は、ターミナルで動作するオープンソースの AI コーディングエージェントです。ローカルリポジトリのコードを読み取り、変更し、実行できるため、開発者は自然言語のコマンドを通じて、開発ワークフローの自動化、問題のデバッグ、機能の実装、コードベースとの対話を行えます。

## 概要

本ガイドでは、[OpenAI Codex CLI](https://developers.openai.com/codex/) を [Responses API](https://sambanova.ai/blog/build-faster-coding-agents-with-sambanovas-responses-api)（英語）経由で SambaNova ホストのモデルに接続し、ライブラリの最新ドキュメントを取得する MCP サーバーを使う例を含む、3 つの実践的なデモを解説します。

## 仕組み

Codex CLI は 2 つの考え方を軸に設計されています。**`[model_providers.*]`** で任意の OpenAI 互換エンドポイントに接続でき、**`--profile`** でフラグ 1 つでアクティブなモデルとプロバイダーを切り替えられます。この 2 つを組み合わせると、SambaNova のブログで紹介した**プランナー / エグゼキューター**パターンをネイティブに実現できます。フロンティアプランナー (`gpt-5`、`o3` など) 用のプロファイルと、低コストで高速なエグゼキューターとしての `MiniMax-M2.7` 用のプロファイルを用意するだけです。SambaNova は Codex の `wire_api = "responses"` に完全に一致する `/v1/responses` エンドポイントを公開しているため、LiteLLM プロキシは不要です。

## 前提条件

* **Node.js 18 以上**が PATH 上にあること。
* **Codex CLI** のインストール: `npm i -g @openai/codex` (または `brew install --cask codex`)。
* **SambaNova API キー**を `SAMBANOVA_API_KEY` としてエクスポートしておくこと。
* *(デモ 2 と 3 用)* フロンティアプランナーのプロファイル用に、Codex に登録した OpenAI API キー (後述)。

以下のコマンドで環境を確認できます。

```bash theme={}
codex --version && [ -n "$SAMBANOVA_API_KEY" ] && echo "SambaNova OK"
```

### フロンティアプランナー用の OpenAI キーの登録 (デモ 2 と 3)

`plan` プロファイルは Codex 組み込みの `openai` プロバイダーを使用し、認証情報を `~/.codex/auth.json` から読み込みます。キーをエクスポートして `codex login` にパイプすることで、このファイルの作成を Codex に任せられます。

```bash theme={}
export OPENAI_API_KEY="sk-…your-key-here…"
printenv OPENAI_API_KEY | codex login --with-api-key
```

キーが保存されたこと (およびアクティブな認証モード) を確認します。

```bash theme={}
codex login status   # or: codex doctor
```

> 過去のログインで保存された古いキーで Codex にログインしたままの場合は、まず `codex logout` を実行し、OpenAI API キーを設定した後で上記の `codex login --with-api-key` コマンドを再実行してください。

> フロンティアプランナーをまったく使わない場合 (`plan-sn` を使用する場合) は、`plan-sn` は SambaNova プロバイダーを経由するため、OpenAI キーは一切不要です。

## SambaNova の接続

Codex は `~/.codex/config.toml` を読み込みます。SambaNova プロバイダーと、計画用・実行用の 2 つのプロファイルを追加します。

**`~/.codex/config.toml`** (追記してください。既存のブロックを置き換えないでください):

```toml theme={}
[model_providers.sambanova]
name = "SambaNova"
base_url = "https://api.sambanova.ai/v1"
env_key = "SAMBANOVA_API_KEY"
wire_api = "responses"

# --- frontier planner (default OpenAI provider) ---
[profiles.plan]
model_provider = "openai"
model = "gpt-5"
approval_policy = "on-request"
sandbox_mode = "workspace-write"

# --- SambaNova planner ---
[profiles.plan-sn]
model_provider = "sambanova"
model = "gpt-oss-120b"
approval_policy = "on-request"
sandbox_mode = "workspace-write"

# --- SambaNova executor ---
[profiles.execute-sn]
model_provider = "sambanova"
model = "MiniMax-M2.7"
approval_policy = "on-request"
sandbox_mode = "workspace-write"
```

> この構成が直接動作する鍵は `wire_api = "responses"` です。SambaNova の `/v1/responses` エンドポイントは、Codex が送信する OpenAI Responses API の形式に一致します。古いガイドで LiteLLM をプロキシとして推奨しているものを見かけても、それは不要です。

次に、3 つのデモすべてで使い回すデモ用ワークスペースを 1 つ作成します。

```bash theme={}
mkdir -p ~/sambanova-codex-demo && cd ~/sambanova-codex-demo
```

***

## デモ 1: SambaNova エンドツーエンド

ペットフレンドリーな「hello world」ランディングページを、`execute-sn` プロファイル経由で `MiniMax-M2.7` だけで構築・検証します。

```bash theme={}
codex --profile execute-sn "Create a minimalist, pet-friendly 'hello world' landing page in this directory. One index.html, one style.css, no JS frameworks. Soft pastel palette, a friendly paw-print emoji, a short tagline ('Hello, friend'), and a single call-to-action button. Keep it under 80 lines of HTML+CSS combined. Open the file when done so I can preview it."
```

<Accordion title="プロンプト例の日本語訳">
  このディレクトリに、ミニマルでペットフレンドリーな「Hello World」ランディングページを作成してください。`index.html` と `style.css` を 1 つずつ、JS フレームワークは使用しません。柔らかいパステルカラー、親しみやすい肉球の絵文字、短いタグライン (「Hello, friend」)、そして 1 つの CTA ボタンを含めてください。HTML+CSS 合計で 80 行以内に収めてください。完了したらファイルを開いて、プレビューできるようにしてください。
</Accordion>

動作を確認します。

```bash theme={}
open index.html
```

これが **SambaNova のみ**のベースラインです。モデル 1 つ、プロファイル 1 つ、コマンド 1 回で完結します。

***

## デモ 2: フロンティアモデルが計画し、SambaNova が実行

アーキテクトとビルダーの分業です。`plan` プロファイル (フロンティアモデル) が精密な `PLAN.md` を作成し、`execute-sn` (MiniMax-M2.7) がそれを実行します。境界を越えるアーティファクトが `PLAN.md` であり、再現・差し替え・レビューが可能です。

**ステップ 1. フロンティアモデルで計画を作成します。**

```bash theme={}
codex --profile plan "Read index.html and style.css in this directory. Write PLAN.md describing how to extend this landing page into a 'pet adoption finder' demo:
- A gallery of 6 placeholder pet cards (name, species, one-line bio) in CSS grid
- A search input that filters cards by name (vanilla JS, no frameworks)
- A dark-mode toggle that persists in localStorage

Include exact file layout, the JS event handlers needed, and a verification checklist a human can run in the browser. Don't modify any code yet."
```

<Accordion title="プロンプト例の日本語訳">
  このディレクトリにある `index.html` と `style.css` を読み込み、このランディングページを「ペット里親探し」デモへ拡張する方法を記述した `PLAN.md` を作成してください:

  * CSS グリッドによる、プレースホルダーのペットカード 6 枚分のギャラリー (名前、種類、一言プロフィール)
  * 名前でカードを絞り込む検索入力欄 (フレームワークなしのバニラ JS)
  * localStorage に保存されるダークモード切り替え

  正確なファイル構成、必要な JS イベントハンドラー、そして人間がブラウザで実行できる検証チェックリストを含めてください。まだコードは変更しないでください。
</Accordion>

`PLAN.md` を開いてレビューします。自由に編集して構いません。計画をファイルとして具体化する目的はまさにそこにあります。

**ステップ 2. `PLAN.md` を SambaNova に引き渡します。**

```bash theme={}
codex --profile execute-sn "Read PLAN.md and execute every step. After each step, list which acceptance criteria from the plan are now satisfied. Open index.html at the end so I can verify in the browser."
```

<Accordion title="プロンプト例の日本語訳">
  `PLAN.md` を読み込み、すべてのステップを実行してください。各ステップの後に、計画のどの受け入れ基準が満たされたかを記載してください。最後に `index.html` を開いて、ブラウザで確認できるようにしてください。
</Accordion>

**ステップ 3. 動作を確認します。**

```bash theme={}
open index.html
```

ギャラリー、動作する検索機能、動作するダークモード切り替えが表示されるはずです。

エグゼキューターはプランナーの会話を一切参照しません。`PLAN.md` が仕様のすべてです。`PLAN.md` を修正して同じ `--profile execute-sn` コマンドを再実行することも、計画を書き直さずにプランナーのプロファイルを `plan-sn` (フロンティアなし) に差し替えることもできます。

> 計画と実行の両方を SambaNova で行いたい場合は、プランナーに `codex --profile plan-sn …` を使うと、OpenAI の代わりに `gpt-oss-120b` が使用されます。フロンティアモデルへの依存を避けたい場合に便利です。

***

## デモ 3: MCP を活用した、最新ライブラリドキュメントに基づく計画

デモ 2 に MCP サーバーを追加します。プランナーが [**Context7**](https://github.com/upstash/context7) を使ってライブラリの「最新」ドキュメントを取得し、それを `PLAN.md` に織り込み、MiniMax が実行します。カスタムの検索処理を書かずに、「モデルが古いドキュメントで学習している」問題を解決できます。

### MCP サーバーとしての Context7 のインストール

[context7.com/dashboard](https://context7.com/dashboard) から無料の API キーを取得し、エクスポートします。

```bash theme={}
export CONTEXT7_API_KEY=ctx7sk-…
```

`~/.codex/config.toml` に Context7 を登録します。

```toml theme={}
[mcp_servers.context7]
command = "npx"
args = ["-y", "@upstash/context7-mcp"]
env = { "CONTEXT7_API_KEY" = "${CONTEXT7_API_KEY}" }
```

> 無料ティアはキーなしでも動作します。`env` の行を削除すると、レート制限が低くなるだけです。

これで MCP サーバーは**すべての**プロファイルから利用可能になります。以下で確認します。

```bash theme={}
codex --profile plan "List the tools you can call from the context7 MCP server."
```

<Accordion title="プロンプト例の日本語訳">
  context7 MCP サーバーから呼び出せるツールを一覧表示してください。
</Accordion>

`resolve-library-id` と `query-docs` が表示されるはずです。

### タスク内容

デモ 2 の各ペットカードに、[date-fns](https://date-fns.org/) の `formatDistanceToNow` を使ってページ読み込み時に計算する、人が読みやすい「Added *X* days ago」ラベルを付けます。date-fns は Context7 の好例です。v2 から v3 への書き直しでインポート方法が変わり (ツリーシェイキング可能な名前付きエクスポート、新しい UMD の `cdn.min.js` ビルド)、v4 ではタイムゾーンサポートが追加されたため、モデルは動作しない古いデフォルトインポートのパターンを頻繁に出力します。

### ステップ 1: `plan` プロファイルが最新ドキュメントを取得して計画を作成

```bash theme={}
codex --profile plan "Use the context7 MCP server to look up current docs for the 'date-fns' library, specifically formatDistanceToNow with the addSuffix option, and how to load date-fns in a plain browser page via its UMD CDN build (the dateFns global) vs ESM named imports. Then update PLAN.md with a section 'Phase 2: relative date labels' describing how to give each pet card a fixed data-added ISO date and render an 'Added X days ago' label from it on load. Use the up-to-date API from Context7, not what you remember. Quote the exact <script> CDN tag, the global function call, and addSuffix usage verbatim from the docs, and include a verification step."
```

<Accordion title="プロンプト例の日本語訳">
  context7 MCP サーバーを使って `date-fns` ライブラリの最新ドキュメントを調べてください — 具体的には `addSuffix` オプション付きの `formatDistanceToNow`、そして UMD CDN ビルド (`dateFns` グローバル) 経由で date-fns を素の HTML ページに読み込む方法と、ESM の名前付きインポートとの違いです。その上で `PLAN.md` に「フェーズ 2: 相対日付ラベル」のセクションを追記し、各ペットカードに固定の `data-added` ISO 日付を持たせ、読み込み時にそこから「X 日前に追加」のラベルを描画する方法を記述してください。記憶に頼らず、Context7 から得た最新の API を使用してください。`<script>` の CDN タグ、グローバル関数の呼び出し、`addSuffix` の使い方をドキュメントからそのまま正確に引用し、検証手順も含めてください。
</Accordion>

プランナーは `resolve-library-id` → `query-docs` を呼び出して最新の API を取得し、現行ドキュメントに基づいた計画を作成します。

### ステップ 2: SambaNova への引き渡し

```bash theme={}
codex --profile execute-sn "Read PLAN.md 'Phase 2' and execute it. After loading, open index.html and confirm each card shows an 'Added X days ago' label."
```

<Accordion title="プロンプト例の日本語訳">
  `PLAN.md` の「フェーズ 2」の部分を読み込んで実行してください。完了したら `index.html` を開き、各カードに「X 日前に追加」(Added X days ago) のラベルが表示されることを確認してください。
</Accordion>

エグゼキューターに MCP は不要です。`PLAN.md` にはすでに解決済みの API が含まれています。MCP アクセスは (より高コストな) プランナー側にとどめることで、その価値を最大化できます。

### ステップ 3: 動作確認

```bash theme={}
open index.html
```

6 枚のカードそれぞれに「Added *X* days ago」というラベル (例: 「Added 3 days ago」) が表示されるはずです。

### この構成が重要な理由

これは **MCP を活用した計画**の具体例です。フロンティアのプランナーには適切なコンテキストが与えられ、SambaNova のエグゼキューターは低コストかつツール依存の少ない状態に保たれ、`PLAN.md` が両者の境界となります。

***

## ヒント

* **切り替えはすべて `--profile` で行います。** CLI で `--model` や `--provider` を上書きしないでください。プロファイルが迂回され、再現性が損なわれます。
* **1 リポジトリに複数プロファイル。** `trust_level = "trusted"` を指定した `[projects."/abs/path/to/repo"]` ブロックを追加すると、既知のディレクトリで「trust this folder?」プロンプトをスキップできます。
* **`approval_policy = "on-request"`** はエグゼキューターに適したデフォルトです。破壊的なシェル呼び出しの前にモデルが確認を求めるためです。`"never"` に下げるのは、使い捨てのサンドボックス内だけにしてください。
* **エグゼキューターに検証を指示する** (「`index.html` を開いて確認して」等)。指示しないと、編集しただけで止まります。

## トラブルシューティング

**SambaNova で `401 Unauthorized` が発生する。** `env_key = "SAMBANOVA_API_KEY"` は Codex が HTTP クライアントを起動する時点で解決されるため、この変数は `.env` に書くだけでなく、`codex` を起動するシェルでエクスポートされている必要があります。実行前に `echo $SAMBANOVA_API_KEY` で確認してください。

**`plan` プロファイルで `Quota exceeded. Check your plan and billing details.` が発生する。** `openai` プロバイダーは `$OPENAI_API_KEY` ではなく `~/.codex/auth.json` から認証します。環境変数のキーで `curl` が成功しても、ここでは何の証明にもなりません。Codex は `auth.json` に保存されているキー (または ChatGPT ログイン) を送信しており、それが古かったりクレジット切れだったりする可能性があります。修正方法: `codex logout` の後に `printenv OPENAI_API_KEY | codex login --with-api-key` を実行し、`codex doctor` で保存された認証情報が課金に使いたいキーと一致していることを確認してください。

**`wire_api` は `responses` である必要があります。** Codex は `wire_api = "responses"` のみをサポートします。古い `wire_api = "chat"` は削除され、現在は起動時にエラーになります。SambaNova の `/v1/responses` エンドポイントは Codex が送信する形式に一致します。特定のモデルが `/v1/responses` で `404` を返す場合、そのモデルは Responses API 経由で提供されていないため、`wire_api` を変更するのではなく、対応しているモデル (`MiniMax-M2.7`、`gpt-oss-120b`) に切り替えてください。

**`model not found` が発生する。** SambaNova のモデル ID をプレフィックスなしで使用してください (`MiniMax-M2.7`、`DeepSeek-V3.1`、`gpt-oss-120b`)。Codex は何も付加しません。opencode や AI SDK の設定で見かける `sambanova/` プレフィックスは、ここでは使用しません。

**Context7 のツールが見つからない。** `mcp_servers` は起動時に一度だけ読み込まれます。セッションの途中で `config.toml` を編集した場合は、終了して再実行してください。

## MCP サーバーとの組み合わせ

Codex のプロファイルと MCP サーバーは、きれいに組み合わせられます。プロファイルが切り替えるのは「モデル」だけで、ツール面は変わらないため、すべてのプロファイルが登録済みのすべての MCP サーバーを参照できます。

| プロファイル | モデル | 得意分野 | MCP アクセス |
| - | - | - | - |
| **plan** | フロンティア (`gpt-5`、`o3` など) | 読み取り、推論、MCP 呼び出し | フル |
| **plan-sn** | `gpt-oss-120b` | 同上、フロンティア依存なし | フル |
| **execute-sn** | `MiniMax-M2.7` | 50〜200 ターンの編集とテスト | フル (使わないことが多い) |

これにより、3 つのパターンが導かれます。

**1. MCP を活用した計画。** フロンティアのプランナーが外部コンテキスト (ドキュメント、Atlassian MCP サーバー経由の Jira、GitHub Issues) を取得し、`PLAN.md` に織り込んで `execute-sn` に引き渡します。

**2. MCP による後続処理。** `execute-sn` の完了後、GitHub や Slack の MCP サーバーを使う `--profile plan` の呼び出しを追加で実行し、PR の作成やサマリーの投稿を行います。エグゼキューターにそれらの認証情報は不要です。

**3. エグゼキューター内でのシェル CLI ツール。** `execute-sn` は `sandbox_mode = "workspace-write"` のもとでシェルにアクセスできます。PATH 上の任意の CLI (`gh`、`git`、`aws` など) を利用できるので、プロンプトで指示してください。

> *例:* `codex --profile execute-sn "Implement PLAN.md, run npm test, then run 'gh pr create --fill' to open a draft PR."`

## 参考情報

* [Codex CLI ドキュメント](https://developers.openai.com/codex/)
* [Codex 設定リファレンス](https://developers.openai.com/codex/config-reference)
* [Codex のプロファイルと高度な設定](https://developers.openai.com/codex/config-advanced)
* [SambaCloud](https://cloud.sambanova.ai/)
* [SambaNova Responses API ブログ: より高速なコーディングエージェントの構築](https://sambanova.ai/blog/build-faster-coding-agents-with-sambanovas-responses-api)（英語）
* [Context7 MCP サーバー](https://github.com/upstash/context7)
* [Model Context Protocol](https://modelcontextprotocol.io/)
