# How to Chain Multiple PM Skills for Custom Commands

> Chain multiple pm-skills for custom commands by creating Markdown files that reference skills sequentially, passing data through conversation context. Learn how to automate your workflow with Claude.

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

---

**You chain multiple pm-skills together by creating a Markdown command file in a plugin's `commands/` directory that references individual skills from the `skills/` folder using the `**Apply the <skill-name> skill**` pattern, allowing Claude to execute them sequentially while passing data through conversation context.**

The **pm-skills** marketplace by `phuryn/pm-skills` treats complex product management workflows as composable units. Chaining multiple pm-skills together allows you to build custom commands that automate multi-step processes—from initial discovery to go-to-market launch—using only Markdown files without modifying source code.

## Understanding the PM Skills Architecture

The repository organizes functionality into two distinct layers:

- **Skills** are reusable frameworks defined in `pm-<plugin>/skills/<skill-name>/SKILL.md`. Each skill contains the logic for a specific product management task, such as `brainstorm-ideas-new` or `prioritize-assumptions`.
- **Commands** are orchestration files stored in `pm-<plugin>/commands/<command-name>.md`. These Markdown files chain multiple skills together into executable workflows.

When Claude processes a command, it automatically loads and executes referenced skills in sequence, passing intermediate results through the conversation context.

## Creating a Custom Command That Chains Skills

To build your own chained workflow, create a new Markdown file in the appropriate plugin directory:

1. **Select a plugin folder** (e.g., `pm-product-discovery` or `pm-go-to-market`).
2. **Create a Markdown file** in the plugin's `commands/` directory (e.g., [`pm-go-to-market/commands/quick-launch.md`](https://github.com/phuryn/pm-skills/blob/main/pm-go-to-market/commands/quick-launch.md)).
3. **Add YAML frontmatter** at the top describing the command and optional arguments.
4. **Reference skills** in the workflow section using the `**Apply the <skill-name> skill**` syntax.
5. **Save the file**—the command becomes instantly available to Claude-Code or Claude-Cowork.

## Example: The /discover Command

