Create task
create_taskInvites one or more chosen specialists to a project — does NOT charge payment. budget is a single amount for the whole task (not multiplied per specialist) — whoever accepts it does the work for it. Requires user_confirmed=true, set only after the user has explicitly confirmed in the conversation the choice of specialists, the list of shared files and the estimated cost. Estimate budget yourself from the problem's complexity (e.g. 1h = a single well-localized bug / a simple document fix / a minor graphic tweak; 2h = a standard debug across a few files / a draft legal document (e.g. Privacy Policy) / a landing page design; 3h = an architecture review, a full legal package (ToS+Privacy+GDPR) or a compliance audit, full branding, no clear diagnosis) times the specialist's min_rate_per_hour (from search_specialists) — this field is informational, not enforced, always in USD (the only currency on the marketplace).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| budget | Yes | ||
| language | Yes | The task's language — must match the language the user phrased title/description in (there is no auto-detection, set it according to the user's input). | |
| timeline | No | How urgent the project is from the client's perspective — ask the user directly, do not guess. | No rush |
| description | Yes | ||
| context_files | No | The minimal set of files the specialist needs. Each entry is { name, url?, content_base64? } and must carry exactly one source. `url` is strongly preferred: pass a link if the user gave one (Google Drive / Dropbox / S3 / raw GitHub), or — if you have a way to upload the file yourself (e.g. a code execution / shell environment) — upload it to any URL-reachable location first and pass that link instead of the raw bytes; the server just downloads it, which is fast and costs you almost no extra tokens. Use `content_base64` only as a last resort, when there is no URL and you have no way to produce one yourself (e.g. a small file the user attached directly in a chat-only client with no upload capability of its own) — inlining bytes means writing out the entire file as text, which is slow and burns far more tokens than a URL for anything beyond a tiny file. Before falling back to it, tell the user that creating the task will take noticeably longer and use more tokens because of it. Raw base64 only, never a `data:...;base64,` prefix. This server runs remotely and cannot read the caller's disk, so never pass local paths. For a large binary with no URL and no way to upload it yourself, don't inline it — tell the user to add it to the task repo manually instead. The server scans every file for secrets and pushes the rest to a private GitHub repo created for this task; contents never enter the model context. Never the whole repo, max 1 file = ~900KB. A non-empty list always gets a repo, even if every entry ends up in blocked_files (unreadable or filtered) — so the 'add it manually' fallback always has a real repo_url to point to. The GitHub username used to invite the client into the task repo comes from their Stoory account, not from you — you never see or pass it. If create_task fails because it's missing or invalid, tell the user to check/set their GitHub username in their Stoory account settings, then retry create_task. | |
| specialist_ids | Yes | Id of one or more specialists to invite. | |
| user_confirmed | Yes | Must be true — set it only after the user's explicit confirmation in the conversation. | |
| problem_context | Yes |