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 CodeQL 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

# Filter by date range (YYYY-MM-DD, both bounds inclusive)
hevy workouts list --since 2026-01-01 --until 2026-03-31 --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

Use with Claude Code

This package ships a Claude Code skill so Claude can query your Hevy data directly through hevy instead of writing one-off HTTP scripts. Roughly 2–3× fewer tokens per Hevy-related prompt and no auth/pagination/error-handling drift.

# One-time install (from a clone of this repo)
mkdir -p ~/.claude/skills
cp -r skills/hevy ~/.claude/skills/

Then ask Claude things like "summarise my workouts from this week" or "what's my bench press PR?" — the skill activates automatically based on its description.

See docs/claude-skill.md for the install guide, customisation, and troubleshooting. An MCP server (cross-platform — Claude Desktop, Cursor, opencode, Continue) is planned for a future release.

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.4.0.tar.gz (107.8 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.4.0-py3-none-any.whl (29.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: hevy_cli-0.4.0.tar.gz
  • Upload date:
  • Size: 107.8 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.4.0.tar.gz
Algorithm Hash digest
SHA256 16f4ebf7bf6c8637db35f4aa772311738227ad490263e5f96fafb325dff47a67
MD5 7b660e1b3e56240e3590982fcd0f015d
BLAKE2b-256 2284feeaf789848201b0ad280eeb8b9f2575008cfddb57e4e1f1b48789198ec7

See more details on using hashes here.

Provenance

The following attestation bundles were made for hevy_cli-0.4.0.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.4.0-py3-none-any.whl.

File metadata

  • Download URL: hevy_cli-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 29.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.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a6b245b183dabe8245221840d3b5bbeb5bfc9aecbc694b05fc023de54305ba27
MD5 e06ab730cc9e1f6619e07c0ffd89bac9
BLAKE2b-256 a24936ecd9aab898288a790ffd0fd233c31ac08aa62afc0090dd352ab504f2b7

See more details on using hashes here.

Provenance

The following attestation bundles were made for hevy_cli-0.4.0-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