mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-11-06 05:17:15 +00:00
chore(skills): move niche built-in skills to optional
These stop loading by default and become one `hermes skills install official/<category>/<name>` away: notion, airtable, box (hosted connectors cover them for Portal users), opencode, design-md, gif-search, songsee, llm-wiki, hermes-agent-skill-authoring, inspecting-hermes-desktop-dom, node-inspect-debugger and python-debugpy. Existing installs keep their copies: the skills sync already re-labels a byte-identical copy of a moved built-in as an official optional install. Onboarding first tasks drop the two skills that are no longer bundled (llm-wiki, design-md), claude-design and popular-web-designs point at design-md as an optional install, and doc examples use skills that still ship.
This commit is contained in:
1 parent
9347107cdb
commit
183b5ddd5f
34 files changed
+20
-17
No files matched your search
+1
-1
@@ -601,7 +601,7 @@ Gateway and messaging sessions never collect secrets in-band; they instruct the
|
||||
- The skill relies on a CLI tool that may not be installed (e.g., `himalaya`, `openhue`, `ddgs`)
|
||||
- Treat command checks as guidance, not discovery-time hiding
|
||||
|
||||
See `skills/gifs/gif-search/` and `skills/email/himalaya/` for examples.
|
||||
See `optional-skills/media/gif-search/` and `skills/email/himalaya/` for examples.
|
||||
|
||||
### Skill authoring standards (HARDLINE)
|
||||
|
||||
|
||||
@@ -171,7 +171,7 @@ FIRST_TASKS: tuple[FirstTask, ...] = (
|
||||
quality="Real items they asked for. No test items.",
|
||||
done="The reminder and note exist, and the morning job is set up or declined."),
|
||||
FirstTask(
|
||||
"notes", "Turn my notes into a wiki", _always, ("obsidian", "llm-wiki"),
|
||||
"notes", "Turn my notes into a wiki", _always, ("obsidian",),
|
||||
goal="turn their notes into a small linked wiki",
|
||||
steps=(
|
||||
"Ask which folder holds their notes. Never search the disk for it.",
|
||||
@@ -223,7 +223,7 @@ FIRST_TASKS: tuple[FirstTask, ...] = (
|
||||
quality="Every finding has a source link. Nothing invented.",
|
||||
done="The first report is shown and the daily job is set up or declined."),
|
||||
FirstTask(
|
||||
"site", "Design a page for me", _always, ("claude-design", "popular-web-designs", "design-md", "p5js"),
|
||||
"site", "Design a page for me", _always, ("claude-design", "popular-web-designs", "p5js"),
|
||||
goal="design one web page for them",
|
||||
steps=(
|
||||
"If you do not know what the page is for, ask in one line.",
|
||||
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -0,0 +1,3 @@
|
||||
---
|
||||
description: Optional media skills — GIF search and audio visualization.
|
||||
---
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -17,7 +17,7 @@ Use this skill when the user asks for design work that would normally fit Claude
|
||||
|
||||
The goal is to preserve Claude Design's useful design behavior and taste while removing hosted-tool plumbing that does not exist in normal agent environments.
|
||||
|
||||
**Before starting, check for other web-design skills like `popular-web-designs` (ready-to-paste design systems for Stripe, Linear, Vercel, Notion, etc.) and `design-md` (Google's DESIGN.md token spec format).** If the user wants a known brand's look, load `popular-web-designs` alongside this one and let it supply the visual vocabulary. If the deliverable is a token spec file rather than a rendered artifact, use `design-md` instead. Full decision table below.
|
||||
**Before starting, check for other web-design skills like `popular-web-designs` (ready-to-paste design systems for Stripe, Linear, Vercel, Notion, etc.) and `design-md` (Google's DESIGN.md token spec format; an optional skill, installed with `hermes skills install official/creative/design-md`).** If the user wants a known brand's look, load `popular-web-designs` alongside this one and let it supply the visual vocabulary. If the deliverable is a token spec file rather than a rendered artifact, use `design-md` instead. Full decision table below.
|
||||
|
||||
## When To Use This Skill vs `popular-web-designs` vs `design-md`
|
||||
|
||||
|
||||
@@ -31,8 +31,8 @@ system, shadows, responsive behavior, and practical agent prompts with exact CSS
|
||||
Pair it with this skill when the user wants a thoughtfully-designed page styled
|
||||
after a known brand: `claude-design` drives the workflow, this skill supplies
|
||||
the visual vocabulary.
|
||||
- **`design-md`** — use when the deliverable is a formal DESIGN.md token spec
|
||||
file, not a rendered artifact.
|
||||
- **`design-md`** (optional: `hermes skills install official/creative/design-md`) —
|
||||
use when the deliverable is a formal DESIGN.md token spec file, not a rendered artifact.
|
||||
|
||||
## How to Use
|
||||
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
---
|
||||
description: Skills for working with media content — YouTube transcripts, GIF search, music generation, and audio visualization.
|
||||
description: Skills for working with media content — YouTube transcripts and summaries.
|
||||
---
|
||||
@@ -747,7 +747,7 @@ def test_install_by_name_resolves_to_the_skill_it_names(monkeypatch, tmp_path, i
|
||||
|
||||
|
||||
def test_built_in_restore_survives_leftovers_and_records_every_outcome_as_bundled(monkeypatch, tmp_path):
|
||||
"""Post-fix telemetry still showed `llm-wiki` failing as source=hub, filesystem_error: the
|
||||
"""Post-fix telemetry still showed `llm-wiki` (bundled then) failing as source=hub, filesystem_error: the
|
||||
restore copied with copytree onto a dest dir left behind without its SKILL.md (EEXIST on every
|
||||
retry), refused a skill already present behind a symlinked category the loader follows, and a
|
||||
failed restore was labelled a hub install."""
|
||||
@@ -761,22 +761,22 @@ def test_built_in_restore_survives_leftovers_and_records_every_outcome_as_bundle
|
||||
rows = []
|
||||
monkeypatch.setattr("hermes_cli.observability.shared_metrics_events.record_extension_install",
|
||||
lambda **row: rows.append((row["source"], row["outcome"])))
|
||||
src = dict(skills_sync._discover_bundled_skills(skills_sync._get_bundled_dir()))["llm-wiki"]
|
||||
dest = skill_usage._skills_dir() / src.parent.name / "llm-wiki"
|
||||
src = dict(skills_sync._discover_bundled_skills(skills_sync._get_bundled_dir()))["obsidian"]
|
||||
dest = skill_usage._skills_dir() / src.parent.name / "obsidian"
|
||||
console, _sink = _sink_console()
|
||||
|
||||
(dest / "wiki").mkdir(parents=True) # stranded: user data kept, SKILL.md gone
|
||||
(dest / "wiki" / "index.md").write_text("mine\n")
|
||||
assert cli_hub.do_install("llm-wiki", console=console, skip_confirm=True) is True
|
||||
assert cli_hub.do_install("obsidian", console=console, skip_confirm=True) is True
|
||||
assert (dest / "SKILL.md").is_file() and (dest / "wiki" / "index.md").read_text() == "mine\n"
|
||||
|
||||
real = tmp_path / "real-category"
|
||||
dest.parent.rename(real)
|
||||
dest.parent.symlink_to(real, target_is_directory=True)
|
||||
assert cli_hub.do_install("llm-wiki", console=console, skip_confirm=True) is None # present, no-op
|
||||
assert cli_hub.do_install("obsidian", console=console, skip_confirm=True) is None # present, no-op
|
||||
|
||||
(real / "llm-wiki" / "SKILL.md").unlink() # missing behind the symlink: refused, and still bundled
|
||||
assert cli_hub.do_install("llm-wiki", console=console, skip_confirm=True) is False
|
||||
(real / "obsidian" / "SKILL.md").unlink() # missing behind the symlink: refused, and still bundled
|
||||
assert cli_hub.do_install("obsidian", console=console, skip_confirm=True) is False
|
||||
assert rows == [("bundled", "success"), ("bundled", "failed")]
|
||||
|
||||
|
||||
|
||||
@@ -157,7 +157,7 @@ Type `/` in the CLI to open the autocomplete menu. Built-in commands are case-in
|
||||
|
||||
| Command | Description |
|
||||
|---------|-------------|
|
||||
| `/<skill-name>` | Load any installed skill as an on-demand command. Example: `/gif-search`, `/github-pr-workflow`, `/excalidraw`. |
|
||||
| `/<skill-name>` | Load any installed skill as an on-demand command. Example: `/youtube-content`, `/github-pr-workflow`, `/excalidraw`. |
|
||||
| `/skills ...` | Search, browse, inspect, install, audit, publish, and configure skills from registries and the official optional-skills catalog. |
|
||||
|
||||
### Quick Commands
|
||||
|
||||
@@ -384,7 +384,7 @@ Each entry is a skill name. The list is resolved once when a session's system pr
|
||||
Every installed skill in `~/.hermes/skills/` is automatically registered as a slash command. The skill name becomes the command:
|
||||
|
||||
```
|
||||
/gif-search funny cats
|
||||
/excalidraw sketch the request flow for our API
|
||||
/axolotl help me fine-tune Llama 3 on my dataset
|
||||
/github-pr-workflow create a PR for the auth refactor
|
||||
|
||||
|
||||
@@ -176,7 +176,7 @@ platforms:
|
||||
priority_mode: prepend # prepend | append | replace
|
||||
priority:
|
||||
- my_plugin_command
|
||||
- songsee # skill commands work here too
|
||||
- excalidraw # skill commands work here too
|
||||
```
|
||||
|
||||
`priority_mode` controls how your list combines with Hermes' built-in priority list:
|
||||
|
||||
Reference in new issue
Block a user