Product contract

Skrzynka gives one local operator a unified, durable view of incoming messages from multiple mailboxes, sends a reply through the same mailbox identity that received the message, and originates new mail from a connected mailbox. The product succeeds only when a provider message is persi

Promise#

Skrzynka gives one local operator a unified, durable view of incoming messages from multiple mailboxes, sends a reply through the same mailbox identity that received the message, and originates new mail from a connected mailbox. The product succeeds only when a provider message is persisted locally or a send is accepted by the configured SMTP server; accepting an API request is not success.

Actors and outcomes#

ActorStarting stateRequested outcomeObservable result
OperatorA mailbox credential exists in SkarbiecAdd that mailbox without copying its passwordMailbox inventory names the Skarbiec item and resolved address but contains no secret
OperatorOne or more enabled mailboxes existReceive current provider messagesNew messages appear once in the local inbox with their source mailbox preserved
OperatorAn inbound message existsReply as the receiving mailboxSMTP accepts the reply and the local reply record becomes sent
OperatorA connected mailbox existsOriginate a message that mailbox did not receiveSMTP accepts the message and the local outbound record becomes sent
Authenticated desktop clientA verified Wisent identity has selected an organization and Skrzynka serves its loopback APIPresent and operate only that organization's stateUI state matches organization-scoped API resources and normalized errors

Vocabulary#

  • Mailbox: one IMAP receiving identity and one public sending identity; their credential items may differ.
  • Skarbiec item: the exact credential authority selected for receiving or, optionally, sending.
  • Message: a normalized inbound email stored locally.
  • Reply attempt: one idempotency-keyed request to answer a stored message.
  • Outbound message: one idempotency-keyed message a mailbox originates, carrying its own recipients, cc, subject, full plain-text body, and delivery evidence.
  • Synchronization: a bounded read of provider messages after the mailbox's last persisted IMAP UID.
  • Provider state: mail and folders owned by the IMAP/SMTP provider; Skrzynka does not become their authority.

Ownership boundaries#

Shared Wisent authentication owns user identity, session lifecycle, and organization membership. Skarbiec owns credential encryption, recovery, rotation, and revocation. The mail provider owns the mailbox, IMAP UIDs, SMTP acceptance, and provider-side retention. Skrzynka owns organization-scoped mailbox references, normalized local messages, synchronization cursors, reply and outbound intent, full local bodies, and delivery evidence. skrzynka-desktop owns presentation and onboarding only; it does not resolve secrets or talk to mail providers.

Current constraints#

The first contract runs one loopback-only core process. Every /v1 request from the desktop carries a centrally verified Wisent session and selected organization; database access is filtered by that organization. The local CLI acts for the organization its caller names with --organization and does not impersonate a Wisent session. Mail is plain-text normalized; attachments and remote HTML are not retained. Reply generation is human-controlled. No action in Skrzynka mutates provider-side message flags, folders, or deletion state.

Product Guidelines adoption#

This contract follows the wisent-ai/product-guidelines dependency order as read from its main branch: README, release, onboarding, core, integrations, and examples. Product changes update those artifacts in that order before changing public behavior.