Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
description = "Hermes Agent - AI agent framework by Nous Research";

inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11";
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-parts = {
url = "github:hercules-ci/flake-parts";
inputs.nixpkgs-lib.follows = "nixpkgs";
Expand Down
9 changes: 7 additions & 2 deletions hermes_cli/skills_hub.py
Original file line number Diff line number Diff line change
Expand Up @@ -499,14 +499,19 @@ def do_inspect(identifier: str, console: Optional[Console] = None) -> None:
def do_list(source_filter: str = "all", console: Optional[Console] = None) -> None:
"""List installed skills, distinguishing hub, builtin, and local skills."""
from tools.skills_hub import HubLockFile, ensure_hub_dirs
from tools.skills_sync import _read_manifest
from tools.skills_sync import _get_bundled_dir, _read_manifest
from tools.skills_tool import _find_all_skills

c = console or _console
ensure_hub_dirs()
lock = HubLockFile()
hub_installed = {e["name"]: e for e in lock.list_installed()}
builtin_names = set(_read_manifest())
builtin_dir_names = {
path.parent.name
for path in _get_bundled_dir().rglob("SKILL.md")
if not any(part in {".git", ".github", ".hub"} for part in path.parts)
}

all_skills = _find_all_skills()

Expand All @@ -530,7 +535,7 @@ def do_list(source_filter: str = "all", console: Optional[Console] = None) -> No
source_display = hub_entry.get("source", "hub")
trust = hub_entry.get("trust_level", "community")
hub_count += 1
elif name in builtin_names:
elif name in builtin_names or name in builtin_dir_names:
source_type = "builtin"
source_display = "builtin"
trust = "builtin"
Expand Down
31 changes: 31 additions & 0 deletions tests/hermes_cli/test_skills_hub.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,37 @@ def test_do_list_filter_builtin(three_source_env):
assert "local-skill" not in output


def test_do_list_treats_bundled_directory_name_as_builtin(monkeypatch, hub_env):
import tools.skills_hub as hub
import tools.skills_sync as skills_sync
import tools.skills_tool as skills_tool
import hermes_cli.skills_hub as cli_hub

monkeypatch.setattr(hub, "HubLockFile", lambda: _DummyLockFile([]))
monkeypatch.setattr(skills_sync, "_read_manifest", lambda: {"serving-llms-vllm": "abc123"})
monkeypatch.setattr(
skills_tool,
"_find_all_skills",
lambda: [{"name": "vllm", "category": "mlops", "description": "builtin alias"}],
)

fake_pkg_dir = hub_env.parent.parent / "fake_pkg"
repo_skills_dir = fake_pkg_dir.parent / "skills"
bundled_skill_dir = repo_skills_dir / "mlops" / "vllm"
bundled_skill_dir.mkdir(parents=True)
(bundled_skill_dir / "SKILL.md").write_text(
"---\nname: serving-llms-vllm\ndescription: Test skill\n---\n"
)
fake_pkg_dir.mkdir(parents=True, exist_ok=True)
monkeypatch.setattr(cli_hub, "__file__", str(fake_pkg_dir / "skills_hub.py"))

output = _capture()

assert "vllm" in output
assert "builtin" in output
assert "0 hub-installed, 1 builtin, 0 local" in output


def test_do_check_reports_available_updates(monkeypatch):
output = _capture_check(monkeypatch, [
{"name": "hub-skill", "source": "skills.sh", "status": "update_available"},
Expand Down
3 changes: 2 additions & 1 deletion website/docs/getting-started/nix-setup.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,8 @@ This module requires NixOS. For non-NixOS systems (macOS, other Linux distros),
# /etc/nixos/flake.nix (or your system flake)
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11";
# Use nixos-unstable for development tooling so Python and build dependencies stay current.
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
hermes-agent.url = "github:NousResearch/hermes-agent";
};

Expand Down