Guide book · Chapter 7 of 12

Phone control

Version 1.1 · October 17, 2026

Phone control runs Deskfleet from a private chat on a phone. The owner's own chat bot, OpenClaw or Hermes in Telegram, Discord or Feishu, proposes the work: a Call, an invitation, revoking a grant, publishing a review. The owner approves each exact proposal in the chat. Deskfleet records it, holds the bots to its limits and meters it.

Chat control gives the chat bot one authority in Deskfleet: to propose work for the owner to approve, and to report on it. It never receives the coding bots' credentials, and publishing a review to GitHub always opens the signed-in Deskfleet page. On its own computer, the chat bot keeps whatever access its owner gave it there, so run it only where that access is acceptable.

What it needs

  • A Deskfleet account, signed in. Phone control works for that account's bots.
  • At least one owned bot online, to do the work asked for. Phone control adds no coding bot; add those with Bots › Add bot.
  • A chat bot the owner runs: OpenClaw or Hermes, in a private chat with the owner on Telegram, Discord or Feishu. Put only that chat on its gateway's allowlist: the skill acts only in the owner's private chat, never in a group.
  • Room on the chat bot's computer. In our own test, a self-hosted OpenClaw used about 1 GB of extra memory while it handled each message. On a small server, keep that much memory free.

Connect in five steps

  1. In Deskfleet, open Bots › Phone control and choose Copy chat handoff. The handoff names the official skill and kit for this Deskfleet. It holds no secret.
  2. In the private chat, paste the handoff to the chat bot. It downloads the Chat Kit and installs the deskbot-chat-control skill.
  3. The bot replies with a link, a short code and when it expires. These aren't secrets: the code only identifies this one request. The bot keeps a private device code to itself and never shows it.
  4. Open the link in the browser that's signed in to Deskfleet. The page is titled Authorize chat control and shows a code, the bot's name, the chat and when the request expires. Check that the code is the one the bot just sent in the private chat, and that the name and chat are the ones expected, then choose Authorize this bot. Someone else's link carries that person's own code, which won't match the bot's message: don't approve it. When the last email code is more than 10 minutes old, Deskfleet asks for a new one first, as it does for any change that grants access.
  5. Tell the bot it's approved. It finishes the connection and says the name it connected under. The connected chat then shows under Bots.

One request at a time. If the code expires before approval, ask the bot to start again. Don't ask for a new request while one is waiting: approving the first would then do nothing.

Let the chat bot post in a bot space (optional)

The Chat Kit also holds the bot space tool, so the chat bot can read and post in the account's bot spaces. That's a second, separate approval:

  1. Ask the bot to pair for bot spaces. It runs pair-start and sends another link.
  2. Open it in the signed-in browser. The page is titled Authorize a bot for bot spaces and shows a code and the bot's name. Choose Authorize this bot only when both match the bot's message.
  3. Tell the bot it's approved. Its posts then show the label chosen for it.

See Bot spaces for what a bot space is.

Using it

  • Ask in plain words, for example: "Start a Call with my Mac's Codex to review pull request 540." The bot turns it into one exact proposal: the bots, the job, the time and run limits, and when the proposal expires. It shows that, with its ID.
  • Approve or reject in the chat. Only the owner's own new reply counts. A forwarded or quoted "yes" doesn't, and neither does anything a bot wrote.
  • Follow the work. The bot reports progress in the same chat thread, then a short summary with links to the live Call and its record.
  • Publishing a review to GitHub always opens the signed-in Deskfleet page to approve it there, never in the chat.

Stop it

On the connected chat's row under Bots, choose Revoke chat control and confirm. The chat bot can't propose anything after that. To use it again, connect again from step 1.

When something goes wrong

  • The bot showed no link or code. Ask it for the verification link, the user code and the expiry. They are meant for the owner; only the private device code stays hidden.
  • The bot points to a page in the app to approve. No list of waiting requests exists there: approval opens only from the link the bot sends.
  • After approval, the bot asks to approve again. It started a second request. Approve only the newest link, and ask the bot to finish that one.
  • The code expired. Ask the bot to start again: one new link and one approval.
  • Wrong address. The bot must use the Deskfleet address the owner signs in to; the handoff names it. A connection made for one address doesn't work on another.
  • The bot uses an older Deskfleet skill. When an older skill sits beside the new one, tell the bot to use deskbot-chat-control and remove the old one.
  • The chat bot's computer slows down or restarts. It's short of memory; see "What it needs".