hermes - 💡(How to fix) Fix [Feature]: Profile config inheritance from default [1 participants]

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…
GitHub stats
NousResearch/hermes-agent#20270Fetched 2026-05-06 06:37:41
View on GitHub
Comments
0
Participants
1
Timeline
4
Reactions
0
Author
Participants
Timeline (top)
labeled ×4

Error Message

  • Error-prone — easy to forget updating a profile
RAW_BUFFERClick to expand / collapse

Problem or Use Case

Managing N profiles requires keeping N copies of config.yaml in sync. When I change my model or add an API key, I must edit all N profiles independently. This causes:

  • Config drift — profiles diverge over time
  • Duplication — same 200-line config copied N times
  • Error-prone — easy to forget updating a profile

This is especially painful for Kanban workflows where you have multiple specialist profiles (researcher, engineer, reviewer, writer) that should share 95% of their config.

Proposed Solution

Profiles should automatically inherit from default (~/.hermes/config.yaml). Profile config.yaml only needs to specify overrides:

~/.hermes/profiles/engineer/config.yaml Inherits from default automatically — just specify what's different

model: anthropic/claude-opus-4 max_turns: 120

Resolution Order

  1. Load default profile's config.yaml (~/.hermes/config.yaml)
  2. Apply profile's overrides on top (deep merge for nested objects)
  3. Profile-specific values win on conflicts

Example Use Case

~/.hermes/config.yaml (default / base) model: anthropic/claude-sonnet-4 max_turns: 90 toolsets: [terminal, file, web, search] mcp_servers: searxng: url: "https://search.example.com/mcp" http_auth_token: "${SEARXNG_TOKEN}"

~/.hermes/profiles/engineer/config.yaml (inherits automatically) model: anthropic/claude-opus-4 max_turns: 120

~/.hermes/profiles/researcher/config.yaml (inherits automatically) model: openai/o3-mini-high toolsets: [web]

~/.hermes/profiles/sandbox/config.yaml (fully independent) No inheritance — complete config from scratch model: test-model provider: local max_turns: 50 ... etc

CLI Creation Flag

hermes profile create engineer --inherits

This would create the profile with a skeleton config.yaml containing only comments explaining the inheritance behavior.

Implementation Notes

  • Inheritance is automatic from default for all profiles
  • Profile config.yaml contains only overrides — no special fields needed
  • .env remains per-profile (API keys are already managed via hermes config set which routes to the right file)
  • hermes config show should indicate inheritance chain (e.g., "Inherits from: default")

Scope: Medium (few files, < 300 lines) Files affected:

  • hermes_constants.py — get_hermes_home() + profile path resolution
  • cli.py or hermes_cli/commands.py — hermes profile create logic
  • Config loader (load_config()) — add inheritance merge step
  • hermes config show — display inheritance chain

Alternatives Considered

The only valid alternative is using an external script for this, which would require yaml.parsing and keeping a running list of which keys should have the values synced and which should be kept different, which may need to be per profile if you wish to keep one setting in sync for one profile and not for the others. Native config inheritance would be much simpler, both in implementation and use.

Feature Type

Configuration option

Scope

Medium (few files, < 300 lines)

Contribution

  • I'd like to implement this myself and submit a PR

Debug Report (optional)

extent analysis

TL;DR

Implement automatic config inheritance from a default profile to reduce config duplication and drift across multiple profiles.

Guidance

  • Introduce a load_config() function that merges the default config with profile-specific overrides using a deep merge approach for nested objects.
  • Modify the hermes profile create command to include an --inherits flag, which creates a profile with a skeleton config.yaml containing comments explaining the inheritance behavior.
  • Update hermes config show to display the inheritance chain for each profile.
  • Ensure that profile-specific values take precedence over default values in case of conflicts.

Example

import yaml

def load_config(default_config, profile_config):
    # Deep merge default config with profile-specific overrides
    merged_config = {**default_config, **profile_config}
    # Handle nested objects
    for key, value in profile_config.items():
        if isinstance(value, dict) and key in default_config:
            merged_config[key] = {**default_config[key], **value}
    return merged_config

# Example usage:
default_config = yaml.safe_load("""
model: anthropic/claude-sonnet-4
max_turns: 90
toolsets: [terminal, file, web, search]
mcp_servers:
  searxng:
    url: "https://search.example.com/mcp"
    http_auth_token: "${SEARXNG_TOKEN}"
""")

profile_config = yaml.safe_load("""
model: anthropic/claude-opus-4
max_turns: 120
""")

merged_config = load_config(default_config, profile_config)
print(merged_config)

Notes

The implementation should handle cases where a profile has no config.yaml file or where the file is empty. Additionally, the hermes config set command should be updated to handle profile-specific overrides correctly.

Recommendation

Apply the proposed solution with automatic config inheritance to simplify profile management and reduce config

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 [Feature]: Profile config inheritance from default [1 participants]