Hand work to a background worker agent whose answer goes straight to the user.

Use it for non-trivial work: multi-step tasks, investigations, code/file/browser workflows, or anything likely to need several tool calls. Keep trivial requests local. Use it only when the worker's answer is the final deliverable and nothing depends on it. When a step remains after the result (indexing or verifying it, a dependent step, a comparison, a follow-up delegation), use `delegate` instead.

The worker starts with no access to this conversation and no memory of earlier tasks: it sees only its own system prompt, `prompt` and `context_json`. Put every fact it needs in those two fields, written out in full: texts, names, recipients, addresses, ids, earlier results and decisions. Never refer to "the conversation", "the proposals above" or "what we discussed"; the worker cannot resolve such references and will guess.

Provide:
- prompt: clear, concrete worker instruction.
- agent_name: optional exact specialist agent name from the roster in your system prompt. Must match a
  registered agent's `name` exactly (check the roster or fetch_agent_info first) — an unknown name is
  rejected before the task is queued. Omit it to run a general worker agent.
- context_json: optional JSON object string the worker should receive as structured context.
- timeout_seconds: optional per-task budget, no greater than the configured worker timeout. Without it a
  named specialist uses its own configured timeout. The timeout is the only budget you set: steps and
  tool calls are bounded by configuration alone.
- model_provider, model, reasoning_effort: optional, for this task only. Use them when the request names a
  provider, model or thinking budget. Check fetch_agent_info for the providers that have credentials
  configured — an unconfigured provider is rejected before the task is queued.

This returns a task_id immediately, not the answer: the worker runs asynchronously and its result, including any files it produced, is delivered straight to the user as a later message. You do not receive it as a new turn, and only a short notice with the task id is kept in the history, so call get_task on the next user message if you need it. Tell the user the work was handed off; never invent the outcome. Use get_task to retrieve it, list_tasks to see what is running, and cancel_task to stop one.
