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.
This skill has safety concerns that you should review before use. Some patterns were detected that may pose a risk.Safety score: 75/100.
KillerSkills scans all public content for safety. Use caution before installing or executing flagged content.
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.
```bash
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
```
```bash
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!"
```
```bash
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
**5ļøā£ SENDGRID EMAIL** ā Auto-send verification email on lock
```bash
export SENDGRID_API_KEY=SG.xxxxx
export [email protected]
meter.py lock my-meter --email [email protected]
```
```bash
meter.py verify my-meter "318B-3229-C523-2F9C-V"
```
```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
```
Get milestone notifications sent directly to your email:
```bash
meter.py create my-meter \
--notify-email [email protected] \
--from-email [email protected] \
-d "My tracked event"
meter.py milestone my-meter -t hours -v 24 -m "š 24 hours complete!"
meter.py check-milestones
```
**Email includes:**
Requires `SENDGRID_API_KEY` environment variable.
**Recommended: HEARTBEAT** (~30 min resolution)
Milestones post their message text to the configured notification channel when triggered:
```bash
meter.py milestone my-meter -t hours -v 24 -m "š 24 hours complete!"
```
Configure in HEARTBEAT.md:
```markdown
```
> **Advanced:** Milestone messages prefixed with `ACTION:` can optionally be treated as agent instructions by your heartbeat config. This is an opt-in feature ā see README.md for security considerations.
**Alternative: CRON** (precise timing)
**Rule of thumb:** If 30-minute resolution is acceptable, use heartbeat. Save cron for precision timing.
```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
```
Receive real-time notifications when recipients open, click, bounce, or unsubscribe from your meter verification emails.
```bash
python sendgrid_webhook.py --port 8089 --discord-webhook https://discord.com/api/webhooks/xxx/yyy
python sendgrid_webhook.py --process-events
python sendgrid_webhook.py --process-events --json
```
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
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 | 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 |
```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
```
Career as finite inventory: 40 years Ć 2,000 hrs/year = 80,000 hours.
```bash
meter.py career --hours-worked 56000 --rate 85 --raise-pct 2.5
```
Leave a review
No reviews yet. Be the first to review this skill!
# Download SKILL.md from killerskills.ai/api/skills/hour-meter-n0tzs5/raw