- Book: AI Agents Pocket Guide
- Also by me: Thinking in Go (2-book series) — Complete Guide to Go Programming + Hexagonal Architecture in Go
- My project: Hermes IDE | GitHub — an IDE for developers who ship with Claude Code and other AI coding tools
- Me: xgabriel.com | GitHub
Siri can now call your app's code as a tool. On November 3, Apple opened a Siri AI Developer Preview to all developers, starting with the iOS 27.3, iPadOS 27.3, macOS 27.3 and visionOS 27.3 betas.
If you have built an agent, it will look familiar. Your App Intents become tools the model can call. When one request needs several of them, you write an "app skill", which Apple's docs call a subset of the Agent Skills format: a SKILL.md file, the same format Claude Code uses for its skills.
What Apple shipped on November 3
Apple seeded the first iOS 27.3 and iPadOS 27.3 betas to developers on November 3, a week after iOS 27.2 went out. Apple's beta release note pairs them with Xcode 27.3.
In those betas, any app can bring its content and actions into Siri AI through App Intents. Apple's examples are everyday requests: checking a delivery, booking a reservation, placing an order.
The preview documentation lists what changes. Siri can act on your app's custom content and actions, not only data that fits Apple's system-defined schema domains. People don't have to name your app while it is in the foreground or has an active Live Activity, and in the background Siri still acts if the request names it. Siri can also pass content from one app to another, and it shows your results in card snippets built from your own views.
Apple says the same capabilities are rolling out across its own apps, including Calendar, Mail, Maps, Messages, Music, Photos, Safari and Shortcuts. 9to5Mac went through the beta app by app: Siri can schedule and unsend messages, build playlists, and create calendar events with invitees and video links.
Setup is light. The docs say you don't need a new entitlement or a separate developer program. You update your existing App Intents code.

Each app intent you mark becomes a tool Siri can pick while it handles a request.
An app intent becomes a tool with one macro
The core change is a macro. Add @AppIntent(.tool) to an intent and it conforms to ToolIntent, which makes it available to Siri as a tool. Here is Apple's shopping example, rewrapped to fit this page (ProductEntity and Cart are the sample app's own types):
@AppIntent(.tool)
struct AddToCart: AppIntent {
static let title: "LocalizedStringResource = \"Add to Cart\""
static let description = IntentDescription(
LocalizedStringResource(
"Adds a product to the shopping cart."
)
)
@Parameter(
title: "\"Item\","
description: "LocalizedStringResource(\"The product to add\")"
)
var item: ProductEntity
@Parameter(
title: "\"Quantity\","
description: "LocalizedStringResource(\"How many to add\"),"
default: 1
)
var quantity: Int
func perform() async throws -> some IntentResult {
try await Cart.shared.add(item, quantity: quantity)
return .result()
}
}
If you have written a tool definition for an LLM API, you know this shape. The same page says Siri uses each intent's title and description to tell intents apart, and every parameter needs a title and description too. Those strings are your tool schema now, so write them for a model, not for a settings screen.
Two cases don't need the macro, per Apple: intents that already conform to a Siri-supported schema, such as the messages sendMessage schema, and intents with no custom action in perform(), like a widget configuration intent.
For Siri to find your entities, the docs point you to the Spotlight index first, with an EnumerableEntityQuery as the fallback for entities you don't index. Apple's news post adds that Siri AI can surface any entity in the Spotlight semantic index, not only entities that fit an existing schema.
App skills are SKILL.md files with the extras removed
Siri often calls a single tool. For requests that need several, Apple added app skills. You add one Skills.skillsbundle per app target, from Xcode's Skills Bundle template, and each skill is a folder holding a SKILL.md file.
Where the rules overlap, they match the Agent Skills spec: name is 1 to 64 lowercase letters, digits and hyphens and must match the folder name, and description is required and capped at 1,024 characters. Apple's version is narrower. It takes only name and description in the frontmatter, a single-line description, a body of at most 10,000 characters, and no scripts, references or other files in the bundle.
Here is a minimal skill I wrote for the cart example above, assuming the app also has find-past-orders and checkout intents. It follows Apple's documented limits, but I haven't built it in Xcode:
---
name: reorder-groceries
description: Reorders items from a past grocery order.
---
Use the find past orders tool first. If the user names no
order, pick the most recent one and say which date it was.
Add each item with the add to cart tool, keeping the same
quantity unless the user asks for a change. Do not use the
checkout tool. Show the cart and ask the user to confirm.
It lives at Skills.skillsbundle/Skills/reorder-groceries/SKILL.md. Apple tells you to refer to intents by what they do, as in "the get weather tool", not by class name. Siri reads only the frontmatter to decide whether a skill applies, and loads the body after a match. The Agent Skills spec describes the same progressive loading. The description does the routing, so a vague one means the skill may never get picked.
The same page lists two build traps. If the bundle is missing from Copy Bundle Resources or fails to compile, your app gives Siri no skills at all. If two skill names collide across your app, its extensions and embedded frameworks, the system uses one of them, and which one is undefined.

