Repository navigation
Description
Problem
MCP callers currently perform dry-run through the non-idempotent send_message tool, and even dry_run=true requires the destination's send capability. The v1.3 CLI also offers human-readable delivery explanations, but there is no stable structured MCP explanation contract.
Proposed scope
Design a separate send-validation/explanation tool and a least-privilege preflight capability. Reuse the CLI's target, route, message-budget and storage/ownership checks rather than duplicating them or parsing its human-readable explanation text.
The tool name, policy schema evolution and result schema require design review before implementation.
Acceptance criteria
- Define explicit authorization for validation-only use. Existing v1 policies must not silently acquire new capabilities; current send and wake authorization remains unchanged.
- Validate normal message input and the exact operator-approved destination/agent/home route. Do not reinterpret a model-supplied URI or alias as authority for a different route.
- Return a versioned structured explanation with a field allowlist: checked facts, limitations, refusal/unknown reasons and operator actions. Do not expose raw paths, message contents, credentials or native transcripts.
- A preflight must not enqueue, post, wake a model, reserve a wake budget, create handoff intent/authority or modify policy/presets.
- Account explicitly for existing dry-run probes and local/network process effects; do not claim inspection is purely metadata-only or approve read-only annotations without verifying actual behavior.
- Explain mode is text-only in the current CLI. Introduce a shared structured representation or equivalent reviewed contract; do not scrape text or silently change public CLI JSON.
- Passing is a point-in-time validation, not route reservation, effective-storage attestation, permission approval, later-send safety, consumption or ACK.
- Unsupported device/handoff/explanation combinations fail explicitly; adding this tool does not expand their support.
- Tests prove zero native submission/model/wake/budget effects for success, refusal, cancellation and timeout; preserve payload bounds, ownership guards and no automatic resend.
- Installed stdio and schema tests cover validation-only policy, old-policy compatibility, disclosure limits and separate host approvals.
Related work
Depends on the MCP destination/capability contract. Reuses ordinary CLI explanation work #323 without reopening its completed scope. Keep native storage/generation limitations #268/#180 separate.
Source: v1.3.3 MCP adapter and CLI reference.
Planning
Proposed v1.4.0 candidate, priority P2; no committed release date. Registration does not authorize implementation, live sends, merge, release or operations.
Tracking dependencies
Depends on #356 for destination/capability reporting and policy evolution. Coordinate safe explanation/error fields with #358. Preset integration #359 is a separate fourth v1.4.0 candidate slice, authorized by the owner on 2026-11-02; it is not part of this preflight PR. Handoff #360 remains excluded.
Activity
abruption commentedon Nov 2, 2026
Implementation prepared in PR #362. Chosen reviewed design: explicit policy-v2 preflight permission, preflight_send, and separate opt-in CLI --explain-json preserving ordinary text/JSON. #359 preset selection is a separate v1.4.0 candidate slice; only #360 remains deferred. Windows CI exposed a fixture incorrectly expecting native wake support; fixed to preserve the existing Mac/Linux wake boundary. Source/model/test limits and stacked dependency on #361 are recorded in the PR. No merge/publication or host-approval bypass.
abruption commentedon Nov 2, 2026
Verified on 2026-11-03 against published v1.4.0, source
476c67e636ef02cb93797dd2f42252dfe577625f. The exact main CI passed all 37 jobs (including the 12 Mac/Linux MCP SDK/version cells), and publication/PyPI verification passed all 6 jobs. This completion audit is a source/test/contract review, not a new native/SSH/model/ACK experiment.Implementation: PR #362, merge
e68f1c8f224f30701a9b69bb693f4e99055880ee.The separate policy-v2 preflight capability and structured send.preflight contract are shipped, with unchanged ordinary output, explicit route/input validation, bounded results and zero-submission/wake-budget/cancellation fixtures. Existing local/SSH/version probes are not pure metadata. Preflight does not reserve a route or establish storage identity, later-send safety, consumption or ACK; unknown outcomes never authorize resend.
Closing as completed for the shipped scoped contract; Long-term native identity/storage, handoff and integration research remain separate.