name: email description: Manage emails via Himalaya CLI. Use when the user wants to read, send, search, or organize emails. Triggers on "email", "inbox", "send email", "check mail", "reply to", "forward", or mentions of Gmail, Outlook, iCloud, Proton Mail.
Email Management
Manage emails using Himalaya CLI - a powerful command-line email client supporting IMAP, SMTP, Maildir, and Notmuch backends.
Agent Usage (Power User Patterns)
When using this skill as an agent, run commands via execute_command. Prefer these patterns:
Always use
--output jsonwhen you need to parse results (subject, from, id). Example:himalaya envelope list --folder INBOX --page-size 20 --output json | jq '.[] | {id, subject, from, date}'Non-interactive send:
message writeopens$EDITOR. For automation, pipe a full RFC-style message tohimalaya template send(if available), or use a temp file:echo -e "To: recipient@example.com\nSubject: Subject\n\nBody text" | himalaya template sendIf
template sendis not available, usehimalaya message write --to "recipient" --subject "Subject"and note that it may open an editor—checkhimalaya --helpfor your version.Extract message IDs for follow-up actions:
himalaya envelope list --output json | jq -r '.[].id'Batch operations: Pass multiple IDs to move/delete:
himalaya message move <id1> <id2> <id3> --folder "Archives"Check before acting: Run
himalaya account listandhimalaya folder listfirst if the user has multiple accounts or folders.Use
--account <name>when the user has multiple accounts (e.g.,himalaya --account work envelope list).
Prerequisites Check
Before any email operation, verify Himalaya is installed and configured:
# Check if installed
which himalaya
# Check if configured (lists accounts)
himalaya account list
If not installed → Guide through Installation If no accounts → Guide through Account Setup
Installation
pre-built binary
curl -sSL https://raw.githubusercontent.com/pimalaya/himalaya/master/install.sh | PREFIX=~/.local sh
macOS (Homebrew)
brew install himalaya
Arch Linux
pacman -S himalaya
Cargo (Any OS)
cargo install himalaya --locked
Other Methods
Direct user to: https://github.com/pimalaya/himalaya#installation
Account Setup
Recommended approach: Use Himalaya's built-in wizard which auto-discovers settings.
Interactive Setup (Easiest)
# First-time setup - wizard starts automatically
himalaya
# Or configure a specific account
himalaya account configure <account-name>
The wizard will:
- Ask for email address
- Auto-discover IMAP/SMTP settings
- Prompt for password (stored securely in system keyring)
- Test the connection
Provider-Specific Notes
| Provider | Special Requirements |
|---|---|
| Gmail | Requires App Password or OAuth 2.0 setup |
| Outlook | Works with password or OAuth 2.0 |
| iCloud | IMAP login is username only (not full email) |
| Proton Mail | Requires Proton Bridge running locally |
💡 Tip: Many providers use the same app-specific password for both email and calendar. Store credentials in pass with consistent naming (e.g., google/app-password, icloud/app-password) to reuse them across both email and calendar skills. For multiple accounts, use a hierarchical structure (e.g., google/personal/app-password, google/work/app-password)—the / creates folders to keep things organized.
For detailed provider configs, see references/providers.md
Common Operations
List Emails
# List recent emails in INBOX
himalaya envelope list
# List from specific folder
himalaya envelope list --folder "Archives"
# List with specific account
himalaya envelope list --account gmail
# Paginate results
himalaya envelope list --page 2 --page-size 20
Read Email
# Read by ID
himalaya message read <id>
# Read in plain text (no HTML)
himalaya message read <id> --plain
# Read headers only
himalaya message read <id> --headers
Send Email
# Compose new email (opens $EDITOR)
himalaya message write
# Send with pre-filled fields
himalaya message write --to "recipient@example.com" --subject "Hello"
# Reply to a message
himalaya message reply <id>
# Reply all
himalaya message reply <id> --all
Search Emails
# NOTE: `envelope list` does NOT support a `--query` flag.
# Any trailing arguments are interpreted as the search query.
# Put options FIRST (e.g., --folder/--output/--page-size), then query tokens.
# NOTE: There is no `--max-size` flag. To limit results, use `--page-size` (and optionally `--page`).
# Basic filters (direct Himalaya query syntax)
# Search by subject
himalaya envelope list --folder INBOX subject "meeting"
# Search by sender
himalaya envelope list --folder INBOX from "boss@company.com"
# Unread (not seen)
himalaya envelope list --folder INBOX not flag seen
# Search by exact date (YYYY-MM-DD or YYYY/MM/DD)
himalaya envelope list --folder INBOX date 2026-02-09
# Combine filters with and/or (quote the expression to keep it as one arg)
himalaya envelope list --folder INBOX "from client@example.com and subject invoice and not flag seen"
# ---------------------------------------------------------------------------
# Shell-level helpers (useful patterns for LLMs)
# ---------------------------------------------------------------------------
# Count emails received TODAY in INBOX
# 1) List all envelopes
# 2) Skip the header lines
# 3) Grep for today's ISO date string
# 4) Count lines
TODAY=$(date +%Y-%m-%d)
himalaya envelope list --folder INBOX \
| tail -n +3 \
| grep "${TODAY}" \
| wc -l
# Count unread emails in INBOX
himalaya envelope list --folder INBOX not flag seen \
| tail -n +3 \
| wc -l
# Show latest N emails in INBOX (for quick inspection)
# Use pagination flags (not `tail`) to reliably fetch only N messages.
himalaya envelope list --folder INBOX --page 1 --page-size 10
# Show latest N *unread* emails
himalaya envelope list --folder INBOX --page 1 --page-size 10 not flag seen
Manage Folders
# List folders
himalaya folder list
# Create folder
himalaya folder create "Projects/ClientA"
# Move message to folder
himalaya message move <id> --folder "Archives"
# Copy message
himalaya message copy <id> --folder "Important"
Manage Flags
# Mark as read
himalaya flag add <id> seen
# Mark as unread
himalaya flag remove <id> seen
# Star/flag message
himalaya flag add <id> flagged
# Delete (move to trash)
himalaya message delete <id>
Switch Between Accounts
# Use specific account for any command
himalaya --account work envelope list
himalaya --account personal message write
Check All Accounts
# List configured accounts
himalaya account list
# Check unread across accounts
for account in $(himalaya account list --output json | jq -r '.[].name'); do
echo "=== $account ==="
himalaya --account "$account" envelope list --page-size 5 not flag seen
done
Output Formats
Himalaya supports JSON output for scripting:
# JSON output
himalaya envelope list --output json
# Parse with jq
himalaya envelope list --output json | jq '.[].subject'
Troubleshooting
Connection Issues
# Enable debug logging
RUST_LOG=debug himalaya envelope list
# Full trace
himalaya --debug envelope list
Common Errors
| Error | Solution |
|---|---|
| "Account not found" | Run himalaya account configure <name> |
| "Authentication failed" | Check password/app password, regenerate if needed |
| "Connection refused" | Check IMAP/SMTP host and port settings |
| "Certificate error" | Check TLS settings in config |
Reset Configuration
Config file location: ~/.config/himalaya/config.toml (or $XDG_CONFIG_HOME/himalaya/config.toml)
# View current config
cat ~/.config/himalaya/config.toml
# Edit config manually
$EDITOR ~/.config/himalaya/config.toml
# Reconfigure account interactively
himalaya account configure <name>
# Use alternative config file
himalaya --config /path/to/custom/config.toml envelope list
Environment variable override:
export HIMALAYA_CONFIG=~/.config/himalaya/custom-config.toml
himalaya envelope list
Composing Emails
Himalaya uses your $EDITOR for composing. The format is:
To: recipient@example.com
Cc: other@example.com
Subject: Your subject here
Your message body here.
Adding Attachments (MML Syntax)
Searching emails
Himalaya’s search uses a positional query expression, not a --query flag.
Date filters
# Envelopes strictly after a given date
himalaya envelope list "after 2026-02-10"
# Envelopes strictly before a given date
himalaya envelope list "before 2026-02-10"
# All emails received today (from local date)
himalaya envelope list "after $(date +%Y-%m-%d)"
Other common filters
# From a specific sender
himalaya envelope list "from me@example.com"
# To a specific recipient
himalaya envelope list "to someone@example.com"
# Subject contains words
himalaya envelope list "subject report"
# Combine filters (AND semantics)
himalaya envelope list "from me@example.com and subject report"
Quick Reference
| Task | Command |
|---|---|
| Check inbox | himalaya envelope list |
| Read email | himalaya message read <id> |
| Compose new | himalaya message write |
| Reply | himalaya message reply <id> |
| Search | himalaya envelope list "from me@example.com" |
| Mark read | himalaya flag add <id> seen |
| Delete | himalaya message delete <id> |
| Move | himalaya message move --folder SOURCE TARGET <id...> |
- For provider-specific setup, see references/providers.md
- Official docs: https://github.com/pimalaya/himalaya