macOS 27 にアップデートしたら、ターミナルに fm というコマンドが増えていました。ローカル LLM には興味があっても、Ollama を入れてモデルを選んでダウンロードして……という手間を面倒に感じて手を出していなかった人には、気になる存在だと思います。

macOS 27 の fm コマンド(Apple Foundation Models CLI)とは、Mac に内蔵された Apple のオンデバイス言語モデル(Apple Foundation Models)を、ターミナルから API キーなしで呼び出すための標準コマンドです。平たく言えば、追加のアプリも API キーも要らない、OS に最初から入っているローカル LLM の入口です。man fm の説明にも、fm は Apple Foundation Models のコマンドラインインターフェースで、Chat Completions API のサーバーも立てられると書かれています。Apple も WWDC26 で「fm コマンドラインツールは macOS 27 にプリインストールされている」と紹介しています1。

ところが、私の Mac で fm chat と fm respond 'What is Swift?' を打ってみると、どちらも Error: The model is not available. Try again later. が返ってきました。

この記事では、次の3つを順に確かめます。

  1. fm が使えるようになるまでに、何をして、何を待てばよいか
  2. スクリプトの部品として fm respond・fm schema・fm serve をどう使うか
  3. コーディングエージェントのモデルとしてつなぐと、どこで止まるか

私が自分で打ったのは、使えなかったときのエラーと fm available の確認だけです。それ以外の検証は、Claude(Claude Code)に私の Mac(Apple M1 Pro、macOS 27.0)で実測させました。実測はいずれも 2026年9月23日〜24日の1回ずつの実行で、応答の文面や所要時間は実行するたびに変わります。

fm コマンドでできることと、この記事で試した経路

fm --help に並ぶサブコマンドは次の7つです。

サブコマンドfm --help の説明
availableCheck model availability
chatStart an interactive chat session
count-tokensCount tokens in a prompt or instructions
licenseShow and agree to the Legal Notice & Terms
respondGenerate a response to a prompt
schemaGenerate a structured output generation schema
serveStart a Chat Completions API server

この記事で試した経路と結果を、先に図にしておきます。

flowchart LR
    subgraph Mac["Mac(macOS 27)"]
      M["オンデバイスモデル<br>(この Mac では AFM 3 Core・4,096 トークン)"]
      CLI["fm respond / fm schema"]
      SV["fm serve<br>(Chat Completions API)"]
      CLI --> M
      SV --> M
    end
    SH["シェルスクリプト・jq"] -->|動いた| CLI
    CU["curl"] -->|動いた| SV
    OC["opencode"] -->|13,762 トークンで上限超過| SV
    CC["Claude Code"] -->|Bash ツールから fm を呼ぶ(本記事の実測の手段)| CLI

シェルスクリプトや curl から呼ぶ経路は動きました。opencode をモデルとしてつないだ経路は、コンテキスト長の上限で止まりました。Claude Code の矢印は、この記事の実測そのものが Claude Code の Bash ツールから fm を呼んだものであることを表しています。

fm が使えるようになるまで: fm license と fm available

最初の関門は2つあります。利用規約への同意と、モデルが Mac に届くことです。

man fm によると、初回は利用規約への同意が必要で、同意していないと fm は status 69 で終了します。同意は “Agreeing applies to every user on the machine, so it must be run as a privileged user: run ‘sudo fm license’.”(マシン上のすべてのユーザーに適用されるため、管理者権限で実行する)とされています。同意したかどうかは fm license --status で、モデルが使えるかどうかは fm available で確かめます。

sudo fm license        # 初回のみ。規約を読んで同意する
fm license --status    # 同意済みかを確認
fm available           # モデルが使えるかを確認

私の Mac で Claude に確認させた時点では、規約にはすでに同意済みでした。

Agreed to license FM1 version 1.0 on 2026年9月23日 19:51.

それでも fm available の出力はこうでした。

System model unavailable: modelNotReady

モデルが無いなら入れればよいと思って fm --help を見ても、モデルをダウンロード・インストールするサブコマンドはありません(前節の7つだけです)。fm available を何度か打ち直しても、出力は変わりませんでした。

fm available の3つの状態の違い

fm が動かないとき、まず fm available の出力で3つの状態のどれかを見分けます。Foundation Models のドキュメントは、モデルが使えない理由を次の3つに分けています2。

