Agent Mail capability boundaries and next steps

September 9, 2026 ยท View on GitHub

Review date: 2026-09-09. This document separates implemented capabilities, verified client connections, candidate UI acceptance and release/deployment. Machine configuration and mailbox data remain outside this repository.

What is usable now

Agent Mail's core transport is usable in the reviewed DSH combination. This is not a claim that every local or remote AI client is already connected. Model location and mail-client location are different: a DSH conversation calling a remote model API still uses the DSH host's Agent Mail connection. That model test does not qualify a second machine's AI client or mailbox.

Path or behaviorEvidence and current boundary
Live DSH UI to Agent MailUI 0.1.4 browser Send and recipient MCP read passed; the provider reports version 1.0.0-alpha.4
Codex receiving client on the same hostA fresh Codex app-server loaded the saved MCP configuration and read, claimed and acknowledged the authorized canary; a later independent read confirmed the acknowledgement
Current owner conversation after configuration changeA saved MCP entry does not prove that an already-running conversation reloaded its tool catalog
Candidate UI 0.1.5Revised unpublished candidate passed 99 portable tests, exact archive checks, real standalone/sidebar browser acceptance, and uninstrumented workspace/Quote/tab-remount checks; see its exact acceptance digest
DSH model reading and replyingPassed in the separate candidate preview and isolated mailbox; the model reply was independently observed at the recipient
Model task completion and acknowledgementPassed after a corrective prompt explicitly set type: "done"; the first ordinary reply correctly failed the terminal-task acknowledgement guard
Other local AI clientsRequire their own identity and actual CLI/MCP connection to the intended mailbox; a roster entry is not connection evidence
DSH peers on another machineTwo-host TLS Hub round trips passed through both installed DSH plugins, including claim/ack, identity checks, client restart and Hub recovery; see the peer record
Codex on another machineReal Codex app-server 0.153.4 and DSH passed bidirectional TLS Hub send/inbox/claim/ack plus Codex restart recovery; this qualifies MCP transport, not model execution or the current desktop task
Other AI clients on another machineStill require their own real-client acceptance
Automatic notification or executionNot enabled by installing these bundles; UI status explicitly reports no automatic wake and unknown client presence

See the delivery review, connection procedure and exact 0.1.5 acceptance record.

Full provider and DSH packages

The full Agent Mail project is the service/CLI/MCP implementation. The DSH packages connect that separately installed provider to the host. Installing a bundle does not replace the provider with a smaller implementation.

ComponentResponsibilityLimits
Full Agent Mail providerOwns message storage, identities, task state, approval policy and its supported transports/operational commandsMust be separately installed, configured and operated; source availability is not proof of a connected client
@dff652/dsh-agent-mailStarts the reviewed external stdio MCP command under the agent-mail namespace and passes deployment-owned identity, home and optional Hub URLContains no provider binary, mailbox, remote credentials or automatic wake runner
@dff652/dsh-agent-mail-uiReuses the registered MCP tools for diagnose, roster, inbox, thread, send, claim, acknowledgement and approval-list queriesOffers a subset of provider operations; no provider administration, human approve/reject, persistent sent history or client-presence service

The bundle pins a reviewed provider identity in its documentation. Newer provider source at the same displayed version is not automatically the exact reviewed executable. Compare source commit and artifact digest before an upgrade; upgrade and qualify the provider separately from the UI.

The full-provider checkout supplied for this comparison is an archived checkout, at commit 97710415187df20b6fa61daa39d8499f3db24e8e on archive/old-checkout-9771041-20260807. Its package version is 1.0.0-alpha.4. The bundle's reviewed provider identity is commit ca6601c95eeda2d5d558cca37179be1412b75a8d; that object is absent from the archived checkout. Matching version strings do not establish identical source or runtime bytes. Locate the maintained provider checkout before planning changes to its implementation.

A subsequent local source lookup found the public provider checkout on main at the reviewed ca6601c95eeda2d5d558cca37179be1412b75a8d commit. Its MCP server, CLI and wake bridge match the inspected archived source; connection and remote-client differences are header comments. This locates the source corresponding to the reviewed runtime identity without modifying the archive or asserting that a remote repository was freshly fetched.

The following provider implementation findings apply to that inspected snapshot; they are not a fresh acceptance of every provider subsystem.

CapabilityFull-provider sourceDSH bundle/UI boundary
MCP toolsEleven tools: send, inbox, claim, ack, roster, approve, reject, approvals, tail, events and diagnoseThe bundle mounts the external provider's discovery; its reviewed fixture expects eleven tools. The UI proxies eight non-human operations, excluding approve, reject and events
Local CLI and storageLocal message/task operations, store and operational commandsDelegated to the external provider; the package contains no store or provider CLI
Remote data planeHTTPS bearer Hub plus remote MCP and RemoteMailClient methods for identity, send, inbox, claim, ack, roster and threadRequires explicit remote-mode environment and provider token-file setup; the bundle does not provision either end
Remote approvalsHub has approval endpoints, but the inspected remote client/MCP do not route approval operationsNot supplied by this UI; a remote approval-required task must remain pending until an explicitly supported human workflow exists
SSE and federationHub SSE/federation routes and a bounded remote SSE helper existNo event-consumer or federation administration surface in these DSH packages; not cross-machine acceptance
Wake/runnerLocal dry-run/live bridge and constrained Codex, Grok and Claude argv runners already existNot started by the bundle. The inspected bridge CLI calls only local processing; remote SSE helper wiring and the full remote runner path remain incomplete

