A Hermes Agent skill that version-controls your skills, memories, and config in a personal git repository.
- Mirrors your user-created and user-modified skills to
~/my-hermes/my-skills/ - Mirrors your user-created and user-modified scripts from
~/.hermes/scripts/to~/my-hermes/scripts/ - For modified bundled skills, writes a
bundled.diffso you can see exactly what you changed vs upstream - Commits and pushes daily (integrates with
morning-briefcron) - Handles deletions — files that revert to bundled state are removed from the mirror
This solves the problem described in NousResearch/hermes-agent#20352: ~/.hermes/skills/ is unversioned — no history, no rollback, no diff. Instead of making the hermes directory itself a git repo (which conflicts with hermes update), we sync only your changes to a separate repo.
hermes-update-workflow — safe hermes update with patch re-application. The template Makefile from this skill includes make update, make check-update, and make patch targets that call into that skill's scripts.
hermes skills tap add shared-goals/hermes-git-sync
hermes skills install hermes-git-syncbash ~/.hermes/skills/devops/hermes-git-sync/scripts/setup-my-hermes.sh ~/my-hermes
cd ~/my-hermes
git remote add origin <your-repo-url>
git push -u origin mainThe make targets work from anywhere because setup-my-hermes.sh creates a symlink ~/Makefile → ~/my-hermes/Makefile. Hermes Agent's terminal runs with ~ as the working directory, so make git-sync resolves correctly without cd.
make git-sync # sync skills + scripts, commit, push
make sync # sync snapshots only, no commit — inspect in IDE
make install-my-hermes # re-bootstrap symlinks on a new machine
make dashboard # start Hermes dashboard on port 9119If you also have hermes-update-workflow installed:
make update # safe hermes update with confirmation + patch re-apply
make check-update # check for new releases and patch PR statuses (no changes)
make patch # re-apply patches onlySet MY_HERMES_REPO env var if your repo lives somewhere other than ~/my-hermes.
If a skill was previously bundled (tracked in .bundled_manifest) but
disappears from the bundled set after an update, make sync asks whether to:
- keep it as custom (it is converted to user-created and mirrored)
- remove it from
~/.hermes/skills
my-hermes/
├── config.yaml # symlinked from ~/.hermes/config.yaml
├── SOUL.md # symlinked from ~/.hermes/SOUL.md
├── Makefile # shortcuts (template from this skill)
├── memories/
│ ├── MEMORY.md # symlinked from ~/.hermes/memories/MEMORY.md
│ └── USER.md # symlinked from ~/.hermes/memories/USER.md
├── my-skills/ # mirror of your skills (category structure preserved)
│ └── devops/
│ └── hermes-git-sync/ # example: your own copy of this skill
│ └── bundled.diff # what you changed vs upstream
├── scripts/ # mirror of ~/.hermes/scripts (modified/user-created only)
│ └── bundled.diff # optional diff for modified bundled scripts
└── patches/ # *.patch + *.yaml pairs for upstream PRs