Hermes v0.16 Ships Leaner Skill Defaults - Environment Gating, Built-in Pruning, and Blank-Slate Installs

Hermes v0.16.0 - the "Surface Release" - shipped June 5 with 542 merged PRs, a native desktop app, remote gateway connectivity, and a web administration panel. Three PRs targeted a quieter but measurable problem: the bundled skill set had grown large enough that irrelevant entries were inflating the system prompt and cluttering the skills index for most users.
PR #39028 by teknium1 was the largest of the three. It removed 7,621 lines and added 842 across 163 files - a net reduction of 6,779 lines from the bundled skill tree. The cleanup removed dead skills that had been superseded by plugins (spotify replaced by the Spotify plugin's native tools, linear replaced by hermes mcp install linear), consolidated overlapping skills (webhook-subscriptions and native-mcp folded into the hermes-agent skill as on-demand references), and moved niche skills to the optional/ tree (the Baoyu creative set, DSPy, Minecraft).
The headline feature is the new environments: frontmatter gate.
Environment Gating: Context-Specific Skills Stay Hidden
Skills can now declare an environments: field in their frontmatter alongside the existing platforms: field. The gate accepts values like kanban, docker, and s6:
environments: [kanban]
This field is checked at offer time in exactly three places: the prompt builder's skills index (what the agent sees in its system prompt), skills_tool.list_skills (what the user sees when browsing), and slash-command discovery. A skill gated to kanban will not appear in any of those three surfaces for a user who has never set up a kanban workflow.
Explicit loads intentionally bypass the gate. skill_view(name='kanban-orchestrator') and --skills kanban-worker force-loads always resolve, regardless of environment. This preserves the path where a dispatcher or cron job needs a specific skill without polluting the index for everyone else.
The three skills that use the gate in v0.16:
| Skill | Environment | Effect |
|---|---|---|
kanban-orchestrator |
kanban |
Hidden unless kanban workflow is active |
kanban-worker |
kanban |
Hidden unless kanban workflow is active |
hermes-s6-container-supervision |
s6 |
Hidden unless s6 supervision is active |
The mechanism is straightforward. agent/skill_utils.py gained a skill_matches_environment() function that runs during offer-time filtering. If a skill declares environments and none match, it is excluded from the index. If it declares none, it passes through as before - existing skills are unaffected.
The test suite validates a specific invariant: 8 E2E assertions confirm that a kanban-worker force-load always resolves even when the kanban environment is absent, keeping the dispatcher path intact. The full agent test suite (271 tests for skill/prompt/platform, 127 for skills tool, 44 for kanban core) passed with no regressions.
Built-in Pruning: Unused Skills Archive After 90 Days
PR #36701 by teknium1 extended the curator to handle built-in skills. Previously, only agent-created skills could be pruned - bundled built-ins were permanent and would be re-seeded on every hermes update, even if the user had never touched them.
The new behavior:
- Built-in skills that go unused for 90 days are automatically archived
- A
.curator_suppressedlist makes the prune durable across updates -skills_syncskips re-seeding suppressed built-ins - Restoring a built-in clears its suppression and resets the inactivity clock
- Hub-installed skills are never pruned
The curator also seeds each built-in's inactivity clock when it first encounters the skill, so the 90-day window starts at the point of upgrade, not at some earlier epoch. Users do not wake up to a mass-purge after updating.
Usage Tracking Decoupled From Curation
The same PR separates usage tracking from curation lifecycle. Previously, the curator only tracked usage for agent-created skills (the skills it could prune). Now usage_report() and provenance() track every skill regardless of origin - built-in, hub-installed, or agent-created - with an agent/bundled/hub tag.
This means the curator can answer "which bundled skills does this user actually use?" without needing the authority to prune them. Observability and lifecycle are now independent concerns.
Blank-Slate Installs: Start With No Bundled Skills
PR #36228 by teknium1 closed a gap in the install experience. Named profiles could already be created empty with hermes profile create <name> --no-skills, but the default profile had no equivalent. Every fresh install seeded 90+ bundled skills into the index regardless of what the user needed.
Two new paths now exist:
At install time:
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash -s -- --no-skills
The --no-skills flag writes a $HERMES_HOME/.no-bundled-skills marker and skips the initial seed.
At runtime, on any existing profile:
hermes skills opt-out # stop future seeding
hermes skills opt-out --remove # also delete unmodified bundled skills
hermes skills opt-in --sync # undo: remove marker and re-seed
The key fix was in sync_skills(). The opt-out marker was previously only checked by seed_profile_skills() for named profiles. The default profile kept getting re-seeded on every hermes update because the main sync path did not check the marker. The PR moved the check into sync_skills() itself, so the installer, hermes update, and any direct sync all respect the opt-out.
The --remove path is conservative: it only deletes a bundled skill when the file is manifest-tracked, still present in the bundled source (hash-comparable), and byte-identical to its recorded origin hash. User-edited bundled skills, hub-installed skills, and hand-written skills are reported as kept and never touched.
Measured Impact
The three PRs represent different classes of optimization:
| Optimization | What It Removes | Scope |
|---|---|---|
| Environment gating | Skills irrelevant to the user's runtime context | Index entries at offer time |
| Built-in pruning | Skills the user has never used | Disk + index, after 90 days |
| Blank-slate install | All bundled skills | Disk + index, at install time |
The removal of 6,779 lines from the bundled skill tree (PR #39028) is a one-time reduction. Environment gating and built-in pruning are ongoing mechanisms - the system prompt stays leaner for every user, on every turn, without manual intervention.
The v0.16.0 release notes list 170 community contributors and 399 closed issues. The skills-system work is a fraction of the total surface, but it addresses a structural problem: as the skill ecosystem grows, the default prompt should not grow with it. Environment gating, pruning, and opt-out installs are three levers that keep the index proportional to what the user actually needs.
[^1]: teknium1. "refactor(skills): clean up bundled skill set + add environments: relevance gate." NousResearch/hermes-agent. June 4, 2026.
[^2]: teknium1. "feat(curator): prune unused built-in skills + track usage for all skills." NousResearch/hermes-agent. June 1, 2026.
[^3]: teknium1. "feat(skills): blank-slate skills - install --no-skills + opt-out/opt-in." NousResearch/hermes-agent. June 1, 2026.
[^4]: NousResearch. "Hermes Agent v0.16.0 (2026.6.5) - The Surface Release." June 5, 2026.