# Can PM Skills Be Customized or Extended with New Functionalities?

> Customize and extend PM Skills with markdown files. Add new skills and commands easily without writing compiled code.

- Repository: [Pawel Huryn/pm-skills](https://github.com/phuryn/pm-skills)
- Tags: how-to-guide
- Published: 2026-06-26

---

**Yes, PM Skills supports customization and extension through plain markdown files, allowing you to add new skills and commands without writing compiled code.**

PM Skills is an open-source Claude Marketplace plugin collection hosted at `phuryn/pm-skills` that enables product managers to customize and extend functionalities by creating markdown-based assets. The system uses a file-driven architecture where new capabilities are automatically discovered when placed in the appropriate directory structure.

## Architecture Overview

PM Skills is organized as a collection of plugins (such as `pm-toolkit` and `pm-product-discovery`), each containing three core components:

1. **Skills** – Markdown files ([`SKILL.md`](https://github.com/phuryn/pm-skills/blob/main/SKILL.md)) that describe self-contained domain expertise with defined inputs and response formats.
2. **Commands** – Markdown files that define slash-commands (`/command-name`) and orchestrate skills into workflows.
3. **Marketplace metadata** – The [`.claude-plugin/marketplace.json`](https://github.com/phuryn/pm-skills/blob/main/.claude-plugin/marketplace.json) file that registers all plugins and their source directories.

Because the system is entirely markdown-based, extending functionality requires only adding files following existing conventions. The Claude runtime automatically discovers new assets in `skills/` and `commands/` directories after installation.

## Extending an Existing Plugin

To add capabilities to an existing plugin like `pm-toolkit`, create new markdown files in the designated directories. This process requires no changes to the marketplace registry if the plugin already exists.

### Step 1: Create a New Skill

Define a new skill by creating a [`SKILL.md`](https://github.com/phuryn/pm-skills/blob/main/SKILL.md) file in `pm-toolkit/skills/<new-skill>/`. The file must include a YAML frontmatter block with `name`, `description`, and content sections defining input arguments and response structure.

```markdown
<!-- pm-toolkit/skills/product-metrics-audit/SKILL.md -->
---
name: product-metrics-audit
description: |
  Audits a list of product metrics (e.g., DAU, churn, NPS) against a health rubric
  and suggests improvements.
---

# Product Metrics Audit

## Input Arguments

- `$METRICS`: JSON array of metric objects `{name, value, target}`

## Response Structure

1. **Score** – overall health (0‑100)  
2. **Findings** – per‑metric assessment  
3. **Recommendations** – concrete actions to improve low‑scoring metrics

```

### Step 2: Add a Command (Optional)

To expose the skill via a slash-command, create a markdown file in `pm-toolkit/commands/<new-command>.md`:

```markdown
<!-- pm-toolkit/commands/metrics-audit.md -->
---
description: Run a health audit on product metrics
argument-hint: "<metrics JSON>"
---

# /metrics-audit

1. Accept the JSON payload (see `$METRICS`).  
2. Invoke the `product-metrics-audit` skill.  
3. Return the formatted audit report.

```

### Step 3: Update Documentation

Add the new skill and command to [`pm-toolkit/README.md`](https://github.com/phuryn/pm-skills/blob/main/pm-toolkit/README.md) so users can discover the functionality.

### Step 4: Publish Changes

Commit the new files to the repository. The [`.claude-plugin/marketplace.json`](https://github.com/phuryn/pm-skills/blob/main/.claude-plugin/marketplace.json) does not require modification because it already points to the `pm-toolkit` source directory. Claude will load the new assets automatically upon reinstallation.

## Creating a New Plugin

For entirely separate domains (e.g., "AI-ethics"), create a new plugin folder structure:

```

ai-ethics/
  ├─ skills/
  │   └─ bias-assessment/
  │       └─ SKILL.md
  ├─ commands/
  │   └─ assess-bias.md
  └─ README.md

```

Then register the plugin in [`.claude-plugin/marketplace.json`](https://github.com/phuryn/pm-skills/blob/main/.claude-plugin/marketplace.json):

```json
{
  "name": "ai-ethics",
  "description": "Ethics‑focused skills for AI product teams",
  "source": "./ai-ethics",
  "category": "product-management"
}

```

After committing these changes, the marketplace will expose the new plugin as an installable option.

## Runtime Discovery Mechanism

Claude loads plugins based on paths declared in [`marketplace.json`](https://github.com/phuryn/pm-skills/blob/main/marketplace.json). For each plugin directory, the runtime:

1. Scans the `skills/` directory for [`SKILL.md`](https://github.com/phuryn/pm-skills/blob/main/SKILL.md) files and registers them as named skills.
2. Scans the `commands/` directory for markdown files starting with `/<command>` and binds them to corresponding skills.

Because discovery is **file-system based**, any markdown added to these directories becomes available immediately after plugin reload or reinstallation, without requiring code compilation or server restarts.

## Practical Implementation Examples

### Installing the Marketplace

Use the Claude Code CLI to add the marketplace and install plugins:

```bash

# Add the marketplace (once)

claude plugin marketplace add phuryn/pm-skills

# Install the base set of plugins

claude plugin install pm-toolkit@pm-skills
claude plugin install pm-product-discovery@pm-skills

```

### Adding a Custom Skill via Shell

Automate skill creation using command-line tools:

```bash

# Create directory for the new skill

mkdir -p pm-toolkit/skills/product-metrics-audit

# Write the SKILL.md

cat > pm-toolkit/skills/product-metrics-audit/SKILL.md <<'EOF'
--- 
name: product-metrics-audit
description: Audits a list of product metrics against a health rubric.
---

# Product Metrics Audit

## Input Arguments

- `$METRICS`: JSON array of metric objects

## Response Structure

1. Overall health score
2. Per-metric findings
3. Improvement recommendations
EOF

# Add a command that invokes the skill

cat > pm-toolkit/commands/metrics-audit.md <<'EOF'
---
description: Run a health audit on product metrics
argument-hint: "<metrics JSON>"
---

# /metrics-audit

Invoke the `product-metrics-audit` skill with the provided metrics.
EOF

# Commit the changes

git add pm-toolkit/skills/product-metrics-audit/SKILL.md \
        pm-toolkit/commands/metrics-audit.md
git commit -m "Add product-metrics-audit skill and /metrics-audit command"
git push

```

After pushing, users can invoke the new functionality:

```text
/metrics-audit [{"name":"DAU","value":12000,"target":15000},{"name":"Churn","value":4.2,"target":3}]

```

## Summary

- **PM Skills** uses a markdown-driven architecture where skills and commands are defined in plain text files.
- **Extending existing plugins** requires only adding [`SKILL.md`](https://github.com/phuryn/pm-skills/blob/main/SKILL.md) files to `pm-toolkit/skills/<name>/` and optional command files to `pm-toolkit/commands/`.
- **New plugins** are created by establishing a folder structure with `skills/`, `commands/`, and [`README.md`](https://github.com/phuryn/pm-skills/blob/main/README.md), then registering in [`.claude-plugin/marketplace.json`](https://github.com/phuryn/pm-skills/blob/main/.claude-plugin/marketplace.json).
- **No compiled code** is necessary; the Claude runtime performs file-system discovery to load new functionalities automatically.
- **Key files** include [`SKILL.md`](https://github.com/phuryn/pm-skills/blob/main/SKILL.md) for skill definitions, command markdown files for slash-commands, and [`marketplace.json`](https://github.com/phuryn/pm-skills/blob/main/marketplace.json) for plugin registration.

## Frequently Asked Questions

### Can I extend PM Skills without modifying the core repository?

Yes, you can extend PM Skills by forking the repository or adding to your local installation. Since extensions are pure markdown files, you can create new skills in your fork and submit pull requests, or maintain a private fork with custom skills. The file-driven architecture ensures your extensions remain compatible with the core system as long as they follow the [`SKILL.md`](https://github.com/phuryn/pm-skills/blob/main/SKILL.md) schema conventions.

### What is the difference between a skill and a command in PM Skills?

A **skill** is a self-contained expertise definition stored in `pm-toolkit/skills/<name>/SKILL.md` that describes inputs, processing logic, and output formats. A **command** is a user-facing interface stored in `pm-toolkit/commands/<name>.md` that defines a slash-command (e.g., `/metrics-audit`) and orchestrates one or more skills. Commands reference skills by name and handle argument passing, while skills contain the actual domain logic and response templates.

### Does adding new functionality require updating the marketplace.json file?

Updating [`marketplace.json`](https://github.com/phuryn/pm-skills/blob/main/marketplace.json) is only required when creating an entirely new plugin. When extending an existing plugin like `pm-toolkit`, you simply add files to the existing directory structure. The marketplace JSON points to the plugin's root directory, and Claude recursively discovers all markdown files within `skills/` and `commands/` subdirectories automatically during installation.

### How does Claude discover new skills after I add them?

Claude uses **file-system based discovery** configured through [`.claude-plugin/marketplace.json`](https://github.com/phuryn/pm-skills/blob/main/.claude-plugin/marketplace.json). During plugin installation or reload, the runtime scans each plugin's `skills/` directory for [`SKILL.md`](https://github.com/phuryn/pm-skills/blob/main/SKILL.md) files and `commands/` directory for markdown files defining slash-commands. Because discovery happens at the file level, new functionalities become available immediately after reinstallation without requiring server restarts or code compilation.