状態(Foundation Models の理由)Apple の説明読者がすること
deviceNotEligible”The device does not support Apple Intelligence.”対応機種か確かめる(Apple サポートでは、Mac は M1 以降が対象3)
appleIntelligenceNotEnabled”Apple Intelligence is not enabled on the system.”システム設定で Apple Intelligence がオンになっているか確かめる
modelNotReady”The models aren’t available on the user’s device.”Apple Intelligence が有効かを確かめたうえで、モデルが届くのを待つ(ダウンロードは自動)

私の Mac で出たのは3つ目の modelNotReady でした。ただ、このとき私は Siri(Apple Intelligence)を有効にしていませんでした。macOS 27 にする前から使っておらず、オフのままだったのです。表の説明からは2つ目の appleIntelligenceNotEnabled が出そうな状況ですが、返ってきたのは modelNotReady のほうでした。3つ目の行に「Apple Intelligence が有効かを確かめたうえで」と書いたのはこのためです。

modelNotReady について、Apple のドキュメントは “Models are downloaded automatically based on factors like network status, battery level, and system load.”(ネットワークの状態・バッテリー残量・システムの負荷に応じて、モデルは自動でダウンロードされる)とだけ書いており、所要時間の目安は示していません4。必要なストレージは、M3 以降かつユニファイドメモリ 12GB 以上の Mac で最大 14GB、その他の Mac で最大 8GB とされています3。私の M1 Pro は後者にあたります。

その夜遅くまで fm available は modelNotReady のままでした。そこで、システム設定の「Siri」の項目で Siri(Apple Intelligence)を有効にして、しばらく待ってからもう一度打つと、出力は次のとおりでした。

System model available

その夜のうちに使えるようになりました。1回の観察なので、有効にしたことがきっかけだったとまでは言い切れませんが、オフのあいだは何度打っても modelNotReady のままで、有効にしたあとに変わった、という順序です。

OS 標準を掲げるなら、モデルの準備状況はターミナルから見えてほしいところです。macOS 27 にして最初に fm を打ったとき、Try again later. とだけ言われても、いつ使えるのかが分かりませんでした。Apple Intelligence がオフだったことも、fm available の出力からは読み取れませんでした。

載っているモデルを確かめる: この Mac は AFM 3 Core・4,096 トークン

同じ macOS 27 でも、載るモデルとコンテキスト長は Mac によって違います。以降の実測に入る前に、自分の Mac で確かめておきます。

Foundation Models の SystemLanguageModel.default から、モデルの名前とコンテキスト長を表示するワンライナーです。同じ確認方法は Qiita の記事でも紹介されています5。

swift -e 'import FoundationModels; let m = SystemLanguageModel.default; print(m.variant.displayName); print(m.contextSize)'

私の M1 Pro で Claude に実行させた出力です。

AFM 3 Core
4096
  • variant は、core3(AFM 3 Core)と coreAdvanced3(AFM 3 Core Advanced)のどちらかを返します6。Apple の説明では、AFM 3 Core は 30 億パラメータの dense モデル、AFM 3 Core Advanced は 200 億パラメータの sparse モデルで、“unlocked by and optimized for our most capable Apple silicon systems”(最も高性能な Apple silicon のシステムで使えるようになり、それに最適化されている)とされています7
  • contextSize は、モデルが扱えるトークン数の上限です8。入力と生成を合わせた上限なので、4,096 は指示・入力・応答をすべて合わせた量になります。Apple のドキュメントでは日本語は1文字がおおよそ1トークンとされており9、4,096 トークンは日本語でおよそ4千字分です

コンテキスト長は Apple の文書の間でも数字が揃っていません。“Managing the context window” は “4096 tokens per session” と書いています9。一方、WWDC26 の Foundation Models のセッションでは contextSize のコード例のコメントが // 8192 で、この値を使って「アプリを動作するハードウェアに適応させてほしい」と話しています10。先の Qiita の記事でも、同じワンライナーの出力は AFM 3 Core Advanced・8192 でした5。

どのチップでどちらのモデルになるかを、Apple は公表していません。「M3 以降かつユニファイドメモリ 12GB 以上」を目安とする記事もあります5が、その記事が根拠に挙げる Apple サポートの文書にあるのはストレージ要件の区分で、モデルとの対応は書かれていません3。

