Skill frontmatter `effort:` applied on slash-command invocation but ignored when the model invokes the skill via the Skill tool

Status Open
Maintainer reply None cached
Activity 1 comment · opened Jul 26, 2026

Summary

A skill's frontmatter effort: field is applied when the user invokes the skill via slash command (/skill-name), but silently ignored when the model invokes the same skill via the Skill tool mid-session. The docs make no distinction between the two invocation paths, so this looks like an implementation gap rather than intended behavior.

Environment

  • Claude Code v2.1.220 (CLI, macOS / darwin 25.2.0)
  • Session model: Fable 5 (claude-fable-5)
  • Session effort: high (settings.json effortLevel: "high"; no CLAUDE_CODE_EFFORT_LEVEL env var)

Repro

  1. Create a user skill (~/.claude/skills/my-design-skill/SKILL.md) with:
---
name: my-design-skill
description: "..."
effort: xhigh
---
  1. Path A — slash command: in a session running at effort: high, type /my-design-skill <topic>.
  • Observed: every subsequent API request runs at xhigh, starting with the first response. ✅ (matches docs)
  1. Path B — model-initiated Skill tool call: in a session running at effort: high, ask for work that makes the model call the skill itself (the transcript shows an assistant tool_use block with name: "Skill", input.skill: "my-design-skill").
  • Observed: every request before and after the Skill call stays at high, through the end of the session. ❌

Evidence

Verified from session transcripts (~/.claude/projects/**/<uuid>.jsonl): assistant events record the applied per-request effort in an "effort" field.

  • Path A session: all effort-bearing assistant events log "effort":"xhigh" immediately after the slash invocation (notably, the transcript contains zero Skill tool_use events — the slash path injects the skill body directly and reconfigures the request).
  • Path B session (same day, same CC version, skill file unchanged): 66/66 effort-bearing assistant events log "effort":"high", including all events after the Skill tool_use that loaded the skill.
  • Control: agent frontmatter effort: works correctly on both paths — a subagent whose definition pins effort: xhigh logs "effort":"xhigh" on 37/37 requests while the parent session runs at high. The gap is specific to skill frontmatter + Skill-tool invocation.

Expected

Docs (Extend Claude with skills, Model configuration) state:

effort — Effort level when this skill is active. Overrides the session effort level.

and describe both invocation paths as equivalent ("You can type /skill-name to invoke it directly, and Claude can load it automatically when relevant"). Nothing restricts effort: to slash-command invocation, so the override should apply whenever the skill is active, regardless of who invoked it.

Actual

The frontmatter-to-session-config translation appears to run only in the slash-command dispatch path. The Skill tool path injects the skill body as a tool result without applying effort:.

Related issues (same pattern on sibling frontmatter fields)

  • #45191 — skill frontmatter model: ignored at runtime (closed as not planned / stale)
  • #17283 — Skill tool does not honor context: fork / agent: frontmatter
  • #45714 — context: fork ignored for plugin skills

These share the same shape: frontmatter fields that require session-level reconfiguration are honored by the slash-command dispatch path but dropped by the Skill tool path.

Ask

Either apply skill frontmatter effort: (and ideally the sibling execution-control fields) on the Skill tool invocation path, or document explicitly that these fields only take effect on slash-command invocation.

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