Mastering Claude Co-Work
Course
Mastering Claude Co-Work
Module 14 of 18

Advanced Skills — Composition and Orchestration

Build skills that spawn other skills — and design API-description orchestrators that give Co-Work a simple endpoint to call.

What you'll learn

Design a composable skill architecture with a parent orchestrator and at least two sub-skills
Create an API-description skill that describes an endpoint and lets Co-Work reason about the implementation
Evaluate when to decompose a complex skill into sub-skills vs. keeping it monolithic
Apply the skill self-improvement loop and conflict resolution strategies to a growing skills library

When Single Skills Break

Left: one large monolithic skill block doing everything. Right: orchestrator plus three sub-skills with single responsibility each.

You built your first skills as single, self-contained instruction sets. That works well — until a skill grows complex enough that maintaining it becomes a problem in itself.

The signs a skill needs decomposition are recognizable:

  • It runs for five minutes or more and involves multiple distinct phases
  • Updating one part of the skill regularly breaks something else
  • You cannot describe what the skill does in one sentence without using "and then"
  • You want to reuse a piece of it in a different workflow but cannot extract it

The software engineering principle that fixes this is the same one that fixes it in code: single responsibility. Each skill should do one thing. An orchestrator skill coordinates the others. This is the composable sub-skill architecture.

The Composable Sub-Skill Architecture

Annotated orchestrator skill: context block, available sub-skills listed by name and trigger, decision logic section, output assembly section

The architecture has two types of skills:

Sub-skills each handle one specific task. They can be triggered directly by name, or they can be invoked by the orchestrator. They are small, focused, and independently testable. When you need to update the LinkedIn formatting logic, you edit only the LinkedIn sub-skill — nothing else breaks.

The orchestrator skill knows about all the sub-skills, decides when to call each, and assembles the final output. It is the coordinator, not the executor.

A practical example: start with a monolithic "Content Repurposer" skill that extracts a transcript, writes LinkedIn copy, formats an email, and posts a summary. Decomposed, this becomes:

  • Content Extractor — reads source material and extracts key points
  • LinkedIn Writer — formats extracted content for LinkedIn voice and length
  • Email Formatter — formats the same content as a newsletter section
  • Content Orchestrator — the parent skill that calls the above three in sequence

The prompt to generate this structure from an existing skill: "Split this skill into three sub-skills, with a parent skill that orchestrates all of them." Review the generated structure, refine the orchestrator's decision logic, then test each sub-skill independently before testing the full pipeline.

Orchestrator Skill Structure

A well-designed orchestrator skill has four sections:

  1. Context — what this orchestrator manages and what its scope is
  2. Available sub-skills — listed by name and their trigger phrase
  3. Decision logic — when to call which sub-skill, in what order, and under what conditions
  4. Output assembly — how to combine sub-skill outputs into the final deliverable

The decision logic section is what separates a real orchestrator from a skill that just mentions other skills. It must specify conditions: "If the input is a URL, call Content Extractor first. If the input is already text, skip extraction and go directly to LinkedIn Writer."

The API-Description Paradigm

Comparison: Traditional skill (step-by-step instructions, brittle to UI changes) vs API-Description skill (describe endpoint, Claude reasons about implementation, adapts to API changes)
Source Attribution

The API-description paradigm was articulated by Felix Rieseberg, an Anthropic engineer, at a developer event. His framing: "Dear Claude, here is the endpoint — you figure out the implementation." This pattern is not in official public documentation. It is attributed to Felix as practitioner insight from an Anthropic engineer, not official product guidance.

Traditional skills are brittle because they describe steps. "Click the Export button, wait for the dialog, select CSV format, click Download." When the UI changes — and it will — the skill breaks.

The API-description paradigm inverts this. Instead of describing steps, you describe the service:

The Jira REST API is at https://your-domain.atlassian.net/rest/api/3/
Authentication: Basic auth with email + API token.
When I ask you to manage issues, use the appropriate Jira API
endpoints to accomplish the task. Documentation reference:
https://developer.atlassian.com/cloud/jira/platform/rest/v3/

