[{"data":1,"prerenderedAt":47},["ShallowReactive",2],{"$f139otcxu30b02":3},{"href":4,"title":5,"description":6,"kind":7,"mark":7,"planned":8,"contributors":9,"provenance":7,"html":10,"headings":11},"\u002Fdocs\u002Fwork\u002Ftasks","Tasks","The definition of a repeatable job: its goal, its limits, the tools it may use, and what happens next. A task never runs; a run does.",null,false,[],"\u003Ch2 id=\"a-task-is-a-definition\">A task is a definition\u003C\u002Fh2>\n\u003Cp>A task is a repeatable job description: what the job is for, how to do it, what it may touch, and what happens\nafter it. Creating one does no work. Work happens in a \u003Ca href=\"\u002Fdocs\u002Fwork\u002Fruns\">run\u003C\u002Fa>, and a run starts from a person, a\n\u003Ca href=\"\u002Fdocs\u002Fwork\u002Fschedules\">schedule, a webhook\u003C\u002Fa>, or the task before it in a \u003Ca href=\"\u002Fdocs\u002Fwork\u002Fhandoffs\">handoff\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>Create one on \u003Cstrong>Tasks → Create task\u003C\u002Fstrong>, or \u003Ca href=\"\u002Fdocs\u002Fapi\u002Ftasks\">over the API\u003C\u002Fa>. Create a task when a capability is\nmissing, not for one piece of work: &quot;triage an issue&quot; is a task, and &quot;fix issue 42&quot; is a run of one.\u003C\u002Fp>\n\u003Ch2 id=\"anatomy\">Anatomy\u003C\u002Fh2>\n\u003Cp>Most of a task lives in its \u003Cstrong>version\u003C\u002Fstrong>, which is fixed once saved:\u003C\u002Fp>\n\u003Cdiv class=\"prose__table\">\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Part\u003C\u002Fth>\n\u003Cth>What it is\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Goal\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>One sentence of what the task is for. The model reads it on every run, and \u003Ca href=\"\u002Fdocs\u002Fcontrol\u002Fself-improvement\">self-improvement\u003C\u002Fa> aims at it.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Success metric\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>How you would know it is working, one line per metric. Free text today.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Guardrails\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Rules the model must not break, one per line: &quot;never email a customer&quot;, &quot;escalate if unsure&quot;. They are instructions to the model. What actually stops a call is a tool scope or a \u003Ca href=\"\u002Fdocs\u002Fcontrol\u002Fgates\">gate\u003C\u002Fa>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Skill\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>The \u003Ccode>SKILL.md\u003C\u002Fcode>: how to do the job, step by step, in plain language.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Tools\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Every tool a run may call, and nothing else. A tool can be narrowed to some values of its fields. See \u003Ca href=\"\u002Fdocs\u002Fcontrol\u002Fgates#tool-scopes\">Gates and tool scopes\u003C\u002Fa>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Inputs\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>The fields a run starts with: each has a key, a label, a type (\u003Ccode>string\u003C\u002Fcode> or \u003Ccode>number\u003C\u002Fcode>), and optionally a default and whether it is required.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Gates\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>The tool calls that wait for your approval before they happen.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Spend\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>A budget per run, and which model runs it: an exact model, or a highest model tier. See \u003Ca href=\"\u002Fdocs\u002Fcontrol\u002Fspend\">Spend and models\u003C\u002Fa>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Workspace\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>For a task that works in a repository: the branch it works on and which files it may write. See \u003Ca href=\"\u002Fdocs\u002Ftools\u002Fworkspaces\">Workspaces\u003C\u002Fa>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Successors\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>The tasks that run after it, and on which outcome. See \u003Ca href=\"\u002Fdocs\u002Fwork\u002Fhandoffs\">Handoffs\u003C\u002Fa>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n\u003Cp>Some things belong to the task itself rather than to a version, so the version history does not record them:\u003C\u002Fp>\n\u003Cdiv class=\"prose__table\">\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Part\u003C\u002Fth>\n\u003Cth>What it is\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Name and slug\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>The slug is unique in your enterprise. Successors, webhooks and the API find the task by it, so choose it deliberately.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Team\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>The team the task belongs to.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Who runs it\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>A role. Each run goes to a member who holds that role on the task's team and is free, the one who has waited longest first. A role with no team is enterprise-wide. A task cannot be given to one member. See \u003Ca href=\"\u002Fdocs\u002Fcompany\u002Froles\">Roles\u003C\u002Fa>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Runs at once\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Its lanes, if it declares any. See \u003Ca href=\"#runs-at-once\">Runs at once\u003C\u002Fa>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Status\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>active\u003C\u002Fcode>, or \u003Ccode>deprecated\u003C\u002Fcode>: a deprecated task starts no new runs. \u003Cstrong>Start\u003C\u002Fstrong>, the API and its webhook refuse it, its schedule stops firing, and runs waiting to start are closed. Runs already under way finish.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Schedule\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Its cadence, if it has one. Changing it publishes no new version. See \u003Ca href=\"\u002Fdocs\u002Fwork\u002Fschedules\">Schedules and webhooks\u003C\u002Fa>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n\u003Cp>A task's page in the portal also shows its runs, its \u003Ca href=\"\u002Fdocs\u002Fwork\u002Fschedules\">triggers\u003C\u002Fa>, and any self-improvement\nrecommendations waiting on it.\u003C\u002Fp>\n\u003Ch2 id=\"what-a-task-can-call\">What a task can call\u003C\u002Fh2>\n\u003Cp>A run can call only the tools its task lists, by exact name, and nothing else. They come in two kinds:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Built-in tools\u003C\u002Fstrong>, which the OS answers itself: \u003Ccode>os.*\u003C\u002Fcode>, \u003Ccode>workspace.*\u003C\u002Fcode>, \u003Ccode>memory.*\u003C\u002Fcode>, \u003Ccode>web.*\u003C\u002Fcode>, and the actions of a\nbrowser.\nThe \u003Ca href=\"\u002Fdocs\u002Ftools\u002Fbuilt-in\">built-in tools reference\u003C\u002Fa> is the exact list, with what each takes, whether it writes,\nand which can wait at a gate.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Vendor tools\u003C\u002Fstrong>, from the systems your enterprise connects: GitHub, Slack and the rest. The\n\u003Ca href=\"\u002Fdocs\u002Ftools\">Tools\u003C\u002Fa> directory lists each system, and how to connect it.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>How to narrow a tool to some values, and which calls wait for you, is in\n\u003Ca href=\"\u002Fdocs\u002Fcontrol\u002Fgates\">Gates and tool scopes\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"runs-at-once\">Runs at once\u003C\u002Fh2>\n\u003Cp>A task runs \u003Cstrong>one run at a time\u003C\u002Fstrong> unless it says how its work splits. Declare the input keys that split it, its\n\u003Cstrong>lanes\u003C\u002Fstrong>, with \u003Ccode>serializeOn\u003C\u002Fcode> (\u003Ca href=\"\u002Fdocs\u002Fapi\u002Ftasks\">Tasks API\u003C\u002Fa>): a task that works one issue of one repository at a\ntime might declare \u003Ccode>[&quot;repo&quot;, &quot;issue&quot;]\u003C\u002Fcode>. Then runs on different issues run at once, and two runs on the same issue\nnever do: the second waits, or is skipped, as it would for a task with one lane.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>A lane is the values of those inputs, trimmed and in lower case, so \u003Ccode>Acme\u002FWeb\u003C\u002Fcode> and \u003Ccode>acme\u002Fweb\u003C\u002Fcode> are the same lane.\u003C\u002Fli>\n\u003Cli>A member still does one run at a time. Lanes run side by side only when enough members hold the task's role.\u003C\u002Fli>\n\u003Cli>Keys are yours to choose: a repository, a campaign, a region. The OS never reads meaning into them.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"versions\">Versions\u003C\u002Fh2>\n\u003Cp>Every save publishes a new \u003Cstrong>version\u003C\u002Fstrong>, numbered from 1. A version is never changed after it is saved.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>A run keeps the version it started on.\u003C\u002Fstrong> Saving a new version while a run is under way changes nothing for that\nrun; the next run uses the new one. A run waiting as \u003Ccode>pending\u003C\u002Fcode> takes whichever version is current when it starts.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Version history\u003C\u002Fstrong> on the task shows every version as it was, read-only, and the runs that used it.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Going back\u003C\u002Fstrong> to an earlier definition means opening that version and saving its content as a new version. There\nis no one-click restore.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"editing-safely\">Editing safely\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Edit\u003C\u002Fstrong> on a task opens its current version; \u003Cstrong>Save as new version\u003C\u002Fstrong> publishes your changes as the next one.\u003C\u002Fp>\n\u003Cp>If someone (a person, or a self-improvement change you approved) published a newer version while you were editing,\nyour save is refused rather than putting the older definition back over theirs. Copy what you want to keep, then\n\u003Cstrong>Cancel edit\u003C\u002Fstrong> to load the newer version and make your change on top of it. Over the API, the same protection is\n\u003Ccode>baseVersionId\u003C\u002Fcode>: send the version you read, and a save made after someone else's is refused with a \u003Ccode>409\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch3 id=\"checks-when-you-save\">Checks when you save\u003C\u002Fh3>\n\u003Cp>A version that could never run is refused, and one with a likely mistake is saved with a warning:\u003C\u002Fp>\n\u003Cdiv class=\"prose__table\">\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Code\u003C\u002Fth>\n\u003Cth>Refused or warned\u003C\u002Fth>\n\u003Cth>Why\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>gate_required_for_tool\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Refused\u003C\u002Ftd>\n\u003Ctd>The task can merge a pull request or send a new mail but declares no gate on it, or it can write a plan (a team, role, member, task or spend change) but declares no CEO gate on asking the CEO.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>gate_summary_tool_required\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Refused\u003C\u002Ftd>\n\u003Ctd>The task can merge but cannot write the summary the merge gate needs.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>deterministic_with_tools\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Refused\u003C\u002Ftd>\n\u003Ctd>A task that runs no model (\u003Ccode>deterministic\u003C\u002Fcode>) lists tools it could never call.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>successor_when_unknown\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Refused\u003C\u002Ftd>\n\u003Ctd>A successor's \u003Ccode>when\u003C\u002Fcode> is not one the OS knows.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>successor_cap_invalid\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Refused\u003C\u002Ftd>\n\u003Ctd>A successor's loop cap is not a whole number of at least 1.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>successor_delay_invalid\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Refused\u003C\u002Ftd>\n\u003Ctd>A successor's delay is not more than 0 and at most 1440 minutes.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>unconditional_loop\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Refused\u003C\u002Ftd>\n\u003Ctd>Successors on \u003Ccode>terminal\u003C\u002Fcode> loop back to the task, so it would never stop.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>successor_unknown_slug\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Warned\u003C\u002Ftd>\n\u003Ctd>A successor names a task your enterprise does not have.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>successor_on_unknown\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Warned\u003C\u002Ftd>\n\u003Ctd>A successor waits on an outcome the OS does not know, usually a typo.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n\u003Cp>Warnings show on the task, and on \u003Cstrong>Blockers\u003C\u002Fstrong> under \u003Cstrong>Task definitions\u003C\u002Fstrong>, until they are fixed.\u003C\u002Fp>\n\u003Ch2 id=\"inputs\">Inputs\u003C\u002Fh2>\n\u003Cp>A task's inputs are what a run starts with. \u003Cstrong>Start a run\u003C\u002Fstrong> on the task's page shows them as a form, filled with\ntheir defaults, and will not start while a required one is empty. The same keys are what a schedule, a webhook body,\nor the task before it provide.\u003C\u002Fp>\n\u003Cp>However a run starts, an input it leaves out or blank takes its default, and a required input with no value and no\ndefault refuses the start with \u003Ccode>input_required\u003C\u002Fcode> naming it: a schedule's firing, a webhook, the API and chat alike. The\none exception is a run the task before it starts: its input is whatever that run handed on. Keys the task does not\ndeclare pass through to the run as sent.\u003C\u002Fp>\n\u003Ch2 id=\"clone-and-copy\">Clone and copy\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>Community → Catalog\u003C\u002Fstrong> lists the tasks you can take into your enterprise, in two ways:\u003C\u002Fp>\n\u003Cdiv class=\"prose__table\">\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>\u003C\u002Fth>\n\u003Cth>Clone\u003C\u002Fth>\n\u003Cth>Copy\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>What you get\u003C\u002Ftd>\n\u003Ctd>Your own installation of the original, linked to it\u003C\u002Ftd>\n\u003Ctd>A new, independent task\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Who owns the definition\u003C\u002Ftd>\n\u003Ctd>The original's owner\u003C\u002Ftd>\n\u003Ctd>You\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Can you edit it\u003C\u002Ftd>\n\u003Ctd>No: \u003Cstrong>Edit\u003C\u002Fstrong> is disabled, and self-improvement does not run on it\u003C\u002Ftd>\n\u003Ctd>Yes\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Starts on\u003C\u002Ftd>\n\u003Ctd>The original's current version\u003C\u002Ftd>\n\u003Ctd>Version 1, with the original's definition\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Later versions\u003C\u002Ftd>\n\u003Ctd>A newer version of the original is offered on the clone's page; \u003Cstrong>Update\u003C\u002Fstrong> takes it, and nothing moves your clone until you do\u003C\u002Ftd>\n\u003Ctd>None: it is yours from here\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>You choose\u003C\u002Ftd>\n\u003Ctd>Its team\u003C\u002Ftd>\n\u003Ctd>Its name, slug, team and role\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n\u003Cp>A clone keeps the original's role, and a copy keeps it unless you choose another. Either runs only once someone on\nits team holds that role.\u003C\u002Fp>\n\u003Cp>Either way, you can run it, schedule it and delete it. Neither brings a schedule, run history, credentials or\nmemory: you connect your own \u003Ca href=\"\u002Fdocs\u002Ftools\">tools\u003C\u002Fa>, and a clone may not write memory above its own task. Successors\nthat pointed at the original point at your copy; other successors look for tasks with the same slugs in your\nenterprise.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Copy\u003C\u002Fstrong> also works on your own tasks, from the task's page, to start a variant without touching the original.\u003C\u002Fp>\n\u003Cp>The OS's own tasks are part of the product, not of the catalog: the same in every enterprise, and changed only\nwith a release of the OS. They cannot be cloned or copied, and nobody can edit, reschedule or delete one. You can\nstill start them. See \u003Ca href=\"\u002Fdocs\u002Fcompany\u002Fenterprise\">Enterprise\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"deleting-a-task\">Deleting a task\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>Delete\u003C\u002Fstrong> on a task removes its definition and every version of it. Runs that already happened are kept.\u003C\u002Fp>\n\u003Ch2 id=\"over-the-api\">Over the API\u003C\u002Fh2>\n\u003Cp>With an \u003Ca href=\"\u002Fdocs\u002Fapi\u002Fauthentication\">API token\u003C\u002Fa> scoped \u003Ccode>tasks:read\u003C\u002Fcode> (and \u003Ccode>tasks:write\u003C\u002Fcode> to change them):\u003C\u002Fp>\n\u003Cdiv class=\"prose__table\">\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Call\u003C\u002Fth>\n\u003Cth>What it does\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>POST \u002Fv1\u002Ftasks\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Create a task, with its first version.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>GET \u002Fv1\u002Ftasks\u002F{id}\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>The task, its current version and skill, its version list, and its definition warnings.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>POST \u002Fv1\u002Ftasks\u002F{id}\u002Fversions\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Save a new version. Send \u003Ccode>baseVersionId\u003C\u002Fcode>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>POST \u002Fv1\u002Ftasks\u002F{id}\u002Fcopy\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Copy it, with a new name, slug and team, and optionally a new role.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>PUT \u002Fv1\u002Ftasks\u002F{id}\u002Fschedule\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Set its schedule.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>POST \u002Fv1\u002Ftasks\u002F{id}\u002Fruns\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Start a run.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n\u003Cp>See \u003Ca href=\"\u002Fdocs\u002Fapi\u002Ftasks\">Tasks over the API\u003C\u002Fa> for the full shape of a task.\u003C\u002Fp>\n",[12,16,19,22,25,28,32,35,38,41,44],{"id":13,"text":14,"level":15,"planned":8},"a-task-is-a-definition","A task is a definition",2,{"id":17,"text":18,"level":15,"planned":8},"anatomy","Anatomy",{"id":20,"text":21,"level":15,"planned":8},"what-a-task-can-call","What a task can call",{"id":23,"text":24,"level":15,"planned":8},"runs-at-once","Runs at once",{"id":26,"text":27,"level":15,"planned":8},"versions","Versions",{"id":29,"text":30,"level":31,"planned":8},"editing-safely","Editing safely",3,{"id":33,"text":34,"level":31,"planned":8},"checks-when-you-save","Checks when you save",{"id":36,"text":37,"level":15,"planned":8},"inputs","Inputs",{"id":39,"text":40,"level":15,"planned":8},"clone-and-copy","Clone and copy",{"id":42,"text":43,"level":15,"planned":8},"deleting-a-task","Deleting a task",{"id":45,"text":46,"level":15,"planned":8},"over-the-api","Over the API",1791124519890]