Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/vinta/hal-9000/update-allowed-toolsnpx skills add vinta/hal-9000 --skill update-allowed-toolsgit clone --depth 1 https://github.com/vinta/hal-9000Wrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/vinta/hal-9000/update-allowed-tools)<a href="https://agentmods.dev/skills/vinta/hal-9000/update-allowed-tools"><img src="https://agentmods.dev/badge/skills/vinta/hal-9000/update-allowed-tools.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00038 | $0.00939 |
| Opus 5 | $0.00019 | $0.00469 |
| Sonnet 5 | $0.00008 | $0.00188 |
| Haiku 4.5 | $0.00004 | $0.00094 |
Grade A, and why
update-allowed-tools scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 4d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
- Bash command patterns: e.g., `git diff`, `git commit`, `make`, `npm`, `docker`, `python`, `curl`, etc. How it starts
The opening of the file, as written. The whole thing — 56 lines — stays where its author put it; the contents beside it link to each section on GitHub.
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 and entries that grant nothing.
allowed-tools is permission mechanics only: an entry earns its place by removing a permission prompt the skill would otherwise hit. It is not a manifest of the tools the skill uses.
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, rungit statusand 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 that prompt by default: e.g.,
Write,Edit,Bash,WebFetch,WebSearch, andmcp__*tools. - 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 pushneedsBash(git stash:*)) - For file tools with path patterns (Read, Write, Edit), note the paths referenced (e.g.,
/tmp/needsRead(//tmp/**))
- Explicit tool names that prompt by default: e.g.,
-
Compare: For each tool detected in the body, check if it's covered by an entry in
allowed-tools. Rules:Glob,Grep, andReadare permission-free within the project directory. Only add read rules for files outside the project (e.g.,Read(//tmp/**)).WriteandEditprompt for approval by default, inside the project too.allowed-toolsgrants 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/**)).Bashcommands always need explicitBash(<command>:*)entries.- A Bash pattern covers subcommands (e.g.,
Bash(git stash:*)coversgit stash push). - Exact match counts as covered (e.g.,
WebSearchmatchesWebSearch). Skill(...),AskUserQuestion, andAgententries grant nothing: skill invocation, asking the user, and spawning subagents never prompt by default, and where a user has gated them with ask/deny rules, a grant cannot override those rules. Never add these; remove any already present.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 4d ago First seen · 56 lines · 38 tokens per session scan A dc10d9e36bc7
update-allowed-tools is a skill published in the GitHub repository vinta/hal-9000 (125 stars, last pushed 6d ago), licensed MIT. It adds 38 tokens to every session and 939 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
configure-nightwatch
Configures Laravel Nightwatch data collection, sampling rates, filtering rules, and redaction policies. Use when setting up Nightwatch, managing data volume, protecting sensitive data (PII), or optimizing event collection for production workloads.
laravel-actions
Build, refactor, and troubleshoot Laravel Actions using lorisleiva/laravel-actions. Use when implementing reusable action classes (object/controller/job/listener/command), converting service classes/controllers/jobs into actions, orchestrating workflows via faked actions, or debugging action entrypoints and wiring.
debugging-output-and-previewing-html-using-ray
Use when user says "send to Ray," "show in Ray," "debug in Ray," "log to Ray," "display in Ray," or wants to visualize data, debug output, or show diagrams in the Ray desktop application.
fortify-development
ACTIVATE when the user works on authentication in Laravel. This includes login, registration, password reset, email verification, two-factor authentication (2FA/TOTP/QR codes/recovery codes), passkeys, profile updates, password confirmation, or any auth-related routes and controllers. Activate when the user mentions…
pest-testing
Use this skill for Pest PHP testing in Laravel projects only. Trigger whenever any test is being written, edited, fixed, or refactored — including fixing tests that broke after a code change, adding assertions, converting PHPUnit to Pest, adding datasets, and TDD workflows. Always activate when the user asks how to…
configuring-horizon
Use this skill whenever the user mentions Horizon by name in a Laravel context. Covers the full Horizon lifecycle: installing Horizon (horizon:install, Sail setup), configuring config/horizon.php (supervisor blocks, queue assignments, balancing strategies, minProcesses/maxProcesses), fixing the dashboard…