Basemail
by @daaab
π¬ BaseMail - Onchain Email for AI Agents on Base. Get yourname@basemail.ai linked to your Basename (.base.eth). SIWE wallet auth, no CAPTCHA, no passwords....
clawhub install basemailπ About This Skill
name: BaseMail description: "π¬ BaseMail - Onchain Email for AI Agents on Base. Get yourname@basemail.ai linked to your Basename (.base.eth). SIWE wallet auth, no CAPTCHA, no passwords. Give your agent a verifiable email identity on Base Chain β register for services, send emails, and receive confirmations autonomously." version: 1.8.0 homepage: https://basemail.ai repository: https://github.com/dAAAb/BaseMail-Skill metadata: openclaw: emoji: "π¬" requires: bins: ["node"] env: ["BASEMAIL_PRIVATE_KEY"] optionalEnv: - BASEMAIL_PASSWORD - BASEMAIL_TOKEN primaryEnv: "BASEMAIL_PRIVATE_KEY" install: - id: npm-deps kind: npm label: "Install BaseMail dependencies (ethers)" notes: > BASEMAIL_PRIVATE_KEY is required only for initial registration (wallet signing via SIWE). After registration, most operations (send, inbox) use the cached token (~/.basemail/token.json). Alternatively, use --wallet /path/to/key or managed mode (setup.js --managed) instead of the env var. No financial transactions are performed β this skill only signs authentication messages, never sends funds.
π¬ BaseMail - Onchain Email for AI Agents on Base
> Your agent gets a real email address, linked to its onchain identity. No human needed.
TL;DR: Own a Basename (yourname.base.eth)? Get yourname@basemail.ai instantly. Sign with your Base wallet, send emails autonomously.
Why BaseMail?
.base.eth holders get matching @basemail.ai addresses automaticallyBaseMail gives AI agents verifiable email identities on Base Chain:
yourname.base.eth β yourname@basemail.ai0xwallet@basemail.aiHow it works
Base Wallet β SIWE Signature β BaseMail Registration β yourname@basemail.ai
β β
Basename (.base.eth) Send & receive email autonomously
π 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 BASEMAIL_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
> β Always encrypted β Private key protected with AES-256-GCM > - You'll set a password during setup (min 8 chars, must include letter + number) > - Password required each time you use the wallet > - Mnemonic displayed once for manual backup (never saved to file) > - Password input is masked (hidden) in terminal
β οΈ Security Guidelines
1. Never commit private keys to git
2. Never share private keys or mnemonics publicly
3. Never add ~/.basemail/ to version control
4. Private key files should be chmod 600 (owner read/write only)
5. Prefer environment variables (Option A) over file storage
6. --wallet paths are validated: must be under $HOME, no traversal, max 1KB file size
7. Private key format is validated (0x + 64 hex chars) before use
8. Password input is masked in terminal (characters hidden)
9. This skill only signs SIWE authentication messages β it never sends funds or on-chain transactions
Recommended .gitignore
# BaseMail - NEVER commit!
.basemail/
**/private-key.enc
π Quick Start
1οΈβ£ Register
# Using environment variable
export BASEMAIL_PRIVATE_KEY="0x..."
node scripts/register.jsOr with Basename
node scripts/register.js --basename yourname.base.eth
2οΈβ£ Send Email
node scripts/send.js "friend@basemail.ai" "Hello!" "Nice to meet you π¦"
3οΈβ£ Check Inbox
node scripts/inbox.js # List emails
node scripts/inbox.js # Read specific email
π¦ Scripts
| Script | Purpose | Needs Private Key |
|--------|---------|-------------------|
| setup.js | Show help | β |
| setup.js --managed | Generate wallet (always encrypted) | β |
| register.js | Register email address | β
|
| send.js | Send email | β (uses token) |
| inbox.js | Check inbox | β (uses token) |
| audit.js | View audit log | β |
π File Locations
~/.basemail/
βββ private-key.enc # Encrypted private key (AES-256-GCM, chmod 600)
βββ wallet.json # Wallet info (public address only)
βββ token.json # Auth token (chmod 600)
βββ audit.log # Operation log (no sensitive data)
π¨ Get a Basename-Linked Email
Want yourname@basemail.ai instead of 0x...@basemail.ai?
1. Register a Basename (.base.eth) at https://www.base.org/names
2. Link it: node scripts/register.js --basename yourname.base.eth
Your Basename is your onchain identity on Base β and BaseMail turns it into a working email address.
π§ API Reference
| Endpoint | Method | Purpose |
|----------|--------|---------|
| /api/auth/start | POST | Start SIWE auth |
| /api/auth/verify | POST | Verify wallet signature |
| /api/register | POST | Register email |
| /api/register/upgrade | PUT | Upgrade to Basename |
| /api/send | POST | Send email |
| /api/inbox | GET | List inbox |
| /api/inbox/:id | GET | Read email content |
Full docs: https://api.basemail.ai/api/docs
π Links
π Changelog
v1.8.0 (2026-02-18)
v1.7.0 (2026-02-18)
BASEMAIL_PRIVATE_KEY in requires.env
- Password input now masked in terminal (characters hidden as *)
- Stronger password requirements: min 8 chars, must include letter + number
- --wallet path validation: must be under $HOME, no .. traversal, max 1KB, regular file only
- Private key format validation (0x + 64 hex chars) on all input sources
- Removed --no-encrypt option β managed wallets are always encrypted
- Mnemonic is displayed once and never saved to file (removed save-to-file prompt)
- Removed legacy plaintext key file references
notes in metadata clarifying: this skill only signs SIWE messages, never sends fundsv1.4.0 (2026-02-08)
v1.1.0 (2026-02-08)
v1.6.0 (Security Update)
--managed now encrypts by default