12 unversioned skills now versioned at 1.0.0: agent-communication, ascii-video, external-reasoning-augmentation, jotty-notes-api, minecraft-modpack-server, obsidian, pokemon-player, powerpoint, social-search, songwriting-and-ai-music, workspace-context-organization, youtube-content Total repo: 141 skills across all profile scopes
7.8 KiB
name, description, version
| name | description | version |
|---|---|---|
| hermes-cross-profile-config | Apply Hermes configuration changes across multiple profiles. Covers the bulk-update pattern, session auto-prune, curator tuning, and the one-at-a-time execution workflow. | 1.1.0 |
Hermes Cross-Profile Configuration
Apply configuration changes to all Hermes profiles systematically, one at a time.
Bulk Update Pattern
When the user wants a config change applied to all profiles:
- Survey first. Use
execute_codewith yaml parsing to read current state across all profiles. Present findings before acting. - Wait for go-ahead. The user prefers discuss-first. Do not execute until they say "do it", "apply", "go", or "now."
- Choose the right strategy:
- Base config inheritance — if the key is one that all profiles should inherit (e.g.,
plugins.hermes-memory-store.auto_extract), set it once in~/.hermes/config.yaml. Per-profile configs inherit from base; only profiles that explicitly override the key will differ. This is the preferred approach for global defaults. - One profile at a time — if the key must be set per-profile (e.g., profile-specific overrides, or the user explicitly wants per-profile writes), apply changes sequentially using
hermes -p <profile> config set <key> <value>.
- Base config inheritance — if the key is one that all profiles should inherit (e.g.,
- Report progress. After each profile, state which one just completed and the count (e.g., "dev done. Now dgx (2/14).")
- Verify. Run a final sweep to confirm all profiles have the new value.
Never batch or parallelize profile config changes — the user wants sequential, visible progress.
Session Auto-Prune
Sessions are stored in ~/.hermes/state.db (SQLite with FTS5). Auto-prune is off by default — the docs recommend keeping it off unless state.db is meaningfully affecting performance, since session history powers session_search recall.
Config Keys
| Key | Default | Description |
|---|---|---|
sessions.auto_prune |
false |
Enable automatic cleanup of ended sessions |
sessions.retention_days |
90 |
Keep ended sessions this many days (minimum: 1) |
sessions.min_interval_hours |
24 |
Don't sweep more often than this |
sessions.vacuum_after_prune |
true |
Reclaim disk space after pruning |
- Only ended sessions are pruned. Active sessions are never touched.
- Pruning fires at CLI/gateway startup, at most once per
min_interval_hours. - After pruning,
state.dbgets VACUUM'd to shrink the file. - Manual:
hermes sessions prune --older-than N
Limitations
retention_daysonly accepts whole numbers. Sub-day granularity (e.g., 12 hours) is not possible. Minimum is1(24 hours).- Config changes need a gateway restart for
sessions.auto_pruneto take effect on the gateway tick.
Curator (Skill Auto-Prune)
Separate system from session pruning. The curator manages SKILLS, not sessions. When a user says "auto prune," clarify which system they mean.
Config Keys (defaults)
| Key | Default | Description |
|---|---|---|
curator.enabled |
true |
Enable background skill maintenance |
curator.interval_hours |
168 |
Days between curator runs (7 days) |
curator.min_idle_hours |
2 |
Agent must be idle this long before running |
curator.stale_after_days |
30 |
Mark unused skills stale |
curator.archive_after_days |
90 |
Archive long-unused skills |
curator.consolidate |
false |
LLM umbrella-building pass (opt-in, costs tokens) |
curator.prune_builtins |
true |
Archive unused bundled skills too |
curator.backup.keep |
5 |
Number of tar.gz snapshots to retain |
- Only touches skills with
created_by: "agent"provenance. Hub-installed skills are off-limits. - Never deletes — worst outcome is archival to
~/.hermes/skills/.archive/, recoverable withhermes curator restore. - Pinned skills are exempt from auto-transitions.
- Runs on inactivity check, not a cron daemon.
AGENTS.md Bulk Editing
When the user wants a rule, convention, or directive added to AGENTS.md across all profiles:
- Survey first. List all profile workspace dirs (
ls -d /home/n8n/workspace/*/). Read every AGENTS.md in parallel to find insertion points. Note which files have a## Conventionssection and which don't. - Identify non-profile dirs. Some workspace dirs (e.g.,
skillz,stt-server,default) have no corresponding~/.hermes/profiles/<name>/— these are loose dirs, not profiles. Skip them. Also skip AGENTS.md files that don't exist on disk (the in-context snapshot may be stale). - Insert under
## Conventionswhere it exists. Use###sub-heading for the new rule. Anchor the patch on the last line of the Conventions section before the next##header. - Create a
## Conventionssection where it doesn't exist. For minimal AGENTS.md files (dgx, people, vscode, research), add## Conventionswith the rule as the only content. - Apply broadly, then selectively remove. The user may say "for all" then later exclude specific profiles. Apply to all first, then remove from the excluded ones. This is faster than trying to guess which profiles to skip upfront.
- Verify with a grep sweep. After all patches land, run
grep -c "Rule Name" /home/n8n/workspace/*/AGENTS.mdto confirm every target file has exactly one match.
Pitfalls specific to AGENTS.md editing
- AGENTS.md may not exist on disk. The in-context snapshot loaded at session start can be stale. Always
read_filebefore patching — if the file doesn't exist, ask whether to create it or skip. - Workspace dirs ≠ profile dirs.
ls /home/n8n/workspace/may show more dirs thanls ~/.hermes/profiles/. Only patch workspaces that have a corresponding profile. - Different file structures. Some AGENTS.md files have
## Conventions, some have## Notes, some are minimal stubs. Read every file before patching — don't assume a uniform structure. - The user's profile count may be wrong. The user may say "11 profiles" when the filesystem has 14. Trust the filesystem, but flag the discrepancy.
Skill Directory Copying Across Profiles
When the user wants a skill (or set of skills) copied to all profiles:
- Survey first. Use
execute_codeto check which profiles have the skill and at what version. Present a table: profile, skill version (or MISSING), and whether it's current or stale. - Wait for go-ahead. The user prefers discuss-first. Do not execute until they say "do it", "apply", "go", or "now."
- Copy the full skill directory. Use
cp -rto copy the entire skill directory (SKILL.md + references/ + scripts/ + templates/ + assets/) from the source profile to each target.rm -rfthe destination first to handle stale versions cleanly. - Report progress. After each profile, state which one just completed and the count.
- Verify. Run a final sweep to confirm every target profile has the correct version.
Pitfalls specific to skill copying:
- Copy the directory, not just SKILL.md. Skills can have
references/,scripts/,templates/,assets/subdirectories.cp -rthe whole thing. - Remove stale copies first.
rm -rfthe destination before copying to avoid leftover files from older versions. - Source is always the dev profile. The canonical copy lives in
~/.hermes/profiles/dev/skills/. Copy FROM dev TO others, never the reverse. - Profile count may change. Always re-survey with
ls -d ~/.hermes/profiles/*/— don't hardcode a count from a prior session.
Pitfalls
- Curator vs session prune confusion. Users may say "auto prune" meaning either system. Clarify which one before acting.
retention_daysis whole days only. No sub-day granularity. Minimum is 1.- Config changes need gateway restart for
sessions.auto_pruneto take effect on the gateway tick. - Don't act without go-ahead. Survey and present, then wait for explicit direction before applying changes.