claude-code - 💡(How to fix) Fix [FEATURE] Allow skills to invoke other skills with per-skill model selection [1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
anthropics/claude-code#52585Fetched 2026-04-24 06:03:13
View on GitHub
Comments
1
Participants
2
Timeline
3
Reactions
0
Timeline (top)
labeled ×2commented ×1

Fix Action

Fix / Workaround

What I want: Modular skills that can be composed — either as a pipeline (orchestrator) or behind a dispatcher (router) — where each sub-skill declares its own model requirement and is invoked on that model.

  • Breaks pipeline mode. Each handoff is a full context reset. The orchestrator can't drive a multi-stage pipeline end-to-end — I become the glue between stages.
  • Context loss. Summarize-to-file is lossy by design. Nuance, intermediate reasoning, and tool-call history don't survive the round trip.
  • Manual overhead. Every model switch costs me a file write, a new chat, a re-share, and a re-prime. For a 3-model pipeline (Haiku → Sonnet → Opus), that's two manual handoffs per run.
  • No router pattern. A dispatcher skill that picks a specialist based on input can't actually hand execution to that specialist on a different model — it can only tell me to go do it myself.
  • Not automatable. The whole point of skills is codifying a workflow. A workflow that requires human-driven chat switching isn't a workflow, it's instructions.

Other workarounds considered:

RAW_BUFFERClick to expand / collapse

Preflight Checklist

  • I have searched existing requests and this feature hasn't been requested yet
  • This is a single feature request (not multiple features)

Problem Statement

Current limitation: A skill runs on whatever model the user is chatting with. There's no way for a skill to delegate work to another skill, and no way to specify that a particular skill should run on a particular model regardless of the caller's current model.

What I want: Modular skills that can be composed — either as a pipeline (orchestrator) or behind a dispatcher (router) — where each sub-skill declares its own model requirement and is invoked on that model.

Example: A research-and-draft orchestrator skill that does three things:

  1. Haiku — parse the user's request, extract entities, classify intent. Cheap, fast, high-volume.
  2. Sonnet — run the research loop (search, fetch, synthesize sources into structured notes). Balanced cost/quality for iterative tool use.
  3. Opus — take the structured notes and produce the final long-form draft. Expensive, used once, where reasoning quality matters most.

Today I'd have to either run the whole thing on Opus (wasteful) or on Sonnet (my preferred middle ground). I want the orchestrator skill to invoke each sub-skill on its declared model and stitch the results together.

Why this matters:

  • Cost control. Most orchestration work is classification, routing, and glue — Haiku-shaped problems. Reserving Opus for the one step that needs it changes the economics of complex skills.
  • Composability. Modular skills are only useful if you can combine them. Right now "skill A calls skill B" isn't a primitive.
  • Right tool for the job. A router skill picking between specialists should itself be cheap; the specialists it routes to can be expensive where justified.

Proposed Solution

Shape of the feature:

  • Skills can declare a preferred/required model in their metadata.
  • Skills can invoke other skills (by name or capability), and the invoked skill runs on its declared model, not the caller's.
  • Results return to the caller, which continues on its own model.

Note: this is similar to #49363

Alternative Solutions

Manual model swap via stop-and-summarize. If I want a different model for part of the work, I ask the orchestrator to stop at a checkpoint, summarize state to a file, and hand off. I then open a new chat on the target model and share the file to reload context.

Why this doesn't work:

  • Breaks pipeline mode. Each handoff is a full context reset. The orchestrator can't drive a multi-stage pipeline end-to-end — I become the glue between stages.
  • Context loss. Summarize-to-file is lossy by design. Nuance, intermediate reasoning, and tool-call history don't survive the round trip.
  • Manual overhead. Every model switch costs me a file write, a new chat, a re-share, and a re-prime. For a 3-model pipeline (Haiku → Sonnet → Opus), that's two manual handoffs per run.
  • No router pattern. A dispatcher skill that picks a specialist based on input can't actually hand execution to that specialist on a different model — it can only tell me to go do it myself.
  • Not automatable. The whole point of skills is codifying a workflow. A workflow that requires human-driven chat switching isn't a workflow, it's instructions.

Other workarounds considered:

  • Run everything on the highest-tier model. Works but defeats the cost argument — most steps don't need Opus.
  • Run everything on the lowest-tier model. Output quality collapses at the stages that actually need reasoning.
  • External orchestration (API-level). Feasible but moves the work out of Claude skills entirely, losing the ergonomics and composability that make skills useful in the first place.

Priority

High - Significant impact on productivity

Feature Category

Configuration and settings

Use Case Example

Use case example: Research-and-draft pipeline for freelance articles

I write freelance articles and want a skill that takes a client brief and produces a researched first draft. The work naturally splits into three stages with very different cost/quality profiles.

The skill: article-pipeline — an orchestrator that chains three sub-skills.

Step-by-step

1. I invoke the orchestrator with a client brief.

"Draft an 800-word article on the impact of the EU AI Act on SaaS startups. Target audience: technical founders. Tone: practical, not academic."

2. Stage one — brief-parser runs on Haiku.

Extracts structured data from the brief: topic, word count, audience, tone, angle, deliverable type. Returns a JSON object. This is pattern-matching work — Haiku handles it in under a second for pennies. Running it on Opus would be wasteful.

3. Stage two — research-agent runs on Sonnet.

Takes the parsed brief and runs an iterative research loop: web searches, fetches primary sources (the Act itself, commentary, affected company statements), synthesizes findings into structured notes with citations. This is tool-heavy, multi-turn work where Sonnet's balance of reasoning and speed matters — Haiku would miss nuance in legal text, Opus would burn budget on what is ultimately information gathering.

4. Stage three — draft-writer runs on Opus.

Takes the structured notes and produces the 800-word draft. This is the one step where reasoning quality directly determines output quality: voice, argument structure, transitions, choosing what to cut. Opus earns its cost here. It runs once, on pre-digested input, so the token count is bounded.

5. Orchestrator returns the draft to me along with the research notes (so I can verify claims) and the parsed brief (so I can confirm the skill interpreted me correctly).

What the economics look like

Rough shape per run:

  • Brief-parser on Haiku: negligible.
  • Research-agent on Sonnet: moderate — several tool calls, mid-size context.
  • Draft-writer on Opus: small-to-moderate — one call, pre-digested input.

Versus running the whole pipeline on Opus, which would spend Opus rates on 20+ research tool calls that don't need Opus-level reasoning. Versus running it all on Haiku, where the draft would be unusable.

Why the workaround fails here

I can't stop-and-summarize between stages — the research stage is iterative and stateful, with tool-call history that matters for the draft. Dumping it to a file loses the reasoning trail. And doing two manual handoffs per article (Haiku → Sonnet → Opus) makes the skill worse than just writing the article myself.

Router variant

Same three sub-skills, different wrapper: article-router looks at the brief and picks one specialist. "This is a 200-word news summary" routes to a Haiku-only quick-draft skill. "This is a 2,000-word deep analysis" routes to the full pipeline above. The router itself is Haiku-shaped work — cheap classification — dispatching to specialists that run on their own declared models.

Additional Context

No response

extent analysis

TL;DR

To achieve modular skills that can be composed and run on different models, consider implementing a feature that allows skills to declare their preferred model in metadata and invoke other skills on their declared model.

Guidance

  • Introduce a metadata field for skills to specify their required model, enabling skills to run on the most suitable model for their task.
  • Develop an invocation mechanism that allows skills to call other skills on their declared model, rather than the caller's model.
  • Implement a results return mechanism to stitch together the outputs from different skills running on various models.
  • Consider the economics and composability benefits of such a system, where skills can be combined and optimized for cost and performance.
  • Evaluate the potential for a router or dispatcher skill that can pick specialists based on input and hand off execution to them on their declared models.

Example

// Skill metadata example
{
  "name": "research-agent",
  "model": "Sonnet"
}

// Invocation example
{
  "skill": "article-pipeline",
  "stages": [
    {
      "skill": "brief-parser",
      "model": "Haiku"
    },
    {
      "skill": "research-agent",
      "model": "Sonnet"
    },
    {
      "skill": "draft-writer",
      "model": "Opus"
    }
  ]
}

Notes

The proposed solution requires significant changes to the skill invocation and execution mechanism. It is essential to consider the potential impact on existing skills and the overall system architecture.

Recommendation

Apply a workaround by manually swapping models between skill invocations, although this approach has significant limitations and drawbacks, as described in the issue. A more robust solution would involve implementing the proposed feature to enable modular skills that can be composed and run on different models.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

claude-code - 💡(How to fix) Fix [FEATURE] Allow skills to invoke other skills with per-skill model selection [1 comments, 2 participants]