audio-streaming
Receive synchronized PCM audio frames through a Camera stream on iOS
Launch and activate an iOS app from Hey Meta voice invocations and acknowledge each action
$ npx -y skills add facebook/meta-wearables-dat-ios --skill voice-invocations --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/voice-invocationsContext preview
The summary Claude sees to decide when to auto-load this skill.
Launch and activate an iOS app from Hey Meta voice invocations and acknowledge each action
name: voice-invocations description: Launch and activate an iOS app from Hey Meta voice invocations and acknowledge each action
Voice Invocations lets Meta AI launch or foreground an app when the wearer says “Hey Meta, start {app name}.” It is a Wearables-level stream, not a `DeviceSession` capability, and does not require a running device session.
Register the bundle identifier, request Voice Invocation approval, and configure the spoken app name in Wearables Developer Center. Do not add invocation phrases to `Info.plist`. Voice Invocations does not require camera or microphone permission.
`VoiceInvocationsStream` is `@MainActor`. Retain the stream and both listener tokens for as long as the app should receive actions. Register listeners before starting.
let newStream = try VoiceInvocationsStream(wearables: Wearables.shared)
stream = newStream
invocationToken = newStream.invocationsPublisher.listen { invocation in
guard let launch = invocation as? LaunchApp else { return }
navigateToMainScreen()
Task {
_ = await launch.responseHandle.sendSuccess(actionOutput: nil)
}
}
errorToken = newStream.errorPublisher.listen { error in
showError(error.localizedDescription)
}
try newStream.start(deviceIdentifier: deviceIdentifier)Store `stream`, `invocationToken`, and `errorToken` on the `@MainActor` owner. Every delivered invocation must be acknowledged exactly once with `sendSuccess` or `sendFailure`. The Boolean result indicates whether the response was delivered.
The initializer can throw `invalidWearablesInterface`. Starting can throw `deviceNotFound` or `channelNotConnected`; later communication failures arrive through `errorPublisher`. Starting again switches the stream to the new device.
`stop()` is safe when inactive, and the same stream can start again later. Stop the stream and release its listener tokens when the owning app component is done.
To test without hardware, check `glasses.services.voiceInvocation.hasConnectedClients` before calling `sendLaunchAppAction()`. Use `sendIncompleteAction()` to confirm malformed actions produce an error rather than an invocation.
Voice Invocations is experimental. Apps can use it for development and beta testing, but cannot publish it to production release channels yet.
See the [Voice Invocations guide](https://wearables.developer.meta.com/docs/develop/dat/voice-invocations/).
The Meta Wearables Device Access Toolkit enables developers to utilize Meta's AI glasses to build hands-free wearable experiences into their mobile applications.
Receive synchronized PCM audio frames through a Camera stream on iOS
Capture standalone high-quality photos from connected glasses on iOS
Stream, video frames, photo capture, resolution/frame rate configuration
Swift patterns, async/await, naming conventions, key types for DAT SDK iOS development
Use the Wearables DAT MCP server for live DAT documentation search with `search_dat_docs`,…