Skip to content

Hermes Agent integration: domain-skills aren't indexable; main SKILL.md rule is lazy-loaded #155

@iskyiskyisky

Description

@iskyiskyisky

Problem

Installing browser-harness as a skill in Hermes Agent leaves the agent unable to discover domain-skills/ content — sites with a checked-in skill still get a reinvented approach. Verified by reading the Hermes source at ~/.hermes/hermes-agent/.

The same failure will affect any agent system combining (a) a lazy-loading skill loader with (b) a scanner that only indexes files literally named SKILL.md with YAML frontmatter.

1. Hermes is lazy-load — the SKILL.md body isn't in the default system prompt

build_skills_system_prompt (agent/prompt_builder.py:595) emits only - <name>: <description> per skill into <available_skills> (prompt_builder.py:786). The body is read only when the agent calls skill_view(name) as a tool — see _load_skill_payload at agent/skill_commands.py:152.

Hermes's own system prompt confirms the design (prompt_builder.py:792):

Before replying, scan the skills below. If a skill matches or is even partially relevant to your task, you MUST load it with skill_view(name) and follow its instructions.

browser-harness's SKILL.md says "After cloning the repo, search domain-skills/ first for the domain you are working on." But that instruction sits behind the lazy-load. If the agent doesn't match browser-harness to the task from the short description alone, it never sees the rule.

2. Files under domain-skills/ aren't named SKILL.md, so Hermes can't index them

Hermes's scanner looks only for files literally named SKILL.md:

  • iter_skill_index_files(skills_dir, "SKILL.md") — agent/prompt_builder.py:678
  • rglob("SKILL.md") — tools/skills_tool.py:572

It also requires YAML frontmatter with name and description.

browser-harness's domain skills are domain-skills/<site>/scraping.md, invitation-manager.md, upload.md, etc. — none named SKILL.md, none with frontmatter. Even if a Hermes user adds <repo>/domain-skills to skills.external_dirs in ~/.hermes/config.yaml, zero skills surface.

Impact

Even after loading the main browser-harness skill, a Hermes agent still has to rg --files domain-skills manually — same as if no skill had loaded. The ~70 checked-in domain skills are effectively invisible to Hermes users. The "contribute back" loop also suffers: agents that can't see what's already there are less likely to notice the gap and file it.

Reporter's experience: installed browser-harness as a Hermes skill, asked for site-specific work, agent didn't consult the existing domain skill for that site and produced a worse-than-necessary approach.

Current workaround (zero config)

Paste-in prompt per Hermes session:

Read ~/Developer/browser-harness/SKILL.md in full, then ~/Developer/browser-harness/helpers.py. The browser-harness CLI is on PATH — invoke via heredoc (no cd, no uv run). Set BU_NAME=hermes to avoid socket collisions with other agents. Before attempting a site-specific task, run rg --files ~/Developer/browser-harness/domain-skills and read any matching site's file.

Possible directions (non-prescriptive)

  • Doc-only: add a Hermes section to install.md alongside Codex / Claude Code, documenting the limitation and the paste-in prompt above.
  • Structural: rename each domain-skill body to SKILL.md with YAML frontmatter (name: <site>-<workflow>, description, category, optional metadata.hermes.tags). Each site becomes a first-class, auto-discoverable skill for any agent that follows the SKILL.md convention; Claude Code's @-import still works unchanged, and Hermes users only need to add the directory to skills.external_dirs once.

🤖 Filed with help from Claude Code — Hermes line references verified against the local checkout.

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationhelp wantedExtra attention is needed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions