Skip to main content
AI tutorials

Use Claude Code from macOS Spotlight and Siri

Learn how to install Claude for Siri, connect it to an authenticated Claude Code account, enable experimental provider discovery, and send text prompts through Spotlight. This tutorial also explains the project’s architecture, security constraints, testing tools, troubleshooting steps, and current limitations.

Use Claude Code from macOS Spotlight and Siri

What Claude for Siri Does

Claude for Siri is an experimental macOS project that makes a signed-in Claude Code account available as a provider in macOS Spotlight and related Siri interfaces. Its menu bar application runs a built-in Swift bridge, receives requests from a sandboxed provider extension, invokes the local Claude Code CLI, and streams text responses into Apple’s native response interface.

Security warning: The project requires macOS 27 with System Integrity Protection and Apple Mobile File Integrity disabled. This substantially lowers macOS security protections. Use a dedicated development Mac rather than a primary or production machine. The application and its scripts do not disable these protections for you.

This is an independent proof of concept, not an official Apple or Anthropic integration. It relies on private, beta-specific APIs and was tested on macOS 27 build 26A428 with Xcode 27 27A266a.

Key Features and Limitations

What currently works

  • Provider discovery, consent, and invocation have been demonstrated in Spotlight.
  • The Swift bridge can complete live requests through an authenticated Claude Code account.
  • Responses stream incrementally into Apple’s native response UI.
  • Each request starts a new conversation.
  • Writing Tools support is implemented for selected text, although it has not been verified in the native interface.
  • The menu bar application includes controls for testing the connection, enabling discovery, and restoring normal discovery behavior.

Important limitations

  • The provider handles text only.
  • It does not generate images or accept attachments.
  • It cannot execute device actions.
  • It does not access Siri’s mail, contacts, messages, or semantic index.
  • Voice routing remains unverified.
  • There is no verified way to make this extension the system-wide default Ask provider.
  • Spotlight, Siri’s separate Ask menu, and System Settings may display different provider lists.

Apple’s generic onboarding interface may mention image generation or display a placeholder icon. Those elements do not represent capabilities provided by this project. The reliable routing method is to explicitly choose Ask… → Claude for each Spotlight request.

Prerequisites

Before installing the project, prepare a development Mac with the required software and configuration:

  • macOS 27 with SIP and AMFI already disabled.
  • Xcode 27, including an accepted license and completed first-launch component installation.
  • Homebrew for installing XcodeGen.
  • XcodeGen.
  • Claude Code, installed and signed in.
  • Git and access to a terminal.

Install XcodeGen with Homebrew:

brew install xcodegen

Authenticate Claude Code:

claude auth login

You can confirm the account state before continuing:

claude auth status

Install Claude for Siri

1. Clone the repository

git clone https://github.com/mpociot/claude-siri-ai.git
cd claude-siri-ai

2. Build and install the application

./scripts/install.sh

The installer builds the application, places it at ~/Applications/Claude.app, and opens it. Installation stops if another application already occupies that exact path. Anthropic’s application at /Applications/Claude.app is separate and does not conflict with the user-local installation path.

The build uses the Xcode selected by xcode-select. If the wrong developer directory is active, specify Xcode explicitly:

DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer ./scripts/install.sh

3. Test the Claude Code connection

Open the installed Claude application and click Test Connection. The application searches common locations for the Claude CLI. If it cannot find the correct executable, use Choose Claude CLI… and select it manually.

4. Enable provider discovery

Click Enable in Spotlight… and authenticate in the macOS administrator dialog. The application temporarily restarts Siri and Spotlight with expanded provider discovery so that macOS can find the custom extension.

This mechanism is temporary. After restarting the Mac or restarting Siri services, you may need to click Enable in Spotlight… again. Use Restore Normal Discovery to remove the temporary process override.

Send Your First Prompt

  1. Keep the Claude menu bar application running.
  2. Press ⌘Space to open Spotlight.
  3. Right-click the Spotlight input field.
  4. Select Ask… → Claude.
  5. Enter a text prompt and submit it.
  6. If macOS displays Apple’s consent interface, complete the Turn On flow.

For example, you can ask:

Explain the difference between async and parallel programming in three short paragraphs.

The response should stream into Apple’s native interface. Because every request starts a fresh conversation, do not assume that Claude remembers previous prompts submitted through Spotlight.

Closing the application’s settings window does not stop the bridge; it remains available through the menu bar. Enable Open at login if you want the application to start automatically, but this option is not required.

How the Integration Works

Spotlight / Siri
  → sandboxed ClaudeProvider.appex
  → authenticated HTTP/NDJSON on 127.0.0.1:17839
  → Swift bridge inside Claude.app
  → signed-in Claude Code CLI
  → streamed text
  → native Siri response

