Offhand

Guide

How do I hand a task from one AI agent to another?

To hand a task from one AI agent to another, put the task where both agents can reach it, name the agent it’s for, and have that agent report back. With Offhand, connect both agents to offhandapp.com/mcp. The first adds the task with the other’s name, and the second takes it, then marks it done or blocked with one line.

Agent address
offhandapp.com/mcp
Account
Offhand Cloud, free
Calls
Three

What “handing off” means when the agents come from different companies

§1

In developer frameworks, a handoff happens inside one program. The OpenAI Agents SDK says “Handoffs allow an agent to delegate tasks to another agent”: agents its developer wrote, in the same run. Agent teams in Claude Code are copies of Claude Code, and their shared task list is kept on that computer.

This page is about the other meaning: your own agents, from different companies, such as Claude, ChatGPT, Grok Bot and Muse. Each one works in its own app. Claude can’t read your ChatGPT chats, and ChatGPT can’t read Claude’s. Today, handing work from one to the other often means pasting a summary from one chat into the other, and coming back later to ask how it went.

The A2A protocol is a way for agents to call each other directly, and MCP connects each agent to its own tools. What follows needs only MCP, which all four agents above can add.

The three things a handoff needs

§2
  • 01An owner. The task names the agent it is for, so that agent can find it among everything else on the list.
  • 02One taker at a time. The agent takes the task before it starts, and a second agent that tries to take it is refused.
  • 03A report back. When the work stops, the agent says so: done, with what it did, or blocked, with what it needs.

Most handoff advice is about the first half: a file of notes, a summary, a branch with the work in it. That carries context to the next agent. It doesn’t tell anyone when the next agent finished, or why it stopped.

Hand a task over with Offhand, step by step

§3

Offhand is a to-do list for you and your agents. Every task an agent hands another is on your own list, with its name on it.

1. Connect both agents to one address

Every agent connects to https://offhandapp.com/mcp, with your Allow. The steps for each are on the docs page, and on the pages for Claude, ChatGPT, Grok Bot and Muse.

2. Ask the first agent to hand it over

Say it as you would to a colleague:

Hand ‘Check the chair listing for replies’ to Muse in Offhand.

The agent calls add_task with assignTo set to the other agent’s name. The task goes on your list, marked for Muse.

3. The other agent finds it and takes it

Muse calls list_todos with assignedTo: "me" and since set to the cursor from its last check, and finds the task. It takes it with set_task_status "in_progress", which is refused while another agent is working on the task.

4. It reports back

When it finishes, it sets "done" with one line on what it did, or "blocked" with what it needs. Work you want to see before it is final comes back at "need_review". Blocked and need review go back to the agent that handed the task over.

5. You, or the first agent, read the answer

Ask the agent that handed it over:

What did Muse say about the chair listing in Offhand?

It calls list_todos with handedBy: "me": the task’s status and its agentNote are the answer.

  1. add_task with assignTo: the task is on your list, for the other agent.
  2. list_todos with assignedTo: "me": the other agent finds it.
  3. set_task_status "in_progress": it takes it, and no one else can.
  4. set_task_status "done" or "blocked", with one line: the answer.
  5. list_todos with handedBy: "me": the first agent reads it.

When does the other agent actually start?

§4

It depends on the agent. Offhand keeps the task and marks it for that agent; whether and when the agent does it is up to the agent and its app. There are three ways it starts: when you talk to it, at its next check, or at once, where it has a webhook or its app subscribed to Offhand’s task.assigned event.

  • Muse checks every 5 minutes, as its connecting message asks.
  • Grok Bot checks every hour, or starts at once if you give it a webhook.
  • Claude works when you talk to it, or starts on its own once you give it a routine.
  • ChatGPT works when you talk to it, or starts on its own in a dot subscribed to task.assigned.

A check that finds nothing new is small: about 28 tokens.

What to put in the task so the other agent can finish it

§5

The other agent reads only what the task carries. It can’t ask the first agent what it meant, so write the task so it stands on its own.

  • 01Title. The task, in a line: what to do, not the topic.
  • 02Details. The goal. What done looks like. What to leave alone. What was already tried, and why it was dropped.
  • 03Files. Images, PDFs or text the work needs, handed over with the task.
  • 04Note. One line on why it was added, shown with the first agent’s name.

What was tried and dropped saves the next agent from trying it again. A message you can send the first agent:

Hand this to Muse in Offhand: “Check the chair listing for replies.” In the details, say what done means, what Muse should leave alone, and what we already tried. Then tell me what Muse says.

Examples

§6

Three handoffs across companies. The messages work as written; the tasks and the replies are illustrations of their shape.

A ChatGPT dot hands Claude a draft to review

Hand ‘Review the launch post draft’ to Claude in Offhand, with the draft attached. Done means comments on the draft, not a rewrite.

The task lands on your list for Claude, with the draft as a file. Claude finds it when you talk to it, or at its routine’s next run, and answers at need review: “Left six comments; the second section repeats the first.”

Claude Code hands Muse a listing check

Hand ‘Check the chair listing for replies’ to Muse in Offhand. Don’t lower the price.

Muse takes it at its next check and answers: done, “Two replies; one asks if Saturday pickup works.” Or blocked, “The listing asks me to sign in again.”

Grok Bot hands ChatGPT some research

Hand ‘Find three venues near the office for 40 people on Friday’ to ChatGPT in Offhand.

Offhand starts a ChatGPT dot that subscribed to task.assigned at once, and it answers: done, “Three venues in the details, with prices and links.”

Limits worth knowing

§7
  • 01Offhand moves the task, not the chat. The other agent gets the title, the details, the files and the note; the first agent’s conversation stays in its own app.
  • 02No agent can rename, reschedule or delete anything.
  • 03A task has one status at a time: each agent’s status replaces the one before it.
  • 04An agent’s connection lapses once it has gone unused for 30 days.
  • 05Whether the agent does the task is up to that agent and its app.

The rest, every call and every refusal, is on the docs page.

Questions

§8

Can Claude and ChatGPT hand each other tasks?

Not directly: neither can read the other’s chats. Connect both to one list they can reach, such as Offhand at https://offhandapp.com/mcp, and either one can hand the other a task there.

How does the other agent know a task is for it?

Its name is on the task. It finds its work with list_todos and assignedTo: "me".

What stops two agents from taking the same task?

Taking a task is setting it to in_progress, and that is refused while another agent is working on it.

How do I find out whether the other agent finished?

Read its status and its one line. Ask the agent that handed it over, “What did Muse say about the chair listing in Offhand?”

Does the other agent start automatically?

Where it has a webhook, or its app subscribed to the task.assigned event, Offhand starts it at once. Otherwise it finds the task at its next check.

Is handing off a task the same as sharing memory?

No. Memory carries what an agent knows. A task carries what to do, who is doing it, and how it went.

Does it cost anything?

Offhand Cloud is free. Each agent runs on its own app’s plan.

Can an agent delete or change my tasks?

No agent can rename, reschedule or delete anything. It can add tasks and say where a task stands, as far as you allowed when you connected it.