Task Time Tracker

A powerful Visual Studio Code extension for tracking time spent on tasks directly from your Git branches. Automatically detect ticket IDs from branch names and track your work time with precision.

📦 Install from VS Code Marketplace
✨ Features
🎯 Automatic Ticket Detection
- Automatically extracts ticket IDs from Git branch names (e.g.,
feat/GDD-750_my-feature)
- Supports multiple ticket prefix patterns (configurable)
- Works with any ticket system (Jira, GitHub Issues, Linear, etc.)
⏱️ Time Tracking
- Precise time calculation in days with configurable increments (0.1, 0.2, 0.5, 1, etc.)
- Detailed time breakdown showing days, hours, minutes, and seconds spent on each ticket
- Multiple work sessions support with automatic pause/resume
- Real-time tracking for active tickets with live time updates
- Configurable working hours (24h or 12h format)
- Customizable time increment for rounding (default: 0.5 days)
- Days off configuration: Exclude specific days of the week from time tracking (e.g., weekends)
- Automatic time calculation based on configured work hours
- Smart period merging to avoid double-counting overlapping work periods

🔄 Smart Branch Management
- Automatic pause of active tickets when switching branches
- Automatic resume of tracking when switching to a tracked ticket's branch
- One-click branch checkout by double-clicking on a tracked ticket
📊 Visual Interface
- Custom panel in Source Control view
- Current branch display with ticket information
- Collapsible monthly tracking sections
- Visual indicators for ticket status:
- ☕ Coffee icon: Completed/Paused tickets
- ✏️ Edit session icon: Active tickets
- Quick settings panel showing current configuration
📤 Export to Spreadsheet
- Export monthly tracking to spreadsheet files
- Multiple formats supported:
- XLSX (Excel)
- ODS (OpenDocument Spreadsheet)
- CSV (Comma-separated values)
- Configurable output path for exported files
- Automatic file opening with configured application (optional)
- Comprehensive data including:
- Ticket ID and branch name
- Author information
- Time spent (days and detailed breakdown)
- Status and completion date

🎨 User Experience
- Quick actions directly from the panel:
- Add ticket to tracking
- Remove ticket from tracking
- Mark ticket as completed
- Resume paused ticket
- Delete ticket
- Open ticket in browser
- Checkout associated branch
- Export month to spreadsheet
- Real-time updates when Git branch changes
- Automatic refresh every minute for active tickets
- Internationalization (i18n): Choose between English and French
- Flexible storage: Save tracking data in workspace settings or user settings
- One-click migration: Easily migrate tracking data between workspace and user settings

⚙️ Configuration
- Ticket base URL: Configure your ticket system URL