The provider extension is sandboxed and communicates with the host application over IPv4 loopback. The host remains outside the sandbox so that it can launch the Claude Code CLI.

For each request, the CLI runs in a private temporary directory with tools disabled, no MCP servers, safe mode, no Chrome integration, and no persistent conversation. Temporary prompt input is deleted after execution. According to the project documentation, the bridge does not log prompts, responses, or credentials.

The local server authenticates every request and rejects browser Origin headers and ambiguous HTTP framing. It also limits request body size, open connections, concurrent Claude processes, and execution time.

Understanding the local token

The build creates a random bearer token once in .local/bridge.json and bundles it into the host and extension targets. Rebuilding preserves the token. Do not distribute a compiled application bundle containing your local token.

The token helps prevent accidental or browser-based access, but it is not a security boundary against another local process capable of reading the application bundle.

Understanding discovery

Provider discovery uses a temporary, narrowly scoped runtime shim in Apple’s existing Siri and provider processes. It does not modify Apple binaries, launch plists, boot arguments, entitlement checks, or provider consent. You must still approve the provider through Apple’s native consent flow.

Build and Development Commands

Build without installing

./scripts/build.sh

Install an existing build

./scripts/install.sh --skip-build

XcodeGen generates the project. Both the host and extension use the private com.apple.developer.model-delegation entitlement and are ad-hoc signed. This setup does not grant a distributable Apple entitlement.

After installation, the application embeds the bridge, discovery script, and compiled discovery shim. The installed application therefore does not require the repository checkout, Xcode, or Python at runtime. Claude Code must remain installed and authenticated. During discovery sessions, do not move the installed application from its current path.

Control discovery from the command line

./scripts/discovery-session.sh start
./scripts/discovery-session.sh stop

The first command starts the temporary discovery session. The second restores normal discovery behavior.

Testing the Project

Run the Swift test suite

swift test --scratch-path .local/swift-build

The native Swift tests do not require a Claude account. Ten tests cover HTTP authentication and request validation, incremental text delivery, completion and error handling, process timeout and cancellation, and a real localhost round trip through a fake CLI.

Run a live bridge request

./scripts/smoke.sh

This command sends one live request through the running application and your authenticated Claude account. The documented successful response is Claude bridge works.

Inspect the extension and application signature

pluginkit -m -A -D -v -i dev.goldengate.Claude.Provider
codesign --verify --deep --strict "$HOME/Applications/Claude.app"

The first command checks whether macOS has registered the provider extension. The second verifies the installed application’s code signature.

Troubleshooting

The bridge does not start

Quit duplicate copies of Claude for Siri and check whether another process is using TCP port 17839. Only the intended bridge should listen on this port.

Claude does not appear in the Ask menu

Open the application and run Enable in Spotlight… again. Complete any macOS consent prompt that appears. Discovery may need to be repeated after a reboot or Siri service restart.

The Claude CLI is not detected

Confirm that Claude Code is installed and authenticated with claude auth status. Then use Choose Claude CLI… in the application to select the executable manually.

Spotlight and System Settings disagree

This is a known consequence of the experimental provider-discovery path. Spotlight, Siri’s separate Ask menu, and System Settings can report different provider lists. A provider appearing in one interface does not guarantee that it will appear in all of them.

Claude is not used automatically

This project does not provide a verified default-provider setting. Even if Claude was selected in an earlier conversation, open each new Spotlight request through Ask… → Claude. The application intentionally avoids exposing an unverified Make default control.

Advanced Usage and Safety Tips

  • Use a separate development machine because disabling SIP and AMFI weakens core operating-system protections.
  • Keep the installed application at ~/Applications/Claude.app while a discovery session is active.
  • Use Restore Normal Discovery or ./scripts/discovery-session.sh stop when experimental discovery is no longer needed.
  • Do not distribute locally built bundles because they contain the bearer token generated for your setup.
  • Run the Swift tests before changing bridge authentication, streaming, timeout, or cancellation behavior.
  • Use the smoke test to separate bridge or account problems from Spotlight discovery problems.
  • Expect independent requests rather than persistent conversations.
  • Do not rely on Writing Tools, voice routing, or default-provider behavior without performing separate native tests.

Conclusion

Claude for Siri demonstrates how a sandboxed macOS provider extension, a local authenticated Swift bridge, and Claude Code can stream text responses into Spotlight’s native Ask interface. The project is useful for experimentation and development, but its private APIs, reduced system protections, temporary discovery mechanism, and unverified Siri behaviors make it unsuitable for ordinary production use.