Skip to main content

CLI for the Hevy workout tracking API

Project description

hevy-cli

A typed, testable CLI for the Hevy workout tracking API.

CI codecov pre-commit.ci status PyPI Python Ruff License: MIT

Features

  • Full Hevy API coverage — workouts, routines, folders, exercises, history
  • Multiple output formats — table (rich), JSON, YAML (auto-selected by TTY)
  • Auto-pagination — fetch all results with --all
  • Flexible auth — env var, flag, or config file (XDG-compliant)
  • Typed end-to-end — pydantic v2 models, mypy --strict, pyright-friendly
  • Retry logic — exponential backoff on rate limits and server errors (tenacity)
  • Structured logging — structlog with JSON output in --debug
  • Tested — pytest + respx against the real API shapes

Installation

With uv (recommended)

uv tool install hevy-cli

With pip

pip install hevy-cli

From source

git clone https://github.com/marinsalinas/hevy-cli.git
cd hevy-cli
uv sync

Quick Start

1. Get your API key

Go to hevy.com/settings?developer (requires Hevy Pro).

2. Configure

# Option A: Environment variable
export HEVY_API_KEY="your-api-key"

# Option B: Config file
hevy config set auth.api_key "your-api-key"

# Option C: Per-command flag
hevy --api-key "your-api-key" workouts list

3. Use

# List recent workouts
hevy workouts list

# Get a specific workout
hevy workouts get abc123

# List all workouts (auto-paginate)
hevy workouts list --all

# Count total workouts
hevy workouts count

# JSON output for scripting
hevy workouts list --format json | jq '.[] | .title'

# Create a workout from file
hevy workouts create --file workout.json

# List exercise templates
hevy exercises list --page-size 50

# Get exercise history with date range
hevy exercises history D04AC939 --start 2024-01-01 --end 2024-12-31

# List routines
hevy routines list

# List routine folders
hevy folders list

# Create a routine folder
hevy folders create "Push Pull Legs"

# Show current config
hevy config show

Output Formats

# Rich table (default in terminal)
hevy workouts list

# JSON (default when piped)
hevy workouts list --format json

# YAML
hevy workouts list --format yaml

Configuration

Config is stored at ~/.config/hevy/config.toml (XDG compliant):

[auth]
api_key = "your-api-key"

[output]
format = "table"    # json | table | yaml
color = true

[api]
base_url = "https://api.hevy.com"
timeout = 30
max_retries = 3

Development

# Clone and setup
git clone https://github.com/marinsalinas/hevy-cli.git
cd hevy-cli
uv sync --dev

# Run tests
uv run pytest

# Run linter
uv run ruff check src/ tests/
uv run ruff format --check src/ tests/

# Type checking
uv run mypy src/

# Run CLI in dev mode
uv run hevy --help

API Coverage

Resource list get create update count events history
Workouts
Routines
Folders
Exercises

Contributing

Contributions are welcome. See CONTRIBUTING.md for the dev setup, commit conventions, and pull-request flow. Start with issues labelled good first issue.

Architecture decisions and rationale are captured in ARCHITECTURE.md. Security issues should follow the private disclosure path in SECURITY.md — please do not file them as public issues.

Changelog

See CHANGELOG.md. This project follows Semantic Versioning; pre-1.0 minor releases may include breaking changes.

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hevy_cli-0.2.1.tar.gz (94.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hevy_cli-0.2.1-py3-none-any.whl (27.5 kB view details)

Uploaded Python 3

File details

Details for the file hevy_cli-0.2.1.tar.gz.

File metadata

  • Download URL: hevy_cli-0.2.1.tar.gz
  • Upload date:
  • Size: 94.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for hevy_cli-0.2.1.tar.gz
Algorithm Hash digest
SHA256 b9c9691745e8b50fc35b404ee4c6114484500be56c44b02f0f973936ad2a21a0
MD5 a27f56c2d2ef6cd11551219ca80c6596
BLAKE2b-256 8990c6e5f138f8d090de948a2d4bf622d0921d04724c092fc34fdb2c002c24d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for hevy_cli-0.2.1.tar.gz:

Publisher: release-please.yml on marinsalinas/hevy-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hevy_cli-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: hevy_cli-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 27.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for hevy_cli-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0ba977fcb564d261bcfa559434182e6fbc1ce03b3aef69027ab7474204d2c90f
MD5 625b5bb9491a17a43db96f5cc9108fc9
BLAKE2b-256 d2822b6e93ceba17224f3380acc1ad49497a670ecb65142598a14d18dce4c582

See more details on using hashes here.

Provenance

The following attestation bundles were made for hevy_cli-0.2.1-py3-none-any.whl:

Publisher: release-please.yml on marinsalinas/hevy-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page