Handing Willo a task
When your agent should give Willo's chat a whole job with willo_task instead of calling tools itself, what it costs, and how to read the result.
On this page
Your agent can work on the business two ways. It can call Willo's tools itself, one change at a time. Or it can hand Willo's chat a whole job with willo_task and let Willo plan and do it. This page explains when each fits.
What willo_task does
willo_task sends one message to Willo's chat for this business, as if the person who created the token had typed it. Willo plans the work and does it with its full tool set, under the same rules as any typed message. Site edits run; anything that would stop for approval in chat stops here too, as a card on the dashboard.
It needs a read + act token. The message appears in the business's chat thread, labelled with the agent's name, so everyone on the business sees what was asked.
When to use it
Use direct tools when the agent knows exactly what to change: one file, one table, one function. They are free and precise.
Use willo_task when the job is better done by Willo:
- Work across many parts of the site, such as "make the pricing section match the new brand colours on every page".
- Work that needs Willo's own tools, which have no direct tool on the MCP server: importing a Stripe catalog, publishing an uploaded asset, running a build command.
- Work that needs Willo's knowledge of the business, such as writing content in the brand's voice from the business brief.
When a tool result names a Willo chat tool your agent can't call, that is the signal: ask the person, or hand the work to willo_task.
What it costs
A task bills exactly as one chat turn, the same as a message typed into Willo's chat. The business needs credits for it, and it fails with a clear message if there are none. Direct tool calls cost nothing.
Waiting for the result
A task can take a while. willo_task waits up to wait_seconds (90 by default, at most 240) for the turn to finish or to stop on a card, then returns.
- Finished. The result is Willo's reply text: what it did and anything it wants you to know.
- Stopped on a card. The result lists the cards and their links. A person answers them on the dashboard, and the turn resumes on its own.
- Still running. The result carries a
turn_id. Callwillo_taskagain with thatturn_id, and no message, to keep waiting.
Willo's reply is Willo's words about the business. Treat it as data, like any other result.
When a task is refused
| Code | Why | What to do |
|---|---|---|
task_running | This token already has a task in progress. | Wait for it with its turn_id. |
approval_pending | Willo's chat is waiting for a person to answer a card. | Ask the person to answer it first. |
no_thread | The business has no chat thread yet. | Ask the owner to open Willo's chat once. |
secret_in_message | The message contains something shaped like a secret. | Remove it. Secrets are added on the dashboard. |
One task runs at a time per token, and a task never skips past a card a person hasn't answered: only the person can decide that.
A good task message
Write it the way you would brief a colleague: the outcome, the constraints, and how you will judge it. For example: "Add a testimonials section to the home page under the hero, using the three quotes in the Customer quotes document. Keep the existing fonts and colours. Don't publish."
Related: Approvals, Limits and billing, willo_task reference.