GitHub Docs

macOS 27 ships an on-device language model and a command-line tool for it, /usr/bin/fm. fm serve starts a local OpenAI-compatible server, so VibeCody talks to it like any other local provider — no API key, no network, no separate inference stack. Nothing leaves the Mac.

On a Mac that can run it, and where you have already accepted Apple’s terms, it is the provider VibeCody starts with when you have not chosen one.

Requirements

  • macOS 27 or later, Apple silicon (Intel Macs are not supported)
  • Apple Intelligence enabled, in a supported language and region
  • Apple’s terms accepted — see below

fm available reports whether the model can run:

fm available          # System model available

Accept Apple’s terms

fm is covered by a legal notice. VibeCody never accepts it for you. fm itself records agreement as a side effect of use — piping a prompt into fm respond marked the terms agreed without asking — so the daemon does not run fm respond, fm serve or fm chat until fm license --status already reports agreement, and choosing this provider as a default never accepts anything.

Accept in Settings → Providers → Apple Foundation Models. The panel shows the notice verbatim (from fm license --show) and accepts only when you click I’ve read the terms — accept. It then re-reads the status, and shows fm’s own words if agreement was not recorded.

You can also do it in Terminal:

fm license --show     # read the terms
fm license            # agree
fm license --status   # confirm

The notice also says you agree not to programmatically access Apple models through Apple software or services “except as expressly permitted”. fm serve is Apple’s own server mode; whether your particular use is permitted is between you and Apple’s licence, so read it.

Configure VibeCody

Nothing is required. VibeCody starts fm serve on 127.0.0.1:1976 (loopback only) the first time the provider is used, and reuses it afterwards.

vibecli --provider apple-foundation "Summarise this repo's README"

Config file (~/.vibecli/config.toml) — only needed to point at a server you run yourself; setting api_url stops VibeCody managing one:

[apple_foundation]
api_url = "http://127.0.0.1:1976/v1"      # default
model = "system"

Models

fm serve exposes exactly one model:

Model Notes
system Default. Apple’s on-device model

Limits worth knowing

  • Small context. Third-party write-ups put it at roughly 4K–8K tokens depending on OS version and device; these figures are unverified here, and Apple advises reading the value at runtime rather than hard-coding one.
  • No native tool calling. fm serve ignores a tools array — tested: the model answered in prose and invented the tool’s result. VibeCody therefore describes tools in the prompt instead of sending schemas (the prose path).
  • It is a small model. Good for chat, summarising and light edits; use a larger provider for serious coding-agent work.

Verify

fm license --status
vibecli --provider apple-foundation "Say hello in three words"

Troubleshooting

Symptom Cause
Panel says “needs macOS 27” No /usr/bin/fm — older macOS, or not a Mac
“The model isn’t available” Apple Intelligence is off, or unsupported region/language; the panel shows fm’s own message
“terms have not been accepted” Accept them in Settings (above)
did not answer on 127.0.0.1:1976 Another program holds port 1976