Skip to main content

Track AI coding agent usage across Claude Code, Codex, Gemini CLI, and OpenCode

Project description

vibe-clock

简体中文 | 日本語 | Español

WakaTime for AI coding agents. Track usage across Claude Code, Codex, and OpenCode — then show it off on your GitHub profile.

License: MIT Python 3.10+ GitHub stars

Vibe Clock Stats

Model Usage Token Usage by Model

Activity by Hour Activity by Day of Week


Quick Start

pip install vibe-clock
vibe-clock init          # auto-detects agents, sets up config
vibe-clock summary       # see your stats in the terminal

Privacy & Security

Your code never leaves your machine. vibe-clock reads only session metadata (timestamps, token counts, model names) from local JSONL logs. Before anything is pushed:

  1. Sanitizer strips all PII — file paths, project names, usernames, and code are removed (sanitizer.py)
  2. Projects are anonymized — real names become "Project A", "Project B"
  3. --dry-run lets you inspect exactly what will be pushed before it goes anywhere

What is pushed (to your own public gist):

  • Session counts, message counts, durations
  • Token usage totals per model
  • Model and agent names
  • Daily activity aggregates

What is NEVER pushed: file paths, project names, message content, code snippets, git info, or any PII.

Configurable Charts

Generate only the charts you want with --type:

vibe-clock render --type card,donut           # just these two
vibe-clock render --type all                  # all 7 charts (default)
Chart File Description
card vibe-clock-card.svg Summary stats card
heatmap vibe-clock-heatmap.svg Daily activity heatmap
donut vibe-clock-donut.svg Model usage breakdown
bars vibe-clock-bars.svg Project session bars
token_bars vibe-clock-token-bars.svg Token usage by model
hourly vibe-clock-hourly.svg Activity by hour of day
weekly vibe-clock-weekly.svg Activity by day of week

GitHub Actions Setup

Add to your <username>/<username> profile repo to auto-update SVGs daily.

1. Push your stats

vibe-clock push          # creates a public gist with sanitized data
# Note the gist ID printed

2. Add the secret

In your profile repo: Settings → Secrets → Actions → add:

  • VIBE_CLOCK_GIST_ID — the gist ID from step 1

3. Create the workflow

.github/workflows/vibe-clock.yml:

name: Update Vibe Clock Stats

on:
  workflow_dispatch:

jobs:
  update:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: dexhunter/vibe-clock@v1.3.0
        with:
          gist_id: ${{ secrets.VIBE_CLOCK_GIST_ID }}

4. Add SVGs to your README

<img src="images/vibe-clock-card.svg" alt="Vibe Clock Stats" />
<img src="images/vibe-clock-heatmap.svg" alt="Activity Heatmap" />
<img src="images/vibe-clock-donut.svg" alt="Model Usage" />
<img src="images/vibe-clock-bars.svg" alt="Projects" />

5. Run it

Go to Actions tab → "Update Vibe Clock Stats" → Run workflow

Action Inputs

Input Default Description
gist_id required Gist ID containing vibe-clock-data.json
theme dark dark or light
output_dir ./images Where to write SVG files
chart_types all Comma-separated: card,heatmap,donut,bars,token_bars,hourly,weekly or all
commit true Auto-commit generated SVGs
commit_message chore: update vibe-clock stats Commit message

How it works

You (local)                    GitHub
─────────                      ──────
vibe-clock push  ──▶  Gist (sanitized JSON)
                     │
                     └──▶  workflow_dispatch
                              │
                       fetch gist JSON
                       generate SVGs
                       commit to profile repo

Supported Agents

Agent Log Location Status
Claude Code ~/.claude/ Supported
Codex ~/.codex/ Supported
Gemini CLI ~/.gemini/ Supported
OpenCode ~/.local/share/opencode/ Supported

Commands

Command Description
vibe-clock init Interactive setup — detects agents, asks for GitHub token
vibe-clock summary Rich terminal summary of usage stats
vibe-clock status Show current configuration and connection status
vibe-clock render Generate SVG visualizations locally
vibe-clock export Export raw stats as JSON
vibe-clock push Push sanitized stats to a GitHub gist and trigger profile repo render
vibe-clock push --dry-run Preview what would be pushed
vibe-clock schedule Auto-schedule periodic push (launchd / systemd / cron)
vibe-clock unschedule Remove the scheduled push task

Configuration

Config file: ~/.config/vibe-clock/config.toml

Environment variable overrides:

  • GITHUB_TOKEN — GitHub PAT with gist scope
  • VIBE_CLOCK_GIST_ID — Gist ID for push/pull
  • VIBE_CLOCK_DAYS — Number of days to aggregate

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vibe_clock-1.4.0.tar.gz (75.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vibe_clock-1.4.0-py3-none-any.whl (36.1 kB view details)

Uploaded Python 3

File details

Details for the file vibe_clock-1.4.0.tar.gz.

File metadata

  • Download URL: vibe_clock-1.4.0.tar.gz
  • Upload date:
  • Size: 75.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for vibe_clock-1.4.0.tar.gz
Algorithm Hash digest
SHA256 419774eff065e254053e9f4a97f43f2c81479a934722d1242399897bd91122dc
MD5 ec9838d44a2ec3ac3bd78fb9f6177fdb
BLAKE2b-256 7f46c4efd4151dac3e3be3df4d36e321d0d9307c8625caa5d4a91e397ce2654d

See more details on using hashes here.

File details

Details for the file vibe_clock-1.4.0-py3-none-any.whl.

File metadata

  • Download URL: vibe_clock-1.4.0-py3-none-any.whl
  • Upload date:
  • Size: 36.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for vibe_clock-1.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 631c8a5071c72949f5ff7be062d608c70ced276f2f8a28a0d6758b1b79e9397d
MD5 644ba8c6f61225d86d3f4f43756fdb50
BLAKE2b-256 87b5ef97265f66d9895ce435f3b2681390b3f64d27d0057a5d67aef7771d73fa

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page