b4fbd6fe9f
Deploy Site / deploy-vercel (push) Has been skipped
Deploy Site / deploy-docs (push) Has been skipped
Build Skills Index / build-index (push) Has been skipped
CI / Deny unrelated histories (push) Has been skipped
CI / Detect affected areas (push) Successful in 27m35s
CI / OSV scan (push) Failing after 4s
CI / Build&Test Docker image (push) Successful in 9s
CI / Supply-chain scan (push) Has been skipped
CI / Lint Docker scripts (push) Failing after 5m13s
CI / Check contributors (push) Failing after 12m8s
CI / Docs Site (push) Failing after 12m8s
CI / TypeScript (push) Failing after 12m8s
CI / Python lints (push) Failing after 12m9s
CI / Python tests (push) Failing after 12m9s
CI / Check uv.lock (push) Failing after 23m22s
CI / CI timing report (push) Has been cancelled
Build Skills Index / trigger-deploy (push) Has been cancelled
CI / All required checks pass (push) Has been cancelled
77 lines
3.6 KiB
Python
77 lines
3.6 KiB
Python
"""Default SOUL.md template seeded into HERMES_HOME on first run."""
|
|
|
|
DEFAULT_SOUL_MD = (
|
|
"You are Hermes Agent, an intelligent AI assistant created by Nous Research. "
|
|
"You are helpful, knowledgeable, and direct. You assist users with a wide "
|
|
"range of tasks including answering questions, writing and editing code, "
|
|
"analyzing information, creative work, and executing actions via your tools. "
|
|
"You communicate clearly, admit uncertainty when appropriate, and prioritize "
|
|
"being genuinely useful over being verbose unless otherwise directed below. "
|
|
"Be targeted and efficient in your exploration and investigations."
|
|
)
|
|
|
|
# Legacy SOUL.md boilerplate that older installers (install.sh / install.ps1 /
|
|
# docker/SOUL.md) seeded before they were switched to write DEFAULT_SOUL_MD.
|
|
# These templates contain no persona text -- they are pure comment scaffolding,
|
|
# so a SOUL.md whose content matches one of these was demonstrably never
|
|
# customized by the user and is safe to upgrade to DEFAULT_SOUL_MD in place.
|
|
#
|
|
# Match on normalized content (stripped, line-endings unified) so trailing
|
|
# newlines or CRLF from Windows installers don't defeat the comparison. NEVER
|
|
# add anything here that a user might have intentionally written -- the whole
|
|
# safety guarantee is that these strings carry zero user intent.
|
|
_LEGACY_TEMPLATE_SOULS = (
|
|
(
|
|
"# Hermes Agent Persona\n"
|
|
"\n"
|
|
"<!--\n"
|
|
"This file defines the agent's personality and tone.\n"
|
|
"The agent will embody whatever you write here.\n"
|
|
"Edit this to customize how Hermes communicates with you.\n"
|
|
"\n"
|
|
"Examples:\n"
|
|
' - "You are a warm, playful assistant who uses kaomoji occasionally."\n'
|
|
' - "You are a concise technical expert. No fluff, just facts."\n'
|
|
' - "You speak like a friendly coworker who happens to know everything."\n'
|
|
"\n"
|
|
"This file is loaded fresh each message -- no restart needed.\n"
|
|
"Delete the contents (or this file) to use the default personality.\n"
|
|
"-->"
|
|
),
|
|
# docker/SOUL.md and the install.sh heredoc differ only by an "Examples"
|
|
# block / trailing newline in some historical revisions; the bare scaffold
|
|
# (no Examples block) was also shipped briefly.
|
|
(
|
|
"# Hermes Agent Persona\n"
|
|
"\n"
|
|
"<!--\n"
|
|
"This file defines the agent's personality and tone.\n"
|
|
"The agent will embody whatever you write here.\n"
|
|
"Edit this to customize how Hermes communicates with you.\n"
|
|
"\n"
|
|
"This file is loaded fresh each message -- no restart needed.\n"
|
|
"Delete the contents (or this file) to use the default personality.\n"
|
|
"-->"
|
|
),
|
|
)
|
|
|
|
|
|
def _normalize_soul(text: str) -> str:
|
|
"""Normalize SOUL.md content for legacy-template comparison."""
|
|
# Unify line endings (Windows installer writes CRLF-free but be defensive),
|
|
# strip a leading UTF-8 BOM, and trim surrounding whitespace.
|
|
return text.replace("\r\n", "\n").replace("\r", "\n").lstrip("\ufeff").strip()
|
|
|
|
|
|
def is_legacy_template_soul(text: str) -> bool:
|
|
"""True if ``text`` is an old empty-template SOUL.md (no user persona).
|
|
|
|
Older installers seeded a comment-only scaffold instead of DEFAULT_SOUL_MD,
|
|
which shadowed the runtime default and left users with no persona. A file
|
|
matching one of those known scaffolds carries zero user intent and is safe
|
|
to upgrade in place. Any deviation (the user typed a persona, even one
|
|
character outside the comment) makes this return False.
|
|
"""
|
|
normalized = _normalize_soul(text)
|
|
return any(normalized == _normalize_soul(t) for t in _LEGACY_TEMPLATE_SOULS)
|