Skip to content

Himalaya — Himalaya CLI: IMAP/SMTP email from terminal

Himalaya CLI: IMAP/SMTP email from terminal.

SourceBundled (installed by default)
Pathskills/email/himalaya
Version1.0.0
Authorcommunity
LicenseMIT
TagsEmail, IMAP, SMTP, CLI, Communication

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 is a CLI email client that lets you manage emails from the terminal using IMAP, SMTP, Notmuch, or Sendmail backends.

  • references/configuration.md (config file setup + IMAP/SMTP authentication)
  • references/message-composition.md (MML syntax for composing emails)
  1. Himalaya CLI installed (himalaya --version to verify)
  2. A configuration file at ~/.config/himalaya/config.toml
  3. IMAP/SMTP credentials configured (password stored securely)
Окно терминала
# Pre-built binary (Linux/macOS — recommended)
curl -sSL https://raw.githubusercontent.com/pimalaya/himalaya/master/install.sh | PREFIX=~/.local sh
# macOS via Homebrew
brew install himalaya
# Or via cargo (any platform with Rust)
cargo install himalaya --locked

Run the interactive wizard to set up an account:

Окно терминала
himalaya account configure

Or 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 = 993
backend.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 = 587
message.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"
  • 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 $EDITOR mode works with pty=true + background + process tool, but requires knowing the editor and its commands
  • Use --output json for structured output that’s easier to parse programmatically
  • The himalaya account configure wizard requires interactive input — use PTY mode: terminal(command="himalaya account configure", pty=true)
Окно терминала
himalaya folder list

List emails in INBOX (default):

Окно терминала
himalaya envelope list

List emails in a specific folder:

Окно терминала
himalaya envelope list --folder "Sent"

List with pagination:

Окно терминала
himalaya envelope list --page 1 --page-size 20
Окно терминала
himalaya envelope list from john@example.com subject meeting

Read email by ID (shows plain text):

Окно терминала
himalaya message read 42

Export raw MIME:

Окно терминала
himalaya message export 42 --full

To reply non-interactively from Hermes, read the original message, compose a reply, and pipe it:

Окно терминала
# Get the reply template, edit it, and send
himalaya template reply 42 | sed 's/^$/\nYour reply text here\n/' | himalaya template send

Or build the reply manually:

Окно терминала
cat << 'EOF' | himalaya template send
From: you@example.com
To: sender@example.com
Subject: Re: Original Subject
In-Reply-To: <original-message-id>
Your reply here.
EOF

Reply-all (interactive — needs $EDITOR, use template approach above instead):

Окно терминала
himalaya message reply 42 --all
Окно терминала
# Get forward template and pipe with modifications
himalaya template forward 42 | sed 's/^To:.*/To: newrecipient@example.com/' | himalaya template send

Non-interactive (use this from Hermes) — pipe the message via stdin:

Окно терминала
cat << 'EOF' | himalaya template send
From: you@example.com
To: recipient@example.com
Subject: Test Message
Hello from Himalaya!
EOF

Or 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 to folder:

Окно терминала
himalaya message move 42 "Archive"

Copy to folder:

Окно терминала
himalaya message copy 42 "Important"
Окно терминала
himalaya message delete 42

Add flag:

Окно терминала
himalaya flag add 42 --flag seen

Remove flag:

Окно терминала
himalaya flag remove 42 --flag seen

List accounts:

Окно терминала
himalaya account list

Use a specific account:

Окно терминала
himalaya --account work envelope list

Save attachments from a message:

Окно терминала
himalaya attachment download 42

Save to specific directory:

Окно терминала
himalaya attachment download 42 --dir ~/Downloads

Most commands support --output for structured output:

Окно терминала
himalaya envelope list --output json
himalaya envelope list --output plain

Enable debug logging:

Окно терминала
RUST_LOG=debug himalaya envelope list

Full trace with backtrace:

Окно терминала
RUST_LOG=trace RUST_BACKTRACE=1 himalaya envelope list
  • Use himalaya --help or himalaya <command> --help for 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.