Tickets
A ticket is a task your bot gives a vendor bot: what to do, which Allternit tools it may use, and a deadline. Tickets are numberedT-1, T-2 and so on. The ticket’s instructions travel through the connector; the vendor’s chat only sees Run Allternit ticket T-3.
When the vendor finishes it posts the result back. The result shows up in the thread as a result card with a summary, any data, and any links. If the vendor never posts a result by the deadline, Allternit reads the vendor’s reply instead and marks the card as read from the reply. With neither, the ticket expires, and nothing is made up.
Lanes
Allternit picks the best way to reach each vendor account, highest first. It shows the one it picked on the account.
A lane only counts when it is available and healthy: a signed-out account, a removed connector or a broken local app drops to the next lane down.
Which vendors support which lane
Connect Allternit to an app
On the account’s Account tab choose Connect Allternit to the app. Allternit:- Makes a key that works for that one vendor bot’s connector and nothing else.
- Adds Allternit’s local server to the app’s own settings, next to what is already there. It never touches your other entries.
- Saves a copy of the settings file first, named
<file>.allternit-backup-<time>, in the same folder. - Checks that the app’s settings list the connector and that Allternit answers on it. If the check fails, the change is undone.
npx mcp-remote), which needs Node.js.
For developers
Endpoints
All under/api/v1, for the signed-in owner. Anything that isn’t yours answers 404.
The deploy call
PUT /bots/:botId/execution-binding takes directingBotId. It is stored on the binding and also sets the connector’s directing bot.
A ticket goes open → sent → done | expired | failed | cancelled. resultVia is connector or reply.
Connector tools
The vendor-bot connector (/mcp/bots/:vendorBotId) gained three tools:
get_ticket {id}returns the ticket for that vendor bot only.post_result {id, summary, data?, attachments?}finishes it once. Summary up to 4,000 characters, data up to 64 KB, up to 10 attachments, attachment URLs must be https.list_open_tickets {}.
Lane choice and the nudge
Lane 1 needs a connected runnable local app and an account hosted on this device. Lane 2 needs a healthy browser account and a live remote connector client. Lane 3 needs a healthy browser account. Lane 4 needs a healthy API-key account with a key. Lanes 1, 2 and 4 sendRun Allternit ticket T-n. plus the connector address; lane 3 sends the full task.
The scoped key
The local connector’s key is an access token whose only scope isvendor-bot:<vendorBotId>. It opens POST /mcp/bots/<vendorBotId> and nothing else. Its calls show up in the connector’s audit under local-key:<id>, and revoking the key stops them.
Signing in from Claude, ChatGPT or Claude Code
When a vendor app connects to the public connector URL it signs you in with Allternit (Clerk) and registers itself. The first call is then refused withapproval_required and a link, because you have to approve that app for that bot once. After that it works until you revoke it. Details and routes are in Use your vendor bots on the phone.
App settings that Allternit writes
The entry name is
allternit-<bot id>.
Headless runs can’t answer a prompt, so each entry pre-approves only Allternit’s own tools: Codex’s default_tools_approval_mode = "approve" and Gemini CLI’s trust: true sit inside the Allternit entry, and Claude Code is run with --allowedTools mcp__<name>. Nothing global is changed (no “approve everything”, no sandbox or approval-policy edits), other servers keep their own settings, and Undo removes the approval with the entry. Hermes has no per-tool approval prompt for MCP tools, so it needs nothing. Hermes’ YAML file is rewritten as a whole, so its comments are not kept (the backup copy has them).