The work contract
What Tango delegates is not a to-do: it is a bounded responsibility with named inputs, an authority envelope, checkable acceptance criteria and a named acceptance authority.
Why a contract and not a ticket
A ticket says what someone should do. A contract says what was handed over, what may happen unattended, what counts as finished, and who decides. That difference is what makes work safe to delegate across boundaries you do not control — another agency's people, an agent running on someone else's laptop, a client's own environment.
Orchestration tools — Paperclip, OpenClaw, Claude Code, Codex and the like — are where agents run: they schedule, prompt and supervise the workforce. Tango does not replace them. It is the contract and evidence layer around them: however an agent is run, the work it delivers to a client is delegated, bounded, evidenced and accepted here.
Tango holds five things on every task: the inputs it starts from, the outcome it owes, the authority it carries, the evidence it must produce, and the person who accepts it. When any of those are missing, Tango says so before the work starts rather than after it fails.
Inputs are pinned, not linked
An input is an artifact from another task, or an external link, recorded with a label and the content fingerprint at the moment it was handed over. If the source brief is later replaced, the task shows that its input has moved on — so nobody silently delivers against last week's strategy.
Inputs travel into the completion receipt, frozen. The delivery record therefore answers the question that matters in a dispute: which version was this built from?
create_task({
client: "@acme", project: "Website",
title: "Write the launch announcement",
goal: "A publish-ready announcement for the Nov 4 launch.",
definition_of_done: "600-800 words, approved brief followed, three headline options.",
inputs: [
{ label: "Approved brief", artifact_id: "…" },
{ label: "Brand voice guide", external_url: "https://…" }
],
authority: { publish: false, send: false }
})The authority envelope
Everything is off unless granted. A copywriting agent may draft but not publish. A media buyer may adjust spend up to a ceiling. A coding agent may open a pull request but not merge to production. Anything not granted becomes an escalation to the task's approver instead of an action.
Organizations can set a default envelope per role, so every new task of that role starts with the right boundaries rather than relying on whoever filed it.
- •Publish externally — anywhere the public sees it.
- •Send to a recipient outside the organization.
- •Spend money, optionally up to a stated ceiling in USD.
- •Merge code to a protected branch.
- •Deploy to production.
- •Contact the client directly.
Contract readiness
Tango scores every task against the parts a contract needs: a goal, checkable acceptance criteria, an executor, an acceptance authority and declared evidence. Missing parts are named on the task and returned by create_task, so an agent filing work is told immediately what it left out.
Inputs, authority and a deadline are advisory — they never block delegation, but an agent-assigned task with no authority envelope is flagged, because unbounded delegation to an agent is the thing that goes wrong quietly.
Acceptance is not a binary
Real client work is rarely accepted or rejected outright. Tango records four outcomes, each written alongside the completion receipt and into the transparency chain, with the original receipt left intact.
- •Accepted — the deliverable meets the contract.
- •Accepted with exceptions — usable, with the shortfalls named on the record.
- •Rejected — returns to the worker with a required reason; the receipt is kept, never rewritten.
- •Superseded — replaced by a named task, so rework lineage is traceable.
accept_task({
task_id: "…",
outcome: "accepted_with_exceptions",
note: "Shipped without the third headline option; client accepted."
})For agents
get_task returns work_contract alongside the spec: the pinned inputs (with a moved_on flag), the authority envelope with a one-line summary, and the readiness verdict. Read it before you start. If the contract is missing something you need, use flag_needs_more_info or send_back_to_creator rather than guessing.
If an action you are about to take is not granted by the envelope, do not take it. Ask the approver, record the request as a progress note, and wait.
