3.0kβ
by rm289
hour-meter β OpenClaw Skill
hour-meter is an OpenClaw Skills integration for writing workflows. 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.
Skill Snapshot
| name | hour-meter |
| description | 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. OpenClaw Skills integration. |
| owner | rm289 |
| repository | rm289/tardis |
| language | Markdown |
| license | MIT |
| topics | |
| security | L1 |
| install | openclaw add @rm289/tardis |
| last updated | Feb 7, 2026 |
Maintainer

name: hour-meter clawhub: tardis description: 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.
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-meterlisting was lost due to a repository sync issue.
Three Modes
COUNT UP β Time since an event
# 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
# 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
# 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
# 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
- Sends a beautifully formatted HTML email with paper code
- Requires a verified sender in SendGrid (see SendGrid docs)
- Great for automated workflows
Verifying Later
# 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
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:
# 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:
- π― 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:
# 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)
- 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
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
# 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)
- In your Discord channel, go to Settings > Integrations > Webhooks
- Click New Webhook, copy the URL
- Pass to
--discord-webhookor setDISCORD_WEBHOOK_URLenv var
SendGrid Setup
- Go to SendGrid > Settings > Mail Settings > Event Webhook
- Click "Create new webhook" (or edit existing)
- Set HTTP POST URL to:
https://your-domain.com/webhooks/sendgrid - 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
- Click "Test Integration" to verify - this fires all event types to your webhook
- Important: Click Save to enable the webhook!
- (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
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 Hours Concept
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
β±οΈ Hour Meter (TARDIS on ClawHub)
Note: This skill was originally published to ClawHub as
hour-meter. Due to a repository issue that caused the original listing to be deleted, it has been republished under the name TARDIS. Same great functionality, cooler name! π
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β βββ βββ βββββββ βββ ββββββββββ β
β βββ βββββββββββββββ βββββββββββ β
β βββββββββββ ββββββ βββββββββββ β
β βββββββββββ ββββββ βββββββββββ β
β βββ ββββββββββββββββββββββββ βββ β
β βββ βββ βββββββ βββββββ βββ βββ β
β ββββ ββββββββββββββββββββββββββββββββββββ β
β βββββ ββββββββββββββββββββββββββββββββββββββ β
β βββββββββββββββββ βββ ββββββ ββββββββ β
β βββββββββββββββββ βββ ββββββ ββββββββ β
β βββ βββ βββββββββββ βββ βββββββββββ βββ β
β βββ βββββββββββ βββ βββββββββββ βββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The moments that matter, measured and verified.
Concept & Design: Ross (@rm289)
Implementation: Claude (OpenClaw Agent)
What is Hour Meter?
Hour Meter is a tamper-evident time tracking skill for OpenClaw. Inspired by the analog Hobbs meters bolted to aircraft engines and industrial equipment, it brings that same reliability to the digital worldβwith cryptographic proof that your timestamps haven't been altered.
πΈ Screenshots
Check a meter's status
β±οΈ Meter: my-career (BETWEEN)
Career: College graduation β Retirement
π Start: 2024-05-15 14:00:00 UTC
π― End: 2064-05-15 14:00:00 UTC
[ββββββββββββββββββββ] 4.3%
β
Elapsed: 628d 1h 52m (15,074 hrs)
β³ Remaining: 13,981d 22h (335,566 hrs)
Milestones:
β 25.0%: π 25% - Establishing expertise
β 50.0%: π HALFTIME - Peak earning years
π LOCKED β (integrity verified)
π Paper code: F99B-C7C1-7F3B-2EDF-F
Lock a meter and get your verification code
π LOCKED: smoke-free
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PAPER CODE (write this down): β
β β
β A7F3-B92C-1D4E-8F6A-7 β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π FOUR WAYS TO SAVE THIS:
1οΈβ£ PAPER: Write the code on paper/sticky note
2οΈβ£ PHOTO: Screenshot this screen
3οΈβ£ WITNESS FILE: Auto-saved to ~/.openclaw/meter-witness.txt
4οΈβ£ EMAIL TO SELF: Click the mailto: link
Career earnings projection
π Career Inventory Projection
Based on: my-career
Started: 2010-05-15
β±οΈ Hours worked: 55,442 hrs (27.7 yrs)
β³ Hours remaining: 24,558 hrs (12.3 yrs)
π¦ Total inventory: 80,000 hrs (40 yrs)
[ββββββββββββββββββββ] 69.3%
π° Current rate: $85.00/hr
π Annual raise: 2.5%
π― REMAINING EARNING POTENTIAL: $2,409,035
β¨ Key Features
Three Ways to Count
| Mode | Use Case | Example |
|---|---|---|
| Count Up | Time since an event | Quit smoking: "142 days clean" |
| Count Down | Time until a deadline | Baby due: "47 days remaining" |
| Count Between | Journey progress | Career: "69% complete, 12 years to retirement" |
π Tamper-Evident Locking
Lock any meter to generate a cryptographic integrity hash. If anyone changes the start date later, verification fails. Trust, but verify.
π Human-Friendly Paper Codes
Forget copying 64-character hex strings. Get a short, checksummed code you can actually write on paper:
PAPER CODE: A7F3-B92C-1D4E-8F6A-7
The checksum catches typos when you verify. Write it on a sticky note, email it to yourself, or let the witness file sync to your cloud storage.
π Milestone Notifications
Set triggers at specific hours or percentages:
- "Notify me at 1,000 hours smoke-free"
- "Alert at 75% of pregnancy complete"
- "Ping when career hits 90%"
Notifications route through any OpenClaw channelβDiscord, Telegram, Signal, Slack, and more.
π§ Email Milestone Notifications (v1.3.0)
Get milestone alerts sent directly to your inbox:
meter.py create my-meter \
--notify-email you@example.com \
-d "Important milestone tracker"
meter.py milestone my-meter -t hours -v 100 -m "π 100 hours reached!"
When milestones fire, you get a beautifully formatted email notification!
π° Career Projection Calculator
Visualize your career as 80,000 hours of inventory (40 years Γ 2,000 hours/year). See your remaining earning potential with compound annual raises.
π Quick Start
# Create a meter
meter.py create smoke-free --start "2025-06-15" -d "Last cigarette"
# Add milestones
meter.py milestone smoke-free -t hours -v 720 -m "π 30 days smoke-free!"
# Lock it (get your paper code)
meter.py lock smoke-free
# Check status anytime
meter.py check smoke-free
# Verify with your paper code
meter.py verify smoke-free "A7F3-B92C-1D4E-8F6A-7"
π¦ Five Ways to Save Your Verification Code
- Paper β Write the code on a sticky note or in a notebook
- Photo β Screenshot or photograph the lock screen
- Witness File β Auto-saved to
~/.openclaw/meter-witness.txt(sync to Dropbox/iCloud) - Email (mailto) β Click the mailto: link or copy the one-liner to send to yourself
- Email (SendGrid) β Auto-send on lock with
--email:export SENDGRID_API_KEY=SG.xxxxx meter.py lock my-meter --email you@example.com
π‘ SendGrid Webhook Server (New in v1.2.0!)
Get real-time notifications when recipients interact with your meter verification emails:
# Start webhook server with Discord webhook
python sendgrid_webhook.py --port 8089 \
--discord-webhook https://discord.com/api/webhooks/xxx/yyy
# Events supported:
# β
delivered - Email reached recipient
# π open - Recipient opened email
# π click - Recipient clicked a link
# β οΈ bounce - Email bounced
# π unsubscribe - Recipient unsubscribed
# π¨ spamreport - Marked as spam
Or process events manually for agent integration:
python sendgrid_webhook.py --process-events --json
SendGrid Configuration

- Go to SendGrid > Settings > Mail Settings > Event Webhook
- Enter your webhook URL:
https://your-server.com/webhooks/sendgrid - Select all event types you want to receive
- Click "Test Integration" to verify all events fire correctly
- Don't forget to click Save!
π― Use Cases
- Quit Tracking β Smoking, drinking, or any habit you're breaking
- Career Planning β Visualize your finite work hours and earning potential
- Pregnancy Countdown β Milestones for each trimester
- Project Hours β Tamper-evident billing records
- Equipment Runtime β Service interval tracking
- Warranty Dates β Locked start dates for disputes
- "Days Since" Displays β Last incident, last deploy, last vacation
π‘ Why Tamper-Evidence Matters
Anyone can edit a text file with a date. Hour Meter creates a cryptographic proof:
- When you lock a meter, it computes
SHA256(name + timestamp + salt) - You save the resulting code externally (paper, email, cloud)
- Later, verify recomputes the hash and compares
If the timestamp was changed, the hashes won't match. Simple, offline-capable, and human-verifiable.
π Documentation
- SKILL.md β OpenClaw skill reference
- WHITEPAPER.md β Technical deep-dive
π License
MIT β Use it, modify it, ship it.
Hour Meter β Because some moments are worth proving. β±οΈ
Permissions & Security
Security level L1: Low-risk skills with minimal permissions. Review inputs and outputs before running in production.
Requirements
- OpenClaw CLI installed and configured.
- Language: Markdown
- License: MIT
- Topics:
FAQ
How do I install hour-meter?
Run openclaw add @rm289/tardis in your terminal. This installs hour-meter into your OpenClaw Skills catalog.
Does this skill run locally or in the cloud?
OpenClaw Skills execute locally by default. Review the SKILL.md and permissions before running any skill.
Where can I verify the source code?
The source repository is available at https://github.com/openclaw/skills/tree/main/skills/rm289/tardis. Review commits and README documentation before installing.
