Sakana AI の Fugu / Fugu Ultra は「OpenAI互換API」として案内されています。であれば、OpenAI純正の Codex CLI のエンドポイントとAPIキーを差し替えるだけで使えるはず——と思って試したところ、そのままでは動きませんでした。この記事では、Fuguの位置づけを押さえたうえで、原因の切り分けからローカルプロキシ1枚での解決までを、実際の画面とコード付きで記録します。また、現在Sakana-Fuguについて、軽量モデルを司令塔として訓練し、裏側では、ClaudeやChatGPTなどの高性能モデルを呼び出しながらタスクを処理する点にある。ということで、純国産ではないとの話が出てますが、この記事では日本国内の会社が、という点での国産ということで書いておきます。(6/23追記)
検証日:2026年6月23日 / Codex CLI v0.142.0-alpha.6 / Sakana Fugu Ultra(fugu-ultra-20260615)。なお本記事はalpha版CLIでの検証です。Sakana・Codex双方の更新により、本記事のプロキシ対応が将来不要になる可能性があります。
まず「Fugu / Fugu Ultra」の位置づけ(ベンチマーク)
Fugu / Fugu Ultra は Sakana AI が公開したモデルです。コーディング・科学・推論系のベンチマークで、最先端モデルと肩を並べる性能をうたっています。Sakana AI 公式ページの表現を引用すると、次のとおりです。
Our Fugu Ultra model stands shoulder-to-shoulder with leading models like Fable 5 and Mythos Preview across the industry’s most rigorous engineering, scientific, and reasoning benchmarks. It delivers frontier capability without the risk of export controls.
Sakana AI 公式サイトより
つまり公式の主張は「Fable 5 や Mythos Preview といった先端モデルと肩を並べる(shoulder-to-shoulder)」というもの。加えて「輸出規制リスクなしでフロンティア級の性能(frontier capability without the risk of export controls)」を打ち出しているのが特徴です。
※以下のスコアはいずれも Sakana AI 自社調べ(公式公表値)であり、第三者による独立検証ではない点にご留意ください。

数値を見ると、LiveCodeBench・GPQA-D・CharXiv Reasoning などでは Fugu Ultra が最高スコアを取る一方、SWEBench Pro(Fable 5=80.0)・SciCode・Humanity’s Last Exam では Fable 5 が上回ります。「Fable 5を一律に超える」わけではなく、ベンチマーク次第で上下する“互角”、と読むのが公式の表現にも忠実です。Opus 4.8 / Gemini 3.1 Pro / GPT 5.5 との数値比較は次の表のとおりです。

いずれにせよ、フロンティア級と称されるモデルが、OpenAI互換APIで使えるようになった——というのが、今回 Codex CLI から試してみた動機です。ここからが本題です。
全体像:最終的にこういう経路にした
結論から言うと、Codex と Sakana API の間に小さな「ローカルプロキシ」を1枚挟む構成に落ち着きました。質問を入れた同じコマンドプロンプトに、Fugu Ultra の回答が戻ってきます。

1. Sakanaコンソールでキーを取得する
まず Sakana AI のコンソールでAPIキーを作成します。FuguはOpenAIと少し毛色が違い、利用モード(サブスクリプション)/Fugu pool/Max cost といった独自の設定項目があります。自分の画面と見比べる際の参考にしてください。

