NadMail
Skill2 starsChanged 8 months agoMITView on GitHub
π¬ NadMail - Email for AI Agents based on .nad domains. Give your agent a real email (yourname@nadmail.ai). Register for services, submit forms, receive confirmations β without bothering your human. No CAPTCHA, no passwords, just wallet signature.
We split this skill into the rules it gives an agent
14 rules. About 0 are common, 8 are distinctive, and 6 are very specific to this project.
β0
Common Β· estimate
Many files like this have a rule of this kind.
β8
Distinctive Β· estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 18
Prefer Option A (env var) so no key is written to disk
- Distinctive: line 49
If you already have a wallet, just set the env var β no private key stored to file:
- Distinctive: line 94
Never: commit private keys to git
- Very specific: line 96
Never: add ~/.nadmail/ to version control
- Distinctive: line 98
Prefer environment variables (Option A) over file storage
- Very specific: line 251
Make sure NADMAIL_PRIVATE_KEY is set, or
- Very specific: line 253
Run node setup.js --managed to generate one
- Very specific: line 256
Run node register.js again to refresh token
- Distinctive: line 259
Check if recipient email exists
- Distinctive: line 260
Verify token is still valid
- Distinctive: line 264
Make sure your private key is correct
- Distinctive: line 265
Check wallet has some ETH for signing (gas not needed for signing)
- Very specific: line 279
Heartbeat Integration: Use inbox.js in your heartbeat checks
- Very specific: line 282
Audit Trail: All operations logged to ~/.nadmail/audit.log
β βCommonβ is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. βVery specificβ is our guess from the words: it names a file, a command, a setting or the project itself.
Files
π¬ NadMail - Email for AI Agents
Your agent can handle its own email on the Nad ecosystem. No need to bother your human.
TL;DR: Get yourname@nadmail.ai with your .nad domain. Sign with wallet, send instantly.
Security scan notes (why ClawHub may flag this)
This skill handles private keys (for SIWE signing) and can trigger onβchain transactions (micro-buys / emo-buy). That is expected for NadMail, but it can look suspicious to automated scanners.
To reduce risk:
- Requires Node.js >= 18
- Prefer Option A (env var) so no key is written to disk
- Managed wallet mode stores the private key encrypted only (AES-256-GCM); plaintext storage is not supported
- Mnemonic is not shown by default (opt-in via
--show-mnemonic) and is never written to disk - Emo-buy requires explicit confirmation (or
--yes) and has a daily cap (default 0.5 MON/day)
Why NadMail?
- Autonomous registration β Sign up for services, events, newsletters without human help
- Form submissions β Your agent can receive confirmation emails directly
- No CAPTCHA β Wallet signature = proof of identity
- No passwords β Cryptographic auth only
- .nad ecosystem β Native email service for the Nad ecosystem
NadMail gives AI agents verifiable email identities:
- β¨ .nad domain holders β
yourname@nadmail.ai - π Others β
handle@nadmail.aior0xwallet@nadmail.ai
Environment Variables
NADMAIL_PRIVATE_KEY(required forregister.js, recommended: pass via env var)NADMAIL_PASSWORD(optional; used to decrypt~/.nadmail/private-key.encwithout prompting)NADMAIL_TOKEN(optional; overrides~/.nadmail/token.jsonforsend.js/inbox.js)NADMAIL_EMO_DAILY_CAP(optional; default0.5; max MON/day for emo-buy spending)NADMAIL_SHOW_MNEMONIC(optional; set1to print mnemonic in managed setup)
π Wallet Setup (Choose One)
Option A: Environment Variable (Recommended β )
If you already have a wallet, just set the env var β no private key stored to file:
export NADMAIL_PRIVATE_KEY="0x..."
node scripts/register.jsβ Safest method: private key exists only in memory.
Option B: Specify Wallet Path
Point to your existing private key file:
node scripts/register.js --wallet /path/to/your/private-keyβ Uses your existing wallet, no copying.
Option C: Managed Mode (Beginners)
Let the skill generate and manage a wallet for you:
node scripts/setup.js --managed
node scripts/register.jsβ Default: Encrypted β Private key protected with AES-256-GCM
- You'll set a password during setup
- Password required each time you use the wallet
- Mnemonic is opt-in (
--show-mnemonic) and never written to disk
Managed Wallet Storage
Managed mode always stores the private key encrypted (AES-256-GCM). Plaintext storage has been removed.
β οΈ Security Guidelines
- Never commit private keys to git
- Never share private keys or mnemonics publicly
- Never add
~/.nadmail/to version control - Private key files should be chmod
600(owner read/write only) - Prefer environment variables (Option A) over file storage
Recommended .gitignore
# NadMail - NEVER commit!
.nadmail/
**/private-key
**/private-key.enc
*.mnemonic
*.mnemonic.backupπ Quick Start
1οΈβ£ Register
# Using environment variable
export NADMAIL_PRIVATE_KEY="0x..."
node scripts/register.js
# Or with custom handle
node scripts/register.js --handle yourname2οΈβ£ Send Email
node scripts/send.js "friend@nadmail.ai" "Hello!" "Nice to meet you π¦"3οΈβ£ Check Inbox
node scripts/inbox.js # List emails
node scripts/inbox.js <email_id> # Read specific emailπ¦ Scripts
| Script | Purpose | Needs Private Key |
setup.js | Show help | β |
setup.js --managed | Generate wallet (encrypted by default) | β |
setup.js --managed | Generate wallet (encrypted, AES-256-GCM) | β |
register.js | Register email address | β |
send.js | Send email | β (uses token) |
inbox.js | Check inbox | β (uses token) |
π File Locations
~/.nadmail/
βββ private-key.enc # Encrypted private key (default, chmod 600)
# (plaintext private-key file removed)
βββ wallet.json # Wallet info (public address only)
βββ token.json # Auth token (chmod 600)
# mnemonic.backup is not created (mnemonic is never written to disk)
βββ audit.log # Operation log (no sensitive data)π¨ Get a Pretty Email
Want yourname@nadmail.ai instead of 0x...@nadmail.ai?
- Get a .nad domain
- Run:
node scripts/register.js --handle yourname
π§ API Reference
Authentication Flow (SIWE)
// 1. Start auth
POST /api/auth/start
{ "address": "0x..." }
β { "message": "Sign in with Ethereum..." }
// 2. Sign message with wallet
const signature = wallet.signMessage(message);
// 3. Register agent (key difference from BaseMail!)
POST /api/auth/agent-register
{
"address": "0x...",
"message": "...",
"signature": "...",
"handle": "yourname"
}
β { "token": "...", "email": "yourname@nadmail.ai" }Email Operations
| Endpoint | Method | Purpose |
/api/auth/start | POST | Start SIWE auth |
/api/auth/agent-register | POST | Register agent with wallet signature |
/api/send | POST | Send email |
/api/inbox | GET | List inbox |
/api/inbox/:id | GET | Read email content |
Note: Send endpoint may vary. The script tries multiple endpoints (/api/send, /api/mail/send) for compatibility.
π Key Differences from BaseMail
- Authentication endpoint: Uses
/api/auth/agent-register(not/api/auth/verify) - Config directory:
~/.nadmail/(not~/.basemail/) - Environment variable:
NADMAIL_PRIVATE_KEY(notBASEMAIL_PRIVATE_KEY) - Email domain:
@nadmail.ai(not@basemail.ai) - Handle parameter: Required during registration
- Ecosystem: Part of the Nad ecosystem (.nad domains)
π Links
- Website: https://nadmail.ai
- API: https://api.nadmail.ai
- Get .nad domain: (Check Nad ecosystem documentation)
π Changelog
v1.0.0 (2026-02-09)
- π Initial release based on BaseMail architecture
- π SIWE authentication with agent-register endpoint
- π§ Send and receive emails
- π Encrypted private key storage
- π Audit logging
- π¦ AI agent optimized
π Troubleshooting
Common Issues
"ζΎδΈε°ι’ε "
- Make sure
NADMAIL_PRIVATE_KEYis set, or - Use
--wallet /path/to/key, or - Run
node setup.js --managedto generate one
"Token ιζ"
- Run
node register.jsagain to refresh token
"ηΌιε€±ζ"
- Check if recipient email exists
- Verify token is still valid
- Try registering again if needed
"Authentication failed"
- Make sure your private key is correct
- Check wallet has some ETH for signing (gas not needed for signing)
Debug Mode
Set environment variable for more details:
export DEBUG=1
node scripts/send.js ...π‘ Usage Tips
- Heartbeat Integration: Use
inbox.jsin your heartbeat checks - Token Caching: Tokens are automatically cached and reused
- Multiple Endpoints: Send script tries multiple API endpoints for reliability
- Audit Trail: All operations logged to
~/.nadmail/audit.log - Handle Selection: Choose a memorable handle during registration
In this repository14 other files it gives its agents.
- BaseMailSkill
- basename-agentSkill
- base-walletSkill
- daily-voice-quoteSkill
- ethermailSkill
- heygenSkill
- ia-presenterSkill
- moltbookSkill
- NadName AgentSkill
- nad-walletSkill
- podcast-summarizerSkill
- switchbotSkill
- virtuals-protocol-acpSkill
- walletconnect-agentSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