Provider-source references, relative to the inspected provider checkout: packages/agent-mail/src/mcp/server.ts, src/connection.ts, src/remote-client.ts, src/hub/server.ts, src/wake/bridge.ts, src/wake/runner.ts and src/cli.ts (the abbreviated src/ paths are within packages/agent-mail). Deployment boundaries are documented in that checkout's docs/guides/hub-remote.md and docs/guides/usage-modes-and-acceptance.md. This repository's contract fixture is agent-mail-tools.json.

Connecting local and remote clients

For local clients, use distinct registered identities and the same intended Agent Mail store. Verify through the client runtime itself, not just a separate provider process. The Codex entry in this review exposes eight non-human MCP tools and deliberately excludes human approve/reject tools.

For remote clients, use the provider's supported Hub/remote route and its identity-bound authentication. The bundle's optional DSH_AGENT_MAIL_HUB_URL and provider-owned token-file configuration enable a route; they do not provision a Hub or configure the recipient automatically. Matching identity names in unrelated mailboxes does not connect those mailboxes. Do not solve cross-machine connectivity by assuming a shared SQLite file is a supported transport.

In the inspected provider, AGENT_MAIL_HUB_URL activates remote MCP mode. Saving connect set alone does not switch MCP mode, and local CLI send/inbox/claim/ack still use the local store. connect test proves only the connection/authentication checks it performs, not the full round trip. Remote approvals also remain a separate limitation in that snapshot.

Record an acceptance row per real client and route: provider version/digest, client configuration loaded, identity and target store verified, unique message sent, exact recipient match, reverse reply matched, and expected claim/terminal/ack state. Record reconnect behavior separately. Credentials, message contents and deployment endpoints belong in private operational evidence, not in this public document.

Ordered follow-up checklist

The owner subsequently set the client order to DSH to DSH, then DSH to Codex. The peer acceptance plan defines same-host, cross-host and reliability gates before broader client support or automatic wake.

PriorityTask and ownerCompletion evidence
P0Integration worker, primary-reviewed: qualify DSH to DSH firstSame-host and cross-host TLS Hub round trips, identity/auth checks, claim/ack and bounded client/Hub restart checks passed; retain these gates for future changes
P0Integration worker, primary-reviewed: qualify DSH to Codex secondReal Codex app-server and remote DSH bidirectional MCP transport plus Codex restart recovery passed; current desktop task loading, notification and model execution remain separate
Completed UI P0Primary agent: retain exact 0.1.6 acceptanceImplemented at 054b795; 100 portable tests per supported Node version, 16 scenarios per fixture browser, real standalone/sidebar and independent review PASS; isolated preview upgraded with configuration/session/mailbox preservation
P1.1 provider implementedProvider worker, primary-reviewed: guarded enrollment and management adapterBackend acceptance: alpha.5, 298 tests PASS, exact packed installation and real TLS Hub/MCP task, restart and restore PASS
P1.2 local candidateProvider alpha.6 authenticated host and UI 0.1.7 enrollment wizardP1.2 acceptance: private opt-in host, login/CSRF/profile ACL, recovery and explicit restart; exact artifact and real DSH gates recorded separately
Baseline preservedPrimary agent: retain source and runtime boundariesProvider increment starts from reviewed public ca6601c; archived checkout and deployed provider remain unchanged
Separate release trackPrimary agent: prepare 0.1.6 release and production-upgrade evidence when requestedReviewed source, exact archive/digest, CI after authorized push, installation/removal, protected backup, rollback and live browser/client acceptance; push, release and deployment remain separate owner decisions
Later integrationProvider/host integration task: reuse existing bridge/runners for opt-in wakeQualify the existing local Codex/Grok/Claude path, wire the remote SSE helper into the intended CLI workflow if needed, and verify real remote execution, session routing, retries, failure visibility, limits and a stop switch; do not build a second runner inside the UI
Later provider scopeProvider API task: persistent sent-history and receipt/presence semanticsDefine stored history, mailbox delivery, client retrieval, acknowledgement and presence independently; add the provider contract before expanding the UI
Later integrationProvider/client integration task: reliable model task completionRegression showing that ordinary replies cannot acknowledge unfinished tasks, explicit terminal-result arguments, failure recovery and independent state verification
P2UI follow-up after provider contracts existExtend persistent history, richer task outcomes or notification indicators only for capabilities the provider actually exposes

A bounded luna-worker is appropriate for one client adapter, one independent comparison or one isolated browser-test repair. The primary agent owns the complete diff, evidence review, final tests and commit. Avoid parallel edits to the same profile or mailbox; publication and live operations stay under their separate authorization boundaries.