feat(skills-hub): add claude-marketplace support - #7522
Conversation
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
teknium1
left a comment
There was a problem hiding this comment.
Thanks for covering the direct marketplace-repository workflow. The premise remains valid: current HEAD rejects a two-segment owner/repo identifier in tools/skills_hub.py:598, while the existing ClaudeMarketplaceSource only delegates installs back to that GitHub source (tools/skills_hub.py:2670-2675).
Problems
tools/skills_hub.py:815in this PR callsinput()for multiple plugins. Current slash installs deliberately setskip_confirm=Truebecauseinput()hangs under prompt_toolkit (hermes_cli/skills_hub.py:1857-1859); this path has no corresponding noninteractive handling.- The PR adds marketplace parsing to
GitHubSource(tools/skills_hub.py:658) although HEAD already hasClaudeMarketplaceSource(tools/skills_hub.py:2608-2705). Keeping two resolvers would make marketplace behavior and cache handling diverge.
Suggested changes
- Consolidate the resolver into the existing marketplace source and use it for discovery, install, inspect, and update.
- Make plugin selection surface-aware: noninteractive callers need a deterministic selector or an actionable error, never
input().
Automated hermes-sweeper review.
| print(f" [{i}] {p.get('name', '?')} — {desc}") | ||
|
|
||
| try: | ||
| answer = input( |
There was a problem hiding this comment.
This raw input() is reached before do_install(..., skip_confirm=True) can suppress interaction. /skills install explicitly uses skip_confirm=True because prompt_toolkit input hangs on that surface (hermes_cli/skills_hub.py:1857-1859 on HEAD). Thread a noninteractive selection policy here and return an actionable error or use an explicit plugin selector instead.
| logger.debug("GitHub contents API fetch failed: %s", e) | ||
| return None | ||
|
|
||
| def _fetch_marketplace_json(self, repo: str) -> list: |
There was a problem hiding this comment.
HEAD already has ClaudeMarketplaceSource and _fetch_marketplace_index() in this module (tools/skills_hub.py:2608-2705). Please consolidate manifest parsing and resolution there rather than creating a second implementation in GitHubSource; otherwise search and direct-install paths will diverge.
|
Thanks @baekteun for the work here — the implementation was solid and the premise (2-segment We've since decided to remove marketplace.json support entirely rather than extend it (#73903). Rationale:
With no remaining live use case, we're closing this rather than asking for a rebase. If the marketplace.json ecosystem grows real independent repos again, the right home for this would be manifest parsing inside |
What does this PR do?
Enables hermes skills install owner/repo for repos that use .claude-plugin/marketplace.json (e.g. hermes skills install anthropics/skills).
This adds a resolution chain: parse .claude-plugin/marketplace.json → fallback to repo root as plugin. It also handles all official Claude Code marketplace source types and stores the selected plugin name in lock metadata so hermes skills update can auto-select without re-prompting.
Related Issue
Fixes #7514
Type of Change
Changes Made
tools/skills_hub.py: Add _github_url_to_repo(), _fetch_marketplace_json(), _resolve_plugin_source(), _resolve_repo_root(), _select_plugins(), _fetch_plugin_from_marketplace(), _inspect_repo_root() to GitHubSource
tools/skills_hub.py: Modify GitHubSource.fetch() and inspect() to handle 2-part owner/repo identifiers
tools/skills_hub.py: Fix _download_directory_via_tree() to handle empty path (repo root download)
tools/skills_hub.py: Store marketplace_plugin in SkillBundle.metadata; thread plugin_name through check_for_skill_updates()
hermes_cli/skills_hub.py: Add plugin_name param to do_install() and _resolve_source_meta_and_bundle(); pass it from do_update(). Install remaining plugins individually when multiple are selected
website/docs/user-guide/features/skills.md: Update claude-marketplace section with direct install docs
tests/tools/test_skills_hub_plugin_discovery.py: 32 new tests covering all source types, depth limits, multi-selection, caching, and end-to-end flows
How to Test
hermes skills inspect anthropics/skills— should display plugin metadata from marketplace.jsonhermes skills install anthropics/skills— should discover marketplace.json, auto-select the single plugin, and installhermes skills update— should update the installed plugin without prompting for selectionhermes skills install anthropics/skills/skills/skill-creator— existing 3-part identifiers should still workpytest tests/tools/test_skills_hub_plugin_discovery.py tests/tools/test_skills_hub.py -vChecklist
Code
fix(scope):,feat(scope):, etc.)pytest tests/ -qand all tests passDocumentation & Housekeeping
docs/, docstrings) — or N/Acli-config.yaml.exampleif I added/changed config keys — or N/ACONTRIBUTING.mdorAGENTS.mdif I changed architecture or workflows — or N/AFor New Skills
hermes --toolsets skills -q "Use the X skill to do Y"Screenshots / Logs
log output
Inspect
Install
skill list after install
/Users/baegteun/Projects/hermes-agent/.venv/bin/hermes skills list ✔ ╱ 1m 35s Installed Skills ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┓ ┃ Name ┃ Category ┃ Source ┃ Trust ┃ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━┩ ... │ claude-api │ claude-api │ github │ trusted │ ... │ docx │ document-skills │ local │ local │ │ pdf │ document-skills │ local │ local │ │ pptx │ document-skills │ local │ local │ │ xlsx │ document-skills │ local │ local │ ... └────────────────────────────────────────┴──────────────────────┴─────────┴─────────┘ 1 hub-installed, 68 builtin, 49 localall skill list
/Users/baegteun/Projects/hermes-agent/.venv/bin/hermes skills list ✔ ╱ 1m 35s Installed Skills ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┓ ┃ Name ┃ Category ┃ Source ┃ Trust ┃ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━┩ │ dogfood │ │ builtin │ builtin │ │ ios-accessibility │ │ local │ local │ │ swift-accessibility-skill │ │ local │ local │ │ apple-notes │ apple │ builtin │ builtin │ │ apple-reminders │ apple │ builtin │ builtin │ │ findmy │ apple │ builtin │ builtin │ │ imessage │ apple │ builtin │ builtin │ │ claude-code │ autonomous-ai-agents │ builtin │ builtin │ │ codex │ autonomous-ai-agents │ builtin │ builtin │ │ gemini-cli │ autonomous-ai-agents │ local │ local │ │ hermes-agent │ autonomous-ai-agents │ builtin │ builtin │ │ opencode │ autonomous-ai-agents │ builtin │ builtin │ │ claude-api │ claude-api │ github │ trusted │ │ ascii-art │ creative │ builtin │ builtin │ │ ascii-video │ creative │ builtin │ builtin │ │ excalidraw │ creative │ builtin │ builtin │ │ manim-video │ creative │ builtin │ builtin │ │ p5js │ creative │ builtin │ builtin │ │ popular-web-designs │ creative │ builtin │ builtin │ │ songwriting-and-ai-music │ creative │ builtin │ builtin │ │ jupyter-live-kernel │ data-science │ builtin │ builtin │ │ webhook-subscriptions │ devops │ builtin │ builtin │ │ docx │ document-skills │ local │ local │ │ pdf │ document-skills │ local │ local │ │ pptx │ document-skills │ local │ local │ │ xlsx │ document-skills │ local │ local │ │ himalaya │ email │ builtin │ builtin │ │ minecraft-modpack-server │ gaming │ builtin │ builtin │ │ pokemon-player │ gaming │ builtin │ builtin │ │ codebase-inspection │ github │ builtin │ builtin │ │ github-auth │ github │ builtin │ builtin │ │ github-code-review │ github │ builtin │ builtin │ │ github-issues │ github │ builtin │ builtin │ │ github-pr-workflow │ github │ builtin │ builtin │ │ github-repo-management │ github │ builtin │ builtin │ │ inference-sh-cli │ inference-sh │ local │ local │ │ claude-code-plugin-install │ ios │ local │ local │ │ todaywhat-ios-build-testflight │ ios │ local │ local │ │ todaywhat-ios-feature-development │ ios │ local │ local │ │ find-nearby │ leisure │ builtin │ builtin │ │ mcporter │ mcp │ builtin │ builtin │ │ native-mcp │ mcp │ builtin │ builtin │ │ gif-search │ media │ builtin │ builtin │ │ heartmula │ media │ builtin │ builtin │ │ songsee │ media │ builtin │ builtin │ │ youtube-content │ media │ builtin │ builtin │ │ audiocraft-audio-generation │ mlops │ local │ local │ │ axolotl │ mlops │ builtin │ builtin │ │ chroma │ mlops │ local │ local │ │ clip │ mlops │ builtin │ builtin │ │ distributed-llm-pretraining-torchtitan │ mlops │ local │ local │ │ dspy │ mlops │ builtin │ builtin │ │ evaluating-llms-harness │ mlops │ local │ local │ │ faiss │ mlops │ local │ local │ │ fine-tuning-with-trl │ mlops │ local │ local │ │ gguf-quantization │ mlops │ local │ local │ │ grpo-rl-training │ mlops │ builtin │ builtin │ │ guidance │ mlops │ builtin │ builtin │ │ hermes-atropos-environments │ mlops │ local │ local │ │ huggingface-accelerate │ mlops │ local │ local │ │ huggingface-hub │ mlops │ builtin │ builtin │ │ huggingface-tokenizers │ mlops │ local │ local │ │ instructor │ mlops │ local │ local │ │ lambda-labs-gpu-cloud │ mlops │ local │ local │ │ llama-cpp │ mlops │ builtin │ builtin │ │ llava │ mlops │ local │ local │ │ modal-serverless-gpu │ mlops │ local │ local │ │ nemo-curator │ mlops │ local │ local │ │ obliteratus │ mlops │ builtin │ builtin │ │ optimizing-attention-flash │ mlops │ local │ local │ │ outlines │ mlops │ builtin │ builtin │ │ peft-fine-tuning │ mlops │ local │ local │ │ pinecone │ mlops │ local │ local │ │ pytorch-fsdp │ mlops │ builtin │ builtin │ │ pytorch-lightning │ mlops │ local │ local │ │ qdrant-vector-search │ mlops │ local │ local │ │ segment-anything-model │ mlops │ local │ local │ │ serving-llms-vllm │ mlops │ local │ local │ │ simpo-training │ mlops │ local │ local │ │ slime-rl-training │ mlops │ local │ local │ │ sparse-autoencoder-training │ mlops │ local │ local │ │ stable-diffusion-image-generation │ mlops │ local │ local │ │ tensorrt-llm │ mlops │ local │ local │ │ unsloth │ mlops │ builtin │ builtin │ │ weights-and-biases │ mlops │ builtin │ builtin │ │ whisper │ mlops │ builtin │ builtin │ │ obsidian │ note-taking │ builtin │ builtin │ │ google-workspace │ productivity │ builtin │ builtin │ │ linear │ productivity │ builtin │ builtin │ │ nano-pdf │ productivity │ builtin │ builtin │ │ notion │ productivity │ builtin │ builtin │ │ notion-mcp-remote │ productivity │ local │ local │ │ ocr-and-documents │ productivity │ builtin │ builtin │ │ powerpoint │ productivity │ builtin │ builtin │ │ godmode │ red-teaming │ builtin │ builtin │ │ arxiv │ research │ builtin │ builtin │ │ autoresearch │ research │ local │ local │ │ blogwatcher │ research │ builtin │ builtin │ │ domain-intel │ research │ local │ local │ │ duckduckgo-search │ research │ local │ local │ │ file-first-llm-knowledge-base-eval │ research │ local │ local │ │ llm-wiki │ research │ builtin │ builtin │ │ local-llm-knowledge-base-eval │ research │ local │ local │ │ ml-paper-writing │ research │ local │ local │ │ parallel-cli │ research │ local │ local │ │ polymarket │ research │ builtin │ builtin │ │ research-paper-writing │ research │ builtin │ builtin │ │ x-post-summarization │ research │ local │ local │ │ openhue │ smart-home │ builtin │ builtin │ │ xitter │ social-media │ builtin │ builtin │ │ code-review │ software-development │ local │ local │ │ plan │ software-development │ builtin │ builtin │ │ planner-first-multi-review-design │ software-development │ local │ local │ │ requesting-code-review │ software-development │ builtin │ builtin │ │ subagent-driven-development │ software-development │ builtin │ builtin │ │ systematic-debugging │ software-development │ builtin │ builtin │ │ test-driven-development │ software-development │ builtin │ builtin │ │ writing-plans │ software-development │ builtin │ builtin │ └────────────────────────────────────────┴──────────────────────┴─────────┴─────────┘ 1 hub-installed, 68 builtin, 49 localuninstall plugin
skill list after uninstall
/Users/baegteun/Projects/hermes-agent/.venv/bin/hermes skills list ✔ Installed Skills ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┓ ┃ Name ┃ Category ┃ Source ┃ Trust ┃ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━┩ │ dogfood │ │ builtin │ builtin │ │ ios-accessibility │ │ local │ local │ │ swift-accessibility-skill │ │ local │ local │ │ apple-notes │ apple │ builtin │ builtin │ │ apple-reminders │ apple │ builtin │ builtin │ │ findmy │ apple │ builtin │ builtin │ │ imessage │ apple │ builtin │ builtin │ │ claude-code │ autonomous-ai-agents │ builtin │ builtin │ │ codex │ autonomous-ai-agents │ builtin │ builtin │ │ gemini-cli │ autonomous-ai-agents │ local │ local │ │ hermes-agent │ autonomous-ai-agents │ builtin │ builtin │ │ opencode │ autonomous-ai-agents │ builtin │ builtin │ │ ascii-art │ creative │ builtin │ builtin │ │ ascii-video │ creative │ builtin │ builtin │ │ excalidraw │ creative │ builtin │ builtin │ │ manim-video │ creative │ builtin │ builtin │ │ p5js │ creative │ builtin │ builtin │ │ popular-web-designs │ creative │ builtin │ builtin │ │ songwriting-and-ai-music │ creative │ builtin │ builtin │ │ jupyter-live-kernel │ data-science │ builtin │ builtin │ │ webhook-subscriptions │ devops │ builtin │ builtin │ │ himalaya │ email │ builtin │ builtin │ │ minecraft-modpack-server │ gaming │ builtin │ builtin │ │ pokemon-player │ gaming │ builtin │ builtin │ │ codebase-inspection │ github │ builtin │ builtin │ │ github-auth │ github │ builtin │ builtin │ │ github-code-review │ github │ builtin │ builtin │ │ github-issues │ github │ builtin │ builtin │ │ github-pr-workflow │ github │ builtin │ builtin │ │ github-repo-management │ github │ builtin │ builtin │ │ inference-sh-cli │ inference-sh │ local │ local │ │ claude-code-plugin-install │ ios │ local │ local │ │ todaywhat-ios-build-testflight │ ios │ local │ local │ │ todaywhat-ios-feature-development │ ios │ local │ local │ │ find-nearby │ leisure │ builtin │ builtin │ │ mcporter │ mcp │ builtin │ builtin │ │ native-mcp │ mcp │ builtin │ builtin │ │ gif-search │ media │ builtin │ builtin │ │ heartmula │ media │ builtin │ builtin │ │ songsee │ media │ builtin │ builtin │ │ youtube-content │ media │ builtin │ builtin │ │ audiocraft-audio-generation │ mlops │ local │ local │ │ axolotl │ mlops │ builtin │ builtin │ │ chroma │ mlops │ local │ local │ │ clip │ mlops │ builtin │ builtin │ │ distributed-llm-pretraining-torchtitan │ mlops │ local │ local │ │ dspy │ mlops │ builtin │ builtin │ │ evaluating-llms-harness │ mlops │ local │ local │ │ faiss │ mlops │ local │ local │ │ fine-tuning-with-trl │ mlops │ local │ local │ │ gguf-quantization │ mlops │ local │ local │ │ grpo-rl-training │ mlops │ builtin │ builtin │ │ guidance │ mlops │ builtin │ builtin │ │ hermes-atropos-environments │ mlops │ local │ local │ │ huggingface-accelerate │ mlops │ local │ local │ │ huggingface-hub │ mlops │ builtin │ builtin │ │ huggingface-tokenizers │ mlops │ local │ local │ │ instructor │ mlops │ local │ local │ │ lambda-labs-gpu-cloud │ mlops │ local │ local │ │ llama-cpp │ mlops │ builtin │ builtin │ │ llava │ mlops │ local │ local │ │ modal-serverless-gpu │ mlops │ local │ local │ │ nemo-curator │ mlops │ local │ local │ │ obliteratus │ mlops │ builtin │ builtin │ │ optimizing-attention-flash │ mlops │ local │ local │ │ outlines │ mlops │ builtin │ builtin │ │ peft-fine-tuning │ mlops │ local │ local │ │ pinecone │ mlops │ local │ local │ │ pytorch-fsdp │ mlops │ builtin │ builtin │ │ pytorch-lightning │ mlops │ local │ local │ │ qdrant-vector-search │ mlops │ local │ local │ │ segment-anything-model │ mlops │ local │ local │ │ serving-llms-vllm │ mlops │ local │ local │ │ simpo-training │ mlops │ local │ local │ │ slime-rl-training │ mlops │ local │ local │ │ sparse-autoencoder-training │ mlops │ local │ local │ │ stable-diffusion-image-generation │ mlops │ local │ local │ │ tensorrt-llm │ mlops │ local │ local │ │ unsloth │ mlops │ builtin │ builtin │ │ weights-and-biases │ mlops │ builtin │ builtin │ │ whisper │ mlops │ builtin │ builtin │ │ obsidian │ note-taking │ builtin │ builtin │ │ google-workspace │ productivity │ builtin │ builtin │ │ linear │ productivity │ builtin │ builtin │ │ nano-pdf │ productivity │ builtin │ builtin │ │ notion │ productivity │ builtin │ builtin │ │ notion-mcp-remote │ productivity │ local │ local │ │ ocr-and-documents │ productivity │ builtin │ builtin │ │ powerpoint │ productivity │ builtin │ builtin │ │ godmode │ red-teaming │ builtin │ builtin │ │ arxiv │ research │ builtin │ builtin │ │ autoresearch │ research │ local │ local │ │ blogwatcher │ research │ builtin │ builtin │ │ domain-intel │ research │ local │ local │ │ duckduckgo-search │ research │ local │ local │ │ file-first-llm-knowledge-base-eval │ research │ local │ local │ │ llm-wiki │ research │ builtin │ builtin │ │ local-llm-knowledge-base-eval │ research │ local │ local │ │ ml-paper-writing │ research │ local │ local │ │ parallel-cli │ research │ local │ local │ │ polymarket │ research │ builtin │ builtin │ │ research-paper-writing │ research │ builtin │ builtin │ │ x-post-summarization │ research │ local │ local │ │ openhue │ smart-home │ builtin │ builtin │ │ xitter │ social-media │ builtin │ builtin │ │ code-review │ software-development │ local │ local │ │ plan │ software-development │ builtin │ builtin │ │ planner-first-multi-review-design │ software-development │ local │ local │ │ requesting-code-review │ software-development │ builtin │ builtin │ │ subagent-driven-development │ software-development │ builtin │ builtin │ │ systematic-debugging │ software-development │ builtin │ builtin │ │ test-driven-development │ software-development │ builtin │ builtin │ │ writing-plans │ software-development │ builtin │ builtin │ └────────────────────────────────────────┴──────────────────────┴─────────┴─────────┘ 0 hub-installed, 68 builtin, 45 local