skills/mail/SKILL.md
Send and receive email via Himalaya CLI for both Zoho ([email protected], work) and Gmail ([email protected], personal). Use when the user wants to send a message, check their inbox, read a specific email, or search mail on either account.
npx skillsauth add asets-gobizit/claude-skills mailInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Wraps the local himalaya CLI (v1.2.0) to let Danny send and receive mail on either his work Zoho account or personal Gmail, all from inside Claude Code. Zero API cost, no MCP servers, no OAuth dance.
| Alias words | Himalaya account name | Email | Role |
|---|---|---|---|
| zoho, work, gobizit, danny | zoho-danny | [email protected] | Work (Go Biz IT) |
| gmail, personal, dansksun, private | gmail | [email protected] | Personal |
If the user doesn't specify an account, ask once which one they mean. Never guess.
Trigger phrases (partial list — be flexible):
Send:
Read/list:
Search:
Read one message:
Build a raw RFC 822 message and pipe it to himalaya message send:
himalaya message send -a <ACCOUNT> <<'EOF'
From: <sender-email>
To: <recipient>
Subject: <subject>
<body>
EOF
Notes:
<ACCOUNT> is zoho-danny or gmail<sender-email> must match the account ([email protected] for zoho-danny; [email protected] for gmail)Cc: [email protected] / Bcc: [email protected] header lines before the blank linehimalaya envelope list -a <ACCOUNT> -p 1 -s <N>
-p 1 → first page; -s 10 → 10 per page (use whatever N the user asks for, default 10)-f <FOLDER> → non-inbox folder (e.g. -f Sent, -f "INBOX/GoBizIT")himalaya envelope list -a <ACCOUNT> <QUERY>
Query syntax is Himalaya's filter language. Common patterns:
from "name" → from a sendersubject "text" → subject contains textbody "text" → body contains textand / orhimalaya message read -a <ACCOUNT> <ID>
<ID> is the envelope ID from the list output--no-headers if the user just wants the body-p (preview) to not mark the message as read"send an email from zoho to [email protected], subject 'test', body 'hello from claude'" → Runs
himalaya message send -a zoho-danny <<'EOF' From: [email protected] / To: [email protected] / Subject: test / (blank) / hello from claude / EOF→ Reports "Sent to [email protected]"
"show my last 5 work emails" →
himalaya envelope list -a zoho-danny -p 1 -s 5→ Returns formatted table
"read email 46533 from zoho" →
himalaya message read -a zoho-danny 46533→ Returns the full message body
"search gmail for invoices" →
himalaya envelope list -a gmail subject "invoice"
C:\Users\dansk\AppData\Roaming\himalaya\config.toml (contains both account blocks with app passwords — NEVER echo the config contents back in chat)imappro.zoho.com:993 / smtppro.zoho.com:465 (Zoho One plan)imap.gmail.com:993 / smtp.gmail.com:465-a <name>. Valid: zoho-danny or gmailbackend.auth.raw + message.send.backend.auth.raw for [accounts.zoho-danny] in config.toml[accounts.gmail]data-ai
Automated backup skill for PKA + Obsidian + Claude memory. Snapshots pka.db (via SQLite .backup so WAL is handled safely), the Obsidian vault, Claude memory files, agent profiles, and the help-content Excel into a single timestamped zip in Zoho WorkDrive. Daily/weekly/monthly retention rotation built in. USE WHEN Danny says "backup", "run backup", "snapshot pka", or to recover from a snapshot.
testing
Run any question, idea, or decision through a council of 5 AI advisors who independently analyze it, peer-review each other anonymously, and synthesize a final verdict. Based on Karpathy's LLM Council methodology, packaged as the stress-test skill. MANDATORY TRIGGERS: 'stress-test this', 'stress test this', 'pressure-test this', 'pressure test this', 'war room this', 'council this', 'run the council', 'debate this'. STRONG TRIGGERS (use when combined with a real decision or tradeoff): 'should I X or Y', 'which option', 'what would you do', 'is this the right move', 'validate this', 'get multiple perspectives', 'I can't decide', 'I'm torn between'. Do NOT trigger on simple yes/no questions, factual lookups, or casual 'should I' without a meaningful tradeoff (e.g. 'should I use markdown' is not a stress-test question). DO trigger when the user presents a genuine decision with stakes, multiple options, and context that suggests they want it pressure-tested from multiple angles.
content-media
Weekly scan of Obsidian vault for empty/low-content notes. Moves them to zToBeDeleted/ for user review. Use when the user says "tidy obsidian", "clean obsidian", "obsidian cleanup", or on scheduled weekly run.
development
Design-first website builder. Accepts a Claude Design export (HTML or screenshot) as a visual blueprint, collects business inputs, calls Claude API to generate a design-matched index.html, and publishes to GitHub Pages. Falls back to vibe-based generation if no design is provided. Use when the user says "make-website-design", "design website", "build from design", or provides a Claude Design export for website generation.