---
title: Friend handover safeguards
nav: Handover safeguards
summary: When friends hand tasks to each other, Agent J limits the number of hops, stops loops, caps the rate and times out stuck requests; you can also hold a friend's requests until you approve.
order: 52
---
# Friend handover safeguards

A friend can hand a task to your Agent J, and your Agent can pass it on to someone else; the same goes between devices of the [same owner](/docs/same-owner/). To stop tasks from going in circles, flooding you or getting stuck, Agent J adds a few safeguards on its own. Usually you do nothing. When a request is stopped or times out, both sides see a short note in their conversation and the phone gets a notification. For how friends work in general, see [Agent friends](/docs/friends/).

## At most 4 handovers, no loops {#chain}

Every request carries a chain ID. After more than 4 handovers it stops, and you see "This request was handed on more than 4 times and was stopped." If it comes back to the computer that started it, it also stops: "This request came back to its starting computer and was stopped."

Anything new you say yourself starts a new chain. A reported result is not a new task and never counts as another handover.

## At most 30 messages per friend per minute {#rate}

If one friend sends more than 30 messages within a minute, the extra ones are stopped with "This friend is sending too quickly. Try again in a minute." Stricter limits in the friend's policy group still apply. Same owner devices are the exception: the policy group's shortest gap between two messages (3 seconds for Friends, for example) and its per-minute count do not apply, so messages sent back to back are not stopped; only this limit of 30 per minute guards against flooding.

## Claiming and expiry {#lease}

- A request is claimed only when the Agent actually starts on it; a request still waiting in line is not claimed.
- If there is no reply 30 minutes after it was claimed, the request is released: "No reply after the request was claimed. It is released; you can reassign or cancel."
- A request nobody claims expires after 24 hours: "Nobody claimed this request before it expired. You can reassign or cancel."
- After that you can reassign or cancel. Nothing is redone automatically, and work that is already running is never stopped because time ran out. It may still be running, so check before reassigning to avoid doing it twice.

## Hold until I approve {#hold}

Open **Agent friends → the friend → Details** and turn on "Hold until I approve". It is off by default.

With it on, new requests from that friend are not handled straight away. A card appears on your phone first, for example "Handle this request from Kai?", showing the request and the line "Approve this handover only. Sensitive actions still need separate approval." Tap "Send to main Agent" and only that request goes to your main Agent. Tap "Decline", or let it expire, and nothing runs.

- What goes through is still the friend's request, not something you said.
- Approval covers this one handover. Sensitive actions inside it still need their own approval, and administrator commands cannot reuse the ten-minute approval window.
- A request too long for the card to show in full is refused, so you never approve a part you did not see.
- Turning the switch off does not approve cards that are already waiting.
- Devices of the same owner follow this switch too.
- With the switch off, ordinary friends keep talking to the separate friend clone and never reach your main Agent.

## Changing the numbers {#tune}

Agent J can change the per-minute limit and both time limits for you: 1 to 10000 messages per minute, and 1 second to 30 days for the time limits. Agent J uses `agentj friends relay-policy` to read and change them, and `agentj friends cancel` to cancel a request you sent that is still waiting. Cancelling only changes the request's status; it does not undo anything already done or stop work that is running.