ステップ1: fm respond で答えさせる・要約させるやり方

スクリプトに組み込める最小の単位が fm respond です。引数でプロンプトを渡すと、応答を標準出力に返します。

fm respond 'Swift とは何ですか?日本語で2文で答えてください。'

Claude に実行させた出力です。

Swift は、安全で効率的なプログラミングを行うための言語です。オープンソースとして開発されており、開発者にとって便利なツールを提供しています。

次は、ファイルの中身をパイプで渡して要約させます。入力として、次の4行を notes.txt に保存します。

macOS 27 には fm というコマンドが入っている。
オンデバイスの Apple Foundation Model をターミナルから呼べる。
初回は利用規約への同意が必要で、モデルはバックグラウンドでダウンロードされる。
ダウンロードが終わるまで fm available は modelNotReady を返す。
cat notes.txt | fm respond --instructions '日本語で要点を3つの箇条書きにまとめてください'

出力です。

* fm コマンドでオンデバイスの Apple Foundation Model をターミナルから呼び出せる。
* 初回利用時は利用規約への同意が必要。
* ダウンロードが完了するまで fm available は modelNotReady を返す。
  • --instructions(-i)はモデルに従わせる指示で、標準入力がプロンプトになります。fm respond --help の USAGE にも echo 'What is Swift?' | fm respond という例があります
  • time で測った所要時間(real)は、1回ずつの実行でそれぞれ 3.84 秒と 2.10 秒でした。同じプロンプトを実行し直すと、別の文面の応答が返りました
  • fm respond --help の MODELS 欄にあるのは system(オンデバイスのモデル)だけでした。WWDC26 の fm のセッションでは --model pcc で Private Cloud Compute(PCC)上のモデルを指定するデモがあります1が、私の Mac の fm には pcc の記載がありませんでした

ステップ2: fm schema で JSON を受け取るやり方

fm schema で出力の形を作り、--schema で渡し、jq で読みます。ここでは、変更内容の説明からコミットメッセージの種別と要約を JSON で受け取ります(jq が入っていなければ、先に導入しておきます)。

まず、スキーマを commit-schema.json に書き出します。

fm schema object --name Commit \
  --string type --description 'feat, fix, docs, refactor のいずれか' \
  --string summary --description '変更内容の要約(日本語、30文字以内)' \
  --boolean breaking --description '破壊的変更か' \
  > commit-schema.json

生成された commit-schema.json です。

{
  "type" : "object",
  "title" : "Commit",
  "additionalProperties" : false,
  "x-order" : [
    "type",
    "summary",
    "breaking"
  ],
  "required" : [
    "type",
    "summary",
    "breaking"
  ],
  "properties" : {
    "breaking" : {
      "description" : "破壊的変更か",
      "type" : "boolean"
    },
    "type" : {
      "description" : "feat, fix, docs, refactor のいずれか",
      "type" : "string"
    },
    "summary" : {
      "description" : "変更内容の要約(日本語、30文字以内)",
      "type" : "string"
    }
  }
}

このスキーマを渡して応答させ、jq で取り出します。

fm respond --no-stream --schema commit-schema.json \
  'README のインストール手順が古かったので、Homebrew を使う手順に書き直した' > out.json
jq -r '.type + ": " + .summary' out.json

out.json の中身と、jq の出力です。

{"summary": "インストール手順を Homebrew 方式に変更", "breaking": false, "type": "docs"}
docs: インストール手順を Homebrew 方式に変更
  • ストリーミングは既定でオン(--[no-]stream)なので、JSON を丸ごと受け取るために --no-stream を付けています
  • type はスキーマ上ただの string です。docs が入ったのは、description に書いた候補からモデルが選んだ結果で、列挙型で縛っているわけではありません。確かめたのは1回の実行です
  • WWDC26 の fm のセッションでも、fm schema object → fm respond --schema → jq の流れでファイルを仕分けるデモが紹介されています1

小さなオンデバイスモデルを仕組みに組み込むなら、自由文を返させるより fm schema で出力の形を決めて受け取るほうが扱いやすいと考えています。上の例でも、応答をそのまま jq に渡せました。

ステップ3: fm serve で API にして curl から呼ぶやり方

fm serve は、Chat Completions 形式のローカル API サーバーを立てます。