The `/discover` command in [`pm-product-discovery/commands/discover.md`](https://github.com/phuryn/pm-skills/blob/main/pm-product-discovery/commands/discover.md) demonstrates chaining four distinct skills:

```markdown
---
description: Run a full discovery cycle
---

# Discovery Command

Apply the **brainstorm-ideas-new** skill.

Then apply the **identify-assumptions-new** skill.

Apply the **prioritize-assumptions** skill.

Finally, apply the **brainstorm-experiments-new** skill.

```

This sequence executes skills in order: generating ideas, identifying assumptions, prioritizing them, and designing experiments. The skills are defined in [`pm-product-discovery/skills/brainstorm-ideas-new/SKILL.md`](https://github.com/phuryn/pm-skills/blob/main/pm-product-discovery/skills/brainstorm-ideas-new/SKILL.md), [`pm-product-discovery/skills/identify-assumptions-new/SKILL.md`](https://github.com/phuryn/pm-skills/blob/main/pm-product-discovery/skills/identify-assumptions-new/SKILL.md), [`pm-product-discovery/skills/prioritize-assumptions/SKILL.md`](https://github.com/phuryn/pm-skills/blob/main/pm-product-discovery/skills/prioritize-assumptions/SKILL.md), and [`pm-product-discovery/skills/brainstorm-experiments-new/SKILL.md`](https://github.com/phuryn/pm-skills/blob/main/pm-product-discovery/skills/brainstorm-experiments-new/SKILL.md).

## Building a Complex Workflow: The /quick-launch Example

For a sophisticated go-to-market workflow, create [`pm-go-to-market/commands/quick-launch.md`](https://github.com/phuryn/pm-skills/blob/main/pm-go-to-market/commands/quick-launch.md) with the following content:

```markdown
---
description: End‑to‑end launch workflow that builds an ICP, a GTM plan, and a growth loop
argument-hint: "<product name>"
---

# /quick-launch – Fast Go‑to‑Market Launch

## Workflow

### Step 1: Build the Ideal Customer Profile

Apply the **ideal-customer-profile** skill:

- Ask the user for the product name and primary market.
- Generate an ICP with demographics, behaviors, and needs.

### Step 2: Draft the GTM Strategy

Apply the **gtm-strategy** skill:

- Use the ICP from Step 1.
- Produce a channel mix, messaging pillars, and success metrics.

### Step 3: Design a Growth Loop

Apply the **growth-loops** skill:

- Based on the GTM plan, suggest a self‑reinforcing loop.
- Include high‑level tactics and effort estimates.

```

When a user runs `/quick-launch Super‑AI Writing Assistant`, Claude executes `ideal-customer-profile` (defined in [`pm-go-to-market/skills/ideal-customer-profile/SKILL.md`](https://github.com/phuryn/pm-skills/blob/main/pm-go-to-market/skills/ideal-customer-profile/SKILL.md)), passes that output to `gtm-strategy` (from [`pm-go-to-market/skills/gtm-strategy/SKILL.md`](https://github.com/phuryn/pm-skills/blob/main/pm-go-to-market/skills/gtm-strategy/SKILL.md)), then feeds both into `growth-loops` (from [`pm-go-to-market/skills/growth-loops/SKILL.md`](https://github.com/phuryn/pm-skills/blob/main/pm-go-to-market/skills/growth-loops/SKILL.md)).

## How Data Flows Between Chained Skills

Data hand-off occurs automatically via **conversation context**. Each skill's output becomes the next skill's input without explicit variable passing. When you chain pm-skills together, Claude maintains the cumulative state across the entire workflow, allowing downstream skills to reference earlier outputs naturally.

## Testing Your Custom Command

To verify your chained command works:

1. Place your Markdown file in `pm-<plugin>/commands/`.
2. Load the plugin in Claude-Code or Claude-Cowork.
3. Invoke the command: `/quick-launch ProductName`.
4. Observe the sequential execution of each skill section.

## Summary

- **Chain multiple pm-skills** by creating Markdown files in a plugin's `commands/` directory.
- **Reference skills** using the `**Apply the <skill-name> skill**` pattern.
- **Data flows** automatically between skills via conversation context.
- **No code changes** are required—only Markdown files with YAML frontmatter.
- **Example implementations** include `/discover` in [`pm-product-discovery/commands/discover.md`](https://github.com/phuryn/pm-skills/blob/main/pm-product-discovery/commands/discover.md) and `/quick-launch` in [`pm-go-to-market/commands/quick-launch.md`](https://github.com/phuryn/pm-skills/blob/main/pm-go-to-market/commands/quick-launch.md).

## Frequently Asked Questions

### Do I need to write code to chain pm-skills together?

No. The pm-skills marketplace uses pure Markdown files. You create a command by adding a new `.md` file with YAML frontmatter in the `commands/` directory. The system parses these files to load and execute referenced skills automatically without requiring code compilation or deployment.

### Where should I save custom command files?

Save custom commands in `pm-<plugin>/commands/<command-name>.md` within your plugin folder. For example, [`pm-go-to-market/commands/quick-launch.md`](https://github.com/phuryn/pm-skills/blob/main/pm-go-to-market/commands/quick-launch.md) makes the `/quick-launch` command available immediately upon saving the file.

### How does data pass between skills in a chain?

Data passes implicitly through conversation context. Each skill appends its output to the conversation, and subsequent skills in the chain can access this cumulative context. This allows seamless hand-offs where one skill's deliverables become the next skill's inputs without explicit configuration or variable declaration.

### Can I chain skills from different plugins?

Yes, though skills typically reside within their parent plugin's `skills/` directory. You can reference any skill by name if Claude has loaded the plugin. For explicit loading, use the `/plugin-name:skill-name` syntax before running your custom command.