{"slug": "sf-symbols-from-the-command-line-and-ai-agents", "title": "SF Symbols from the Command Line and AI Agents", "summary": "SF Symbols 27 ships a command-line tool with two commands, `search` and `export`, that Apple pitches for scripts and AI agents in the What's New window. The tool lets developers check symbols against a deployment target via `--min-platform`, catch renames such as `xmark.bin` becoming `bin.xmark` on iOS 13, filter by category, and render PNG or PDF output without opening the app. A few lines in `CLAUDE.md` or `AGENTS.md` let an agent verify a symbol exists before writing `Image(systemName:)`.", "body_md": "SF Symbols 27 ships a command-line tool. Apple mentions it in the What's New\nwindow, next to a **Copy path** button, and pitches it for scripts and AI\nagents:\n\nIt has two commands, `search` and `export`, and they cover more than looking\nup names. You can check a symbol against your deployment target, catch\nrenames, and render PNGs without opening the app.\n\n## Setting up\n\nThe binary lives inside the app bundle:\n\nThe path is long and has a space in it, so add an alias to your shell config:\n\nA symlink won't work. The tool looks for `SF Symbols.app` relative to its own\npath, so a link in `/usr/local/bin` fails to find its resources.\n\nThe rest of the post uses plain `sfsymbols`. `sfsymbols help search` and\n`sfsymbols help export` list every option.\n\n## Searching\n\nA bare query searches the whole catalog. Two flags make the output more useful:\n\n`--show-glyph` adds the symbol itself as the first column. It renders in\nTerminal on macOS, which falls back to SF Pro, but not in most editors.\n\n### Match styles\n\nThe default style, `permissive`, matches name components, aliases, tags, and\nlemmas, the same way the app's search does. That's why `weather` starts with\nwinter sports:\n\n`--match-style` switches to two stricter styles that only look at names:\n\n- `nameContains` :`car.fill` matches`car.fill` and`cablecar.fill` .\n- `exactName` :`car.fill` matches only`car.fill` .\n\n### Categories\n\n`--category-filter` takes the same categories as the app's sidebar. A plain\n`bolt` search starts with the bolt itself, while the `weather` category turns\nit into thunderstorms:\n\nAn unknown key prints the full list, so `--category-filter help` is the fastest\nway to see them. My favorite is `whatsnew`, which answers \"what did Apple add\nthis year?\":\n\n### Reverse lookup\n\nSearch works on code points too:\n\nYou can also paste the glyph itself, for example one copied from a Figma file, and get the name back.\n\n## Checking your deployment target\n\n`--min-platform` takes your deployment target, written as a platform and\nversion with no space, like `iOS16`, and keeps only symbols available on that\nversion. Repeat it for multiplatform apps, and a symbol has to pass every one.\nWithout the filter, `sun.max` matches seven symbols:\n\nAn app targeting iOS 15 and macOS 12 gets four of them:\n\nThe filter knows about renames. `xmark.bin` exists on iOS 13, but under a\ndifferent name:\n\nIf your app supports iOS 13, `bin.xmark` is the name that works there.\n\n### Rendering modes\n\nA symbol's availability isn't one number. `--json` splits it by rendering\nmode:\n\n`heart.fill` is on iOS 13, but multicolor rendering needs iOS 15. The plain\ntext output only shows monochrome availability.\n\n## Exporting\n\n`export` renders a symbol to PNG or PDF with the same options as the app's\nexport panel:\n\n`--point-size` is a font size, not a canvas size. The file above is\n198 × 198 pixels: the glyph's own bounds at 64 points, times three.\n\nFor several formats at once, use `--output-dir` instead of `--output`. Files\nare named after the symbol:\n\nSVG, the default format, isn't an icon. It's the editable design template the app produces, with all weights, scales, and annotations on a 3300 × 2200 canvas. Use it as a starting point for a custom symbol. Rendering options don't apply to it.\n\n## Letting agents verify symbols\n\nAgents are good at picking plausible symbol names and bad at knowing whether\nthey exist. `checkmark.circle.badge` looks real, but the catalog doesn't\nhave it:\n\nA few lines in `CLAUDE.md` or `AGENTS.md` make the agent check before it\nwrites code:\n\nNow the agent searches, verifies, and only then writes\n`Image(systemName:)`. It can also run `export` to show you the candidates\nbefore touching the views.", "url": "https://wpnews.pro/news/sf-symbols-from-the-command-line-and-ai-agents", "canonical_source": "https://artemnovichkov.com/blog/sf-symbols-from-the-command-line-and-ai-agents", "published_at": "2026-09-27 00:00:00+00:00", "updated_at": "2026-09-27 20:00:19.017992+00:00", "lang": "en", "topics": ["developer-tools", "ai-agents", "ai-tools"], "entities": ["Apple", "SF Symbols 27", "SF Symbols.app", "Figma"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/sf-symbols-from-the-command-line-and-ai-agents", "markdown": "https://wpnews.pro/news/sf-symbols-from-the-command-line-and-ai-agents.md", "text": "https://wpnews.pro/news/sf-symbols-from-the-command-line-and-ai-agents.txt", "jsonld": "https://wpnews.pro/news/sf-symbols-from-the-command-line-and-ai-agents.jsonld"}}