api-and-interface-desi…
Guides stable API and interface design. Use when designing APIs, module boundaries, or any public interface. Use when creating REST or GraphQL endpoints,…
Himalaya CLI: IMAP/SMTP email from terminal.
$ npx -y skills add kevinnft/ai-agent-skills --skill himalaya --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/himalayaContext preview
The summary Claude sees to decide when to auto-load this skill.
Himalaya CLI: IMAP/SMTP email from terminal.
name: himalaya
description: "Himalaya CLI: IMAP/SMTP email from terminal."
version: 1.1.0
author: community
license: MIT
metadata:
hermes:
tags: [Email, IMAP, SMTP, CLI, Communication]
homepage: https://github.com/pimalaya/himalaya
prerequisites:
commands: [himalaya]
origin: original
source_repo: kevinnft/ai-agent-skills
source_url: https://github.com/kevinnft/ai-agent-skills
source_license: MIT
language: enHimalaya is a CLI email client that lets you manage emails from the terminal using IMAP, SMTP, Notmuch, or Sendmail backends.
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" # 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 (singular `alias`). > 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, and `himalaya message send` exits 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 use `folder.aliases.X` (plural, dotted > keys, directly under `[accounts.NAME]`).
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 a
191 attribution-first agent skills for Hermes Agent, Claude Code, Cursor — one installer, 28 categories, searchable catalog. See NOTICE for upstream attribution.
Repo: kevinnft/ai-agent-skills
Guides stable API and interface design. Use when designing APIs, module boundaries, or any public interface. Use when creating REST or GraphQL endpoints,…
Tests in real browsers. Use when building or debugging anything that runs in a browser. Use when you need to inspect the DOM, capture console errors, analyze…
Automates CI/CD pipeline setup. Use when setting up or modifying build and deployment pipelines. Use when you need to automate quality gates, configure test…
Conducts multi-axis code review. Use before merging any change. Use when reviewing code written by yourself, another agent, or a human. Use when you need to…
Simplifies code for clarity. Use when refactoring code for clarity without changing behavior. Use when code works but is harder to read, maintain, or extend…
Optimizes agent context setup. Use when starting a new session, when agent output quality degrades, when switching between tasks, or when you need to configure…