hour-meter
Track 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.
What this skill does
# Hour Meter (TARDIS on ClawHub) Life event tracker with three modes, milestone notifications, and tamper-evident verification. > **ClawHub Note:** This skill is published as **TARDIS** on ClawHub after the original `hour-meter` listing was lost due to a repository sync issue. ## Three Modes ### COUNT UP โ Time since an event ```bash # 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 ``` ### COUNT DOWN โ Time until an event ```bash # 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!" ``` ### COUNT BETWEEN โ Journey from start to end ```bash # 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 ``` ## Tamper-Evident Persistence 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 โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ ``` ### Four Ways to Save (Non-Technical) **1๏ธโฃ PAPER** โ Write the code on paper/sticky note - 20 characters with dashes, easy to copy - Built-in checksum catches typos when verifying - Keep in wallet, safe, or taped to equipment **2๏ธโฃ PHOTO** โ Screenshot or photograph the lock screen - Store in camera roll, cloud photos - Visual backup, no typing required **3๏ธโฃ WITNESS FILE** โ Auto-saved to `~/.openclaw/meter-witness.txt` - Append-only log of all locked meters - Sync folder to Dropbox/iCloud/Google Drive for cloud backup - Contains paper code + full hash + timestamp **4๏ธโฃ EMAIL TO SELF** โ Click the mailto: link or copy the one-liner - Opens your email client with pre-filled subject and body - Or copy the compact message: `๐ my-meter | Code: XXXX-XXXX-XXXX-XXXX-C | Locked: 2026-02-02` - Send to yourself, search inbox later to verify **5๏ธโฃ SENDGRID EMAIL** โ Auto-send verification email on lock ```bash # Set your SendGrid API key export SENDGRID_API_KEY=SG.xxxxx export [email protected] # Lock and email in one command meter.py lock my-meter --email [email protected] ``` - Sends a beautifully formatted HTML email with paper code - Requires a verified sender in SendGrid (see SendGrid docs) - Great for automated workflows ### Verifying Later ```bash # 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) ``` ## Milestones ```bash 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 ``` ### Email Milestone Notifications (v1.3.0) Get milestone notifications sent directly to your email: ```bash # Create meter with email notifications meter.py create my-meter \ --notify-email [email protected] \ --from-email [email protected] \ -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:** - ๐ฏ Milestone message - โฑ๏ธ Current elapsed time - ๐ Meter description Requires `SENDGRID_API_KEY` environment variable. ### Milestone Notifications: Heartbeat vs Cron **Recommended: HEARTBEAT** (~30 min resolution) - Add to `HEARTBEAT.md`: `Run meter.py check-milestones and notify triggered` - Batches with other periodic checks - Cost-efficient: shares token usage with other heartbeat tasks - Good for most use cases (quit tracking, career milestones, etc.) ### ACTION: Triggers (Agent Automation) Prefix milestone messages with `ACTION:` to trigger agent execution instead of just posting: ```bash # 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: ```markdown - If message starts with "ACTION:", execute it as an instruction - Otherwise, post the message to the configured channel ``` **Alternative: CRON** (precise timing) - Use when exact timing matters (e.g., countdown to event) - โ ๏ธ **Cost warning:** Cron at 1-minute intervals = 1,440 API calls/day = expensive! - If using cron, keep intervals โฅ15 minutes to manage costs - Best for one-shot reminders, not continuous monitoring **Rule of thumb:** If 30-minute resolution is acceptable, use heartbeat. Save cron for precision timing. ## Quick Reference ```bash 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 ``` ## SendGrid Email Webhook Server Receive real-time notifications when recipients open, click, bounce, or unsubscribe from your meter verification emails. ### Setup ```bash # 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 Setup (Recommended) 1. In your Discord channel, go to **Settings > Integrations > Webhooks** 2. Click **New Webhook**, copy the URL 3. Pass to `--discord-webhook` or set `DISCORD_WEBHOOK_URL` env var ### SendGrid Setup 1. Go to **SendGrid > Settings > Mail Settings > Event Webhook** 2. Click **"Create new webhook"** (or edit existing) 3. Set HTTP POST URL to: `https://your-domain.com/webhooks/sendgrid` 4. Select all event types under **Actions to be posted**: - **Engagement data:** Opened, Clicked, Unsubscribed, Spam Reports, Group Unsubscribes, Group Resubscribes - **Deliverability Data:** Processed, Dropped, Deferred, Bounced, Delivered - **Account Data:** Account Status Change 5. Click **"Test Integration"** to verify - this fires all event types to your webhook 6. **Important:** Click **Save** to enable the webhook! 7. (Optional) Enable **Signed Event Webhook** for security and set `SENDGRID_WEBHOOK_PUBLIC_KEY`  ### Event Types | 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 | ### Environment Variables ```bash 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 ``` ## The 80,000
Related in Data & Analytics
clawarr-suite
IncludedComprehensive management for self-hosted media stacks (Sonarr, Radarr, Lidarr, Readarr, Prowlarr, Bazarr, Overseerr, Plex, Tautulli, SABnzbd, Recyclarr, Unpackerr, Notifiarr, Maintainerr, Kometa, FlareSolverr). Deep library exploration, analytics, dashboard generation, content management, request handling, subtitle management, indexer control, download monitoring, quality profile sync, library cleanup automation, notification routing, collection/overlay management, and media tracker integration (Trakt, Letterboxd, Simkl).
querying-soql
IncludedSOQL query generation, optimization, and analysis with 100-point scoring. Use this skill when the user needs SOQL/SOSL authoring or optimization: natural-language-to-query generation, relationship queries, aggregates, query-plan analysis, and performance or safety improvements for Salesforce queries. TRIGGER when: user writes, optimizes, or debugs SOQL/SOSL queries, touches .soql files, or asks about relationship queries, aggregates, or query performance. DO NOT TRIGGER when: bulk data operations (use handling-sf-data), Apex DML logic (use generating-apex), or report/dashboard queries.
app-store-optimization
IncludedApp Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklists, and tracking ranking changes.
habit-flow
IncludedAI-powered atomic habit tracker with natural language logging, streak tracking, smart reminders, and coaching. Use for creating habits, logging completions naturally ("I meditated today"), viewing progress, and getting personalized coaching.
app-store-optimization
IncludedApp Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklists, and tracking ranking changes.
visualizing-data
IncludedBuilds dashboards, reports, and data-driven interfaces requiring charts, graphs, or visual analytics. Provides systematic framework for selecting appropriate visualizations based on data characteristics and analytical purpose. Includes 24+ visualization types organized by purpose (trends, comparisons, distributions, relationships, flows, hierarchies, geospatial), accessibility patterns (WCAG 2.1 AA compliance), colorblind-safe palettes, and performance optimization strategies. Use when creating visualizations, choosing chart types, displaying data graphically, or designing data interfaces.