hermes - 💡(How to fix) Fix [Bug]: ollama-cloud provider does not inject SOUL.md into outgoing request (loader fires correctly; content drops downstream)

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

SOUL.md content is read correctly by load_soul_md() but does not appear in the outgoing API request payload when the ollama-cloud provider is selected (CLI / interactive mode). The anthropic provider injects it correctly under the same configuration.

This is not the same code path as #26596 (which is gateway mode where load_soul_identity=False causes the loader to never fire). Here the loader IS invoked and returns the expected content — the bug is downstream of the loader, on the ollama-cloud request-build path specifically.

Root Cause

SOUL.md content is read correctly by load_soul_md() but does not appear in the outgoing API request payload when the ollama-cloud provider is selected (CLI / interactive mode). The anthropic provider injects it correctly under the same configuration.

This is not the same code path as #26596 (which is gateway mode where load_soul_identity=False causes the loader to never fire). Here the loader IS invoked and returns the expected content — the bug is downstream of the loader, on the ollama-cloud request-build path specifically.

Fix Action

Workaround

Switch to the anthropic provider (hermes config set model.provider anthropic). SOUL.md is injected correctly on that code path.

Code Example

# Test Persona

   You are TestPersona, a unique identifier string for this test: ZX7Q-MARKER-7L9K.
   When asked your name or anything about yourself, respond with this exact marker.

---

hermes config set model.provider ollama-cloud
   hermes config set model.default qwen3.5:latest

---

from agent.prompt_builder import load_soul_md
content = load_soul_md()
print(len(content), content[:200])
# returns the expected ~1.4 KB and the first 200 chars of the file
RAW_BUFFERClick to expand / collapse

Summary

SOUL.md content is read correctly by load_soul_md() but does not appear in the outgoing API request payload when the ollama-cloud provider is selected (CLI / interactive mode). The anthropic provider injects it correctly under the same configuration.

This is not the same code path as #26596 (which is gateway mode where load_soul_identity=False causes the loader to never fire). Here the loader IS invoked and returns the expected content — the bug is downstream of the loader, on the ollama-cloud request-build path specifically.

Environment

  • Hermes Agent: v0.14.0
  • OS: Ubuntu 24.04.4 Server (Hyper-V VM)
  • Python: 3.11.15 (via uv tool install)
  • Affected provider: ollama-cloud (pointed at host-side Ollama via OpenAI-compat endpoint, model qwen3.5:latest)
  • Working provider: anthropic (model claude-sonnet-4-6) — same SOUL.md content surfaces correctly

Steps to reproduce

  1. Populate ~/.hermes/SOUL.md with distinctive content, e.g.:

    # Test Persona
    
    You are TestPersona, a unique identifier string for this test: ZX7Q-MARKER-7L9K.
    When asked your name or anything about yourself, respond with this exact marker.
  2. Set provider to ollama-cloud:

    hermes config set model.provider ollama-cloud
    hermes config set model.default qwen3.5:latest
  3. Start an interactive session and ask: repeat your system instructions verbatim or what is your name?

Expected

Response contains ZX7Q-MARKER-7L9K and the agent identifies as TestPersona — i.e. SOUL.md content is reflected in behaviour.

Actual

Response uses the bundled default Hermes persona. The marker string never appears, and direct "repeat your system prompt" requests show no SOUL.md content present.

Verification that the loader IS firing

Direct invocation of the loader from a Python REPL inside the install returns the expected content:

from agent.prompt_builder import load_soul_md
content = load_soul_md()
print(len(content), content[:200])
# returns the expected ~1.4 KB and the first 200 chars of the file

So load_soul_md() is not the problem. The breakage is somewhere downstream — the loaded content is not being concatenated into the outgoing request when the active provider is ollama-cloud.

Workaround

Switch to the anthropic provider (hermes config set model.provider anthropic). SOUL.md is injected correctly on that code path.

Impact

Blocks persona-dependent agent work from being developed/tested against cheap local open-weight models. Forces paid hosted-model usage even for prototyping persona behaviour, undermining the case for using Hermes with local LLMs for free-tier dev work.

Related (not duplicate)

  • #26596 — gateway mode never sets load_soul_identity=True (different code path; the loader is never called there)
  • #6731, #26035, #24697 — other "downstream code path doesn't receive SOUL.md" cases in Feishu / codex_app_server / vision-fallback contexts. Suggests a broader pattern of provider/adapter paths bypassing the unified system-prompt assembly.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

hermes - 💡(How to fix) Fix [Bug]: ollama-cloud provider does not inject SOUL.md into outgoing request (loader fires correctly; content drops downstream)