WakaTime plugin for OpenCode - Track your AI coding activity, lines of code, and time spent.
Inspired by claude-code-wakatime.
Tip
Also check out codex-wakatime for OpenAI Codex CLI!
- Automatic CLI management - Downloads and updates wakatime-cli automatically
- Detailed file tracking - Tracks file reads and modifications (edit, write, patch, multiedit)
- AI coding metrics - Sends
--ai-line-changesfor WakaTime AI coding analytics - Rate-limited heartbeats - 1 per minute to avoid API spam
- Session lifecycle - Sends final heartbeat on session idle/end
Ensure you have a WakaTime API key configured in ~/.wakatime.cfg:
[settings]
api_key = waka_your_api_key_hereYou can get your API key from WakaTime Settings.
The plugin will automatically download wakatime-cli if not found. However, you can also install it manually:
macOS:
brew install wakatime-cliOther platforms: Download from WakaTime releases.
npm i -g opencode-wakatime
opencode-wakatime --installThis installs the plugin to ~/.config/opencode/plugin/wakatime.js.
To update, run the same commands again.
git clone https://github.com/angristan/opencode-wakatime
cd opencode-wakatime
npm install && npm run build
node bin/cli.js --installThe plugin will be automatically loaded by OpenCode - no configuration needed.
The plugin hooks into OpenCode's event system:
flowchart TB
subgraph OpenCode["OpenCode"]
A[Tool Execution<br/>read, edit, write, patch, multiedit] --> H1[tool.execute.after]
B[Chat Activity] --> H2[chat.message]
C[Session Events<br/>idle, end] --> H3[event]
end
subgraph Plugin["opencode-wakatime Plugin"]
H1 --> P1[Extract File Changes<br/>path, additions, deletions]
P1 --> Q[Heartbeat Queue]
H2 -.->|triggers| P2[Process Queue]
Q --> P2
P2 --> R[Rate Limiter<br/>1 per minute]
H3 --> P3[Flush Final<br/>Heartbeat]
P3 --> R
end
subgraph WakaTime["WakaTime"]
R --> CLI[wakatime-cli]
CLI --> API[WakaTime API]
API --> D[Dashboard<br/>AI Coding Metrics]
end
| Hook | Purpose |
|---|---|
tool.execute.after |
Tracks file modifications from tools |
chat.message |
Triggers heartbeat processing on activity |
event |
Listens for session lifecycle events |
| Tool | Data Extracted |
|---|---|
read |
File path (from title) |
edit |
File path, additions, deletions (from filediff) |
write |
File path, new file detection |
patch |
File paths from output, diff count |
multiedit |
File paths and changes from each edit result |
Each heartbeat includes:
- Entity: File path being worked on
- Project folder: Working directory
- AI line changes: Net lines added/removed (
additions - deletions) - Category: "ai coding"
- Plugin identifier:
opencode/1.0.0 opencode-wakatime/1.0.0
| File | Purpose |
|---|---|
~/.wakatime/opencode.log |
Debug logs |
~/.wakatime/opencode.json |
State (last heartbeat timestamp) |
~/.wakatime/opencode-cli-state.json |
CLI version tracking |
~/.wakatime/wakatime-cli-* |
Auto-downloaded CLI binary |
# Install dependencies
npm install
# Type check
npm run typecheck
# Build
npm run build- Check your config file syntax (
opencode.jsonc) - Verify the plugin path is correct
- Check logs at
~/.wakatime/opencode.log
- Verify API key in
~/.wakatime.cfg - Check if wakatime-cli is working:
wakatime-cli --version - Enable debug logging and check
~/.wakatime/opencode.log
- Check network connectivity
- Verify write permissions to
~/.wakatime/ - Manually install:
brew install wakatime-cli
MIT