feat(skills): add disable-model-invocation flag to omit user-only skills from the agent#309
Open
pedrobruning wants to merge 5 commits into
Open
Conversation
pedrobruning
force-pushed
the
feat/skill-disable-model-invocation
branch
from
July 8, 2026 14:46
eb1d233 to
086740b
Compare
Skills marked with `disable-model-invocation: true` remain loadable and user-invocable via /skill:name, but are omitted from the model-facing skill index.
Skills with disable-model-invocation set are filtered out of the <available_skills> block so the model never auto-triggers them.
pedrobruning
force-pushed
the
feat/skill-disable-model-invocation
branch
from
July 9, 2026 12:43
086740b to
eba02c8
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivation
Every loaded skill is currently advertised to the model in the system prompt's
<available_skills>block, so the model may proactively read and apply anyskill. Some skills should be user-only — invocable explicitly via
/skill:<name>but never surfaced to (or auto-triggered by) the model. This isimportant for skills with side effects (releases, deployments, messaging) or
workflows that should only run when the user asks for them.
Changes
disable_model_invocationfield to theSkilldataclass, parsed from adisable-model-invocation: truefrontmatter key inSKILL.md(
src/tau_coding/skills.py).format_skills_for_prompt()so they neverappear in the system prompt (
src/tau_coding/system_prompt.py), and out ofbuild_skill_index()for consistency.expand_skill_command()looks skills up from thefull loaded set, so
/skill:<name>still expands a disabled skill.website/content/guides/skills-and-prompts.md.Behavior
/skill:<name>worksdisable-model-invocation: truedisable-model-invocation: falseA skills directory containing only disabled skills yields no
<available_skills>block at all.
Tests / checks
Built TDD-first (red → green) with atomic commits. Added focused tests in
tests/test_skills.py(frontmatter parsing,/skill:still expands disabledskills, index omission) and
tests/test_system_prompt.py(prompt exclusion,all-disabled → no section).
uv run pytest— 710 passeduv run ruff check .— passeduv run ruff format --check .— passeduv run mypy— no issuesCompatibility
Backward compatible. The new field defaults to
False, so existing skills withno frontmatter key behave exactly as before.