fm serve --port 1976

起動すると次の表示が出ます。既定ではループバック(自分の Mac)からの接続だけを受け付けます。

Apple Foundation Models Serve
  url    http://127.0.0.1:1976
  access loopback-only

  · POST /v1/chat/completions
  · GET  /v1/models
  · GET  /health

  · listening on http://127.0.0.1:1976  (press Ctrl+C to stop)

fm serve --help によると、エンドポイントは GET /health・GET /v1/models・POST /v1/chat/completions の3つです。別のターミナルから curl で呼びます。

curl -s localhost:1976/health
curl -s localhost:1976/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{"model":"system","stream":false,"messages":[{"role":"user","content":"日本の首都はどこ?一言で。"}]}'

出力です(2行目の ... は、usage の内訳と id を省いた箇所です)。

{"models":[{"name":"system","available":true}],"status":"fm serve is running"}
{"created":1790176516,"choices":[{"index":0,"message":{"refusal":null,"role":"assistant","content":"東京。"},"finish_reason":"stop"}],"model":"system","usage":{"prompt_tokens":64,"completion_tokens":5,"total_tokens":69,...},"object":"chat.completion",...}
  • リクエストに認証ヘッダーは付けていません。API キーの指定はどこにもありません
  • 応答は "content":"東京。"、"finish_reason":"stop" で、usage は入力 64 トークン・出力 5 トークンでした

fm serve でツール呼び出しを試した結果

エージェントとして使うには、ツール呼び出しが要ります。Claude に、tools に get_weather 関数を1つ渡して「東京の天気を調べて」と送らせました。

curl -s localhost:1976/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"system","stream":false,"messages":[{"role":"user","content":"東京の天気を調べて"}],"tools":[{"type":"function","function":{"name":"get_weather","description":"指定した都市の天気を返す","parameters":{"type":"object","properties":{"city":{"type":"string"}},"required":["city"]}}}]}'

応答のうち choices の部分です。

"choices":[{"finish_reason":"stop","index":0,"message":{"role":"assistant","content":"<start_of_turn>model\n{\n  \"tool_call\": [\n    {\n      \"name\": \"get_weather\",\n      \"arguments\": {\n        \"city\": \"東京\"\n      }\n    }\n  ]\n}","refusal":null}}]

OpenAI の仕様では、モデルがツールを呼ぶとき、応答の message に tool_calls 配列が入り、finish_reason は tool_calls になります11。今回の応答には tool_calls 欄が無く、content に <start_of_turn>model で始まる文字列としてツール呼び出しらしきものが入り、finish_reason は stop でした。試した1回では、OpenAI 形式の tool_calls としては返ってきませんでした。確かめたのは fm serve が返した応答だけで、fm serve の変換とモデルのどちらに原因があるかは切り分けていません。

Warning

fm license --show で表示される規約には、“YOU ARE ALSO AGREEING TO NOT PROGRAMMATICALLY ACCESS OR USE APPLE MODELS THROUGH APPLE SOFTWARE OR SERVICES EXCEPT AS EXPRESSLY PERMITTED.” という一文があります。シェルスクリプトから fm を呼ぶ使い方は、Apple 自身も WWDC26 のセッションで fm と jq を組み合わせて紹介しています1。一方、fm serve を他のアプリやエージェントからつなぐ使い方がどこまで許可されているかは、この規約の文面だけでは読み取れません。始める前に、規約を自分で読んでおいてください。

ステップ4: fm serve はコーディングエージェントのモデルとして使えるか

結論から言うと、この Mac ではコーディングエージェントのモデルになりませんでした。

opencode からつなぐと 4,096 トークンの上限で止まる

opencode のカスタムプロバイダとして fm serve を登録します。書式は opencode の公式ドキュメントにある @ai-sdk/openai-compatible と options.baseURL のとおりです12。

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "fm": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Apple Foundation Model (fm serve)",
      "options": { "baseURL": "http://localhost:1976/v1" },
      "models": { "system": { "name": "system" } }
    }
  }
}

fm serve --port 1976 を起動したまま、opencode.json を置いたディレクトリで実行します。

opencode run -m fm/system '日本の首都はどこ?一言で。'

Claude に実行させた、opencode 1.18.26 の出力です(exit 1)。

Error: {"message":"The session's transcript exceeded the model's context size.","type":"server_error","code":"500"}

fm serve 側のログには、こう出ていました。

0:18:55 · STREAM ERROR Content contains 13762 tokens, which exceeds the maximum allowed context size of 4096.
  • 一言で答える質問でも、opencode から fm serve に届いたリクエストは 13,762 トークンありました。opencode は同じエラーのままリクエストを6回繰り返し、最後に exit 1 で終わりました
  • コーディングエージェントは、質問文のほかに自分用の指示や道具の定義も一緒にモデルへ送ります。ただ、13,762 トークンのうち何が何トークンだったかまでは測っていません。この値は 2026年9月24日時点の opencode 1.18.26 と上の設定での値で、設定や版によって変わります。なお、13,762 は 8,192 も上回るので、同じ設定のままでは 8,192 トークンの AFM 3 Core Advanced でも上限を超える数字です
  • 別の方が公開している個人のリポジトリの README には、8,192 トークンの環境でも「opencode の既定のエージェントには小さい(ツール定義だけで約7千トークン)」とする記述があります13

Claude Code と Codex CLI はモデルの性能以前に接続方式が合わない

これとは別の話として、Claude Code と Codex CLI は、接続方式が合わないため fm serve をモデルの接続先として使えません。fm serve の形式は Claude Code が公式にサポートする接続方式に含まれず、Codex CLI では実際に設定の段階でエラーになりました。

Claude Code の接続先には、Anthropic Messages・Amazon Bedrock InvokeModel・Google Cloud Agent Platform rawPredict のいずれかの形式が必要です14。さらに Anthropic は、“doesn’t support routing Claude Code to non-Claude models through any gateway.”(どのゲートウェイを通しても、Claude Code を Claude 以外のモデルへルーティングすることはサポートしない)としています15。fm serve は Chat Completions 形式だけなので、Claude Code が公式にサポートする接続先には含まれません。

Codex CLI はそもそも Chat Completions 形式の接続先を受け付けません。Codex は Chat Completions 対応の廃止を告知しており、2025年12月の告知では2026年2月初めに完全に削除する予定としていました16。手元の Codex CLI 0.152.1 で Claude に試させても、wire_api = "chat" を設定すると `wire_api = "chat"` is no longer supported. というエラーで止まりました。

一方で、Claude Code から fm を「部品」として呼ぶことはできます。エラーの確認と fm available を除き、この記事の実測は Claude Code の Bash ツールから fm respond や fm serve を呼んで結果を受け取ったものです。

この Mac の fm をどこから呼んだかで、結果ははっきり分かれました。

呼び出し元経路結果(2026年9月24日。「実測」は1回の実行、「文書」は公式ドキュメントからの判断)
シェルスクリプト・jqfm respond / fm schema実測: 動いた
curlfm serve の /v1/chat/completions実測: 会話は動いた。ツール呼び出しは tool_calls として返らなかった
opencode 1.18.26fm serve をモデルとして接続実測: 13,762 トークンで上限 4,096 を超え、500 で停止
Claude CodeBash ツールから fm を実行実測: エラーの確認と fm available 以外の実測はこの経路で行った
Claude Codefm serve をモデルとして接続文書: 接続先は Anthropic Messages などの形式に限られ、Chat Completions の fm serve は対象外

この Mac の fm は、スクリプトの部品としては動いても、コーディングエージェントの頭脳にはなりませんでした。

どこまでローカルに任せ、どこからクラウドのモデルに回すか

短い要約・抽出・JSON 化のような小さな仕事は fm に、エージェントの頭脳や長い文脈が要る仕事はクラウドのモデルに任せる、というのが実測から引ける線です。

Apple 自身も、オンデバイスのモデルをそう位置づけています。Foundation Models のドキュメントは “On-device models excel at a diverse range of text generation tasks, like summarization, entity extraction, text and image understanding, refinement, dialog for games, generating creative content, and more. When you need more reasoning capabilities and context size, use Private Cloud Compute or any server model provider.”(オンデバイスのモデルは要約や情報の抽出などが得意で、推論能力やコンテキストの大きさが要るときは Private Cloud Compute やサーバー側のモデルを使う)と書いています17。別のページでも “Because of their smaller size, on-device models have limited reasoning abilities.”(サイズが小さいため推論能力は限られる)としています18。エージェント的なツール利用と複雑な推論は、サーバー側の最上位モデルである AFM 3 Cloud Pro の担当とされています7。

