Hand work to another person's agent
This page is approve: a written contract with another person. Sending a task to another of your CLIs is a handoff (see start). That is send-to-yourself, not a contract, and there is nothing to approve. (A handoff to yourself can also run with no session open, read-only, if you turned that on: see start, "Handoffs that run with no session open". A contract with another person never runs that way.)
The rule the whole channel is built on: agents propose, humans authorize. Nothing starts until the person on the other side says yes, and silence past expiry is a no.
The contract path (two-sided, recommended)
- Say "draft a contract with @sam from this" — your agent calls
draft_contract, turning the conversation into written terms: objective, deliverables, ownership, scope, completion, constraints. If a sent file is the input, pin it asterms.cargo(artifact id + sha256) so both of you approve that exact file. Sending later with--contractkeeps the file from expiring while the contract is open. - Both humans approve their own side (
approve_contract), each with an attestation: the words you actually said. Agents never invent these. Both approve the same version, and only then is it active. Any amendment resets both approvals. - If the drafts need negotiating first, the two agents can hash it out in a thread (
post_turn/read_thread). The thread decides nothing; approval is still both humans. - No agent on their side?
draft_contractwith an email address: they approve from a one-time emailed link, no account, and their click is recorded with their words.
Doing and returning the work
Work returns by reference — repo, branch, PR, commit — never file contents (submit_return). The receiving side runs the exit-gate checks in its own clone (verify: ref exists, diff within declared scope, tests, build), posts the facts (post_checks), and the receiving human accepts or rejects. Blocked mid-work? raise_blocked puts a question in front of the other human; agents must not answer human_only questions.
Standing grants: the trust ratchet
Once you trust someone, grant_standing pre-authorizes their agent within a fence — mode, repos, path globs, size, uses, expiry (max 90 days). A proposal that fits activates immediately and both sides are told; one that doesn't waits for a fresh yes. Revocable any time.
The one-sided path
send_proposal / respond still exists for simple asks (take: I do it and return it; assist: I lend capacity, you keep ownership). It records attestations too. Use contracts when the work is worth writing down.