Teaching
mximp is taught, never trained. The unit of teaching is a proposal: a schema for a bucket, plus the values one message is expected to yield. The moment it is made, the schema is run against the message; what the run does not reproduce is listed as unreproducible. Nothing the author read is ever stored as a value; only what the deterministic run produced is.
The author is your agent, using the emailimport skill. A hosted author on Cloudflare Workers AI, opt-in per tenant, is designed and not yet built; it makes the same object.
The loop
get_messageon an unrouted message, or one in a bucket without a schema. It carries afingerprintof its layout.create_bucketwith a rule if none matches.propose_schema {message_id, bucket, schema, expected}. The result hasdry_run.checksper expected field,unreproducible, andreader_evidence(where each value was seen: body or which attachment). A task is opened on the message so it stays retained.- Fix and propose again until every expected value reproduces, or accept that a field will
requires_human. approve_proposal: the bucket takes the schema (unreproducible fields markedrequires_human), the message becomes a test case with the reproduced values expected, and it is reprocessed under the new schema. The bucket's existing suite gates the change asupdate_bucketdoes;forceapplies over failures.reject_proposalrecords a reason and leaves the bucket alone.
list_proposals and get_proposal show pending, approved and rejected proposals with their dry runs and decisions.
Fingerprints
Each message's fingerprint is structural: the DKIM-aligned sender domain, the MIME shape, the pattern of attachment names, the ordered set of labels, a histogram of line lengths. Two messages from one sender on one template share it. It is computed as the message is processed and carried on proposals and captures; nothing in it is text the message said, and comparing two is equality, not a score. A message on a known fingerprint that stops fitting is a layout change: propose against it, and the new message joins the suite beside the old.
This page as Markdown.