Skip to main content
Commands, package names, and image names on this page come from the open-source project that Mibyan Desktop is built on, and can differ from the Mibyan Desktop installer. For the supported Mibyan install and update path, see Install and update.
Himalaya CLI: IMAP/SMTP email from terminal.

Skill metadata

Reference: full SKILL.md

The following is the complete skill definition that Mibyan loads when this skill is triggered. This is what the agent sees as instructions when the skill is active.

Himalaya 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 Mibyan Email gateway adapter. The gateway adapter lets people email the agent and uses Mibyan’ 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

  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)

Installation

Configuration Setup

Run the interactive wizard to set up an account:
Or create ~/.config/himalaya/config.toml manually:
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]).

Mibyan 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 $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)

Common Operations

List Folders

List Emails

List emails in INBOX (default):
List emails in a specific folder:
List with pagination:

Search Emails

Read an Email

Read email by ID (shows plain text):
Export raw MIME:

Reply to an Email

To reply non-interactively from Mibyan, read the original message, compose a reply, and pipe it:
Or build the reply manually:
Reply-all (interactive — needs $EDITOR, use template approach above instead):

Forward an Email

Write a New Email

Non-interactive (use this from Mibyan) — pipe the message via stdin:
Or with headers flag:
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):
Copy to folder (target folder comes first, then the message ID):

Delete an Email

Manage Flags

Add flag:
Remove flag:

Multiple Accounts

List accounts:
Use a specific account:

Attachments

Save attachments from a message:
Save to specific directory:

Output Formats

Most commands support --output for structured output:

Debugging

Enable debug logging:
Full trace with backtrace:

Tips

  • 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.