A .NET 10 command-line tool for logging and managing time entries in 7pace Timetracker.
Requires .NET 10 SDK or Runtime.
dotnet tool install -g timetracker-clidotnet tool update -g timetracker-clidotnet tool uninstall -g timetracker-cli- .NET 10 SDK
- A 7pace Timetracker instance with a valid Bearer Token
dotnet build Timetracker.Console
dotnet publish Timetracker.Console -c ReleaseBefore using any command, run config to authenticate and cache your activity types locally:
timetracker config -u https://<company>.timehub.7pace.com -t <bearer-token>Configure the connection to your Timetracker instance.
| Option | Short | Required | Description |
|---|---|---|---|
--url |
-u |
yes* | Base URL of your Timetracker instance |
--token |
-t |
yes* | Bearer token for authentication |
--show |
no | Display current config (token masked) | |
--reset |
no | Delete all local config and activity cache |
*Required when setting up or updating credentials.
# Initial setup
timetracker config -u https://acme.timehub.7pace.com -t eyJ...
# View current config
timetracker config --show
# Remove all local config
timetracker config --resetList available activity types. Uses a local cache populated during config.
| Option | Short | Required | Description |
|---|---|---|---|
--sync |
no | Refresh the activity type cache from the server before listing |
# List cached activity types
timetracker activities
# Sync from server then list
timetracker activities --syncCreate a new time entry.
| Option | Short | Required | Description |
|---|---|---|---|
--date |
-d |
yes | Date: YYYY/MM/DD, today, or yesterday |
--work-item |
-w |
yes | Work Item ID |
--length |
-l |
yes | Duration in hours (e.g. 0.5, 1.5) |
--type |
-t |
yes | Activity type name (see activities) |
--comment |
-c |
no | Comment for the entry |
--hour |
-h |
no | Start time in HH:MM format (default: 09:00) |
--dry-run |
no | Preview the entry locally without submitting |
# Log 2 hours of development on today
timetracker add -d today -w 12345 -l 2 -t Development -c "Feature X"
# Log half an hour of a meeting starting at 14:00
timetracker add -d 2026/06/19 -w 12345 -l 0.5 -t Meeting -h 14:00
# Preview before submitting
timetracker add -d today -w 12345 -l 1 -t Development --dry-runList time entries for a period.
| Option | Short | Required | Description |
|---|---|---|---|
--from |
-f |
no | Start date (default: today) |
--to |
-t |
no | End date (default: today) |
--period |
-p |
no | Specific month in YYYY/MM format (e.g. 2026/06) |
--work-item |
-w |
no | Filter by Work Item ID |
--output |
-o |
no | Output format: json (batch-upload compatible) or csv |
--today |
no | Shortcut for today's entries | |
--yesterday |
no | Shortcut for yesterday's entries | |
--week |
no | Entries for the current week (Mon–Sun) | |
--last-week |
no | Entries for the previous week (Mon–Sun) | |
--month |
no | Entries for the current month | |
--last-month |
no | Entries for the previous month | |
--summary |
no | Daily summary instead of individual entries | |
--ids |
no | Show entry IDs instead of comments |
All period shortcuts (--today, --yesterday, --week, --last-week, --month, --last-month) and --period are mutually exclusive and cannot be combined with --from or --to.
# Today's entries
timetracker list --today
# Yesterday's entries
timetracker list --yesterday
# Current week
timetracker list --week
# Previous week
timetracker list --last-week
# Current month
timetracker list --month
# Previous month
timetracker list --last-month
# Specific date range
timetracker list -f 2026/06/01 -t 2026/06/30
# Specific month summary by day
timetracker list --period 2026/06 --summary
# Filter by work item and show IDs (for delete/update)
timetracker list --week --work-item 12345 --ids
# Export week as JSON for batch upload
timetracker list --week --output json > worklogs.json
# Export month as CSV
timetracker list --month --output csv > worklogs.csvBrowse, create, copy, edit and delete time entries in an interactive terminal UI. Navigate with arrow keys and confirm actions via prompts. Defaults to today's entries.
| Option | Short | Required | Description |
|---|---|---|---|
--period |
-p |
no | Specific month in YYYY/MM format |
--work-item |
-w |
no | Filter by Work Item ID |
--today |
no | Entries for today (default) | |
--yesterday |
no | Entries for yesterday | |
--week |
no | Entries for the current week | |
--last-week |
no | Entries for the previous week | |
--month |
no | Entries for the current month | |
--last-month |
no | Entries for the previous month |
# Browse today's entries
timetracker interactive
# Browse this week's entries
timetracker interactive --week
# Browse a specific month
timetracker interactive --period 2026/06
# Browse filtered by work item
timetracker interactive --week --work-item 12345Flow:
- Select an entry → choose Edit, Copy, Delete, or Back → confirm/fill fields → returns to the list automatically.
- Edit → update any field; activity type change is optional (confirm prompt).
- Copy → pre-fills all fields from the original entry (date defaults to today); edit any field before saving as a new entry.
- Delete → confirmation prompt before removal.
- Select ── New entry ── → fill in date, start hour, work item, duration, activity type, and comment → entry is created and the list refreshes.
- Select ── Exit ── to quit.
Update one or more fields of an existing time entry. Only the fields provided are changed.
| Option | Short | Required | Description |
|---|---|---|---|
--id |
-i |
yes | ID of the entry to update |
--date |
-d |
no | New date |
--work-item |
-w |
no | New Work Item ID |
--length |
-l |
no | New duration in hours |
--type |
-t |
no | New activity type |
--comment |
-c |
no | New comment |
--hour |
-h |
no | New start time |
# Fix the duration of an entry
timetracker update -i <id> -l 3
# Change the work item and comment
timetracker update -i <id> -w 99999 -c "Moved to correct item"Duplicate an existing entry to a target date (defaults to today). Preserves work item, duration, activity type, comment, and start time.
| Option | Short | Required | Description |
|---|---|---|---|
--id |
-i |
yes | ID of the entry to copy |
--date |
-d |
no | Target date (default: today) |
# Copy a recurring entry to today
timetracker copy -i <id>
# Copy to a specific date
timetracker copy -i <id> -d 2026/06/20Delete one or more time entries by ID.
| Option | Short | Required | Description |
|---|---|---|---|
--id |
-i |
yes | ID(s) to delete. Repeat the flag or separate with commas |
--force |
no | Skip the confirmation prompt |
# Delete a single entry (with confirmation)
timetracker delete -i <id>
# Delete multiple entries
timetracker delete -i <id1> -i <id2> -i <id3>
# Delete multiple entries using comma separator
timetracker delete -i <id1>,<id2>,<id3>
# Skip confirmation
timetracker delete -i <id1> -i <id2> --forceImport multiple time entries from a JSON file. The file must be an array of worklog objects, compatible with the output of list --output json.
| Option | Short | Required | Description |
|---|---|---|---|
--file |
-f |
yes | Path to the JSON file |
--dry-run |
no | Preview entries locally without submitting |
# Preview what would be imported
timetracker import --file worklogs.json --dry-run
# Import
timetracker import --file worklogs.jsonFor day-to-day work, interactive is the fastest path — create, copy, edit, and delete without memorizing flags. It defaults to today's entries.
# Drive the whole day from a single terminal UI
timetracker interactive
# Review and fix a past week
timetracker interactive --last-week# Several entries on the same day, across different work items
timetracker add -d today -w 12345 -l 2 -t Development -c "Feature X"
timetracker add -d today -w 12345 -l 1.5 -t Development -c "Code review"
timetracker add -d today -w 67890 -l 0.5 -t Meeting -h 14:00 -c "Daily"
# Review what was logged
timetracker list --today# List today's entries with IDs
timetracker list --today --ids
# Delete the target entry
timetracker delete -i <id>timetracker list --today --ids
timetracker update -i <id> -w <correct-work-item># Find the original entry ID once
timetracker list -f 2026/06/01 -t 2026/06/01 --ids
# Copy it every day
timetracker copy -i <id># Export
timetracker list --week --output json > worklogs.json
# Edit worklogs.json as needed, then preview
timetracker import --file worklogs.json --dry-run
# Import
timetracker import --file worklogs.jsonFor a fixed weekly routine, export the previous week, shift the dates, and re-import.
# Export last week
timetracker list --last-week --output json > lastweek.json
# Edit lastweek.json: bump each "date" forward by 7 days, then preview
timetracker import --file lastweek.json --dry-run
# Import
timetracker import --file lastweek.jsonSpot days with incomplete or no hours before the month closes.
# Daily totals for the current week — gaps stand out
timetracker list --week --summary
# Same for a specific month
timetracker list --period 2026/06 --summary# Current month
timetracker list --month --summary
# Specific month
timetracker list --period 2026/06 --summaryThe bearer token and user info are stored locally in a config file. The location and protection method depend on the OS:
| OS | Location | Protection |
|---|---|---|
| Windows | %LOCALAPPDATA%\Timetracker.Console\config.json |
Token encrypted with DPAPI (user-scoped) |
| Linux / macOS | ~/.config/Timetracker.Console/config.json |
File permissions set to 600 (owner read/write only) |
On Windows, the encrypted token can only be decrypted by the same OS user account that ran config. On Linux/macOS, the file is not encrypted but is restricted to the owner.
The --url option only accepts https:// URLs. Plain HTTP is rejected to prevent the bearer token from being transmitted over an unencrypted connection.
The bearer token has expired or is invalid. Run config again with a new token:
timetracker config -u https://<company>.timehub.7pace.com -t <new-token>The local activity cache is out of sync with the server. Refresh it:
timetracker activities --syncThe tool has not been configured yet. Run the first-time setup:
timetracker config -u https://<company>.timehub.7pace.com -t <bearer-token>The URL must start with https://. Example:
# Wrong
timetracker config -u http://acme.timehub.7pace.com -t <token>
# Correct
timetracker config -u https://acme.timehub.7pace.com -t <token>