Himalaya — Himalaya CLI: IMAP/SMTP email from terminal
Himalaya
Section titled “Himalaya”Himalaya CLI: IMAP/SMTP email from terminal.
Skill metadata
Section titled “Skill metadata”| Source | Bundled (installed by default) |
| Path | skills/email/himalaya |
| Version | 1.0.0 |
| Author | community |
| License | MIT |
| Tags | Email, IMAP, SMTP, CLI, Communication |
Reference: full SKILL.md
Section titled “Reference: full SKILL.md”The following is the complete skill definition that Hermes loads when this skill is triggered. This is what the agent sees as instructions when the skill is active.
Himalaya Email CLI
Section titled “Himalaya Email CLI”Himalaya is a CLI email client that lets you manage emails from the terminal using IMAP, SMTP, Notmuch, or Sendmail backends.
References
Section titled “References”references/configuration.md(config file setup + IMAP/SMTP authentication)references/message-composition.md(MML syntax for composing emails)
Prerequisites
Section titled “Prerequisites”- Himalaya CLI installed (
himalaya --versionto verify) - A configuration file at
~/.config/himalaya/config.toml - IMAP/SMTP credentials configured (password stored securely)
Installation
Section titled “Installation”# Pre-built binary (Linux/macOS — recommended)curl -sSL https://raw.githubusercontent.com/pimalaya/himalaya/master/install.sh | PREFIX=~/.local sh
# macOS via Homebrewbrew install himalaya
# Or via cargo (any platform with Rust)cargo install himalaya --lockedConfiguration Setup
Section titled “Configuration Setup”Run the interactive wizard to set up an account:
himalaya account configureOr create ~/.config/himalaya/config.toml manually:
[accounts.personal]email = "you@example.com"display-name = "Your Name"default = true
backend.type = "imap"backend.host = "imap.example.com"backend.port = 993backend.encryption.type = "tls"backend.login = "you@example.com"backend.auth.type = "password"backend.auth.cmd = "pass show email/imap" # or use keyring
message.send.backend.type = "smtp"message.send.backend.host = "smtp.example.com"message.send.backend.port = 587message.send.backend.encryption.type = "start-tls"message.send.backend.login = "you@example.com"message.send.backend.auth.type = "password"message.send.backend.auth.cmd = "pass show email/smtp"Hermes Integration Notes
Section titled “Hermes Integration Notes”- Reading, listing, searching, moving, deleting all work directly through the terminal tool
- Composing/replying/forwarding — piped input (
cat << EOF | himalaya template send) is recommended for reliability. Interactive$EDITORmode works withpty=true+ background + process tool, but requires knowing the editor and its commands - Use
--output jsonfor structured output that’s easier to parse programmatically - The
himalaya account configurewizard requires interactive input — use PTY mode:terminal(command="himalaya account configure", pty=true)
Common Operations
Section titled “Common Operations”List Folders
Section titled “List Folders”himalaya folder listList Emails
Section titled “List Emails”List emails in INBOX (default):
himalaya envelope listList emails in a specific folder:
himalaya envelope list --folder "Sent"List with pagination:
himalaya envelope list --page 1 --page-size 20Search Emails
Section titled “Search Emails”himalaya envelope list from john@example.com subject meetingRead an Email
Section titled “Read an Email”Read email by ID (shows plain text):
himalaya message read 42Export raw MIME:
himalaya message export 42 --fullReply to an Email
Section titled “Reply to an Email”To reply non-interactively from Hermes, read the original message, compose a reply, and pipe it:
# Get the reply template, edit it, and sendhimalaya template reply 42 | sed 's/^$/\nYour reply text here\n/' | himalaya template sendOr build the reply manually:
cat << 'EOF' | himalaya template sendFrom: you@example.comTo: sender@example.comSubject: Re: Original SubjectIn-Reply-To: <original-message-id>
Your reply here.EOFReply-all (interactive — needs $EDITOR, use template approach above instead):
himalaya message reply 42 --allForward an Email
Section titled “Forward an Email”# Get forward template and pipe with modificationshimalaya template forward 42 | sed 's/^To:.*/To: newrecipient@example.com/' | himalaya template sendWrite a New Email
Section titled “Write a New Email”Non-interactive (use this from Hermes) — pipe the message via stdin:
cat << 'EOF' | himalaya template sendFrom: you@example.comTo: recipient@example.comSubject: Test Message
Hello from Himalaya!EOFOr with headers flag:
himalaya message write -H "To:recipient@example.com" -H "Subject:Test" "Message body here"Note: himalaya message write without piped input opens $EDITOR. This works with pty=true + background mode, but piping is simpler and more reliable.
Move/Copy Emails
Section titled “Move/Copy Emails”Move to folder:
himalaya message move 42 "Archive"Copy to folder:
himalaya message copy 42 "Important"Delete an Email
Section titled “Delete an Email”himalaya message delete 42Manage Flags
Section titled “Manage Flags”Add flag:
himalaya flag add 42 --flag seenRemove flag:
himalaya flag remove 42 --flag seenMultiple Accounts
Section titled “Multiple Accounts”List accounts:
himalaya account listUse a specific account:
himalaya --account work envelope listAttachments
Section titled “Attachments”Save attachments from a message:
himalaya attachment download 42Save to specific directory:
himalaya attachment download 42 --dir ~/DownloadsOutput Formats
Section titled “Output Formats”Most commands support --output for structured output:
himalaya envelope list --output jsonhimalaya envelope list --output plainDebugging
Section titled “Debugging”Enable debug logging:
RUST_LOG=debug himalaya envelope listFull trace with backtrace:
RUST_LOG=trace RUST_BACKTRACE=1 himalaya envelope list- Use
himalaya --helporhimalaya <command> --helpfor detailed usage. - Message IDs are relative to the current folder; re-list after folder changes.
- For composing rich emails with attachments, use MML syntax (see
references/message-composition.md). - Store passwords securely using
pass, system keyring, or a command that outputs the password.