A command-line interface for solidtime — manage time entries, projects, tasks, and more from your terminal.
Built for both human operators and AI agents. Auto-detects TTY for output formatting, supports structured JSON for piping, and uses semantic exit codes.
# From source
go install github.com/joelmgallant/solidtime-cli@latest
# Or build locally
git clone https://github.com/joelmgallant/solidtime-cli.git
cd solidtime-cli
make build# Authenticate (creates ~/.config/solidtime/config.yaml)
solidtime-cli login
# Or pass token directly (useful for long JWT tokens in tmux/terminal multiplexers)
solidtime-cli login --token "your-api-token"
# Start tracking time
solidtime-cli start --project <id> --description "Working on feature X"
# Check what's running
solidtime-cli status
# Stop the timer
solidtime-cli stop
# List your projects
solidtime-cli projects list
# Get current user
solidtime-cli mesolidtime-cli start [--project ID] [--task ID] [--description "..."] [--billable] [--tag ID]
solidtime-cli stop
solidtime-cli statusEvery resource follows the same pattern:
solidtime-cli <resource> list [--page N] [--all]
solidtime-cli <resource> show <id>
solidtime-cli <resource> create <flags>
solidtime-cli <resource> update <id> <flags>
solidtime-cli <resource> delete <id>Available resources: projects, clients, tags, tasks, time-entries, members, reports, project-members, invitations, charts, tokens, orgs, currencies
solidtime-cli me # Current user info
solidtime-cli memberships # List your organizations
solidtime-cli login # Interactive authentication setup
solidtime-cli config get|set|path # Manage configuration
solidtime-cli export # Export organization data
solidtime-cli import list-importers # List available importers
solidtime-cli import run --type <key> # Import data
solidtime-cli currencies # List all currencies
solidtime-cli version # Print CLI versionsolidtime-cli time-entries aggregate [--group day|week|month|...] [--filters]
solidtime-cli time-entries export [--format csv|xlsx|ods]
solidtime-cli time-entries aggregate-export [--format csv|xlsx|ods]
solidtime-cli time-entries bulk-update --ids <id1,id2,...> <flags>
solidtime-cli time-entries bulk-delete --ids <id1,id2,...>Config file: ~/.config/solidtime/config.yaml (respects $XDG_CONFIG_HOME)
url: https://app.solidtime.io/api
token: your-api-token
default_org: your-org-id
output: auto| Setting | Flag | Env Var | Config Key |
|---|---|---|---|
| API Token | --token |
SOLIDTIME_TOKEN |
token |
| Base URL | --url |
SOLIDTIME_URL |
url |
| Organization | --org |
SOLIDTIME_ORG |
default_org |
--org, -o Organization ID
--url API base URL (default: https://app.solidtime.io/api)
--output, -O Output format: json|table|csv (default: auto-detect)
--token API token
--quiet, -q Suppress non-essential output
--no-color Disable color output
Designed for scripting and AI agent consumption:
- Auto-detect output: TTY gets tables, pipes get JSON. Override with
--output json. - Structured errors: JSON errors go to stderr, data goes to stdout.
- Semantic exit codes:
0success,2auth,3forbidden,4not found,5validation,6conflict. - Quiet mode:
--quietstrips all human-friendly messages — just data. - Chainable:
ID=$(solidtime-cli projects create --name "X" -O json -q | jq -r '.id') - Full pagination:
--allfetches every page automatically.
Works with self-hosted solidtime instances:
solidtime-cli login # Enter your custom URL during setup
# or
solidtime-cli --url https://solidtime.example.com/api # Per-command override
# or
export SOLIDTIME_URL=https://solidtime.example.com/api # Environment variablemake build # Build binary to bin/solidtime-cli
make test # Run all tests
make generate # Regenerate OpenAPI client from spec
make fmt # Format code
make lint # Run linter
make release # Build release with goreleaserMIT