
Himalaya Email CLI
FreeManage your emails directly from the terminal.
Free · Opens the source repo
What Himalaya Email CLI does
Himalaya is a command-line interface (CLI) email client designed for users who prefer managing their emails through terminal commands. It supports IMAP and SMTP protocols, allowing you to read, send, and organize your emails without needing a graphical user interface. This skill is particularly useful for developers and system administrators who work in terminal environments and want to integrate email management into their workflows seamlessly.
To use Himalaya, you must have the Himalaya CLI installed and properly configured with your email account settings. The configuration file allows you to set up multiple accounts, specify server details, and manage folder aliases, which is essential for services like Gmail that use non-standard folder names. Once set up, you can perform various operations such as listing emails, reading messages, composing replies, and managing email folders directly from the command line.
Himalaya also supports advanced features like searching for emails based on various criteria, moving or copying messages between folders, and managing email flags. The ability to compose emails using piped input or through a text editor enhances flexibility, making it easier to integrate email functionalities into scripts or automated workflows. This skill is ideal for users who are comfortable with command-line tools and wish to streamline their email management processes without relying on traditional email clients.
While Himalaya provides a powerful way to manage emails, it does require some initial setup, including the installation of the CLI and configuration of email credentials. Users should also be comfortable with terminal commands and the potential need to troubleshoot configuration issues, especially with folder aliases and server settings.
When to use it
Use Himalaya when you want to manage your emails efficiently from the terminal, especially if you prefer scripting or automation.
When not to use it
This tool is not suitable for users who require a graphical interface or those unfamiliar with command-line operations.
What you can build with it
Automate Email Notifications
Integrate Himalaya into your scripts to send automated email notifications directly from your terminal.
Quick Email Access
Use Himalaya to quickly check and respond to emails without leaving your terminal environment.
Manage Multiple Accounts
Efficiently handle multiple email accounts from one CLI tool, making it easier to switch contexts.
How to install Himalaya Email CLI
View source1. Install with the skills CLI
npx skills add nousresearch/hermes-agent/himalaya --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by nousresearchHimalaya Email CLI
Himalaya is a CLI email client that lets you manage emails from the terminal using IMAP, SMTP, Notmuch, or Sendmail backends.
This skill is separate from the Hermes Email gateway adapter. The gateway
adapter lets people email the agent and uses Hermes' built-in IMAP/SMTP
adapter; this skill lets the agent operate a mailbox from terminal tools and
requires the external himalaya CLI.
References
references/configuration.md(config file setup + IMAP/SMTP authentication)references/message-composition.md(MML syntax for composing emails)
Prerequisites
- Himalaya CLI installed (
himalaya --versionto verify) - A configuration file at
~/.config/himalaya/config.toml - IMAP/SMTP credentials configured (password stored securely)
Installation
# 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
Configuration Setup
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"
# Folder aliases (himalaya v1.2.0+ syntax). Required whenever the
# server's folder names don't match himalaya's canonical names
# (inbox/sent/drafts/trash). Gmail is the common case — see
# `references/configuration.md` for the `[Gmail]/Sent Mail` mapping.
folder.aliases.inbox = "INBOX"
folder.aliases.sent = "Sent"
folder.aliases.drafts = "Drafts"
folder.aliases.trash = "Trash"
Heads up on the alias syntax. Pre-v1.2.0 docs used a
[accounts.NAME.folder.alias]sub-section (singularalias). v1.2.0 silently ignores that form — TOML parses fine, but the alias resolver never reads it, so every lookup falls through to the canonical name. On Gmail this means save-to-Sent fails after SMTP delivery succeeds, andhimalaya message sendexits non-zero. Any caller (agent, script, user) that retries on that exit code will re-run the entire send — including SMTP — producing duplicate emails to recipients. Always usefolder.aliases.X(plural, dotted keys, directly under[accounts.NAME]).
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
List Folders
himalaya folder list
List Emails
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
Search Emails
himalaya envelope list from john@example.com subject meeting
Read an Email
Read email by ID (shows plain text):
himalaya message read 42
Export raw MIME:
himalaya message export 42 --full
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 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
Forward an Email
# Get forward template and pipe with modifications
himalaya template forward 42 | sed 's/^To:.*/To: newrecipient@example.com/' | himalaya template send
Write a New Email
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/Copy Emails
Move to folder (target folder comes first, then the message ID):
himalaya message move "Archive" 42
Copy to folder (target folder comes first, then the message ID):
himalaya message copy "Important" 42
Delete an Email
himalaya message delete 42
Manage Flags
Add flag:
himalaya flag add 42 --flag seen
Remove flag:
himalaya flag remove 42 --flag seen
Multiple Accounts
List accounts:
himalaya account list
Use a specific account:
himalaya --account work envelope list
Attachments
Save attachments from a message:
himalaya attachment download 42
Save to specific directory:
himalaya attachment download 42 --downloads-dir ~/Downloads
Output Formats
Most commands support --output for structured output:
himalaya envelope list --output json
himalaya envelope list --output plain
Debugging
Enable debug logging:
RUST_LOG=debug himalaya envelope list
Full trace with backtrace:
RUST_LOG=trace RUST_BACKTRACE=1 himalaya envelope list
Tips
- 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.
Frequently asked questions about Himalaya Email CLI
Similar skills
Invoice Chase
Automate overdue invoice reminders with personalized tones.
Roundup Setup
Personalize your status updates with ease.
Ticket Deflector
Streamline customer support responses with ease.
Orbit Gmail Briefing
Streamline your Gmail inbox with automated daily digests.
Email Sequence
Design and draft complete email sequences effortlessly.
Inbox Triage
Automate your email management with intelligent triage.
