brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
hour-meterTrack elapsed time from a set epoch with tamper-evident locking. Like an analog Hobbs meter but digital. Use for tracking uptime, service hours, time since events, sobriety counters, project duration, equipment runtime. Supports create, lock (seal), check, verify against external hash, list, and export operations.
Independent GitHub snapshot · Automated classification · Original documentation governs
Life event tracker with three modes, milestone notifications, and tamper-evident verification.
# Quit smoking tracker
meter.py create smoke-free --start "2025-06-15T08:00:00Z" -d "Last cigarette"
meter.py milestone smoke-free -t hours -v 720 -m "🎉 30 days smoke-free!"
meter.py lock smoke-free # → Gives you paper code to save
# Baby due date
meter.py create baby --start "2026-01-15" --end "2026-10-15" --mode down -d "Baby arriving!"
meter.py milestone baby -t percent -v 33 -m "👶 First trimester complete!"
# Career span
meter.py create career --start "1998-05-15" --end "2038-05-15" -d "40-year career"
meter.py milestone career -t percent -v 50 -m "📊 Halfway through career!"
meter.py career --meter career --rate 85 --raise-pct 2.5
When you lock a meter, you get a paper code — a short, checksummed code you can write on paper:
╔══════════════════════════════════════════════════════════════╗
║ PAPER CODE (write this down): ║
║ 318B-3229-C523-2F9C-V ║
╚══════════════════════════════════════════════════════════════╝
1️⃣ PAPER — Write the code on paper/sticky note
2️⃣ PHOTO — Screenshot or photograph the lock screen
3️⃣ WITNESS FILE — Auto-saved to ~/.openclaw/meter-witness.txt
4️⃣ EMAIL TO SELF — Click the mailto: link or copy the one-liner
🔒 my-meter | Code: XXXX-XXXX-XXXX-XXXX-C | Locked: 2026-02-025️⃣ SENDGRID EMAIL — Auto-send verification email on lock
# Set your SendGrid API key
export SENDGRID_API_KEY=SG.xxxxx
export SENDGRID_FROM_EMAIL=verified@yourdomain.com
# Lock and email in one command
meter.py lock my-meter --email you@example.com
# With paper code (catches typos!)
meter.py verify my-meter "318B-3229-C523-2F9C-V"
# → ✅ VERIFIED! Paper code matches.
# → ⚠️ CHECKSUM ERROR! (if you have a typo)
# → ❌ MISMATCH! (if tampered)
meter.py milestone <name> --type hours --value 1000 --message "1000 hours!"
meter.py milestone <name> --type percent --value 50 --message "Halfway!"
meter.py check-milestones # JSON output for automation
Get milestone notifications sent directly to your email:
# Create meter with email notifications
meter.py create my-meter \
--notify-email you@example.com \
--from-email verified@yourdomain.com \
-d "My tracked event"
# Add milestones as usual
meter.py milestone my-meter -t hours -v 24 -m "🎉 24 hours complete!"
# When check-milestones runs and a milestone fires, email is sent automatically
meter.py check-milestones
# → Triggers milestone AND sends email notification
Email includes:
Requires SENDGRID_API_KEY environment variable.
Recommended: HEARTBEAT (~30 min resolution)
HEARTBEAT.md: Run meter.py check-milestones and notify triggeredPrefix milestone messages with ACTION: to trigger agent execution instead of just posting:
# Just posts the message
meter.py milestone my-meter -t hours -v 24 -m "🎉 24 hours complete!"
# Triggers agent to EXECUTE the instruction
meter.py milestone my-meter -t hours -v 24 -m "ACTION: Check the weather and post a summary"
Configure in HEARTBEAT.md:
- If message starts with "ACTION:", execute it as an instruction
- Otherwise, post the message to the configured channel
Alternative: CRON (precise timing)
Rule of thumb: If 30-minute resolution is acceptable, use heartbeat. Save cron for precision timing.
meter.py create <name> [--start T] [--end T] [--mode up|down|between] [-d DESC]
meter.py lock <name> # Seal + get paper code
meter.py verify <name> <code> # Verify paper code
meter.py check <name> # Status + progress
meter.py milestone <name> -t hours|percent -v N -m "..."
meter.py check-milestones # All milestones (JSON)
meter.py witness [--show] [--path] # Witness file
meter.py list # All meters
meter.py career [--meter M] [--rate R] [--raise-pct P]
meter.py export [name] # JSON export
Receive real-time notifications when recipients open, click, bounce, or unsubscribe from your meter verification emails.
# Start webhook server with Discord webhook (recommended)
python sendgrid_webhook.py --port 8089 --discord-webhook https://discord.com/api/webhooks/xxx/yyy
# Or process events manually (for agent to post)
python sendgrid_webhook.py --process-events
python sendgrid_webhook.py --process-events --json
--discord-webhook or set DISCORD_WEBHOOK_URL env varhttps://your-domain.com/webhooks/sendgridSENDGRID_WEBHOOK_PUBLIC_KEY
| Event | Emoji | Description |
|---|---|---|
| delivered | ✅ | Email reached recipient |
| open | 👀 | Recipient opened email |
| click | 🔗 | Recipient clicked a link |
| bounce | ⚠️ | Email bounced |
| unsubscribe | 🔕 | Recipient unsubscribed |
| spamreport | 🚨 | Marked as spam |
SENDGRID_WEBHOOK_PUBLIC_KEY # For signature verification (optional)
SENDGRID_WEBHOOK_MAX_AGE_SECONDS # Max timestamp age (default: 300)
WEBHOOK_PORT # Server port (default: 8089)
DISCORD_WEBHOOK_URL # Discord webhook URL
WEBHOOK_LOG_FILE # Log file path
Career as finite inventory: 40 years × 2,000 hrs/year = 80,000 hours.
meter.py career --hours-worked 56000 --rate 85 --raise-pct 2.5
# → 12.3 years remaining, $2.4M earning potential