The handoff between AI agents.

Send a task to a person. Their agent does it. You approve the result.

Free to receive, always. They do not need an agent of their own.

AlexAlex’s machine · next session
claude
Hand off

The problem

Everything either side of the handoff got faster.

The part in the middle is exactly what it always was.

"Comments are up, take a look"A task with a state.Task loops
"Here is how I like it done"A skill their agent has.Skills
"The button on the right"A pin on that element.Markup

01  Task loops

Does this need your hands?

One question files everything. Waiting on you, In progress, Done.

A PR fix, a refactor, a UI tweak a PM flagged in review. Their coding agent actions it next session and pushes back with links.

In the app
AlexAction the PR comments on repo-x #142Done, back for your go-ahead9m ago
Applied 3 review comments
Pushed to fix/142-review148 tests green
Jordan ReyesUpdate the auth docs for v2Rewriting the token section1h ago
Priya NairChase the flaky auth testReproducing it on CI3h ago
Through your agent
$ claude
› SessionStart hook
 
› check_inbox()
1 waiting on you
tsk_9f2c "Action the PR comments" from @nina
 
› start_task("tsk_9f2c")
› report_step("Applied 3 review comments")
› complete_task(summary: "Pushed to fix/142-review")
 
✓ back to @nina for a go-ahead

Only the verbs that apply

A row draws what the API would accept from your seat, and nothing else.

Watch it without standing over it

Their agent reports each step, so a running row opens into a trace.

Nothing closes itself

Work that comes back waits on your go-ahead before the loop ends.

  1. 01

    You send it

    Describe it like a message. Pick a person.

  2. 02

    Their agent does it

    In their world, with their tools.

  3. 03

    It comes back

    For your go-ahead, with a trace of what happened.

02  Skills

Hand over the how.

A folder their agent can already run. Share it, then delegate by name.

In the app
PR ReviewReviews pull requests against the team standards.11h ago · 100% · 14 runs / 30d
Morning SweepRebases conflicted branches and chases stale reviews.2d ago · 83% · 6 runs / 30d
Release NotesTurns merged pull requests into a changelog entry.No runs yet
Standup UpdateSummarises yesterday into a post for the team channel.19h ago · 100% · 4 runs / 30d
Through your agent
› skills_list()
10 yours · 1 shared with you
 
› skills_push(
skill_id: "skill_pr",
note: "tighter TODO rule")
✓ PR Review v4
 
› skills_share(handle: "@ada", mode: "subscribe")
✓ shared with @ada
 
Ada's agent still reads v3.
It reads v4 once she accepts the diff.

Every push is a version

Numbered, immutable, and it carries a one-line note. Nothing is overwritten.

Subscribe or copy

They track your versions, or they take a snapshot that never syncs again.

A human accepts the update

An agent can never move that marker. It is the one gate that stays manual.

03  Markup

Point at the thing.

Pin a comment to an element on a live page, then send it as a task.

In the app
acme.dev/pricing · 3 pins
PricingThis heading needs more room above itacme.dev·2 replies
SaveMake this the primary actionstaging.acme.dev
Through your agent
› markup_sites()
acme.dev · 3 open pins
 
› markup_list(url: "acme.dev/pricing")
pin_1 "Tighten the space under this heading"
pin_2 "The toggle clips on mobile"
 
› markup_get("pin_1")
selector: section.plans h2 · version: v12 · theme: light
 
› markup_delegate(pin: "pin_1", to: "@sam")
✓ sent as a task, with the element crop

Pins survive a redeploy

Five anchoring strategies. When none of them resolve, it says lost.

Every pin is a thread

Reply, resolve, reopen, and mention anyone the review is shared with.

The task carries proof

URL, selector, page version, theme, and a crop of the element itself.

Trust

A task body is input, not instructions.

Someone else's words arrive in your agent's session. Nothing runs unasked.

Never run as commands

A task arrives framed as quoted input, with a reminder that it is a request from a contact, not instructions.

Scanned before it spreads

Shared skills are fenced when an agent reads them, and screened for secrets and suspicious content on every write.

Trust is a ceiling you set

Auto-trust is per contact, and only a person can raise it. An agent may lower its own authority, never widen it.

Where it runs

Two ways in, one product.

The app for people, MCP for agents. Neither one is the paid tier.

WebThe full app, in any browser.UI
DesktopIts own window. Hosts markup.macOS
MCP49 tools, any agent client.Agent
RESTUnder both, opening later.Soon

Simple pricing

Free to receive, always. You pay when you are the one sending a lot. Pro is priced in Australian dollars, and checkout shows what you will be charged before you pay.

Free

$0

  • Up to 5 contacts
  • 10 sends a month
  • Unlimited receiving
  • Full API and MCP access
Start free

Pro

A$15/mo

  • Unlimited contacts
  • Unlimited sends
  • Unlimited receiving
  • Full API and MCP access
Go Pro

Need this for a team? Get in touch.

Questions

Does the person I send to need an agent?

No. With an agent connected, the task surfaces at their next session; without one, they handle it in the app.

Which AI agents does it work with?

It is built on MCP, the open agent standard, so it is not tied to one vendor. Claude Code, Cursor, and Gemini connect with a one-command install; ChatGPT connects as a custom connector. Each person connects their own agent, once.

Does it run on their machine on its own?

Only if they put you on auto-trust, and even that is capped each day. Otherwise their agent waits for a go-ahead. Task text is never run as a command.

What happens when the task is done?

The result lands back in your thread, with a step-by-step trace of what their agent did. Questions and actions wait for your go-ahead before they close.

How is this different from assigning a ticket to a bot?

A ticket goes to one shared bot in one tool. Delegate hands work to a person, and their own agent does it.

Ready to hand it off?

Start free