exercise-log

Log workouts with exercises, sets, reps, and weights. Automatically tracks personal records, monitors workout streaks, manages training goals, and exports data as CSV or PDF. Use when a user needs to log a workout, check personal records, review weekly volume, or track goal progress.

7 stars

Best use case

exercise-log is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Log workouts with exercises, sets, reps, and weights. Automatically tracks personal records, monitors workout streaks, manages training goals, and exports data as CSV or PDF. Use when a user needs to log a workout, check personal records, review weekly volume, or track goal progress.

Teams using exercise-log should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/exercise-log/SKILL.md --create-dirs "https://raw.githubusercontent.com/heldernoid/agentic-build-templates/main/projects/healthcare-wellness/exercise-log/skills/exercise-log/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/exercise-log/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How exercise-log Compares

Feature / Agentexercise-logStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Log workouts with exercises, sets, reps, and weights. Automatically tracks personal records, monitors workout streaks, manages training goals, and exports data as CSV or PDF. Use when a user needs to log a workout, check personal records, review weekly volume, or track goal progress.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# exercise-log

Local-first workout tracker with automatic PR detection and progress analysis.

## When to use

- User wants to log a workout session
- User needs to check or review personal records
- User wants to track progress on a specific exercise
- User is setting or reviewing training goals
- User wants to see weekly training volume or streak
- User needs to export workout history

## Privacy model

All data stored locally in SQLite at `./data/exercise.db`. No external transmission. Workout values never appear in log output.

## Prerequisites

- exercise-log running: `pnpm dev` or `docker compose up -d`
- Server at `http://localhost:3851`

## Key API operations

### Create a workout

```bash
curl -X POST http://localhost:3851/api/workouts \
  -H "Content-Type: application/json" \
  -d '{"title": "Upper Body", "workout_date": "2026-03-20", "duration_mins": 52}'
```

### Add a set

```bash
curl -X POST http://localhost:3851/api/workouts/1/sets \
  -H "Content-Type: application/json" \
  -d '{"exercise_id": 1, "set_number": 1, "reps": 8, "weight_kg": 80.0}'
```

Response includes `is_pr: true` if a personal record was broken.

### Get all personal records

```bash
curl http://localhost:3851/api/records
```

### Get current streak

```bash
curl http://localhost:3851/api/stats/streak
```

### Get weekly stats

```bash
curl "http://localhost:3851/api/stats/weekly?weeks=8"
```

### Get per-exercise progress

```bash
curl http://localhost:3851/api/stats/exercise/1
```

### Download CSV

```bash
curl -o workouts.csv http://localhost:3851/api/export/csv
```

## API Reference

| Endpoint | Method | Description |
|---|---|---|
| `/api/exercise-types` | GET | List exercise types |
| `/api/exercise-types` | POST | Create exercise type |
| `/api/exercise-types/:id` | PUT | Update |
| `/api/exercise-types/:id` | DELETE | Delete |
| `/api/workouts` | GET | List workouts |
| `/api/workouts` | POST | Create workout |
| `/api/workouts/:id` | GET | Detail with sets |
| `/api/workouts/:id` | PUT | Update |
| `/api/workouts/:id` | DELETE | Delete with cascade |
| `/api/workouts/:id/sets` | POST | Add set (returns is_pr) |
| `/api/sets/:id` | PUT | Update set |
| `/api/sets/:id` | DELETE | Delete set |
| `/api/records` | GET | All personal records |
| `/api/records/:exerciseId` | GET | Per-exercise records |
| `/api/goals` | GET | List goals |
| `/api/goals` | POST | Create goal |
| `/api/goals/:id` | PATCH | Update goal |
| `/api/stats/weekly` | GET | Weekly volume (param: weeks) |
| `/api/stats/streak` | GET | Current and best streak |
| `/api/stats/exercise/:id` | GET | Per-exercise progress |
| `/api/export/csv` | GET | CSV download |
| `/api/export/pdf` | GET | PDF download |
| `/api/settings` | GET | Settings |
| `/api/settings` | PATCH | Update settings |

## Exercise metric types

| metric | Fields logged |
|---|---|
| `weight_reps` | reps + weight_kg |
| `distance_time` | distance_km + duration_secs |
| `time_only` | duration_secs |
| `reps_only` | reps |

## Personal record types

| record_type | Applies to |
|---|---|
| `max_weight` | weight_reps exercises |
| `max_reps` | weight_reps and reps_only |
| `max_distance` | distance_time exercises |
| `fastest_time` | cardio (time for a given distance) |
| `longest_time` | time_only exercises |

## Environment Variables

| Variable | Default | Description |
|---|---|---|
| `PORT` | `3851` | Server port |
| `DATA_DIR` | `./data` | SQLite location |
| `EXPORT_DIR` | `./exports` | CSV/PDF output |
| `LOG_LEVEL` | `info` | debug / info / warn / error |
| `NODE_ENV` | `development` | development / production |

## Troubleshooting

### PR not detected after logging a set

1. Verify the exercise_id is correct and the exercise exists
2. Check that the metric type matches the fields submitted (e.g. weight_reps requires reps and weight_kg both non-null)
3. A PR is only recorded if the new value strictly exceeds the existing record (equal value does not count)

### Streak showing 0 despite recent workouts

1. Verify workout_date is stored as YYYY-MM-DD format
2. Streak is calculated based on calendar days with at least one workout - check there are no gaps

Related Skills

Skill: Uptime Monitoring

7
from heldernoid/agentic-build-templates

## Overview

Skill: Status Page

7
from heldernoid/agentic-build-templates

## Overview

Skill: unit-conversion

7
from heldernoid/agentic-build-templates

## Overview

Skill: recipe-scaler

7
from heldernoid/agentic-build-templates

## Overview

reading-list

7
from heldernoid/agentic-build-templates

Operate the reading-list API to save, manage, tag, search, and export articles.

email-digest

7
from heldernoid/agentic-build-templates

Configure, test, and troubleshoot the reading-list daily email digest delivered via nodemailer.

websocket-realtime

7
from heldernoid/agentic-build-templates

Use the WebSocket connection in poll-builder to receive live vote updates. Use when you need to stream real-time poll results, monitor a poll for new votes, or build a live dashboard. Triggers include "live results", "real-time updates", "stream votes", "watch poll", or "WebSocket".

poll-builder

7
from heldernoid/agentic-build-templates

Self-hosted poll creation tool with real-time results. Use when you need to create a poll, check vote counts, close a poll, export results, or get the shareable link for a poll. Triggers include "create poll", "vote", "poll results", "survey", "collect votes", "share poll", or any task involving polling or voting.

Skill: personal-finance

7
from heldernoid/agentic-build-templates

## Overview

Skill: csv-import

7
from heldernoid/agentic-build-templates

## Overview

Skill: Syntax Highlighting

7
from heldernoid/agentic-build-templates

## Purpose

Skill: Pastebin Core

7
from heldernoid/agentic-build-templates

## Purpose