• AI reference · Always listed
write
Write a file. Write a folder file on your task: .md or .json (templates/ also .html), body up to 200,000 characters. sites/ files change only through deploy_site. Customer emails and phone numbers go in people or records, never files. Core files (AGENTS.md, company.json, direction.md, brand.json, rules/, templates/, connectors/, move-in.md, skills/, departments/<id>.md, its roles.md and its goals.md) need the owner's yes: propose them.
Where it is
Always listed: call it by its name.
Does it need a yes?
Depends on what it changes: the everyday part runs at once, anything that reaches people or core files waits for the owner's yes. Here: folder notes and drafts are busywork; core files, skills and department pages wait for the yes.
Inputs
| Input | Type | Needed | About |
|---|---|---|---|
path | string | no | e.g. marketing/drafts/2026-10-21.md. · 1 to 200 characters |
body | string | no | The whole new file. |
base_version | integer or string | no | The version read gave you (0 for a new file). |
note | string | no | What changed, in a few words. |
starter | string | no | Instead of path and body: a packed starter in the folder. For example skills/reel/references/starter.md; its files go to `to` on your machine without passing through this chat. · 1 to 200 characters |
to | string | no | With starter: a new folder's full path. · 1 to 500 characters |
task | integer | no | The task you hold. Needed for every write to the company folder, not for unpacking a starter. · 1 or more |
run_id | string | yes | The run_id from start. Pass it on every call: it keeps your task held. · 1 to 100 characters |
Example
{
"name": "write",
"arguments": {
"run_id": "the run_id from start"
}
}When it is refused
invalid: The input isn't right. The sentence names the field and the fix; nothing was done. Fix it and call again.not_found: No such thing in this company (a task, file, person, record). Check the number or name, or list first.not_allowed: Not without another step: the owner's yes, your own task held with pick_up, or a setting the owner turns on. The sentence says which.taken: Someone else holds it (another AI on that task). Pick another task.stale: It changed since you read it. Read it again and use the new version.failed: On our side or a service's, never your input. Try again in a minute; if it keeps failing, call report_problem.