Begin a mutating triage pass (acquire the per-inbox lease)
begin_triageAcquires a lease so two agents never triage the same inbox at once.
Acquires a short-lived lease (TTL 8 min) before a pass that archives, labels, marks spam, or creates a batch of drafts, so two agents never step on the same inbox at once. Read/list/sync/get_message never need this. Call heartbeat_triage roughly every 2 minutes while the pass is running to keep the lease alive, and end_triage when done (or on error) so the lease frees up promptly instead of waiting out the TTL. Returns { ok:false, busy:true, heldBy, leaseExpiresAt } if another agent already holds the lease. Wait and retry later; do not force through it. Returns { ok:false, reason:'cadence', nextEligibleAt } if this inbox was already triaged within its cadence window (see get_triage_profile's effective.cadence) as a soft skip to avoid redundant passes. Pass force:true only for an explicit human override ("triage now anyway"), never automatically. May also return reminders (a string array, relay each line to the person before starting): a stale unsent draft (each reminded at most once, ever) or a snoozed message that came due in the last 7 days; never a snooze that is still pending.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"inboxId": "<inboxId>",
"agentLabel": "<agentLabel>"
},
"name": "begin_triage"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | true to skip the cadence soft-check. Pass it only after the human explicitly asks to triage now. | |
| inboxId | Yes | ||
| agentLabel | Yes | Short human-readable label identifying this agent/session, e.g. "claude-desktop" or "nightly-cron". Required. |