Git Paid 💰 - AI Time Tracking
"Get paid for your git commits!" (but we track all your edits)
Privacy-first AI-generated work descriptions for developer time tracking. Track your coding sessions and generate invoice-ready summaries grounded only in observable signals.
Features
- 💰 Activity Tracking: Automatically tracks file opens, edits, saves, and focus changes
- 📊 Work Block Segmentation: Groups activity into meaningful "work blocks" separated by idle gaps
- 🔀 Git Integration: Collects branch names, commit messages, and diff statistics
- 🤖 AI Descriptions: Generates human-readable descriptions using VS Code's Copilot or external providers
- 🔒 Privacy First: Never sends source code off-machine; uses only metadata
- 💾 Persistent Storage: Activity data persists across VS Code sessions
- ☁️ Cloud Sync: Backup worklogs to GitHub Gists
- 📅 Monthly Exports: Generate invoice-ready monthly reports with earnings calculation
- 💵 Earnings Tracking: Set your hourly rate and see calculated earnings
Privacy & Security
This extension is designed with privacy as a core principle:
- ✅ No source code is ever sent to AI providers
- ✅ Only metadata is used: file names, paths (optionally redacted), languages, time spent
- ✅ Git context is limited to: branch names, commit messages, diff stats (lines added/removed)
- ✅ API keys are stored in VS Code's SecretStorage (encrypted)
- ✅ Local-first option: Use Ollama for fully offline operation
- ✅ Configurable redaction: Choose between full paths, basenames only, or hashed paths
What is sent to AI providers
The following metadata may be sent (depending on your settings):
{
"workspace": "my-project",
"duration": { "minutes": 45, "formatted": "45m" },
"files": [
{ "name": "index.ts", "language": "typescript", "timeSpentMinutes": 20 },
{ "name": "utils.ts", "language": "typescript", "timeSpentMinutes": 15 }
],
"git": {
"branch": "feature/ABC-123-new-feature",
"commits": [{ "message": "Add new utility functions" }],
"diffStats": { "filesChanged": 3, "linesAdded": 50, "linesRemoved": 10 },
"ticketIds": ["ABC-123"]
},
"topFiles": ["index.ts", "utils.ts"]
}
What is NOT sent:
- File contents
- Code snippets
- Full file paths (when redaction is enabled)
- Any other sensitive data
Installation
From Source (Development)
- Clone the repository and navigate to the
aw-worklog directory
- Install dependencies:
npm install
- Compile the extension:
npm run compile
- Press
F5 in VS Code to launch the Extension Development Host
From VSIX
- Download or build the
.vsix file
- Install via VS Code:
Extensions → ... → Install from VSIX
Usage
Commands
Open the Command Palette (Ctrl+Shift+P / Cmd+Shift+P) and search for:
| Command |
Description |
Git Paid: Generate description for today |
Generate descriptions for all activity today |
Git Paid: Generate description for last N minutes |
Generate for a specific time window |
Git Paid: Show activity dashboard |
View activity summary and past worklogs |
Git Paid: Export monthly report |
Generate invoice-ready monthly report |
Git Paid: Sync to cloud |
Backup current worklog to GitHub Gist |
Git Paid: Configure GitHub Gist sync |
Set up GitHub token for cloud sync |
Git Paid: Pause/Resume tracking |
Toggle activity tracking |
Git Paid: Set API key |
Configure API key for external AI providers |
Workflow
- Work normally - The extension tracks your activity in the background
- Generate descriptions - Run one of the generate commands when ready
- Review - Use the interactive review to accept, edit, or regenerate descriptions
- Save - Worklogs are saved to
.git-paid/YYYY-MM-DD.md and .git-paid/YYYY-MM-DD.json
- Export - Generate monthly reports for invoicing
Status Bar
The status bar shows:
💰 123 - Number of events recorded today
💰 Paused - Tracking is paused
Click to toggle pause.
Configuration
Access settings via File → Preferences → Settings → search for git-paid.
| Setting |
Default |
Description |
enableAIDescriptions |
true |
Enable AI-generated descriptions |
redactionMode |
basename |
full (complete paths), basename (file names only), hash (hashed paths) |
idleGapMinutes |
5 |
Minutes of inactivity to start a new work block |
provider |
vscode-lm |
AI provider: vscode-lm, openai, anthropic, ollama |
ollamaEndpoint |
http://localhost:11434 |
Ollama API endpoint |
ollamaModel |
llama3.2 |
Ollama model name |
worklogPath |
.git-paid |
Directory for saving worklogs |
autoSave |
false |
Save without review |
persistActivity |
true |
Persist activity across sessions |
hourlyRate |
- |
Your hourly rate for earnings calculation |
currency |
$ |
Currency symbol |
gistSync.enabled |
false |
Enable GitHub Gist sync |
gistSync.gistId |
- |
Existing Gist ID to update |
ticketPatterns |
["[A-Z]{2,10}-\\d+", "#\\d+"] |
Regex patterns for ticket ID detection |
excludePatterns |
["**/node_modules/**", ...] |
Glob patterns for files to exclude |
AI Providers
VS Code Language Model API / GitHub Copilot (Recommended)
Uses VS Code's built-in Language Model API with GitHub Copilot.
- ✅ No additional setup required if you have Copilot
- ✅ Uses your existing Copilot subscription
- ⚠️ Requires VS Code 1.85+ with Language Model API support
Ollama (Local)
Run AI models locally for complete privacy.
- Install Ollama
- Pull a model:
ollama pull llama3.2
- Set provider to
ollama in settings
- Configure endpoint and model name if needed
OpenAI
- Get an API key from OpenAI
- Run
Git Paid: Set API key and select OpenAI
- Set provider to
openai in settings
Anthropic
- Get an API key from Anthropic Console
- Run
Git Paid: Set API key and select Anthropic
- Set provider to
anthropic in settings
Markdown (.worklog/YYYY-MM-DD.md)
# Worklog: 2024-01-15
**Workspace:** my-project
**Total Focused Time:** 3h 45m
## Summary
### Development of API endpoints and unit tests
- Implemented new REST endpoints for user management
- Added unit tests for authentication service
- Fixed bug in data validation logic
## Work Sessions
### 09:00 - 11:30 (2h 30m)
**Implemented user authentication endpoints**
- Created login and registration endpoints
- Added JWT token generation
- Wrote integration tests
**Files:**
- `auth.controller.ts` (typescript) - 1h 20m (45 edits)
- `auth.service.ts` (typescript) - 50m (32 edits)
**Git:**
- Branch: `feature/USER-123-auth`
- Tickets: USER-123
- Changes: 3 files, +150/-20 lines
---
JSON (.worklog/YYYY-MM-DD.json)
Structured JSON for programmatic access and integration with time tracking tools.
Development
Project Structure
aw-worklog/
├── src/
│ ├── extension.ts # Main entry point
│ ├── types.ts # TypeScript interfaces
│ ├── activityTracker.ts # Event tracking
│ ├── segmenter.ts # Work block segmentation
│ ├── gitCollector.ts # Git metadata collection
│ ├── aiProvider.ts # AI provider implementations
│ ├── worklogManager.ts # Worklog file management
│ └── reviewUI.ts # Interactive review UI
├── test/
│ └── suite/ # Test files
├── package.json
├── tsconfig.json
└── README.md
Building
npm install
npm run compile
Testing
npm test
Running in Development
- Open the
aw-worklog folder in VS Code
- Press
F5 to launch the Extension Development Host
- Test the commands in the new VS Code window
Troubleshooting
No events recorded
- Check that files you're editing aren't in the
excludePatterns
- Verify tracking isn't paused (check status bar)
- Some file schemes (like
untitled:) are excluded by default
AI generation fails
- VS Code LM: Ensure you have Copilot or another Language Model extension installed
- OpenAI/Anthropic: Verify your API key is set correctly
- Ollama: Ensure the Ollama server is running and the model is pulled
Worklogs not saving
- Ensure you have write permissions to the workspace
- Check that the worklog path setting is valid
Contributing
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
License
MIT
Acknowledgments
Inspired by ActivityWatch and the aw-watcher-vscode extension.