Local-first time tracking for AI coding agents.
VibeTime runs quietly in the menu bar and records coding sessions from Claude Code, Codex, Cursor, Gemini CLI, and OpenCode. It is built for answering a simple question well: where did my agent-assisted work time go today?
- Tracks agent sessions and turns locally with SQLite.
- Shows today's live activity, completed work, and active turns.
- Provides history views with contribution-style heatmaps and useful project breakdowns.
- Installs and removes hooks for Claude Code, Codex, Cursor, Gemini CLI, and OpenCode from the app settings.
- Tracks token usage and estimated cost for Claude Code, Codex, and OpenCode from local transcript/database sources.
- Keeps data on your machine. No account, cloud sync, or hosted backend is required.
- Ships a small CLI through
~/.vibetime/bin/vibetimefor local checks, exports, and hook health diagnostics.
| Agent | Activity hooks | Usage/cost |
|---|---|---|
| Claude Code | Yes | Yes |
| Codex | Yes | Yes |
| Cursor | Yes | No |
| Gemini CLI | Yes | No |
| OpenCode | Yes | Yes |
Download the latest build from GitHub Releases.
- macOS Apple Silicon: download the latest
.dmg - Windows x64: download the latest setup
.exe
- Download the latest macOS
.dmgfrom Releases. - Open the DMG and drag
VibeTime.appto/Applications. - Launch VibeTime.
- Open Settings and enable the agents you want to track.
The app is not notarized yet, so macOS may require right-clicking VibeTime.app
and choosing Open on first launch.
- Download the latest Windows x64 setup
.exefrom Releases. - Run the installer.
- Open Settings and enable the agents you want to track.
Windows support currently targets x64.
VibeTime installs three Codex hooks:
SessionStartUserPromptSubmitStop
Codex may require one manual review step after installation. If Codex shows a
message like hooks need review, open /hooks in Codex and approve the VibeTime
hooks. This is Codex's safety boundary; VibeTime does not bypass it.
VibeTime uses Codex's current inline config.toml hook format.
VibeTime installs a managed OpenCode plugin at ~/.config/opencode/plugins/vibetime.js.
The plugin forwards session and message lifecycle events to the local VibeTime hook and
does not forward prompt or response text. Usage is read from OpenCode's local
opencode.db.
Claude Code, Cursor, and Gemini CLI hooks can be installed or removed from VibeTime Settings. VibeTime preserves unrelated user hooks. Claude Code usage scanning is supported; Cursor and Gemini CLI usage scanning is intentionally not enabled yet.
VibeTime stores data under:
~/.vibetime/data.db~/.vibetime/config.toml~/.vibetime/hook.log~/.vibetime/main.log~/.vibetime/hook-health.json~/.vibetime/bin/vibetime
The database is local SQLite. You can remove VibeTime's hooks from Settings before uninstalling the app.
Hook health diagnostics:
- Run
vibetime healthto inspect recent hook persist failures. - Use this when data appears missing to quickly confirm whether writes are failing (for example, DB lock or disk issues).
CLI essentials:
- Run
vibetime statusfor a compact local health summary. - Run
vibetime agentsto inspect agent hook installation. - Run
vibetime historyfor the same 30-day summary semantics as the app History tab. - Add
--jsonto status/query commands when scripting or calling from another agent.
VibeTime includes a Codex-compatible vibetime skill for agents that need deeper
local data access than the CLI summary commands provide.
Install it with:
npx skills add BarryYangi/vibetime --skill vibetime -gThe skill defaults to the VibeTime CLI for quick summaries, then uses its bundled standard-library Python inspector for deeper SQLite analysis. It exposes functional, composable data capabilities rather than UI-specific views:
- environment and setup checks:
info,app-info,config,health,cli-status,agents - activity queries:
activity-live,activity-summary,events,turns - usage and cost queries:
usage,usage-summary,usage-refresh-state - data quality and safe cleanup:
audit,repair
All inspector commands are read-only except repair --apply --yes, which only
removes safe stale open_turns rows after creating a local database backup.
VibeTime is a pnpm workspace:
packages/core- pure TypeScript domain logic and SQLite schemapackages/hook- Bun-compiled hook and CLI binarypackages/desktop- Electron, React, and the tray/menu bar app
Useful commands from the repo root:
pnpm typecheck
pnpm lint
pnpm test
pnpm depcheck
pnpm verify:core-zero-deps
pnpm run ciDesktop builds:
pnpm --filter @vibetime/desktop pack:mac
pnpm --filter @vibetime/desktop dist:mac
pnpm --filter @vibetime/desktop pack:win
pnpm --filter @vibetime/desktop dist:winArtifacts are written to packages/desktop/release/.
MIT