- Branch prefixes: Customize ticket prefix patterns (e.g.,
EDI, GDD)
- Working hours: Set start and end times (24h or 12h format)
- Days off: Configure which days of the week should be excluded from time tracking
- Time format: Choose between 24h and 12h display format
- Language: Choose between English and French for the extension interface
- Storage location: Choose to save tracking data in workspace settings (project-specific) or user settings (global)
- Export settings: Configure export format, output path, and application to open files
📦 Installation
From VS Code Marketplace
Install from VS Code Marketplace
Or manually:
- Open VS Code
- Go to Extensions (Ctrl+Shift+X / Cmd+Shift+X)
- Search for "Task Time Tracker"
- Click Install
From VSIX File
- Download the
.vsix file from the Releases page
- Open VS Code
- Go to Extensions
- Click the
... menu and select "Install from VSIX..."
- Select the downloaded file
🚀 Quick Start
Configure your ticket system URL:
- Open VS Code Settings (Ctrl+, / Cmd+,)
- Search for "Task Time Tracker"
- Set
Task Time Tracker: Ticket Base Url (e.g., https://your-company.atlassian.net/browse)
Configure branch prefixes (optional):
- Set
Task Time Tracker: Branch Prefixes (default: ["EDI", "GDD"])
Set your working hours:
- Configure
Task Time Tracker: Work Start Hour and Work End Hour
- Choose your preferred time format (24h or 12h)
Start tracking:
- Create a branch with a ticket ID (e.g.,
feat/GDD-750_my-feature)
- Open the Source Control panel
- Find the "Task Time Tracker" tab
- Click the "Add to tracking" button next to your branch
📖 Usage
Adding a Ticket to Tracking
- Ensure your current branch contains a ticket ID matching your configured prefixes
- In the Task Time Tracker panel, click the "Add to tracking" button (📄 icon)
- The ticket will be automatically added to the current month's tracking
Managing Tickets
- Mark as completed: Click the checkmark icon on an active ticket
- Resume tracking: Click the refresh icon on a completed ticket
- Delete ticket: Click the trash icon
- Open ticket: Click the external link icon to open the ticket in your browser
- Checkout branch: Double-click on a ticket to checkout its associated branch
Viewing Tracking Data
- Expand the monthly sections (e.g., "Suivi décembre 2025") to see all tracked tickets
- Each ticket displays:
- Ticket ID
- Status (En cours / Completion date)
- Time spent in days (rounded to configured increment)
- Precise time breakdown in format:
Xj Yh Zm (days, hours, minutes)
- Example:
2j 5h 30m means 2 days, 5 hours, and 30 minutes
- Only non-zero units are displayed
- Seconds are shown only if all other units are zero
- Associated branch name
Exporting Monthly Tracking
- In the Task Time Tracker panel, expand a monthly section (e.g., "Suivi décembre 2025")
- Click the table icon (📊) next to the month title
- Choose to export only your tickets or all tickets
- The file will be generated in the configured format (XLSX, ODS, or CSV)
- If configured, the file will automatically open with your specified application
- The exported file contains:
- Ticket ID
- Branch name
- Author
- Time spent (days and detailed breakdown)
- Status
- Completion date
Managing Storage Location
- In the Task Time Tracker panel, expand the "Current Settings" section
- Find the "Storage location" line showing either "Workspace" or "User"
- Click on the storage location line to migrate your tracking data
- The extension will automatically:
- Copy all tracking data to the new location
- Update the storage preference
- Remove data from the old location
- This is useful when:
- You want to share tracking data across multiple projects (use User settings)
- You want project-specific tracking (use Workspace settings)
Configuring Days Off
- In the Task Time Tracker panel, expand the "Current Settings" section
- Find the "Days off" line showing your currently configured days off (or "No days off configured")
- Click on the "Days off" line to open the configuration dialog
- Select the days of the week when you don't work (e.g., Saturday and Sunday)
- Selected days will be excluded from all time calculations
- This is useful for:
- Excluding weekends from your time tracking
- Excluding specific weekdays when you don't work
- Ensuring accurate time calculations that only count working days
Automatic Features
- Branch switching: When you switch Git branches, active tickets are automatically paused
- Auto-resume: If you switch to a branch whose ticket is already tracked, tracking automatically resumes
- Real-time updates: Time spent is calculated in real-time for active tickets
⚙️ Configuration Options
| Configuration |
Description |
Default |
Example |
task-time-tracker.ticketBaseUrl |
Base URL for your ticket system. The ticket ID will be appended to this URL. |
"" |
https://your-company.atlassian.net/browse |
task-time-tracker.branchPrefixes |
Array of branch prefixes to detect ticket IDs from. |
["EDI", "GDD"] |
["EDI", "GDD", "TASK"] |
task-time-tracker.workStartHour |
Hour when your work day starts (24h format, 0-23). |
9 |
9 |
task-time-tracker.workEndHour |
Hour when your work day ends (24h format, 0-23). |
18 |
18 |
task-time-tracker.timeFormat |
Time display format: "24h" or "12h". |
"24h" |
"24h" or "12h" |
task-time-tracker.workStartHour12h |
Work start hour in 12h format (1-12). Used when timeFormat is "12h". |
9 |
9 |
task-time-tracker.workStartPeriod |
AM/PM period for work start. Used when timeFormat is "12h". |
"AM" |
"AM" or "PM" |
task-time-tracker.workEndHour12h |
Work end hour in 12h format (1-12). Used when timeFormat is "12h". |
6 |
6 |
task-time-tracker.workEndPeriod |
AM/PM period for work end. Used when timeFormat is "12h". |
"PM" |
"AM" or "PM" |
task-time-tracker.timeIncrement |
Time increment in days for tracking. Time spent will be rounded to this increment. Minimum: 0.1, Maximum: 1, Must be a multiple of 0.1. |
0.5 |
0.1, 0.2, 0.5, 1 |
task-time-tracker.excelOutputPath |
Output directory path for exported spreadsheet files. If empty, files will be saved in the current workspace directory. |
"" |
/Users/username/Documents/exports |
task-time-tracker.excelExecutable |
Path to the executable application to open exported files automatically. If empty, files will not be opened automatically. On macOS, you can use .app bundle paths. |
"" |
macOS: /Applications/Microsoft Excel.app Linux: /usr/bin/libreoffice Windows: C:\Program Files\Microsoft Office\Office16\EXCEL.EXE |
task-time-tracker.excelExportFormat |
Export format for monthly tracking files. Options: "xlsx" (Microsoft Excel), "ods" (OpenDocument), "csv" (Comma-separated values). |
"xlsx" |
"xlsx", "ods", "csv" |
task-time-tracker.language |
Extension language. Options: "en" (English) or "fr" (French). |
"en" |
"en", "fr" |
task-time-tracker.useGlobalStorage |
Save tracking data in user settings instead of workspace settings. When enabled, data is stored globally and shared across all workspaces. |
true |
true, false |
task-time-tracker.daysOff |
Array of days of the week to exclude from time tracking. Values: 0 (Sunday), 1 (Monday), 2 (Tuesday), 3 (Wednesday), 4 (Thursday), 5 (Friday), 6 (Saturday). |
[] |
[0, 6] (weekends), [1, 2, 3, 4, 5] (weekdays only) |
🎯 How It Works
Ticket Detection
The extension uses regex patterns to extract ticket IDs from branch names:
- Pattern:
{PREFIX}-{NUMBER} (case-insensitive)
- Example:
feat/GDD-750_my-feature → GDD-750
Time Calculation
Time is calculated based on:
- Working hours: Only time within your configured work hours counts
- Days off: Days configured as "days off" are completely excluded from time calculations
- Increments: Time is rounded to your configured increment (default: 0.5 days) for the days display
- Precise calculation: Detailed breakdown (days, hours, minutes, seconds) is calculated separately and shown alongside the rounded days
- Minimum: Minimum tracked time equals your configured time increment
- Multiple sessions: Overlapping periods on the same day are automatically merged to avoid double-counting
- Real-time updates: For active tickets, the precise time is recalculated every minute
Data Storage
Tracking data can be stored in either workspace settings or user settings:
- Workspace settings (default): Data is stored in
.vscode/settings.json and is project-specific
- User settings: Data is stored globally and shared across all workspaces
- Easy migration: Click on the storage location in the quick settings to migrate data between workspace and user settings
- Organized by month and year
- Each ticket contains:
- Ticket ID and full URL
- Branch name
- Work periods (start/end dates)
- Author information
- Calculated time spent (in days, rounded to increment)
- Precise time spent (days, hours, minutes, seconds) - automatically recalculated on each access
🛠️ Development
Prerequisites
- Node.js 20+
- npm or yarn
- VS Code
Setup
# Clone the repository
git clone https://github.com/MisterGoodDeal/task-time-tracker.git
cd task-time-tracker
# Install dependencies
npm install
# Compile TypeScript
npm run compile
# Run tests
npm test
# Run linter
npm run lint
Building
# Build VSIX package
npm run package
# The VSIX file will be in the build/ directory
Testing
# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Run linter
npm run lint
# Fix linting issues automatically
npm run lint:fix
📝 License
MIT License - see LICENSE.md for details
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Clone the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature)
- Commit your changes (
git commit -m 'Add some AmazingFeature')
- Push to the branch (
git push origin feature/AmazingFeature)
- Open a Pull Request
📧 Support
If you encounter any issues or have feature requests, please open an issue on GitHub.
🙏 Acknowledgments
Made with ❤️ for developers who want to track their time efficiently
| |