CLI
Tracking
Track time — start a live timer, or log entries manually
Two ways to track:
- Live timer —
tracking start/tracking status/tracking stopkeeps state in~/.expensicat/tracking.jsonand logs an entry when you stop. - Manual entries —
tracking create/update/deletefor backfilling or editing.
Timer state is local to the machine — stop the timer wherever you started it.
tracking start
Start a live timer.
expensicat tracking start
expensicat tracking start "Website rebuild" --description "Design review"| Arg | Description |
|---|---|
[project] | Optional project name or ID |
| Flag | Description |
|---|---|
-d, --description <text> | Description of the work |
tracking status
Show the current timer, including elapsed time.
expensicat tracking status
expensicat tracking status --json| Flag | Description |
|---|---|
--json | Output as JSON |
tracking stop
Stop the timer and create an entry.
# Stop and log
expensicat tracking stop
# Stop without logging
expensicat tracking stop --discard| Flag | Description |
|---|---|
--discard | Stop without creating an entry |
tracking list
List tracked entries. Defaults to your entries only — pass --user all to see the whole team.
# Your entries (default)
expensicat tracking list
# Everyone's entries
expensicat tracking list --user all
# A specific user's entries
expensicat tracking list --user 3b9c1d2a-...| Flag | Description |
|---|---|
--user <me|all|uuid> | Scope to the current user (me, default), everyone (all), or a specific user ID |
--cursor <string> | Pagination cursor |
--limit <number> | Page size |
tracking show
Get a tracked entry by ID.
expensicat tracking show te_abc123| Arg | Description |
|---|---|
<id> | Entry ID |
tracking create
Log a tracked entry manually. Interactive when fields are missing — prompts include a project picker. Pipe JSONL via --batch - for bulk creates.
expensicat tracking create \
--start-time 2026-04-15T09:00:00Z \
--end-time 2026-04-15T10:00:00Z \
--description "Design review" \
--project-id proj_123
cat entries.jsonl | expensicat tracking create --batch - --concurrency 3| Flag | Description |
|---|---|
--start-time <string> | Start time in ISO 8601 (required) |
--end-time <string> | End time in ISO 8601 |
--description <string> | Description (required) |
--project-id <string> | Project to log against |
--batch <path|-> | Read items from a file or stdin — see Batch input |
Duration is computed server-side from start_time and end_time.
tracking update
Update a tracked entry. Any field can be changed.
expensicat tracking update te_abc123 --end-time 2026-04-15T11:30:00Z| Arg | Description |
|---|---|
<id> | Entry ID |
| Flag | Description |
|---|---|
--start-time <string> | New start time |
--end-time <string> | New end time |
--description <string> | New description |
--project-id <string> | Reassign project |
tracking delete
Delete a tracked entry. Prompts for confirmation in a terminal; pass --yes to skip.
expensicat tracking delete te_abc123
expensicat tracking rm te_abc123 --yes # alias + skip prompt| Arg | Description |
|---|---|
<id> | Entry ID |
| Flag | Description |
|---|---|
-y, --yes | Skip the confirmation prompt (required for non-interactive use) |