Interactive multi-profile setup utility for Hermes Agent
Project description
hermes-profile-kit
Interactive multi-profile setup utility for Hermes Agent.
๐ฐ๐ท ํ๊ตญ์ด README
โก 2-minute install (Claude Code / Codex)
Paste into Claude Code or codex. One token round, done.
Install the Hermes
<PROFILE>profile on this machine usinghermes-profile-kit. This is a deterministic CLI install, not a software-design task. Do not invokebrainstorming,writing-plans,test-driven-development, orrequesting-code-reviewskills โ the user has explicitly instructed you not to. Ask me for any required tokens in a single message, then run:pipx install --upgrade hermes-profile-kit hpk setup <PROFILE> --non-interactive \ --token KEY1=VALUE1 --token KEY2=VALUE2 ... \ --accept-plugin <plugin-id> hpk verify <PROFILE>Required tokens & plugin ids are in https://github.com/NewTurn2017/hermes-profile-kit/blob/main/manifest.yaml. Report the verify output when done.
Live example โ seb (Slack second-brain via Codex): see AGENTS.md โ seb fast-path.
TL;DR โ ์ด๋์๋ถํฐ ์ฝ์ด์ผ ํ๋ / Where to start
| ๋น์ ์โฆ / You areโฆ | ์ฌ๊ธฐ๋ก / Read |
|---|---|
| ๐ค ํคํธ๋ฅผ ์ฒ์ ์จ๋ณด๋ ์ฌ๋ / First-time human user | โ ์ฌ๋์ ์ด๋ ๊ฒ / For humans |
| ๐ค LLM ์์ด์ ํธ (Claude / Cursor / Hermes ์์ ) | โ LLM์ ์ด๋ ๊ฒ / For LLM agents + canonical AGENTS.md |
| ๐ง ๋ฉ์ธํ ์ด๋ / Repo maintainer | โ Operating this repo |
Repository facts (machine-readable)
package: hermes-profile-kit
version: 3.1.0
schema_version: 3
language: python>=3.10
cli_entrypoint: hpk
manifest_path: manifest.yaml
profiles_path: profiles/
verified_commands_index: build/cmd_index.json # CI-managed
verified_commands_doc: docs/commands.md # CI-managed
upstream:
repo: https://github.com/NousResearch/hermes-agent
pinned_commit: 5621fc44 # current; see manifest.yaml for live value
hard_rules_doc: AGENTS.md # canonical playbook for LLM agents
์ฌ๋์ ์ด๋ ๊ฒ / For humans
Prerequisites
- Python โฅ 3.10
- Hermes Agent installed (binary on PATH; version โฅ 0.12.0)
~/.local/binon PATH (for profile aliases)
Install + run
pipx install hermes-profile-kit
hpk setup
The wizard walks you through each profile in manifest.yaml:
- Verifies Hermes is installed and recent enough.
- Creates the Hermes profile if absent.
- Copies
SOUL.md+config.yamlfrom the kit template. - Seeds
.envfrom.env.example(mode0600, never overwrites existing). - Prompts for required + optional tokens with provider-specific guidance (BotFather URL, Slack app docs, โฆ).
- Asks before enabling each recommended plugin (Honcho memory, Brave search, โฆ).
Re-run safely
hpk setup is idempotent. Existing .env files are preserved; existing profiles aren't re-created.
Customizing a profile
| Goal | Edit |
|---|---|
| Change model | ~/.hermes/profiles/<name>/config.yaml |
| Change persona | ~/.hermes/profiles/<name>/SOUL.md |
| Add new profile | profiles/<name>/{SOUL.md,config.yaml,.env.example} + add entry to manifest.yaml โ hpk setup |
| Force template overwrite | hpk setup --force |
API keys live in ~/.hermes/profiles/<name>/.env (plain text, chmod 600). The kit deliberately does not pretend to encrypt them.
LLM์ ์ด๋ ๊ฒ / For LLM agents
Canonical playbook: AGENTS.md. Read that first.
Where to look (in order)
AGENTS.mdโ hard rules, single-command happy path.manifest.yamlโ declarative source of truth for profiles, tokens, plugins.docs/commands.md(auto-generated) โ every Hermes command the kit will invoke.build/cmd_index.jsonโ same data, structured for programmatic matching.src/hpk/โ implementation; layout is indocs/superpowers/specs/2026-05-15-hermes-profile-kit-v2-design.md.
Hard rules (do not violate)
- NEVER write secrets to git-tracked files. Tokens belong in
~/.hermes/profiles/<name>/.env(mode 0600, gitignored via.env). - NEVER guess token values. Empty prompt โ leave
FILL_IN_*and surface in the summary. - NEVER touch the default Hermes profile (
~/.hermes/root, not~/.hermes/profiles/). - NEVER invoke a Hermes command not present in
build/cmd_index.json. - NEVER run
gateway installor other side-effectful commands without explicit human approval.
Useful invocations
hpk doctor # verify hpk's own state (hermes presence, manifest validity)
hpk verify [profile...] # run `hermes doctor` per profile + FILL_IN scan
hpk plugin list # show recommended_plugins per profile
hpk setup --skip-tokens # base + plugins without interactive token prompts
hpk setup --skip-plugins # base + tokens, skip plugin prompts
Exit-code map (from hpk setup / preflight)
| Exit | Meaning |
|---|---|
| 0 | success |
| 10 | hermes not installed |
| 11 | hermes version < min_hermes_version |
| 20 | non-interactive: required value missing or invalid |
| 30 | other preflight error / verify found FILL_IN or failing doctor |
| 40 | manifest invalid or unknown plugin id |
Profiles
| Profile | Role | Model tier | Channels | Recommended plugins |
|---|---|---|---|---|
coder |
Full-stack dev assistant | Sonnet | CLI | โ |
assistant |
Personal daily assistant | Sonnet | CLI + Telegram | Honcho |
research |
Web-search-backed research | Opus | CLI | Honcho, Brave search |
community-bot |
Korean dev community helper | Haiku | Telegram + Discord | โ |
seb |
Second-brain controller (Obsidian + NotebookLM via Slack) | openai-codex | Slack | codex-openai-proxy |
Plugins
| Plugin | Type | What it does |
|---|---|---|
honcho-memory |
Hermes-upstream | External long-term memory via Honcho (Plastic Labs). |
brave-search-tool |
Hermes-upstream | Web search tool backed by Brave Search API. |
codex-openai-proxy |
Kit-local (install_path) |
Local OpenAI-compat HTTP bridge to the codex CLI โ lets seb (and any other openai-codexโtier profile) treat Codex as an OpenAI-compatible backend. |
Hermes-upstream plugins go through hermes subcommands verified against build/cmd_index.json. Kit-local plugins live under scripts/<plugin-id>/ and are wired into the wizard via plugin.install_path.
Commands cheat sheet
hpk setup [profile...] # interactive wizard
hpk verify [profile...] # hermes doctor + FILL_IN scan
hpk doctor # hpk's own health
hpk reset [profile...] --yes # remove kit-created profiles
hpk plugin list # list recommended plugins
hpk plugin enable PROFILE PLUGIN_ID
hpk plugin disable PROFILE PLUGIN_ID # currently a manual-guidance stub
hpk sync --upstream PATH [--dry-run] # local drift check (CI does it daily)
Operating this repo
For maintainers โ what to do whenโฆ
โฆupstream Hermes ships a new commit
- Daily: CI does it automatically (
.github/workflows/upstream-sync.ymlruns at 06:00 UTC, clones upstream, regeneratesbuild/cmd_index.json+docs/commands.md, updatesmanifest.yaml'supstream.pinned_*, opens a PR on drift). - Manually:
git clone https://github.com/NousResearch/hermes-agent /tmp/hermes hpk sync --upstream /tmp/hermes # check python scripts/regen_docs.py --upstream /tmp/hermes \ --out build/cmd_index.json --docs docs/commands.md --pinned-commit "$(git -C /tmp/hermes rev-parse --short HEAD)" python scripts/update_manifest_pin.py \ --commit ... --version ... --verified-at ...
โฆyou want to release a new version
- Bump
versioninpyproject.tomlandsrc/hpk/__init__.py(must match). - Update
CHANGELOG.md(Keep-a-Changelog format). - Commit + push to
main. - Tag:
git tag -a v<ver> -m "..." && git push origin v<ver>. .github/workflows/release.ymlbuilds and publishes to PyPI via Trusted Publisher (already configured).
โฆCI fails
- Matrix: Python 3.10 / 3.11 / 3.12 on Linux. Steps:
pip install -e ".[dev]"โruff checkโmypyโpytest. - Reproduce locally:
python -m venv .venv && source .venv/bin/activate pip install -e ".[dev]" ruff check src tests scripts mypy src/hpk pytest -v
โฆyou add a new profile / plugin / token provider
| Thing added | Files to touch |
|---|---|
| Profile | profiles/<name>/{SOUL.md,config.yaml,.env.example} + entry in manifest.yaml profiles: |
| Hermes-upstream plugin | Add to manifest.yaml plugins: with upstream_command matching an entry in build/cmd_index.json |
| Kit-local plugin | Add scripts/<plugin-id>/ + manifest entry with install_path instead of upstream_command |
| Token provider | src/hpk/tokens/<provider>.py with Handler + register in src/hpk/tokens/__init__.py |
Pre-commit local gate
No git hooks are installed by default. Run before pushing:
ruff check src tests scripts && ruff format --check src tests scripts && mypy src/hpk && pytest
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
HermesNotInstalledError at preflight |
hermes not on PATH |
Install hermes-agent, ensure it's on PATH |
HermesVersionTooOldError |
Installed Hermes < manifest.min_hermes_version |
Upgrade Hermes |
~/.local/bin not on PATH warning |
shell PATH missing it | Add export PATH="$HOME/.local/bin:$PATH" to your shell rc |
hpk verify reports FILL_IN |
Token still placeholder | Edit ~/.hermes/profiles/<n>/.env or re-run hpk setup |
manifest invalid |
YAML / schema mismatch | Check schema_version: 3, run python -c "from hpk.manifest import load_manifest; from pathlib import Path; load_manifest(Path('manifest.yaml'))" |
release.yml failing with invalid-publisher |
PyPI Trusted Publisher not registered for this repo | Configure at https://pypi.org/manage/account/publishing/ |
Architecture
โโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ manifest.yaml โ (declarative source of truth)
โ schema_version: 3 โ
โโโโโโโโโโโโโโฌโโโโโโโโโโโโโ
โ parses
โผ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ
โ hpk (Click) โ โโโโโโโถ โ hpk.wizard / verify โ โโโโโโโถ โ hpk.hermes โ โโถ hermes (subprocess)
โ setup/verify/ โ โ phase A (base) โ โ run_profile_* โ
โ doctor/plugin/ โ โ phase B (tokens) โ โ run_doctor โ
โ reset/sync โ โ phase C (plugins) โ โ run_raw โ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ
โ
โ asks
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ hpk.tokens.<provider> โ (anthropic, slack, telegram, discord, brave, exa, openai-codex)
โโโโโโโโโโโโโโโโโโโโโโโโโโโ
CI loop (daily):
upstream-sync.yml โ clone hermes-agent โ scripts/regen_docs.py (AST-walks hermes_cli/main.py via hpk.codegen.argparse_walker)
โ build/cmd_index.json + docs/commands.md โ drift PR
Links
- ๐ AGENTS.md โ canonical LLM playbook
- ๐ CHANGELOG.md โ version history (Keep-a-Changelog)
- ๐งฑ docs/concepts.md โ Hermes profile isolation model
- ๐ง docs/commands.md โ auto-generated verified Hermes commands
- ๐ ๏ธ docs/troubleshooting.md โ extended troubleshooting
- ๐ docs/superpowers/specs/ โ design specs (v2 + seb profile)
- ๐ docs/superpowers/plans/ โ implementation plans
- ๐ PyPI: hermes-profile-kit
- ๐ Hermes Agent (upstream)
License
MIT. See LICENSE.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hermes_profile_kit-3.1.0.tar.gz.
File metadata
- Download URL: hermes_profile_kit-3.1.0.tar.gz
- Upload date:
- Size: 32.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
027c7544be4a102790e1a366f9032c83e1c8ea02c79e40b8fa616aa9c42e2a48
|
|
| MD5 |
69a9ebe50471f10e41a6ce5902f2ade8
|
|
| BLAKE2b-256 |
f58d2cf3fdee9e69e1497a24a5c18a792c99dbe08867e807a6a2bc04c4985e06
|
Provenance
The following attestation bundles were made for hermes_profile_kit-3.1.0.tar.gz:
Publisher:
release.yml on NewTurn2017/hermes-profile-kit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hermes_profile_kit-3.1.0.tar.gz -
Subject digest:
027c7544be4a102790e1a366f9032c83e1c8ea02c79e40b8fa616aa9c42e2a48 - Sigstore transparency entry: 1552428290
- Sigstore integration time:
-
Permalink:
NewTurn2017/hermes-profile-kit@4e1523c0f41d6c3aaa8b0cfce8aab7fd8a3f3da8 -
Branch / Tag:
refs/tags/v3.1.0 - Owner: https://github.com/NewTurn2017
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4e1523c0f41d6c3aaa8b0cfce8aab7fd8a3f3da8 -
Trigger Event:
push
-
Statement type:
File details
Details for the file hermes_profile_kit-3.1.0-py3-none-any.whl.
File metadata
- Download URL: hermes_profile_kit-3.1.0-py3-none-any.whl
- Upload date:
- Size: 29.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a7fb2696251af4b89d6ca92fde79bcbd79caa720f3a99a446252a0dbd1e8c086
|
|
| MD5 |
832a683b3962f058094e0c2a5f7c8b10
|
|
| BLAKE2b-256 |
70997cf093430e4c6041b59f62dcc742268ff938a751ae86119f239c3822d8d7
|
Provenance
The following attestation bundles were made for hermes_profile_kit-3.1.0-py3-none-any.whl:
Publisher:
release.yml on NewTurn2017/hermes-profile-kit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hermes_profile_kit-3.1.0-py3-none-any.whl -
Subject digest:
a7fb2696251af4b89d6ca92fde79bcbd79caa720f3a99a446252a0dbd1e8c086 - Sigstore transparency entry: 1552428291
- Sigstore integration time:
-
Permalink:
NewTurn2017/hermes-profile-kit@4e1523c0f41d6c3aaa8b0cfce8aab7fd8a3f3da8 -
Branch / Tag:
refs/tags/v3.1.0 - Owner: https://github.com/NewTurn2017
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4e1523c0f41d6c3aaa8b0cfce8aab7fd8a3f3da8 -
Trigger Event:
push
-
Statement type: