mcpbeat

Update Allowed Tools

vinta/update-allowed-tools

Use when creating or editing a skill that uses Bash commands, external tools, or skill invocations and the allowed-tools frontmatter may be incomplete

840 tokens
context cost
the whole folder, loaded on every use
1
files
instructions only
0
copies elsewhere
how many repositories repackaged it
123
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/vinta/hal-9000 --skill update-allowed-tools

What it tells the agent to use

found in the instruction text
Bash runs shell commands — read the instruction before connecting
Read reads your files
Write writes files
Edit edits files in place
WebFetch fetches pages from the network
WebSearch reads your files
Glob reads your files
Grep reads your files

The instruction itself

3 sections, as written by the author

Invoking this skill IS the request. If the user message looks empty, that is normal and expected, the task is fully specified here. Never ask what to do.

Overview

Analyzes a skill's full content, SKILL.md and any sibling files in the same directory, to find tools it references or requires, then compares against the skill's allowed-tools frontmatter to find missing entries.

Usage

/update-allowed-tools <skill name>
/update-allowed-tools @path/to/SKILL.md

Instructions

  • Parse argument: The argument is either a file path to a SKILL.md file, or a skill name/description. If no file path is provided, search for the skill using Glob in the current working directory (e.g., /skills//<name>/SKILL.md). If there is no argument at all, run git status and target the most recently modified skill file in the working tree.
  • Read the skill file and separate the YAML frontmatter from the body content. Also read any other files in the same directory (sibling files referenced by or bundled with the skill).
  • Extract declared allowed-tools: Parse all entries under allowed-tools: in the frontmatter.
  • Scan all skill content (SKILL.md body + sibling files) for tool usage. Look for:
  • Explicit tool names: e.g., Read, Write, Edit, Bash, WebFetch, WebSearch, Task, AskUserQuestion, Skill, etc.
  • Bash command patterns: e.g., git diff, git commit, make, npm, docker, python, curl, etc.
  • For Bash commands found, the required allowed-tool format is Bash(<command>:*) (e.g., git stash push needs Bash(git stash:*))
  • For file tools with path patterns (Read, Write, Edit), note the paths referenced (e.g., /tmp/ needs Read(//tmp/**))
  • Skill invocations: e.g., commit, Use the commit skill, Skill(commit). The required allowed-tool format is Skill(<name>) (e.g., commit needs Skill(commit))
  • Compare: For each tool detected in the body, check if it's covered by an entry in allowed-tools. Rules:
  • Glob, Grep, and Read are permission-free within the project directory. Only add read rules for files outside the project (e.g., Read(//tmp/**)).
  • Write and Edit prompt for approval by default, inside the project too. allowed-tools grants permission rather than restricting tools, so add entries scoped to the paths the skill is meant to modify (e.g., Edit(CLAUDE.md), Write(~/.config/**)).
  • Bash commands always need explicit Bash(<command>:*) entries.
  • A Bash pattern covers subcommands (e.g., Bash(git stash:*) covers git stash push).
  • Exact match counts as covered (e.g., WebSearch matches WebSearch).
  • Update the skill file: For any missing tools found, add them to the allowed-tools list in the skill's YAML frontmatter using the Edit tool. Then report what was added.
  • Validate: Re-read the updated file to confirm YAML frontmatter remains syntactically valid (proper indentation, no duplicate entries, correct list format).

How to use it

Copy the folder

Take vinta/update-allowed-tools from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.