Skip to content
Concepts

The Mailbox

The mailbox is where agent work meets human judgement. Agents propose enrichments — summaries, entity extractions, structured data — and you approve, edit, or reject them before they land on your content.

Why the mailbox exists

LeftFold's operating model is agents do the work, humans supervise. The mailbox is the supervision surface.

When agents enrich your content — generating summaries, extracting entities, producing structured data — those outputs are proposals, not final results. They appear in the mailbox as tasks for you to review. Nothing lands on your content until you approve it.

This gives you the productivity of automated enrichment with the quality control of human review.


What arrives in the mailbox

Tasks come from four sources:

  • Internal agent enrichments — summaries, alt text, entity lists, structured data, cross-link suggestions. These are the most common.
  • External agent results — task completions from agents you've connected via the relay or A2A protocol
  • Human-to-agent delegation — tasks you send to an agent via mailbox.send (e.g. "research this topic")
  • System notifications — dead letter alerts, circuit breaker warnings, budget exhaustion

Each task includes a title, the source agent or user, the target aggregate, a message thread, and one or more artifacts (the proposed outputs).


The six interaction modes

Every mailbox task supports six actions:

ActionWhat happensTask status
ApproveAccept the enrichment as-is. Artifacts marked approved.approved
RejectDecline with an optional reason. The reason is recorded for agent learning.rejected
EditModify the enrichment and approve the edited version. A new event is appended with your changes and causation metadata linking to the original.approved
DeferSet aside for later. Priority drops to low. Not a rejection — can be revisited.deferred
AskSend a follow-up question to the agent. Adds a message to the thread and re-queues the task for the agent to respond.working
AssignReassign to a different user or agent.submitted

How approvals flow back

When you approve a mailbox task, the enrichment becomes part of the aggregate's projection:

  • Approve: the enrichment event (already in the event store) is included when the aggregate is folded. The summary, entities, structured data, or other enrichment data appears in the projection.
  • Edit: a new .enriched event is appended with your modifications, attributed to you as the principal. The original enrichment event is superseded. Causation metadata links the two.
  • Reject: the enrichment event is not included in the fold. The rejection reason is recorded on the task for future agent tuning.

The query cache is automatically invalidated when enrichment events are appended, so the next read reflects the approved enrichments.


Using the mailbox

The mailbox is accessible from every surface:

Dashboard

The mailbox is the primary view in the dashboard. Tasks are sorted by priority and date, filterable by status and project.

MCP (Claude Desktop / Cursor)

// List submitted tasks
> mailbox.list { "status": "submitted" }

// Approve a task
> mailbox.approve { "task_id": "f47ac10b-..." }

// Reject with a reason
> mailbox.reject { "task_id": "f47ac10b-...", "reason": "Summary is too long" }

CLI

LeftFold mailbox list --status submitted
LeftFold mailbox approve <task_id>
LeftFold mailbox reject <task_id> --reason "Summary is too long"
LeftFold mailbox edit <task_id> --artifact '{"summary":"Shorter version"}'

HTTP API

GET  /mailbox                    # List tasks
GET  /mailbox/:id                # Get task with messages and artifacts
POST /mailbox/:id/approve        # Approve
POST /mailbox/:id/reject         # Reject
POST /mailbox/:id/edit           # Edit and approve
POST /mailbox/:id/defer          # Defer
POST /mailbox/:id/ask            # Ask follow-up
POST /mailbox/:id/assign         # Reassign

Auto-approved enrichments

Two enrichment types skip the mailbox entirely:

  • Embeddings (from the Embedder agent) — vector representations for semantic search. Mechanical, deterministic, no human judgment needed.
  • Kind detection (from the Kind Detector agent) — file type classification. Also mechanical.

Everything else — summaries, alt text, entity extractions, structured data, cross-links — requires human review before it lands on the aggregate.