Grok Bot or ZeroSettle's hosted AI agent for your iMessage number?
Pick ZeroSettle's hosted AI agent when what your number needs to say fits in a written business context, a few files and some read-only lookups: there is nothing to build or host, and each text it sends costs one credit. Pick Grok Bot when replies depend on your own Gmail, calendar, Slack or browser sessions, or on multi-step work only an agent with its own computer can do; you build a skill, a webhook routine and a small relay, and each run spends Grok Bot usage. A number answers one way or the other, and one set_agent call switches it.
Key takeaways
- Either-or: each line group is managed by API (texts go to your webhook, then to Grok Bot) or by the hosted agent (the webhook isn't called).
managed_byis the switch. - Hosted agent: no server; it answers from your
business_context, up to 10 files, up to 5 MCP servers and up to 10 videos, follows up with triggers, and answers group chats when a message is meant for it. - Grok Bot: your own always-on agent on a persistent cloud computer with your connected apps, skills and routines. You build the relay that turns ZeroSettle's signed webhook into a routine call.
- Costs: the ZeroSettle subscription is the same either way. The hosted agent spends credits (1 per text); a number managed by API spends none on texts, but every Grok Bot run spends your plan's usage.
- Not a cage: you can switch at any time, and Grok Bot can manage the hosted agent through the ZeroSettle connector even while the hosted agent does the answering.
What are the two options, exactly?
Both options sit behind the same thing: a ZeroSettle number. ZeroSettle gives your business its own phone number on real iMessage, running on Apple hardware we operate in a server facility, with your name and photo shown according to each recipient's settings. ZeroSettle is backed by Y Combinator and built by former Apple engineers. What changes between the two options is who writes the replies.
ZeroSettle's hosted AI agent answers texts on ZeroSettle's side. You write a business_context (who it texts and why, your product, prices, policies, how to talk, what never to say), pick a voice and a response time, and switch the line group to managed_by: "zerosettle". It can also read files you add, use tools from MCP servers you connect, send videos you add, open conversations with start_conversation, and text on its own with triggers such as a next-morning follow-up. A new signup starts managed by the hosted agent. The full tour is in how the hosted agent answers iMessages.
Grok Bot is the always-on agent from the Grok team, in early beta since August 11, 2026. Per its docs (checked November 4, 2026), each Bot works from a persistent cloud computer with a browser, a command line and a filesystem, shared by every Bot on your account. It connects to apps such as Gmail, Google Calendar, Slack, Notion and Google Drive, adds MCP servers by URL, learns skills, and runs routines on a schedule, on an app event, on an email or on a webhook call. It has no texting tool of its own, so the setup guide gives it a ZeroSettle number: the line group is managed_by: "api", inbound texts go through a relay to a webhook routine, and the Bot replies with POST /api/imessage/send.
How do they compare side by side?
| ZeroSettle hosted agent | Grok Bot | |
|---|---|---|
managed_by | "zerosettle" | "api" |
| What you build | Nothing: settings in the console's Messaging tab, the API or set_agent | A texting skill, a webhook routine and a relay (about 80 lines on a Cloudflare Worker), plus the ZeroSettle webhook |
| What it knows | Your business context (up to 40,000 characters), up to 10 files, the conversation | Anything your connected apps, browser sessions and files on its computer reach |
| Tools | Up to 5 MCP servers; read-only tools come on, tools that change things start off; bearer token only, no OAuth | Its app catalog, custom MCP servers, a browser and a command line |
| Speed and "…" | response_time instant by default, typing bubble before each text; or human, busy, dont_reply | Webhook normally in 1 to 2 seconds, then a run; ZeroSettle's instant typing shows "…" in one-to-one chats for up to 20 seconds, and the relay can hold it for 60 |
| Who it answers | Anyone who texts the number (never another ZeroSettle number) | Whoever your relay's allowlists let through |
| Group chats | Answers when a message is meant for it or asks something it can help with | Wakes when the relay's name filter matches; you write the group rules |
| Texting on its own | Up to 5 triggers: once or daily, morning, afternoon or evening | Scheduled routines, at least 5 minutes apart, plus anything you ask in chat |
| Approvals | None; you control what it may do through the context and which tools are on | Auto Review approval cards; a background run's card expires after 30 minutes |
| Per-reply cost | 1 credit per text it sends | Grok Bot plan usage per run; no ZeroSettle credits for texts |
| Status | The docs don't name the model | Early beta; menus and limits may change |
The pattern behind the table: the hosted agent knows less but needs nothing from you, and it was made for conversations with customers. Grok Bot can do far more per message, but you own the plumbing, the filtering and the usage bill.
What does each one cost?
The number costs the same either way. ZeroSettle Pro is $49 a month for one dedicated iMessage number, month to month with a 30-day money-back guarantee. Growth starts at $199 a month for one dedicated number, with 25+ new outbound contacts a day, and a Pro number can upgrade to it in the console. Need several numbers working as one? Multi-number Growth terms are agreed in an operator-priced invite, so talk to us. Enterprise is custom pricing through sales for high volume and compliance needs. ZeroSettle pricing has the details.
Hosted agent: credits. Every text it sends uses one credit: each text of an answer (up to three), each opener text, each trigger text. Typing, tapbacks, an answer it decides not to send, and a refused or failed text use none. A new account gets 500 free credits on Pro or 1,000 on Growth, once, shared by every number; packs are 1,000 for $50 or 5,000 for $200 and never expire. For example, a two-text opener, three two-text answers and one follow-up come to 9 credits, so Pro's 500 cover about 55 such conversations. At zero, the hosted agent goes quiet until you buy more.
Grok Bot: usage. A number managed by API uses no credits for texts, photos or voice messages (videos use 1 credit per 3 MB on either side). The cost moves to Grok Bot: its docs say each routine run spends usage, and warn that a short schedule or a busy trigger "can use a week of usage in a day." The Grok Bot pages we checked give no price per run; usage comes with an eligible plan (at launch, SuperGrok Heavy, Cursor Ultra and Cursor Teams Premium). Add the relay's hosting, which for a personal Bot fits in Cloudflare's free tier.
So for a busy customer line with simple answers, credits are easy to predict. For a few dozen texts a day to you and your team, where each reply is real work, Grok Bot usage you already pay for may be the better deal. Measure before you assume (see what isn't confirmed).
When is the hosted agent the better pick?
- You don't want to run anything. No relay, no routine, no keys on a shared computer. Write the context and switch it on.
- Strangers text the number. Customer lines get texts from anyone. The hosted agent is built for that: it answers from your context only, says it is your automated assistant if sincerely asked, points people who want no more texts to STOP, and starts tools that can change something switched off.
- The answers can be written down. Hours, prices, policies, a booking or payment
link, a demo video. A price list or menu goes in as a file. - You need lookups but not actions. An MCP server with a read-only
lookup_ordertool lets it answer "where's my order?" without giving texters the power to change anything. - You want follow-ups without a scheduler. Each trigger picks a different moment of its morning, afternoon or evening window in each conversation, so texts land like a person's.
When is Grok Bot the better pick?
- The replies need your own accounts. "Am I free Thursday?" needs your calendar; "send me the deck from Drive" needs Drive. Grok Bot connects those apps; the hosted agent only reaches what an MCP server with a bearer token exposes.
- The work is more than a reply. Research in a browser, a script on the command line, a Slack post, a draft email, then a text back. That's a Grok Bot run, not a business-context answer.
- The audience is small and known. You, your team, a few clients. The relay's allowlists keep everyone else out, which matters for a Bot that can read your Gmail.
- You want to approve sensitive sends. Auto Review can hold an action for your OK. See approving Grok Bot's replies before they go out.
- You already run your day through Grok Bot. Then iMessage is one more channel for an agent you have, as in the owner's daily brief or lead follow-up.
Can you use both?
Not on one line group: every line in a group behaves the same, and a group is either managed by API or by the hosted agent. Three combinations do work:
- Different numbers, different brains. With several numbers in separate line groups, one group can run the hosted agent for customers while another is managed by API for Grok Bot. Calls like
GET /api/imessage/agenttake?group=or?line=to pick which. - Grok Bot as the hosted agent's operator. Add the ZeroSettle MCP connector to Grok Bot and it can call
get_agent,set_agent,add_agent_fileandadd_mcp_server. For example, a weekly routine can rewrite the price section of the business context from a Google Sheet, while the hosted agent keeps answering.set_agentcovers every agent setting, includingmanaged_by,personality,response_time,business_context,first_message,goal,link,triggersandtimezone; send only the fields you change. - Grok Bot sends now and then. On a group the hosted agent manages,
POST /api/imessage/sendstill works, and the agent reads your texts in the thread as its own and answers the replies. Grok Bot can send a one-off update; it just won't hear the answer, because the webhook isn't called.
Create a routine named "Refresh iMessage agent prices" that runs every Monday at 8 AM.
Each run: read the "Prices" tab of my Pricing sheet, call the ZeroSettle get_agent tool,
replace only the section headed "PRICES" in business_context with the new prices,
and call set_agent with the full business_context. Don't change managed_by.
Tell me in this chat what changed.
How do you switch from the hosted agent to Grok Bot?
Build the Grok Bot side before you flip the switch. If you set managed_by to "api" first, ZeroSettle's instant typing (on by default, and it needs no webhook URL) still shows "…" in one-to-one chats, then nobody answers.
- Follow the Grok Bot setup guide through the skill, the webhook routine and the relay.
- Register the relay with
set_webhookand runtest_webhook. The relay answers the test withverifiedwithout waking the Bot. - Switch the line group, from the Bot's chat or a shell:
Call the ZeroSettle set_agent tool with managed_by "api", then call get_agent
and confirm managed_by is "api". Don't change any other field.
curl -s -X PUT -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"managed_by":"api"}' https://portal.zerosettle.io/api/imessage/agent
- Text the number from your own phone. The "…" should appear, the routine should start a run, and the reply should come from Grok Bot.
GET /api/imessage/lineshows the webhook's last delivery if it doesn't.
Only the fields you send change, so your business context, files and triggers stay saved for a later switch back. Existing conversations stay in the inbox and in GET /api/imessage/messages, so the Bot's skill can read a thread before its first answer there.
How do you switch from Grok Bot back to the hosted agent?
- Write the business context first. Until you replace it, the hosted agent uses a made-up example: a high-energy assistant closing leads for a software business.
get_agentshowsbusiness_context_is_example: trueuntil you do. - Check credits.
get_agentreturnsai_credits(withleftandstatus) on accounts that use the agent or credits. With none left, the agent stays quiet. - Switch, in one call with the context:
jq -n --rawfile ctx business_context.txt '{managed_by: "zerosettle", business_context: $ctx}' |
curl -s -X PUT https://portal.zerosettle.io/api/imessage/agent \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" -d @-
- Pause the Grok Bot routine. The webhook isn't called for a group the hosted agent manages, so the routine goes idle anyway; pausing it makes the change obvious. You can leave the relay deployed or remove the webhook with
clear_webhook. - Add what the Bot used to look up. Files for static facts with
add_agent_file; a read-only MCP server withadd_mcp_serverfor live ones.
What isn't confirmed yet, and how do you test it?
- Grok Bot usage per texting run. The docs we checked say runs spend usage but give no number. Safe test: send yourself ten texts over a day and compare your Grok Bot usage before and after. Note that the routine's Test button spends usage too.
- Grok Bot run time. The docs say a
200means a run started, not when it finishes. Time a few replies from your own phone before you put customers on it. - Approval cards on texting runs. Whether Auto Review stops a given ZeroSettle API call depends on your rules and the model. Text yourself first and watch the Bot's chat for cards; an unanswered card from a background run expires after 30 minutes and the reply never goes.
- The hosted agent's model. ZeroSettle's docs don't name it. Judge it on a test conversation with your own context.
Which rules apply either way?
ZeroSettle's limits bind the number, not the brain. Pro opens 5 new contacts a day per number; Growth includes 25+ new outbound contacts a day for the starting number; and Enterprise volumes are agreed with sales; people who text first and ongoing conversations don't count. Each number handles up to 10,000 messages a day with known contacts, and sends at most 2 messages to someone who hasn't replied. A reply whose whole message or first sentence is STOP or a listed opt-out phrase (such as "unsubscribe" or "stop texting me") opts the sender out of every number on the account. Message only people who asked to hear from you; cold texting gets a line suspended. See iMessage and TCPA consent. The hosted agent also writes to one contact at most 60 times a UTC day. On the Grok Bot side, routines run at most 200 times an hour each and 300 across all of them.
Weighing other agents too? See Claude Duet vs the hosted agent and ChatGPT Dots vs Claude Duet vs Grok Bot. If you'd rather build your own server with your own model, give your AI agent an iMessage number covers that route, and connecting Claude Code or Cursor covers the MCP setup.
Frequently asked questions
Can Grok Bot and the hosted AI agent both answer the same number?
No. Each ZeroSettle line group is either managed by API, where inbound texts go to your webhook and on to Grok Bot, or managed by the hosted AI agent, where the webhook is not called. With several numbers in separate line groups you can run one of each. Grok Bot can still manage the hosted agent through the ZeroSettle MCP connector, for example by updating its business context or files.
Which one is cheaper?
It depends on volume, and the Grok Bot side has no published per-run price. The hosted agent uses one ZeroSettle credit per text it sends; Pro includes 500 free credits once, Growth 1,000, and packs are 1,000 for $50 or 5,000 for $200. A number managed by API uses no credits for texts, but every Grok Bot routine run spends your Grok Bot plan's usage. The ZeroSettle subscription is the same either way: Pro is $49 a month per number.
How do I switch a number from the hosted agent to Grok Bot?
Build and test the Grok Bot side first: the texting skill, the webhook routine and the relay, verified with test_webhook. Then call set_agent with managed_by "api" (or PUT /api/imessage/agent with {"managed_by":"api"}). From then on every inbound text goes to your webhook and the hosted agent stops answering on that line group.
How do I switch back from Grok Bot to the hosted agent?
Write your business context first, because until you replace it the hosted agent uses a made-up example business. Then call set_agent with managed_by "zerosettle" and your business_context, check that you have credits, and pause the Grok Bot routine. The webhook stops being called for that line group.
Does either one let me approve replies before they send?
Grok Bot can: its Auto Review can stop an action for an approval card, though a card from a background run such as a webhook routine expires after 30 minutes. The hosted agent has no approval step; it answers from your business context. Its response_time setting dont_reply makes it send only openers and triggers, so you write the replies yourself.
Sources
- Computer and apps, Grok Bot docs: the shared persistent computer, connected apps, custom MCP servers. Checked November 4, 2026.
- Skills and routines, Grok Bot docs: routines, webhook triggers, usage per run, run limits. Checked November 4, 2026.
- Approvals, security and privacy, Grok Bot docs: Auto Review, approval cards and their expiry. Checked November 4, 2026.
- Grok Bot early beta launch, GIGAZINE, August 12, 2026: launch date and eligible plans. Checked November 2, 2026.
- AI agent, ZeroSettle iMessage API docs: managed_by, settings, triggers, connectors, credits. Checked November 4, 2026.
- Webhooks, step by step, ZeroSettle iMessage API docs: instant typing, test webhooks. Checked November 4, 2026.
- MCP and Errors, limits, and compliance, ZeroSettle iMessage API docs. Checked November 4, 2026.
Changelog
- First published.