New gh skill list to inventory installed agent skills#13418
Conversation
There was a problem hiding this comment.
Pull request overview
Adds a new gh skill list subcommand that scans known agent host directories (project and user scope) for installed skills and renders them as a table or JSON, with filtering via --agent, --scope, and --dir, plus privacy-safe telemetry.
Changes:
- New
pkg/cmd/skills/list/list.goimplementing target discovery (deduping shared dirs like.agents/skills), SKILL.md frontmatter parsing, sort/render, JSON export, andskill_listtelemetry. - New
pkg/cmd/skills/list/list_test.gocovering flag parsing, mutual exclusivity, table/JSON output, and namespaced source-path skill name recovery. - Wires the
listsubcommand into theskillscommand and adds an example to its help text.
Show a summary per file
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Files reviewed: 3/3 changed files
- Comments generated: 0
cli/cli#13245 is being closed by cli/cli#13418 (Tommy/skills list), which adds `gh skill list` with the canonical shape: { skillName, hosts[], scope, sourceURL, version, pinned, path } Where scope ∈ {project, user, custom}, hosts is always an array (empty for --dir / custom scans, multi-valued for shared install dirs like .agents/skills), and sourceURL is a full GitHub URL or local filesystem path. The PR is still open, so this change keeps SkillView's tolerant parser tolerant — upstream-canonical keys take priority but every legacy / alternate key our adapter previously recognized stays as a fallback. Adapter changes: - GhSkillListRecord adds SourceUrl (string) and Hosts (ImmutableArray) as first-class fields; the existing Agents property is now an alias of Hosts so any call site that references it continues to work. - ReadRecord reads `skillName` → fallback `name`/`skill_name`; `hosts` → fallback `agents`; `sourceURL` → fallback `repo`/`repository`. New ReadStringArray helper deduplicates the loop body. - CapabilityProbeParser re-enables the `list` probe with the actual upstream flag set (`--json --agent --scope --dir`). When the gh binary doesn't ship the subcommand the probe is a no-op — ListSubcommandPresent stays false and SkillView's filesystem scan stays in charge. - CapabilityProfile.SupportsListDir lights up automatically once the gh binary exposes the flag — unused today but available to any future tab that wants to scan a custom dir via gh. Merge changes: - CliList-only InstalledSkill records propagate SourceUrl into FrontMatter.Upstream so detail panes can render a clickable source link for skills that gh knows about but the filesystem scan hasn't seen. - Agent membership is built from Hosts (upstream-canonical) instead of Agents; the legacy singular `agent` field still seeds a single membership when no array is present. Tests: - GhSkillListAdapterTests adds canonical-payload, multi-host, custom-dir, and precedence cases (hosts beats agents, skillName beats name). - CapabilityProbeParserTests asserts the list-probe flag set instead of asserting the subcommand absent. 393/393 unit + 1/1 integration green. Nothing changes behaviorally on a gh that doesn't ship `gh skill list` yet — the alignment lands now so when PR #13418 merges, SkillView picks the canonical fields up automatically.
SamMorrowDrums
left a comment
There was a problem hiding this comment.
Seems clean, I hope it helps to increase visibility of what's there (or expected to be there) for people.
gh skill list to inventory installed agent skills
|
Not from this PR, but a thing I bumped into while acceptance-testing it. Running Cause is in {
ID: "openclaw",
Name: "OpenClaw",
ProjectDir: "skills", // bare top-level "skills"
UserDir: ".openclaw/skills",
},OpenClaw's project dir is just Could we fix that in this PR (or a quick follow up before this ships) since this is being exposed to the user now? 🙏 |
… them as published
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
@tommaso-moro I pushed some changes I found during a deeper review - hope that is okay! 🙏
Would love to confirm you're okay with these changes and then we should ship this 🙏 |

Closes #13245
Summary
Adds
gh skill listto inventory installed agent skills across known agent host directories..agents/skills--agent,--scope, and custom scanning with--dirNAME,AGENT,SCOPE, andSOURCE--json,--jq, and--templatewith fields forskillName,hosts,scope,sourceURL,version,pinned, andpathskill_listtelemetry with filters, output format, and result countTesting
go test ./pkg/cmd/skills/list/...go test ./pkg/cmd/skills/...