agent-first-mail 0.2.0

Let your AI agent work your inbox — email pulled into plain files it reads, sorts, and drafts on your machine, with nothing sent until you confirm.
Documentation
{
  "$schema": "https://cmn.dev/schemas/v1/spore-core.json",
  "id": "agent-first-mail",
  "name": "Agent-First Mail",
  "version": "0.2.0",
  "domain": "agentfirstkit.com",
  "key": "ed25519.BwbSzqdDYyMN1pPW5snRk3afrJAovHn8aueMvDpfNKVw",
  "synopsis": "Let your AI agent work your inbox — email pulled into plain files it reads, sorts, and drafts on your machine, with nothing sent until you confirm.",
  "intent": [
    "Give AI agents a local-first email workspace where pulled messages become editable case files rather than a traditional inbox app",
    "Preserve raw RFC822 mail while exposing mechanically cleaned text, message metadata, active cases, archived cases, direct-message archive categories, drafts, notes, and files through stable filesystem conventions",
    "Keep the CLI focused on side effects such as read-only pull with case suggestions, explicit triage assignment, case moves, archive and restore operations, attachment fetches, reply draft scaffolding, draft validation, local push queuing, explicit push operations including read/unread flag work, audit log inspection, and local push queue cleanup"
  ],
  "license": "MIT",
  "mutations": [
    "Support running afmail in a subdirectory workspace rather than only the directory root, so a mailbox workspace can sit alongside other project files",
    "Collapse push into a single all-or-nothing operation that applies every pending real-mailbox effect together or none, removing partial-push states",
    "Add a draft show command to read a draft's full rendered content before sending, and simplify the overall draft workflow",
    "Unify message restore across lifecycles, make case reads work regardless of a message's lifecycle state, and allow adding a message straight into the archive",
    "Clarify CLI documentation and fix doc/code drift across file-formats, workspace, and code-structure docs"
  ],
  "bonds": [
    {
      "relation": "depends_on",
      "uri": "cmn://agentfirstkit.com/b3.8GyV4Y1QYZwXkgDsm3gkHTuKtYq8FonU4NrMsdfzjnSS",
      "id": "agent-first-data",
      "reason": "All structured output, field suffixes, secret handling, and JSONL events follow Agent-First Data conventions"
    }
  ],
  "tree": {
    "algorithm": "blob_tree_blake3_nfc",
    "exclude_names": [
      ".git",
      ".cmn"
    ],
    "follow_rules": [
      ".gitignore"
    ]
  }
}