One file format, two kinds of agent: a phone assistant and a coding agent both read SKILL.md.
Skills don't enforce anything
The "Do not use the checkout tool" line in my example is only a request. Apple says so directly: "You can't use app skills to enforce deterministic behavior", and Siri does not run a skill's listed tools in order.
If an action must be protected, protect it in code. The App Intents guide gives you three settings:
-
authenticationPolicyon an entity or a single property, for example.requiresLocalDeviceAuthenticationon a bank balance. - An intent-level policy when the intent returns sensitive data, because property-level policies only cover Siri's responses.
-
visibility: .internalon a property, which keeps it to your app and its extensions so Siri and Shortcuts never read it.
Mind the default: entities don't require authentication unless you set a policy. If you are adding @AppIntent(.tool) to intents written before Siri could call them, review those entities first.
To check your work, Apple added the Siri Integration Advisor in Xcode and a Siri Evaluations framework, in beta. You script multi-turn scenarios and assert which intents Siri calls, which entities it finds, which skills it loads and what it says. The docs warn that Siri's responses can vary between runs, so you run the set more than once. That is an eval suite, and it is the right habit for any feature where a model picks the code path.
Who can try it, and when it ships
The audience is narrow for now. The preview docs say it works in development-signed builds on a supported device and for internal TestFlight testers. External TestFlight testers and App Store users don't get your Siri integration, and the API and Siri behavior may change during the preview.
Apple says Siri AI reaches customers in a few months, App Store submission opens in the spring, and terms and usage policies come later. It needs an Apple Intelligence device, in languages including English, French, Japanese, Korean, Portuguese and Spanish, with more coming. It is unavailable in the EU on iOS, iPadOS and watchOS, not available to users under 13, and subject to daily usage limits.
The same news post lists Apple Intelligence Group Labs on November 4 and November 5 if you want to ask Apple engineers directly. I haven't run the 27.3 beta myself, so treat the code above as a starting point from Apple's docs.
SKILL.md now has a reader on phones as well as in coding agents. If you already keep skills for Claude Code, the open question is whether one file can serve both, since Apple's version allows only name and description in the frontmatter and no other files next to SKILL.md.
If this was useful
I build Hermes IDE, so weigh this with that in mind. It's a free, source-available (BSL 1.1) IDE for running Claude Code, Codex and other coding agents on macOS, Windows and Linux, and its Commands list shows your own commands and skills with a short description. Download it or star it on GitHub. It is not affiliated with Apple, Anthropic, OpenAI or any agent vendor.
Siri's new setup is the agent pattern in miniature: tools with clear descriptions, guidance for multi-step work, auth checks the model can't talk its way past, and evals because the output varies. The AI Agents Pocket Guide covers those patterns for the agents you build yourself, whatever runtime they land in.

Top comments (0)