以前、Ollama で M1 Pro 上のローカル LLM を試した記事では、ローカル LLM は実験目的や完全オフライン時の限定利用にとどめる、という結論にしました。fm はセットアップが要らない点でその敷居を下げますが、エージェントの頭脳にならない点は変わりませんでした。

それでも、OS に最初から入っていて API キーも要らないことには意義があると考えています。その意義は性能の高さではなく、「誰の Mac でも最初から使える」という裾野の広さにあります。なお、他のアプリやエージェントからつなぐ使い方は、ステップ3で触れた規約の一文を確かめてから判断してください。

よくある質問(FAQ)

fm available が modelNotReady を返すときはどうすればいい?

A. モデルがまだ Mac に届いていない状態です。fm にモデルをインストールするサブコマンドは無いので、まず Siri(Apple Intelligence)が有効になっているかを確かめます。私の Mac(macOS 27.0)では、システム設定の「Siri」の項目で有効にしました。オフのあいだも fm available は appleIntelligenceNotEnabled ではなく modelNotReady を返し、有効にしてしばらく待つと System model available に変わりました。Apple のドキュメントによると、ダウンロードはネットワークの状態・バッテリー残量・システムの負荷に応じて自動で行われます。有効にしたあとはネットワークにつないだまましばらく置いておき、fm available を打ち直すとよいでしょう。

fm コマンドを Claude Code から使えますか?

A. Bash ツールから fm respond などを呼ぶ使い方はできます。一方、fm serve は Claude Code が公式にサポートするモデルの接続先ではなく、そのままでは形式が合いません。Claude Code の接続先は Anthropic Messages などの形式に限られ、fm serve は Chat Completions 形式だけだからです。

fm のコンテキスト長はどれくらい?

A. Mac によって違います。私の M1 Pro では AFM 3 Core・4,096 トークンでした。上位の AFM 3 Core Advanced では 8,192 トークンという報告があります。自分の Mac の値は SystemLanguageModel.default.contextSize で確かめられます。

fm と Ollama の違いは?

A. fm は macOS 27 に最初から入っていて、インストールも API キーも要りません。使うのは Apple のモデルで、私の Mac の fm で選べたのはオンデバイスのモデル(system)だけでした(WWDC26 のデモでは Private Cloud Compute 上のモデルも指定しています)。Ollama は、自分でモデルを選んで入れる仕組みです。

まとめ

  • macOS 27 の fm は OS に最初から入っているが、モデルが届くまでは fm available が modelNotReady を返す。モデルをインストールするサブコマンドは無く、ダウンロードは自動で、ターミナルからは進捗が見えない
  • 私の Mac では、Siri(Apple Intelligence)がオフでも fm available は modelNotReady を返した。modelNotReady が出たら、まず Apple Intelligence が有効かを確かめる
  • 載るモデルとコンテキスト長は Mac によって違う。私の M1 Pro では AFM 3 Core・4,096 トークンだった
  • fm respond と fm schema は、API キーなしでシェルスクリプトや jq と組み合わせられる部品になる
  • fm serve は Chat Completions 形式の API を立てるが、1回の試行ではツール呼び出しは tool_calls として返らなかった
  • 4,096 トークンの M1 Pro では、opencode をつなぐとリクエストが上限を超えて止まり、コーディングエージェントのモデルにはならなかった
  • Claude Code と Codex CLI は、モデルの性能以前に接続方式(Chat Completions)が合わない。fm serve の形式は Claude Code が公式にサポートする接続方式に含まれず、Codex CLI では設定の段階でエラーになった
  • エージェントの頭脳はクラウドのモデルに任せ、fm はスクリプトから呼ぶ小さな部品として見るのが現実的。他のアプリやエージェントからつなぐ使い方は、fm の規約の一文(プログラムからの利用は明示的に許可された場合に限る)を自分で読んでから判断する

この記事で試したような、ローカルのモデルやクラウドのモデルを業務の仕組みにどう組み込むか、どこまでを AI エージェントに任せるかの設計についてのご相談は、コンタクトフォーム からお気軽にどうぞ。

