Credentials stay where they belong
Passwords, browser cookies, OAuth grants, and credential-helper output have no configuration field. Browser sign-in stays visible; grants stay in the OS keyring.
Safety is the architecture
Corresync keeps provider authority in one local, account-isolated session owner. CLI and MCP share the same use cases and policy checks; neither receives a generic provider escape hatch.
Plain-language guarantees
These are enforced application boundaries, not suggestions to an AI client and not claims inferred from an MCP annotation.
Passwords, browser cookies, OAuth grants, and credential-helper output have no configuration field. Browser sign-in stays visible; grants stay in the OS keyring.
Accounts keep separate sessions, profiles, credentials, cursors, caches, previews, queues, and audit context. There is no broadcast write.
External sends, destructive changes, account lifecycle, and calendar invitations bind approval to the exact reviewed caller, account, target, and payload.
If a provider may have changed remote state but confirmation fails, Corresync reports reconciliation instead of risking a duplicate through automatic retry.
Monitoring starts off. Collection, local notification, durable queueing, runner execution, content release, and remote egress remain distinct choices.
Provider capability and degradation travel with results. A missing precondition fails closed instead of being emulated unsafely or routed to another provider.
One guarded path
AI agentsMCP · stdio
You & scriptsCLI
typed use caseseffect policy authenticated IPC session owneraccount-isolated clients valid TLS explicit providers
MCP uses stdio. The session owner exposes no TCP listener. Unix socket or Windows named-pipe identity is authenticated before the local bearer can be transmitted.
Preview, then commit
Changing a recipient, body byte, attachment, event field, item version, account, or caller invalidates the approval.
$ corr mail send --account work \
--to ana@example.invalid \
--subject 'Quarterly plan' \
--body-file reply.txt
REVIEW · send new message
account work · microsoft-owa
to ana@example.invalid
body text/plain · 412 B
digest sha256 9f2c1a…
Nothing sent.
$ corr mail send … --approve
SENT · one attempt · review 9f2c1a…
The approval expires and stays only in the local daemon that issued it.
A successful or terminal commit consumes the approval. It cannot authorize a later action.
The reviewed account, provider, folder or calendar, version, recipients, content, and effect stay exact.
MCP keeps preview and commit as separate typed tools. Tool annotations never replace server policy.
Authentication ownership
Credential-free discovery returns evidence and required authentication. It never opens a browser, requests administrator consent, or adds an account.
Visible browser
SSO, MFA, Conditional Access, account selection, and provider notices stay inside a dedicated browser profile.
Public-client OAuth
Explicit selection, PKCE, registered loopback redirect, service-minimal scopes, no client secret, and OS-keyring grant storage.
Local credential reference
An OS-keyring entry or approved absolute helper is resolved only for the selected account and encrypted endpoint.
Private data remains data
Messages, attachments, calendar fields, imports, links, and monitor queue values are private, attacker-controlled input—not instructions to an agent or permission to execute.
Lists omit bodies and file bytes. Sensitive reads are explicit, bounded operations with optional preview policy.
One approved local path can be scanned into account-local staging. No upload, authentication, or source mutation is reachable.
Move deliberately from off to notification, queue, and then one approved no-shell runner. Remote egress is separate.
corr feedback builds an allowlisted report locally and displays it before
any copy, save, or browser action. It never submits automatically.
Standalone updates verify release identity, checksum, version, and platform before replacement. Automatic install is a separate opt-in and never runs during MCP work; Homebrew, Scoop, and WinGet remain package-manager owned.
Deliberately absent
Claims follow evidence
v0.8 routes are implemented against synthetic provider contracts. They remain live-unobserved until an authorized, content-free observation names the exact Corresync commit, provider route, platform, and outcome.
A missing observation is never reported as a pass. Default tests and CI never activate a live mailbox or calendar.
Inspect the boundary
Start with the safe defaults, or pick your provider route first.
Found a security issue? Report it privately on GitHub.