agent-first-mail 0.3.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.3.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": [
    "Add afmail contact subcommand for managing contact cards with CRUD operations, per-group organisation, email/phone fields, tags, archival, and extracting contacts from message senders; email addresses are globally unique across all contacts",
    "Materialise sender contact links directly onto message views, refreshed automatically when a contact's emails or name change",
    "Add identity registry: workspaces define named send personas in config with optional identities/<slug>.md footer notes; draft commands accept --identity SLUG and write footers into the draft body for review before push",
    "Fix skill install to add each installed skill directory to the workspace .gitignore managed block, covering both .codex/ and .claude/ agent paths without duplication",
    "Fix interrupted-transaction sentinel preservation so retried commands correctly detect and recover from previously-failed transactions",
    "Roll back newly-created case and archive directories automatically if any step in the create command fails, preventing orphan directories in the workspace",
    "Validate related-message constraint in archive message create before creating any files, and document in the skill that messages with related_message_ids must be grouped into a case"
  ],
  "bonds": [
    {
      "relation": "depends_on",
      "uri": "cmn://agentfirstkit.com/b3.39kCSa6orKxAaLcSGpisgLo3KXCxzCw2KutvdhgajCV3",
      "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"
    ]
  }
}