Footnotes

  1. Build AI-powered scripts with the fm CLI and Python SDK Apple、WWDC26 Session 334。fm が macOS 27 にプリインストールされていること(“The fm command line tool comes pre-installed with macOS 27.”)、fm respond ... --model pcc のデモ、fm schema object → fm respond --schema → jq でファイルを仕分けるデモ。 ↩ ↩2 ↩3 ↩4

  2. SystemLanguageModel.Availability.UnavailableReason Apple Developer Documentation(Foundation Models)。deviceNotEligible・appleIntelligenceNotEnabled・modelNotReady の3つの理由とそれぞれの説明文。 ↩

  3. 次世代のApple Intelligenceの入手方法 Apple サポート、文書 121115(日本語版 2026年9月15日公開)。対応機種(M1 以降を搭載した Mac)、必要なストレージ(M3 以降かつユニファイドメモリ 12GB 以上の Mac は最大 14GB、その他は最大 8GB)、27.0 ソフトウェアリリースへのアップデートで対象デバイスでは自動的に利用可能になること。 ↩ ↩2 ↩3

  4. modelNotReady Apple Developer Documentation(Foundation Models)。Discussion 節に、モデルはネットワークの状態・バッテリー残量・システムの負荷に応じて自動でダウンロードされるという記述。 ↩

  5. macOS 27にはローカルLLMが入っている chibicco、Qiita、2026年9月17日。「実際に動いているモデルを確認する」節に swift -e での確認方法とその出力(AFM 3 Core Advanced / 8192)、「M3以降かつユニファイドメモリ12GB以上」という目安(記事は Apple サポートを根拠に挙げている)。 ↩ ↩2 ↩3

  6. SystemLanguageModel.Variant Apple Developer Documentation(Foundation Models)。core3(AFM 3 Core)と coreAdvanced3(AFM 3 Core Advanced)。 ↩

  7. Introducing the Third Generation of Apple’s Foundation Models Apple Machine Learning Research、2026年6月8日。AFM 3 Core(30 億パラメータの dense モデル)、AFM 3 Core Advanced(200 億パラメータの sparse モデル、“unlocked by and optimized for our most capable Apple silicon systems”)、エージェント的なツール利用と複雑な推論を担う AFM 3 Cloud Pro。 ↩ ↩2

  8. contextSize Apple Developer Documentation(Foundation Models)。モデルが扱えるトークン数の上限(“The maximum context size in tokens that the model supports.”)。 ↩

  9. Managing the context window Apple Developer Documentation(Foundation Models)。“4096 tokens per session” の記述と、日本語では1トークンがおおよそ1文字にあたるという記述。 ↩ ↩2

  10. What’s new in the Foundation Models framework Apple、WWDC26 Session 241。contextSize のコード例(コメント // 8192)と、ハードウェアに合わせてアプリを適応させるよう勧める発言。 ↩

  11. Create chat completion OpenAI API Reference。応答の message.tool_calls と、finish_reason の値 tool_calls。 ↩

  12. Providers OpenCode docs。カスタムプロバイダの設定(npm に @ai-sdk/openai-compatible、options.baseURL)。 ↩

  13. apple-fm-serve 1duo、GitHub の個人リポジトリ(README)。“The 8192-token on-device window is small for opencode’s default agent (full tool schemas ≈ 7k tokens + transcript)” という記述。 ↩

  14. Claude Code gateway compatibility guide Anthropic、Claude Code docs。接続先に必要な API 形式の表(Anthropic Messages / Amazon Bedrock InvokeModel / Google Cloud Agent Platform rawPredict)。 ↩

  15. Other LLM gateways Anthropic、Claude Code docs。“doesn’t support routing Claude Code to non-Claude models through any gateway.” という記述。 ↩

  16. Deprecating chat/completions support in Codex OpenAI Codex、GitHub Discussion #7782、2025年12月9日。Chat Completions 対応の廃止の告知(“Full removal is slated for early February 2026.”)。 ↩

  17. Foundation Models Apple Developer Documentation(フレームワーク概要)。オンデバイスのモデルが得意な処理(要約・情報抽出など)と、推論能力やコンテキストの大きさが要るときは Private Cloud Compute やサーバー側のモデルを使うという記述。 ↩

  18. Prompting an on-device foundation model Apple Developer Documentation(Foundation Models)。“Because of their smaller size, on-device models have limited reasoning abilities.” という記述。 ↩