取得したキーは設定ファイルに直書きせず、環境変数 SAKANA_API_KEY に登録します。
# PowerShell で一時的に設定する場合
$env:SAKANA_API_KEY="(あなたのSakana APIキー)"
🔒 キーを書いたファイルやリポジトリは公開しないこと。万一どこかに出してしまった場合は、コンソールから即ローテーション(再発行)してください。
2. Codex に Sakana 用プロファイルを足す
既存設定(gpt-5.5 など)を壊さないよう、別ファイルとして sakana.config.toml を作ります。場所は %USERPROFILE%\.codex\ 配下です。
model = "fugu-ultra-20260615"
model_provider = "sakana-fugu"
model_context_window = 272000 # 未知モデル扱いになるので手動指定
web_search = "disabled"
[model_providers.sakana-fugu]
name = "Sakana Fugu"
base_url = "https://api.sakana.ai/v1"
env_key = "SAKANA_API_KEY"
wire_api = "responses"
3. まずAPI単体は問題なく通る
codex コマンドがPATHに無い問題(codex.exe の場所は環境で異なるので where codex で確認)を解決したうえで、Sakana API の /models を直接叩くと正常に応答しました。fugu / fugu-ultra / fugu-ultra-20260615 が返り、APIキー・Base URL・モデル名はすべて正しいことが確認できました。問題はもっと手前ではなく、Codex経由で送られる中身にありました。
4. ところがCodex経由だと弾かれる(本記事の山場)
codex exec --profile sakana "日本語で一言だけ『接続できています』と返してください。"
実行すると、次のエラーが出ました。
Invalid value: 'image_generation'.
Supported values are: 'function' and 'custom'.
Codex はリクエストの tools に image_generation という tool type を含めて送ります。一方、Sakana 側が受け付ける tool type は function と custom だけ。つまり「OpenAI互換」を謳っていても、tool schema の差分でそのまま弾かれるわけです。原因はキーでもURLでもなく、両者のスキーマの非互換でした。
5. 解決:間にローカルプロキシを1枚挟む
なぜプロキシなのか。Codex が出すリクエストはこちらで編集できず、Sakana は未知の tool 型を拒否する——両端のどちらも変えられない以上、その間の通信を中継して不一致を吸収するしかないからです。なお、Fugu を単に直接APIで叩くだけならプロキシは不要で、これは「Codex のエージェント機能を活かしたまま頭脳を Fugu に差し替える」ための工夫です。
そこで、Codex と Sakana の間に小さなNode.js製プロキシを置き、Sakanaが受け付けないtoolを落としてから転送するようにしました。心臓部はこの関数です。
// Codex が送るリクエストから、Sakana 非対応の tool を除去する
function patchRequestBody(buffer, contentType) {
if (!buffer.length || !contentType.includes("application/json")) return buffer;
const payload = JSON.parse(buffer.toString("utf8"));
if (Array.isArray(payload.tools)) {
payload.tools = payload.tools.filter(
(tool) => tool?.type !== "image_generation"
);
if (payload.tools.length === 0) delete payload.tools;
}
return Buffer.from(JSON.stringify(payload));
}
もう一点、地味だが効くのが /models レスポンスの整形です。Sakana は data 配列で返しますが、Codex は models 配列を期待する場面があるため、レスポンス側も補完しておきます。
// /models のレスポンスを Codex が読める形に補完する
if (target.pathname.endsWith("/models") && ct.includes("application/json")) {
const json = JSON.parse(await upstream.text());
if (Array.isArray(json.data) && !json.models) {
json.models = json.data.map((m) => ({
...m,
slug: m.slug || m.id,
name: m.name || m.id,
}));
}
// 補完したJSONをCodexへ返す
}
あとは sakana.config.toml の base_url を、Sakana本体ではなくローカルプロキシ(例:http://127.0.0.1:8787/v1)に向け直すだけです。運用は「①プロキシを起動したウィンドウを開いたままにする → ②別ウィンドウで codex --profile sakana を起動」の2段構えになります。
6. 接続成功
codex exec --profile sakana "日本語で一言だけ『接続できています』と返してください。"
→ 接続できています
実際に「今日は、何日ですか?」と聞くと、Fugu Ultra が思考過程(reasoning)をたどったうえで日本語で答えます。フッターに fugu-ultra-20260615 と出ているのが、Sakanaのモデルが応答している証拠です。

まとめ
- Fugu / Fugu Ultra は、Sakana AI 自社調べで Fable 5・Mythos Preview と肩を並べる(ベンチによっては上回る)水準。「輸出規制リスクなしのフロンティア級」を掲げるのが特徴。
- Sakana Fugu / Fugu Ultra は、OpenAI互換APIとして Codex CLI から利用できる。
- ただし現時点では、Codex が送る
image_generationtool を Sakana が拒否するため、ローカルプロキシで未対応toolを除去する一工夫が要る(/modelsレスポンスの整形も合わせると安定する)。 - 「互換」と書いてあっても、実運用ではスキーマ差分を吸収する層が要る—という、AI周辺の実務でよく出会う典型例でした。
早速、新居浜市でやっている生成AI勉強会の、SakanaAIとClaudeCode比較でプレゼンしてみます。

参考リンク
- Sakana AI 公式リリース:Fugu のリリースについて(sakana.ai/fugu-release)

