api-and-interface-desi…
Guides stable API and interface design. Use when designing APIs, module boundaries, or any public interface. Use when creating…
Himalaya CLI: IMAP/SMTP email from terminal.
Claude Code
$ npx -y skills add kevinnft/ai-agent-skills --skill himalaya --agent claude-code
Codex
$ npx skills add kevinnft/ai-agent-skills --skill himalaya -a codex -y
Cursor
$ npx skills add kevinnft/ai-agent-skills --skill himalaya -a cursor -y
Gemini CLI
$ npx skills add kevinnft/ai-agent-skills --skill himalaya -a gemini-cli -y
GitHub Copilot
$ npx skills add kevinnft/ai-agent-skills --skill himalaya -a github-copilot -y
OpenCode
$ npx skills add kevinnft/ai-agent-skills --skill himalaya -a opencode -y
Windsurf
$ npx skills add kevinnft/ai-agent-skills --skill himalaya -a windsurf -y
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.
Guides stable API and interface design. Use when designing APIs, module boundaries, or any public interface. Use when creating…
Tests in real browsers. Use when building or debugging anything that runs in a browser. Use when you need to inspect the DOM,…
Automates CI/CD pipeline setup. Use when setting up or modifying build and deployment pipelines. Use when you need to automate…
Conducts multi-axis code review. Use before merging any change. Use when reviewing code written by yourself, another agent, or a…
Simplifies code for clarity. Use when refactoring code for clarity without changing behavior. Use when code works but is harder…
Optimizes agent context setup. Use when starting a new session, when agent output quality degrades, when switching between tasks,…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.