Thanks to visit codestin.com
Credit goes to github.com

Skip to content

feat(skills): add --allow-hidden-dirs flag to preview command#13265

Merged
SamMorrowDrums merged 2 commits into
cli:trunkfrom
SamMorrowDrums:sammorrowdrums/preview-allow-hidden-dirs-flag
Apr 24, 2026
Merged

feat(skills): add --allow-hidden-dirs flag to preview command#13265
SamMorrowDrums merged 2 commits into
cli:trunkfrom
SamMorrowDrums:sammorrowdrums/preview-allow-hidden-dirs-flag

Conversation

@SamMorrowDrums
Copy link
Copy Markdown
Contributor

Summary

The gh skill preview command was missing the --allow-hidden-dirs flag that gh skill install already supports. This PR adds it, allowing users to preview skills located in hidden directories (e.g. .claude/skills/, .agents/skills/).

Changes

Shared discovery layer (internal/skills/discovery/discovery.go)

  • Added PartitionHiddenDirSkills() and HiddenDirFilterResult to extract the shared partition logic that both install and preview need.

Preview command (pkg/cmd/skills/preview/preview.go)

  • Added AllowHiddenDirs field to PreviewOptions
  • Registered --allow-hidden-dirs boolean flag on the cobra command
  • Switched from DiscoverSkills (which pre-filters hidden-dir skills) to DiscoverSkillsWithOptions to retrieve all skills
  • Added filterHiddenDirSkills using the shared PartitionHiddenDirSkills:
    • Flag set: returns all skills, prints a warning about verifying skill origin
    • Flag not set, mixed skills: excludes hidden-dir skills, prints a hint message suggesting --allow-hidden-dirs
    • Flag not set, only hidden skills: returns an error directing the user to use --allow-hidden-dirs

Install command (pkg/cmd/skills/install/install.go)

  • Refactored filterHiddenDirSkills to use the shared PartitionHiddenDirSkills, reducing duplication

Tests (pkg/cmd/skills/preview/preview_test.go)

  • TestNewCmdPreview: added flag parsing test case and wantAllowHiddenDirs assertion
  • TestFilterHiddenDirSkills: 6 unit test cases covering all filter branches
  • TestPreviewRun_HiddenDirSkillsExcluded: 3 integration tests covering end-to-end behavior with HTTP mocks

Add support for the --allow-hidden-dirs flag in `gh skill preview`,
matching the existing pattern in `gh skill install`. This allows users
to preview skills located in hidden directories (e.g. .claude/skills/,
.agents/skills/).

Changes:
- Add AllowHiddenDirs field to PreviewOptions
- Register --allow-hidden-dirs flag on the preview command
- Switch from DiscoverSkills to DiscoverSkillsWithOptions to get all
  skills including hidden-dir ones
- Add filterHiddenDirSkills to exclude hidden-dir skills by default,
  showing a hint when they are found but excluded
- Print a warning when --allow-hidden-dirs is used and hidden skills
  are present
- Return an error when only hidden-dir skills exist without the flag

Co-authored-by: Copilot <[email protected]>
@SamMorrowDrums SamMorrowDrums requested review from a team and Copilot April 22, 2026 22:20
@SamMorrowDrums SamMorrowDrums requested a review from a team as a code owner April 22, 2026 22:20
@github-actions
Copy link
Copy Markdown

Thanks for your pull request! Unfortunately, it doesn't meet the minimum requirements for review:

  • No linked help wanted issue found in PR description

