Skip to content

Skill allowed-tools doesn't grant permission for Bash commands #14956

@KyussCaesar

Description

@KyussCaesar

Description

When a skill defines allowed-tools in its SKILL.md frontmatter, the permission is reported as active but Bash commands matching the pattern are still denied.

Steps to Reproduce

  1. Create a skill with allowed-tools defined:
---
name: speak
description: Speak aloud using macOS TTS
allowed-tools: Bash(say -v "Samantha":*)
---
  1. Add Skill(speak) to the allow list in ~/.claude/settings.json:
{
  "permissions": {
    "allow": ["Skill(speak)", "Read"]
  }
}
  1. Run: claude -p 'demonstrate the speak skill' --output-format stream-json --verbose

Expected Behavior

The Bash command say -v "Samantha" "..." should be auto-allowed because:

  • Skill(speak) is in the allow list
  • The skill's allowed-tools grants Bash(say -v "Samantha":*)

Actual Behavior

The skill invocation succeeds and reports the correct allowedTools:

"tool_use_result": {
  "success": true,
  "commandName": "speak",
  "allowedTools": ["Bash(say -v \"Samantha\":*)"]
}

But the subsequent Bash call is denied:

{
  "type": "user",
  "message": {
    "content": [
      {
        "type": "tool_result",
        "content": "This command requires approval",
        "is_error": true
      }
    ]
  }
}

The command attempted matches the pattern exactly:

say -v "Samantha" "Hello Antony! This is a demonstration..."

Workaround

Adding Bash(say:*) directly to the global allow list works, but defeats the purpose of skill-scoped allowed-tools.

Environment

  • Claude Code version: 2.0.75
  • OS: macOS (Darwin 25.1.0)
  • Mode: -p (print/prompt mode)

Additional Notes

We also discovered that ~/.claude/settings.local.json doesn't seem to be a valid location for user settings — permissions placed there weren't loaded. Only ~/.claude/settings.json worked.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions