Add --tag/--category group selection to skill install and uninstall (#102) - #108
Merged
Conversation
devrimcavusoglu
force-pushed
the
feature/install-tag-filter
branch
from
August 19, 2026 13:14
27b2ab4 to
3fa77bc
Compare
devrimcavusoglu
changed the base branch from
main
to
feature/init-no-instructions
August 19, 2026 13:14
Owner
Author
Review (adversarial pass against #102)DoD: all three items hold (mutual exclusion chosen and enforced consistently in help/docs/CHANGELOG; empty match is exit 1 with a message; Findings and what changed in
Noted, not changed: no-args Stacked on #107 (base |
5 tasks
devrimcavusoglu
force-pushed
the
feature/init-no-instructions
branch
from
August 19, 2026 13:47
196d7a8 to
9158cfc
Compare
devrimcavusoglu
changed the base branch from
feature/init-no-instructions
to
main
August 19, 2026 13:50
…102) Factor the tag/category filter that skill list uses into a shared skillFilter (flags, help text, and match semantics in one place) and accept it on install and uninstall. The filter resolves against the registry at --scope; names and filters are mutually exclusive (exit 2); an empty match is an error rather than a silent no-op. uninstall narrows the group to what is installed on the platform and skips the rest. --enforce-budget counts the resolved group. Closes #102 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…e warnings - The budget test now seeds the platform to threshold-1 and asserts the refusal (the previous happy-path test passed with the pre-fix code). - Filter resolution returns registry parse warnings; they are appended to the empty-match error and printed to stderr otherwise, as `skill list` does, so a malformed SKILL.md is not a silent reason for "matches nothing". - resolveActionTargets takes a lazy registry constructor, removing the duplicated names-path in uninstall. - Docs: ghost-skill note for uninstall --tag, group-install examples in the guides, roadmap line dropped. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
devrimcavusoglu
force-pushed
the
feature/install-tag-filter
branch
from
August 19, 2026 13:50
3fa77bc to
3c155ae
Compare
devrimcavusoglu
added a commit
that referenced
this pull request
Aug 19, 2026
…rm copies (#103) (#109) * Add install.exclude frontmatter to keep companion files out of platform copies (#103) skill install copied the whole skill tree, so eval corpora and fixtures landed in every agent's context. Model an author-owned `install.exclude` list of path.Match globs on Skill/frontmatter; match each relative path and its leading directories in skill.MatchExclude; thread the patterns through a new platform.InstallOptions argument on Platform.Install so copyDir prunes matched files and directories. The registry always keeps the full directory. skill validate errors on malformed, absolute, or `..` patterns and anything matching SKILL.md, and warns when a pattern matches nothing or excludes a body-referenced file. Closes #103 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Address review: diff install.exclude, pass through install.* extras, refuse bad patterns at install - skill diff reports a changed install.exclude list (it went blind once install became a modeled key) and diffs install.* extras. - InstallConfig gets an inline Extra map (+ collision guard) so other keys under install: round-trip like every other unmodeled key; `exclude` accepts a bare string as a one-element list. - skill install refuses a skill whose patterns fail validation instead of silently copying what path.Match could not parse; `**` is rejected outright rather than degrading to `*`. - Only the literal SKILL.md is an error: wildcards that also match it are legal since MatchExclude never excludes the manifest. Backslashes are left alone (path.Match escape), validator field carries [index] for multi-entry lists. - Docs: no `--files` flag; exact matching/escape/compat rules; roadmap line dropped; json tag omitzero. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Restore skill import after restack; drop emptied roadmap heading #108 removed the then-unused skill import from skill_install.go and #109 needs it again for ValidateExcludePatterns. The four near-term roadmap entries are all closed by this stack, so the group heading goes too. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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.
Summary
Fixes #102.
skill installandskill uninstallaccept--tag,--category(repeatable), and--include-untagged— the same filtersskill listhas. They're defined once as askillFilterinskill_helpers.go(flags + help + match semantics), andskill listis refactored onto it too, so the three commands can't drift.--scope(consistent with how install already doesreg.Get(name, scopeVal)); resolved names are processed in sorted order and reported per-skill exactly like a name batch.MinimumNArgsplain error).no registered skills match --tag X in <scope> scope(exit 1), never a silent no-op.uninstall --tagresolves the group from the registry, then intersects withInstalledSkills(scope): tagged-but-not-installed skills are skipped rather than reported as per-skill failures; nothing installed →no installed skills match --tag X on <platform> (<scope> scope).--enforce-budgetcounts the resolved group.Issue DoD
--tagonskill installandskill uninstall(plus--category, since it's the same filter object)--tagand explicit names are mutually exclusive — documented and enforcedTest plan
platform_test.go: install by tag, tag AND category, category comma-list OR, empty match, names+filter conflict, neither-given, malformed--category, scope-respecting resolution,--enforce-budgetwith resolved count, uninstall-by-tag skips uninstalled, uninstall nothing-installed error, uninstall conflictgo test ./...,make lintgreeninstall --tag workflow→ two installs;--tag nope→ exit 1 with message;b1 --tag workflow→ exit 2;uninstall --tag workflow→ both removed🤖 Generated with Claude Code