Co-Work reasons about the API to accomplish the task. When the API adds a new endpoint or changes a parameter name, the skill adapts rather than breaking. The skill describes the contract; Co-Work figures out the implementation.

This approach works best for well-documented APIs with stable base URLs: Jira, GitHub, Notion, Linear, Salesforce, any service with a public REST API. It works less well for services where the documentation is poor or the API is frequently breaking.

Managing Skill Conflicts at Scale

As your skills library grows past 10 or 15 skills, a new problem emerges: Co-Work may activate the wrong skill. It reads through skill descriptions to determine which one matches your request — and when descriptions overlap, the wrong one fires.

Skills Library at 20+: Conflict Risk

When your skills library reaches 20 or more skills, toggle off any skills you are not actively using. This is a community practice noted by Brooke Wright and Jack Roberts. Unused skills remain available but do not compete for activation — reducing the chance Co-Work selects the wrong one for a given request.

Three strategies for conflict prevention:

1. Toggle off inactive skills. Skills you use less than once a week should be toggled off. They are still there when you need them; they just do not compete for every request.

2. Name orchestrators with unique, unambiguous triggers. "Run Content Pipeline" is unambiguous. "Content" is not. The trigger phrase should be specific enough that it cannot be confused with a sub-skill name. Jack Roberts recommends treating trigger words as reserved terms — do not use them in any other context in your instructions.

3. Add disambiguation notes to skill descriptions. If two skills handle similar content, add a line to each: "Use this ONLY for [specific context], NOT for [the other context]." These notes are instructions to Co-Work about when not to activate the skill.

The Weekly Orchestrator Review

Orchestrators are the most important skills to keep current. They coordinate everything, so when any sub-skill changes, the orchestrator may need an update. Jack Roberts recommends a weekly review cadence for the orchestrator layer — not for every skill, but for the orchestrators that coordinate them.

A five-minute weekly check: trigger each orchestrator with a test input. Does it call the right sub-skills? Does the output assembly still look correct? If a sub-skill changed this week, update the orchestrator's description of it. This prevents silent drift where the orchestrator's mental model of a sub-skill no longer matches what the sub-skill actually does.

Build-Along Exercise

Decompose a Skill and Build Your First Orchestrator

Choose one complex skill from your library — ideally one that has multiple sequential steps or that you have been hesitant to update because changes break things.

1
Select the skill to decompose. Pick a skill that does at least three distinct things. If you do not have one yet, write a "Content Pipeline" skill that extracts key points from a URL, drafts a LinkedIn post, and drafts an email — then decompose it in the next step.
2
Ask Co-Work to decompose it. Open the skill, then say: "Split this skill into three sub-skills, with a parent orchestrator skill that coordinates them. Each sub-skill should have a single responsibility. The orchestrator should have explicit decision logic for when to call each sub-skill."
3
Review the generated structure. Check that each sub-skill has one clear responsibility. Check that the orchestrator has a context section, a list of available sub-skills, decision logic, and output assembly instructions. Refine anything that is vague.
4
Test the orchestrator end-to-end. Trigger it with a real input. Watch which sub-skills it calls and in what order. Verify the final output is assembled correctly.
5
Test one sub-skill in isolation. Trigger it directly by name with a relevant input. Verify it produces the right output without needing the orchestrator. This confirms it has genuine single-responsibility and can be reused elsewhere.

Success criteria: One orchestrator skill and at least two sub-skills saved to your library. Orchestrator tested end-to-end with a real input. At least one sub-skill tested in isolation and confirmed to work standalone.

Knowledge Check
I have decomposed at least one complex skill into sub-skills with an orchestrator — and tested both the orchestrator and a sub-skill independently
I understand the API-description paradigm: describe the service endpoint, let Co-Work reason about the implementation — more resilient than step-by-step instructions
My orchestrator skill has all four sections: context, available sub-skills, decision logic, and output assembly
I know how to handle skill conflicts: toggle off inactive skills, use unique trigger names, add disambiguation notes
I have a plan to review orchestrator skills weekly so they stay synchronized with any sub-skill changes