From cli-email
Install and configure CLI email stack (mbsync, himalaya, neomutt, goimapnotify, qmd). Use when user asks to set up email, install himalaya, configure mbsync, or says "/setup-email".
How this skill is triggered — by the user, by Claude, or both
Slash command
/cli-email:setup-emailThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Guided installation and configuration of CLI email on macOS. Based on the reference guide at `references/blog-post.md` (read it for full config templates and details).
Guided installation and configuration of CLI email on macOS. Based on the reference guide at references/blog-post.md (read it for full config templates and details).
The stack:
Check what's already installed:
# Check each tool
which himalaya && himalaya --version
which mbsync && mbsync --version
which neomutt && neomutt --version
which w3m
which goimapnotify || ls ~/go/bin/goimapnotify
which qmd
which mail-archive
which mail-sync
which maildir-to-text
Report what's installed and what's missing. If everything is installed, tell the user their email stack is already set up and suggest /check-email.
brew install isync himalaya neomutt w3m
go install github.com/chmouel/goimapnotify@latest
Note: goimapnotify requires Go. If go is not installed: brew install go.
Guide the user to create app-specific passwords and store them in the macOS Keychain.
Fastmail: Settings > Privacy & Security > App Passwords Google: https://myaccount.google.com/apppasswords
# Store in Keychain (user provides the actual password)
security add-generic-password -a '<email>' -s '<service-name>' \
-w '<app-password>' ~/Library/Keychains/login.keychain-db
The service names will be used in all config files for password retrieval:
security find-generic-password -a '<email>' -s '<service-name>' -w
Create ~/.mbsyncrc — see references/blog-post.md for the full template.
Key settings per account:
AuthMechs LOGIN — required on macOS (avoids SASL errors)SubFolders Verbatim — preserves folder namesCreate Both + Expunge Both — full two-way syncCopyArrivalDate yes — preserves email datesImportant and Starred (virtual labels)mkdir -p ~/Mail/personal ~/Mail/work
mbsync -a
Create ~/.config/himalaya/config.toml — see references/blog-post.md for the full template.
Himalaya reads from local Maildir (fast, offline) and sends via SMTP.
Create ~/.config/neomutt/neomuttrc — see references/blog-post.md for the full template.
Also create ~/.mailcap:
text/html; w3m -I %{charset} -T text/html -dump; copiousoutput;
Install mail-archive, mail-sync, and maildir-to-text to ~/.local/bin/:
mkdir -p ~/.local/bin
# mail-archive is bundled with the plugin — copy it
cp "$(dirname "$(dirname "$(dirname "$0")")")/scripts/mail-archive" ~/.local/bin/mail-archive
chmod +x ~/.local/bin/mail-archive
For mail-sync and maildir-to-text, see references/blog-post.md for the scripts.
Ensure ~/.local/bin is in PATH.
Create one config per account in ~/.config/goimapnotify/:
personal.json — Fastmail IMAP IDLE configwork.json — Gmail IMAP IDLE configSee references/blog-post.md for templates.
Test:
~/go/bin/goimapnotify -conf ~/.config/goimapnotify/personal.json
~/go/bin/goimapnotify -conf ~/.config/goimapnotify/work.json
Three plists in ~/Library/LaunchAgents/:
com.example.goimapnotify-personal.plist — IDLE watcher for personalcom.example.goimapnotify-work.plist — IDLE watcher for workcom.example.mbsync.plist — 15-minute fallback sync timerSee references/blog-post.md for templates.
launchctl load ~/Library/LaunchAgents/com.example.goimapnotify-personal.plist
launchctl load ~/Library/LaunchAgents/com.example.goimapnotify-work.plist
launchctl load ~/Library/LaunchAgents/com.example.mbsync.plist
Register the email text files as a qmd collection:
qmd collection add ~/Mail/.index --name email --mask '**/*.txt'
qmd update -c email
The mail-sync wrapper runs maildir-to-text and qmd update -c email automatically on every sync.
npx claudepluginhub ericboehs/claude-plugins --plugin cli-emailManages email via Himalaya CLI: lists inboxes/folders, reads unread messages, sends/replies/forwards emails, switches accounts. Use for read/send email tasks.
Automates Gmail operations like searching, reading, sending emails, managing drafts/labels via Python CLI scripts with standalone OAuth. Requires Google Workspace.