Один из революционных моментов в автоматизации своей рутины у меня случился пару недель назад, когда я решился дать агентам доступ к локальному хранилищу Apple Mail. Написал скрипт, который в read-only режиме может читать, искать, открывать нужные письма из почты приложения Mac Mail. У меня там ящиков 7, поэтому это проще, чем давать к каждому доступ по API. Не рискнул пока выдавать ему возможность писать письма (я в этом плане старовер, пишу все сам). А вот найти пачку писем или документов, выгрузить на диск аттачи, или открыть нужное письмо, которое я вообще не могу найти — это прямо топ-сценарии теперь. В результате начал наводить порядок в документах (медицинских, документах компании, всяких доступах), трекать важные письма, получать напоминалки о пропущенных оплатах за сервисы и многое другое.
Aha-момент у меня случился на следующий день после разработки скилла, когда я пытался собрать все IRS декларации за несколько лет, и за 2024 не смог найти на диске. Говорю Claude'у — поищи декларацию в почте, и положи вот сюда, если найдешь. И уже через 3 минуты у меня в папке нашлось письмо от бухгалтера, он взял оттуда аттач и закинул в нужный каталог.
Второй aha-момент случился, когда он мне написал (делая совершенно другую задачу): вот у тебя есть письмо, которое лежит в Trash, а оно вообще-то важное, его нельзя удалять. И, короче, его действительно нельзя было удалять, я восстановил. А так бы оно почистилось и исчезло.
Реализация простая. Всё идёт через единственный Python-скрипт на stdlib без зависимостей — scripts/mail_ro.py (~1400 строк), плюс SKILL.md с правилами для агента. Он читает SQLite-индекс
~/Library/Mail/V*/MailData/Envelope Index (версия каталога определяется из PersistenceInfo.plist) и сами письма в виде .emlx-файлов; парсинг тела — через email.policy + собственный HTML→text парсер. По умолчанию база открывается как mode=ro&immutable=1: ни блокировок, ни журналов, ни единой записи — ценой того, что письма, ещё лежащие в WAL (последние секунды-минуты), не видны, но и фиг с ними, это редкий кейс. Полнотекстовый поиск сначала пробует Spotlight (mdfind), поскольку живое хранилище Mail обычно не индексируется — падает в прямое сканирование писем с лимитом (--scan-limit, ~2 с на 1000 писем). Всё, что пришло из письма, считается недоверенными данными: контрольные символы терминала вырезаются, тело в show обрамляется маркерами контента, сохраняется контет только в указанные каталоги, а SKILL.md запрещает агенту следовать инструкциям из писем и отправлять содержимое почты куда-либо за пределы машины. Единственные подпроцессы — mdfind, mdutil и (только для open) open с message:-URL и read-only osascript, чтобы можно было открыть найденное письмо в новом окне (если я попрошу).
—-
Все мамы рекомендуют, все стоматологи советуют.