diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json new file mode 100644 index 0000000..984e8fc --- /dev/null +++ b/.claude-plugin/marketplace.json @@ -0,0 +1,15 @@ +{ + "name": "performance-agent", + "description": "PerformanceAgent — the evidence-based performance coach as a one-command Claude Code plugin (MCP server + coaching skills).", + "owner": { + "name": "Clément Rieux", + "url": "https://github.com/clementrx" + }, + "plugins": [ + { + "name": "performance-agent", + "source": "./", + "description": "Evidence-based performance coach: the MCP server (100+ tools) plus the coaching skills that drive it — needs analysis, periodization, nutrition, recovery, Garmin/Strava connection, pre-competition." + } + ] +} diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json new file mode 100644 index 0000000..d792c8f --- /dev/null +++ b/.claude-plugin/plugin.json @@ -0,0 +1,15 @@ +{ + "name": "performance-agent", + "displayName": "PerformanceAgent", + "version": "0.11.0", + "description": "Evidence-based performance coach: the MCP server plus the coaching skills that drive it.", + "author": { + "name": "Clément Rieux", + "url": "https://github.com/clementrx" + }, + "homepage": "https://github.com/clementrx/Performance-agent", + "repository": "https://github.com/clementrx/Performance-agent", + "license": "Apache-2.0", + "keywords": ["coaching", "training", "performance", "sports-science", "garmin", "strava"], + "mcpServers": "./.mcp.json" +} diff --git a/.mcp.json b/.mcp.json new file mode 100644 index 0000000..8008a57 --- /dev/null +++ b/.mcp.json @@ -0,0 +1,8 @@ +{ + "mcpServers": { + "performance-agent": { + "command": "uvx", + "args": ["performance-agent"] + } + } +} diff --git a/CHANGELOG.md b/CHANGELOG.md index bd84a29..ee85e86 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,20 @@ All notable changes to PerformanceAgent. Versions follow the git tags. +## 0.11.0 — Claude Code Plugin + +### Added + +- **Claude Code plugin** — one-command setup that installs the MCP server **and** + all 16 coaching skills together, replacing the manual `claude mcp add` + skills + copy. From inside Claude Code: + `/plugin marketplace add clementrx/Performance-agent` then + `/plugin install performance-agent@performance-agent`. The repo is its own + marketplace (`.claude-plugin/marketplace.json`, `.claude-plugin/plugin.json`, + and a root `.mcp.json` running `uvx performance-agent`); Claude Code keeps it + updated via `/plugin marketplace update performance-agent`. Non-Claude-Code + clients keep the manual per-host setup in [docs/installing.md](docs/installing.md). + ## 0.10.0 — Garmin/Strava Connection & Recovery Analyst ### Added diff --git a/README.md b/README.md index 89a55f8..fb1bf60 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ several athletes is just several folders — `cd` into the right one and the coa up where you left off. Then you talk to it in plain language; no config files, no commands to memorize. -### One-time setup (5 minutes, 3 steps) +### One-time setup (Claude Code — 2 commands) **Never used Claude Code before?** Install it first: @@ -99,28 +99,21 @@ curl -fsSL https://claude.ai/install.sh | bash You'll also need [`uv`](https://docs.astral.sh/uv/getting-started/installation/) — it fetches the right Python version by itself, nothing else to install. -**Step 1 — plug in the coach.** Run this once, from any terminal: +**Install the plugin.** From inside Claude Code, run these two commands once: -```bash -claude mcp add performance-agent -s user -- uvx performance-agent +``` +/plugin marketplace add clementrx/Performance-agent +/plugin install performance-agent@performance-agent ``` -This registers the coach's "brain" (the engine, the science library, your future -athlete profile) as a tool Claude Code can call. `-s user` makes it available from +One install gives you both halves of the coach: the *tools* (the engine, the science +library, your future athlete profile) as an MCP server, **and** the *coaching protocols* +— the 16 skills that tell Claude when to ask what, when to be honest about a goal, how +to build a program. The MCP server registers at user scope, so it's available from every folder you later launch `claude` in — which is what makes one-folder-per-athlete -work. +work. Claude Code keeps the plugin up to date (`/plugin marketplace update performance-agent`). -**Step 2 — teach it how to coach.** Step 1 gave Claude the *tools* (the math, the -data). This step gives it the *coaching protocols* — when to ask what, when to be -honest about a goal, how to build a program: - -```bash -git clone --depth 1 https://github.com/clementrx/Performance-agent -mkdir -p ~/.claude/skills -cp -R Performance-agent/skills/* ~/.claude/skills/ -``` - -**Step 3 — fully quit and restart Claude Code.** New tools load only when a `claude` +**Fully quit and restart Claude Code.** New tools and skills load only when a `claude` session *starts*: close any open session completely and run `claude` again. **Check it worked** — open an athlete folder and ask: @@ -131,6 +124,12 @@ session *starts*: close any open session completely and run `claude` again. You should see 103 tools. If so, you're done — make a folder and start coaching. +> **Not on Claude Code?** Cursor, Claude Desktop and other MCP hosts have no plugin +> format. Register the server manually with `claude mcp add performance-agent -s user -- +> uvx performance-agent` (or the equivalent JSON in your host's MCP config), then copy +> the coaching skills into your host's instructions. Full per-client steps: +> [docs/installing.md](docs/installing.md). + > **On a host that can't pick the launch folder?** Claude Desktop and a few other MCP > hosts always start from the same place. There, set `PERFORMANCE_AGENT_HOME` to the > athlete's folder in the server config instead of `cd`-ing into it. diff --git a/RELEASING.md b/RELEASING.md index a156548..0e4b1f8 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -31,7 +31,9 @@ local agent session. The repo is release-ready when this checklist completes. ## Every release -1. Update the version in `pyproject.toml`; commit via PR. +1. Update the version in `pyproject.toml` **and** `.claude-plugin/plugin.json` + (keep them equal — the plugin `version` is what Claude Code shows in `/plugin list`); + commit via PR. 2. Tag and push: ```bash git tag v0.1.0 && git push origin v0.1.0 diff --git a/docs/installing.md b/docs/installing.md index a481ee7..9bd21f6 100644 --- a/docs/installing.md +++ b/docs/installing.md @@ -17,6 +17,21 @@ published on PyPI as [`performance-agent`](https://pypi.org/project/performance- ## Claude Code +**Recommended — the plugin.** One install ships both the MCP server *and* the 16 +coaching skills, and Claude Code keeps them updated. From inside Claude Code: + +``` +/plugin marketplace add clementrx/Performance-agent +/plugin install performance-agent@performance-agent +``` + +The MCP server registers at user scope (available in every folder) and every coaching +skill loads with it — so with the plugin you can skip the "Installing the coaching +skills" section below. Update later with `/plugin marketplace update performance-agent`. + +**Manual — MCP server only.** To register just the server (and handle skills +separately, below): + ```bash claude mcp add performance-agent -s user -- uvx performance-agent ``` @@ -146,6 +161,11 @@ honest about a goal, how to periodize. Claude Code has native support for them; other client needs the same content pasted into its own instructions mechanism, since none of them read `SKILL.md` files directly. +> **On Claude Code, the plugin already did this.** `/plugin install +> performance-agent@performance-agent` (above) bundles all 16 skills — skip straight to +> "Connecting Garmin or Strava". The manual copy below is only for a skills-dir install +> without the plugin. + **Claude Code** — copy (or symlink) them into your personal skills directory: ```bash diff --git a/pyproject.toml b/pyproject.toml index 2f6c00c..c91e28c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "performance-agent" -version = "0.10.0" +version = "0.11.0" description = "Evidence-based AI physical preparation platform — backend" readme = "README.md" requires-python = ">=3.13" diff --git a/uv.lock b/uv.lock index 53e24f4..503c73d 100644 --- a/uv.lock +++ b/uv.lock @@ -367,7 +367,7 @@ wheels = [ [[package]] name = "performance-agent" -version = "0.10.0" +version = "0.11.0" source = { editable = "." } dependencies = [ { name = "fitdecode" },