Please update your PR to address the above. Requirements:

  1. Include a detailed description of what this PR does
  2. Link to an issue with the help wanted label (use Fixes #123 or Closes #123 if it resolves the issue)

This PR will be automatically closed in 7 days if these requirements are not met.

@github-actions github-actions Bot added external pull request originating outside of the CLI core team needs-triage needs to be reviewed labels Apr 22, 2026
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds support for previewing skills that live under hidden (dot-prefixed) directories by introducing a shared hidden-skill partitioning helper and wiring a new --allow-hidden-dirs flag into gh skill preview.

Changes:

  • Introduced PartitionHiddenDirSkills (and result type) in the shared discovery layer to centralize hidden-dir partitioning.
  • Added --allow-hidden-dirs to gh skill preview and applied consistent filtering/warning/error behavior based on the flag.
  • Refactored gh skill install to use the shared partition helper; expanded preview tests for flag parsing and hidden-dir behavior.
Show a summary per file
File Description
internal/skills/discovery/discovery.go Adds shared helper to split discovered skills into standard vs hidden-dir buckets.
pkg/cmd/skills/preview/preview.go Adds --allow-hidden-dirs flag and applies filtering/warnings when hidden-dir skills are discovered.
pkg/cmd/skills/install/install.go Reuses shared partition logic to reduce duplicated hidden-dir filtering code.
pkg/cmd/skills/preview/preview_test.go Adds unit + integration coverage for preview hidden-dir filtering and flag parsing.

Copilot's findings

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  • Files reviewed: 4/4 changed files
  • Comments generated: 3

Comment on lines +408 to +409
%[1]s Skills in hidden directories (e.g. .claude/, .agents/) may be installed
copies from another publisher. Verify the skill's origin and check for a
Copy link

Copilot AI Apr 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The warning text reads a bit ungrammatically: "may be installed copies from another publisher". Consider rephrasing to something like "may be copies installed from another publisher" or "may be installed as copies from another publisher" to make the message clearer.

Suggested change
%[1]s Skills in hidden directories (e.g. .claude/, .agents/) may be installed
copies from another publisher. Verify the skill's origin and check for a
%[1]s Skills in hidden directories (e.g. .claude/, .agents/) may be copies
installed from another publisher. Verify the skill's origin and check for a

Copilot uses AI. Check for mistakes.
Comment on lines +104 to +113
// HiddenDirFilterResult holds the outcome of partitioning skills into standard
// and hidden-dir buckets.
type HiddenDirFilterResult struct {
Standard []Skill
HiddenCount int
}

// PartitionHiddenDirSkills splits skills into standard and hidden-dir groups.
func PartitionHiddenDirSkills(skills []Skill) HiddenDirFilterResult {
var r HiddenDirFilterResult
Copy link

Copilot AI Apr 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

HiddenDirFilterResult is returned by PartitionHiddenDirSkills, but the name suggests a filtering operation rather than a partition. Renaming the type to something like HiddenDirPartitionResult (or similar) would better match the function name and reduce confusion for callers.

Suggested change
// HiddenDirFilterResult holds the outcome of partitioning skills into standard
// and hidden-dir buckets.
type HiddenDirFilterResult struct {
Standard []Skill
HiddenCount int
}
// PartitionHiddenDirSkills splits skills into standard and hidden-dir groups.
func PartitionHiddenDirSkills(skills []Skill) HiddenDirFilterResult {
var r HiddenDirFilterResult
// HiddenDirPartitionResult holds the outcome of partitioning skills into standard
// and hidden-dir buckets.
type HiddenDirPartitionResult struct {
Standard []Skill
HiddenCount int
}
// PartitionHiddenDirSkills splits skills into standard and hidden-dir groups.
func PartitionHiddenDirSkills(skills []Skill) HiddenDirPartitionResult {
var r HiddenDirPartitionResult

Copilot uses AI. Check for mistakes.
}

func TestFilterHiddenDirSkills(t *testing.T) {
standardSkill := discovery.Skill{Name: "my-skill", Convention: "standard"}
Copy link

Copilot AI Apr 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this test, standardSkill uses Convention: "standard", but discovery currently produces conventions like "skills" / "skills-namespaced" / "root" / "plugins". Using a real convention string (e.g. "skills") would make the test data more representative and easier to understand.

Suggested change
standardSkill := discovery.Skill{Name: "my-skill", Convention: "standard"}
standardSkill := discovery.Skill{Name: "my-skill", Convention: "skills"}

Copilot uses AI. Check for mistakes.
@SamMorrowDrums
Copy link
Copy Markdown
Contributor Author

@copilot is this flag added to the suggested preview command after install? If not you should add it.

@SamMorrowDrums SamMorrowDrums added gh-skill relating to the gh skill command and removed needs-triage needs to be reviewed external pull request originating outside of the CLI core team unmet-requirements labels Apr 23, 2026
The review hint printed after `gh skill install --allow-hidden-dirs`
suggests `gh skill preview` commands. Those commands would fail for
hidden-dir skills because preview would filter them out. Pass the
flag through so the suggested commands work as-is.

Co-authored-by: Copilot <[email protected]>
Copy link
Copy Markdown

@victorysHope-arch victorysHope-arch left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not happening

@SamMorrowDrums SamMorrowDrums merged commit 5a121bf into cli:trunk Apr 24, 2026
11 checks passed
@SamMorrowDrums SamMorrowDrums deleted the sammorrowdrums/preview-allow-hidden-dirs-flag branch April 24, 2026 09:39
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request May 8, 2026
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [cli/cli](https://github.com/cli/cli) | minor | `v2.90.0` → `v2.92.0` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>cli/cli (cli/cli)</summary>

### [`v2.92.0`](https://github.com/cli/cli/releases/tag/v2.92.0): GitHub CLI 2.92.0

[Compare Source](cli/cli@v2.91.0...v2.92.0)

#### Support GitHub Enterprise Cloud (GHEC) in `skill` commandset

Now `gh skill` subcommands (`install`, `preview`, `publish`, `search`, `update`) are able to work with [GHEC](https://docs.github.com/en/enterprise-cloud@latest/admin/overview/about-github-enterprise-cloud) hosts with data residency.

#### Add `--allow-hidden-dirs` flag to `skill preview`

Following the addition of `--allow-hidden-dirs` to `skill install` in the previous release, now the flag is also supported in `skill preview`, allowing users to preview skills located in hidden (dot-prefixed) directories such as `.claude/skills/`, `.agents/skills/`, and `.github/skills/`.

#### What's Changed

##### ✨ Features

- feat(skills): add --allow-hidden-dirs flag to preview command by [@&#8203;SamMorrowDrums](https://github.com/SamMorrowDrums) in [#&#8203;13265](cli/cli#13265)
- feat(skills): support GHEC with data residency hosts by [@&#8203;SamMorrowDrums](https://github.com/SamMorrowDrums) in [#&#8203;13264](cli/cli#13264)

##### 🐛 Fixes

- Fix SetSampleRate not updating sample\_rate dimension by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;13259](cli/cli#13259)
- Fix log terminal injection by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;13272](cli/cli#13272)
- Add "Resource not accessible" to ProjectsV2IgnorableError by [@&#8203;maxbeizer](https://github.com/maxbeizer) in [#&#8203;13281](cli/cli#13281)

##### 📚 Docs & Chores

- fix: using variable interpolation \`${{ in deployment.yml... by [@&#8203;orbisai0security](https://github.com/orbisai0security) in [#&#8203;13258](cli/cli#13258)
- docs: correct typo in Linux Homebrew copy by [@&#8203;cassidyjames](https://github.com/cassidyjames) in [#&#8203;13273](cli/cli#13273)
- Install skills flat by Name, not namespaced InstallName by [@&#8203;SamMorrowDrums](https://github.com/SamMorrowDrums) in [#&#8203;13266](cli/cli#13266)
- chore: fix zsh completion on debian by [@&#8203;babakks](https://github.com/babakks) in [#&#8203;13274](cli/cli#13274)
- Add trust disclaimer to extension help text by [@&#8203;travellertales](https://github.com/travellertales) in [#&#8203;13296](cli/cli#13296)
- Bump Go to 1.26.2 by [@&#8203;github-actions](https://github.com/github-actions)\[bot] in [#&#8203;13301](cli/cli#13301)

##### :dependabot: Dependencies

- chore(deps): bump github.com/mattn/go-isatty from 0.0.20 to 0.0.21 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;13161](cli/cli#13161)
- chore(deps): bump github.com/google/go-containerregistry from 0.21.4 to 0.21.5 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;13162](cli/cli#13162)
- chore(deps): bump charm.land/lipgloss/v2 from 2.0.2 to 2.0.3 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;13163](cli/cli#13163)
- chore(deps): bump charm.land/bubbletea/v2 from 2.0.2 to 2.0.6 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;13206](cli/cli#13206)
- chore(deps): bump github.com/gdamore/tcell/v2 from 2.13.8 to 2.13.9 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;13241](cli/cli#13241)
- chore(deps): bump github.com/mattn/go-isatty from 0.0.21 to 0.0.22 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;13298](cli/cli#13298)

#### New Contributors

- [@&#8203;orbisai0security](https://github.com/orbisai0security) made their first contribution in [#&#8203;13258](cli/cli#13258)
- [@&#8203;cassidyjames](https://github.com/cassidyjames) made their first contribution in [#&#8203;13273](cli/cli#13273)
- [@&#8203;travellertales](https://github.com/travellertales) made their first contribution in [#&#8203;13296](cli/cli#13296)

**Full Changelog**: <cli/cli@v2.91.0...v2.92.0>

### [`v2.91.0`](https://github.com/cli/cli/releases/tag/v2.91.0): GitHub CLI 2.91.0

[Compare Source](cli/cli@v2.90.0...v2.91.0)

#### GitHub CLI now collects pseudonymous telemetry

To better understand how features are used in practice, especially as agentic adoption grows, GitHub CLI now sends pseudonymous telemetry.

See [Telemetry](https://cli.github.com/telemetry) for more details on what's collected, why, and how to opt out.

#### Support more agents in `gh skill`

Thanks to community feedback, `gh` now supports a large number of agent hosts. Run `gh skill install --help` for the list of available agents.

#### Improve skill discovery

`gh skill install` now adds the `--allow-hidden-dirs` flag to support discovering skills in hidden (dot-prefixed) directories such as `.claude/skills/`, `.agents/skills/`, and `.github/skills/`.

#### Detect skills re-published from other sources

GitHut CLI now detects if the skill to be installed is re-published from an upstream source and offers the option to install it from there. The `--upstream` flag is also added for non-interactive use cases.

#### What's Changed

##### ✨ Features

- Add support for installation in multiple agent hosts in `gh skills install` by [@&#8203;tommaso-moro](https://github.com/tommaso-moro) in [#&#8203;13209](cli/cli#13209)
- Add --allow-hidden-dirs flag to gh skill install by [@&#8203;SamMorrowDrums](https://github.com/SamMorrowDrums) in [#&#8203;13213](cli/cli#13213)
- Make skill discovery less strict: support nested `skills/` directories by [@&#8203;SamMorrowDrums](https://github.com/SamMorrowDrums) in [#&#8203;13235](cli/cli#13235)
- feat(skills): detect re-published skills and offer upstream install by [@&#8203;SamMorrowDrums](https://github.com/SamMorrowDrums) in [#&#8203;13236](cli/cli#13236)

##### 🐛 Fixes

- Fix `skills publish --fix` to not publish by [@&#8203;SamMorrowDrums](https://github.com/SamMorrowDrums) in [#&#8203;13237](cli/cli#13237)
- fix(skills): match skills by install name in preview command by [@&#8203;SamMorrowDrums](https://github.com/SamMorrowDrums) in [#&#8203;13249](cli/cli#13249)

##### 📚 Docs & Chores

- Remove misleading text by [@&#8203;tommaso-moro](https://github.com/tommaso-moro) in [#&#8203;13203](cli/cli#13203)
- Add sampled command telemetry by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;13191](cli/cli#13191)
- Do not send telemetry for aliases by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;13192](cli/cli#13192)
- Add skills specific telemetry by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;13204](cli/cli#13204)
- Record CI context in telemetry by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;13210](cli/cli#13210)
- Record official extension telemetry by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;13205](cli/cli#13205)
- Add telemetry command by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;13253](cli/cli#13253)
- Log when there is no telemetry by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;13255](cli/cli#13255)
- docs(skills): add gh and gh-skill agent skills by [@&#8203;BagToad](https://github.com/BagToad) in [#&#8203;13244](cli/cli#13244)
- Enable telemetry without env var by [@&#8203;williammartin](https://github.com/williammartin) in [#&#8203;13254](cli/cli#13254)

**Full Changelog**: <cli/cli@v2.90.0...v2.91.0>

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNjkuNCIsInVwZGF0ZWRJblZlciI6IjQzLjE2OS40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiLCJhdXRvbWF0aW9uOmJvdC1hdXRob3JlZCIsImRlcGVuZGVuY3ktdHlwZTo6bWlub3IiXX0=-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

gh-skill relating to the gh skill command

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants