createClaudeDesktopJob
Prepare a job for Claude Desktop
Prepare a job for Claude Desktop to do in the person's own browser, for clicks that no Sasha tool can make. The first call shows the person the whole job in a Confirm box in their Sasha chat and returns a confirmationToken; nothing is saved yet. Wait for the person. Only after they press Confirm, call again with the same title, apps and body and the confirmationToken. The job is then saved as ready, and the person runs it from Claude Desktop with "do my Sasha job". A changed body needs a new approval.
Arguments
| Argument | Type | Required | Description |
|---|---|---|---|
title | string | required | A short name for the job that the person will recognise, for example "Welcome email for new enquiries". |
apps | array of string | required | The web apps the person must be signed in to, in plain words, for example ["mailing tool"]. |
body | string | required | The whole job for Claude Desktop: the rules block, one part for each change, and the report section. The person reads all of it before they approve it. |
confirmationToken | string | optional | Only on the second call, after the person pressed Confirm: the token from the first call or from the Confirmed message. |
Scopes
jobs:create
Annotations
- Read only: no
- Destructive: no
When to use
Use it in a chat in the Sasha web interface when a change needs clicks on a web app's own screens that no tool can make, for example an email text that a vendor's API cannot save. Agree the change with the person first. Then write the job: a rules block (browser control first, record before changing, switch off and never delete, only what is listed, no sends to real people, never type a key, stop and ask), one part for each change, and a report section.
title (required) is a short name the person will recognise. apps (required, 1 to 5) names the web apps the person must be signed in to, in plain words. body (required, up to 20,000 characters) is the whole job.
The first call saves nothing. It shows the person the whole body in a Confirm box headed "For Claude Desktop: <title>", with a Copy the steps button, and returns a confirmationToken. Wait for the person. Only after they press Confirm, call again with the same title, apps and body and the token. The job is then saved as ready, and the person runs it from Claude Desktop with "do my Sasha job". Text that changed after the approval needs a new approval.
The tool needs jobs:create. Admin and staff hold it in the chat in the Sasha web interface; it is never part of a default grant, and members cannot hold it. It works only in that chat: the Confirm box exists only there.
Example
{ "title": "Welcome email for new enquiries", "apps": ["mailing tool"], "body": "Rules\n- Browser control first ...\n\nPart 1. Add the welcome email to the \"New enquiry\" automation.\n\nReport\n- For each part: what was there, what you changed, what you could not do." }
The structured result of the first call (the token is shortened here):
{
"status": "confirmation_required",
"confirmationToken": "243274fa…a6d25",
"expiresAt": "2026-11-04T10:10:00.000Z"
}
After the person pressed Confirm, the same call with confirmationToken returns:
{ "id": "J-0001", "title": "Welcome email for new enquiries", "apps": ["mailing tool"], "status": "ready" }
A repeat with the token before the person answered returns { "status": "waiting_for_confirm", "confirmationToken": "…" }: wait, and do not call again until they confirm. A token that is unknown, expired or already used, or text that changed since the person was asked, returns a new confirmation_required and saves nothing.
Refusals and what to do
A refusal is an error result. Its text is Error in createClaudeDesktopJob: <reason>.
declined: the person declined this job. Nothing was saved. …: ask what they want to change before you prepare it again.sasha_chat_only: a Claude Desktop job is prepared in a Sasha chat, where the person approves it. …: this connection is not a chat in the Sasha web interface. Ask the person to prepare the job there.- If the connection does not hold
jobs:create, the tool is not in your tool list, and a call to it returnsMCP error -32602: Tool createClaudeDesktopJob not found. - Arguments that do not match the schema are refused before the tool runs, for example an empty
appslist or abodylonger than 20,000 characters. internal:unexpected (request <id>): something failed inside Sasha. Quote the request id insuggestImprovement.
Related
checkClaudeDesktopJobreads the job's status, questions and report.getClaudeDesktopJobis how Claude Desktop reads the approved job.getDocshas aclaude-desktop-jobssection with the same rules.