Bring your own
Snag works with your own models, transcription, agents and capture backends. Nothing here is required: on a fresh install everything runs on this iPhone or through your Snag account.
| Bring | Where | Plan |
|---|---|---|
| Your own speech to words | Settings > AI and speech | Free |
| Your own model for actions from a capture | Settings > AI and speech | Free |
| Your own model for Snag Control | Settings > AI and speech | Pro |
| Your own agents | Control tab, add an agent; or Settings > Advanced | Pro (all of Snag Control is Pro) |
| Your own capture backends: webhook, Nextcloud, Obsidian | Settings > Connections | Free |
See Plans for everything that differs between Free and Pro.
AI and speech
Open Settings > AI and speech (also in Settings > Advanced). The screen says: "Choose where each job happens. On this iPhone is the default, and nothing leaves the phone."
Each job has its own choice:
| Job | On this iPhone | Your own | Snag account |
|---|---|---|---|
| Turning speech into words | "Apple's speech recognition. Apple's servers only for a language you said yes to." | Your own service: a Whisper-compatible service. The recording goes from this iPhone to it | Not in this version |
| Actions from a capture | "Snag finds the to-dos itself." | Your own model: an OpenAI-compatible model or your Anthropic key finds them | Not in this version |
| Snag Control (Pro) | "Apple Intelligence, where this iPhone has it." | Your own model, for a name heard mid-sentence | Not in this version |
Snag account is shown but cannot be picked in this version.
On Free, the Snag Control choice is locked and shows "Snag Control is a Pro feature. See Pro". On Pro, Use it for a name heard mid-sentence turns the Control model on; off, Snag asks which agent was meant.
Add a connection
A connection is one endpoint and its key. Enter a key once and use the connection for any of the jobs.
- In Settings > AI and speech, under Your connections, tap Add a connection.
- Pick the kind: OpenAI-compatible (OpenAI, Groq, Ollama, LiteLLM, a Whisper server) or Anthropic (your own API key).
- Fill in the fields:
Field OpenAI-compatible Anthropic Name Optional ("My server"). Default: the address's host Optional. Default: "Anthropic" Address Required, e.g. https://api.example.com/v1Not asked Key Optional ("Key, if it needs one") Required Chat model For actions and Snag Control Required Transcription model Optional. Default whisper-1Not asked: Anthropic is text only - Tap Test, then Save.
- Back on AI and speech, pick Your own service or Your own model for each job. With several connections, choose one under Using.
Anthropic connections serve actions and Snag Control only: "Text only: actions and Snag Control. For speech, add an OpenAI-compatible connection."
To remove one, open it and tap Remove this connection. Any job using it goes back to this iPhone.
The address rule
httpsworks for any address.- Plain
httpworks only for an address on your own network typed as one: a 10, 172.16 to 172.31, 192.168, 169.254 or 127 address, a private IPv6 address, a.localname orlocalhost. The connection then shows "Not encrypted, so only use on a network you trust." - Any other
httpaddress is refused: "Use an https address. Plain http only works on your own network." - Snag never looks up a name to decide. A server on your network reached by a plain name needs https, its address or its
.localname.
Test
Test asks the endpoint for its model list, which costs nothing.
| Shown | Meaning |
|---|---|
| "It answered. This connection works." | Ready |
| "It said no to the key. Check it and try again." | 401 or 403 |
| "It answered with an error (404)." | Another status |
| "No answer from that address." | Nothing reachable there |
When your own endpoint does not answer
Snag never loses a capture to your endpoint:
- Speech: the live transcript still runs on the phone. When the capture ends, the recording goes to your service and its words replace the live ones. If it fails, the live words stay and the capture shows one quiet line: "Your transcription service didn't answer, so the words are from this iPhone."
- Actions: if your model fails, or its answer is not in the expected shape or quotes words that are not in the capture, Snag finds the actions on the phone and shows: "Your model didn't answer, so actions were found on this iPhone."
- A choice that can't be used now (no address, no model, no key for Anthropic, a removed connection) runs on this iPhone, and the screen says so under the choice: "That connection isn't ready (an address, model or key is missing), so this runs on this iPhone for now."
Free's 30 smart captures a month count whichever model finds the actions.
Keys and privacy
- Keys are stored in this iPhone's Keychain, are not synced, and are sent only to the connection's own address.
- With your own connection, the recording or words go from this iPhone straight to the address you entered, under that service's terms. Snag does not receive them.
What exactly is sent: OpenAI-compatible and Anthropic endpoints.
Your own agents
Snag Control drives agents you run. Snag hardcodes none: each agent describes itself (its name, what it can do, how private its answers are) once connected. See Snag Control.
| Backend | Ask | Jobs | Approvals | Set up |
|---|---|---|---|---|
| Snag agent API | Yes | Yes | Yes, all classes | Control tab, add an agent > Add an agent server |
| OpenAI-compatible server | Yes | Optional | No | Settings > Advanced > Use my own infrastructure > Direct endpoints |
| Nextcloud Talk room | Yes | Yes | Routine, in rooms that carry proposals | Control tab, add an agent > Nextcloud Talk |
| An A2A agent | Shown as "Not in this version" |
Agents can also be declared in a repo's .snag/agents.yaml. Every address is shown before it is accepted. See Commands in a repo.
Reference: Snag agent API, Nextcloud Talk agents, OpenAI-compatible endpoints.
Use my own infrastructure
Settings > Advanced > Use my own infrastructure ("For people who run their own servers.") opens:
| Item | What it does |
|---|---|
| Direct endpoints | Agents and endpoints as JSON (talk_rooms, openai_agents, agent_apis, overrides, user), and Keys saved by name in the Keychain |
| AI and speech | The same screen as above |
| snag-bridge | A relay address. Marked "Not used in this version": Snag keeps the address and does not use it |
| ntfy | A topic your server posts to when something's waiting. Snag checks it each time it opens |
| Try it | Type what you would say and see what Snag does, on the phone or as in the car |
Your own capture backends
Captures can go to your own server or vault instead of, or as well as, your Snag account. All of these are free. On Free, captures go to your Snag account and one connection; on Pro, to every connection.
| Backend | What it gets | Details |
|---|---|---|
| Webhook | Each capture as JSON: text, actions and task fields, no audio or files | Webhooks |
| Nextcloud | The recording and a markdown transcript in a folder; tasks in Nextcloud Tasks | Destinations |
| Obsidian | Markdown in your vault: today's daily note or a new note each time | Destinations |
Add one in Settings > Connections > Add a connection.
Voice commands to your own workflows
Voice commands send what you say to n8n, Zapier, Make or any URL, signed with Standard Webhooks, and speak the reply. They are part of Snag Control (Pro). See Voice commands, Webhooks and Commands in a repo.
Next: Plans