Client or integration
Other
Area
Dashboard
Summary
Hermes Agent is an autonomous multi-provider agent whose configuration (~/.hermes/config.yaml) typically hosts multiple providers (e.g., Command Code, OpenCode, local models, auxiliary vision models) alongside user comments and runtime settings.
In src/clients/config-export.ts, the Hermes export is documented with the clear design invariant:
"Hermes ~/.hermes/config.yaml. We emit ONLY the provider entry — never model.default — because hijacking the user's main model is not what a connect action asks for."
However, in src/integrations/registry.ts, hermes was registered without sourcePreservingYaml: { path: ["providers", "opencodex"] }. Consequently, whenever an operator edits ~/.hermes/config.yaml to configure sibling providers, auxiliary models, or comments, classifyIntegration treats the modification as a whole-file conflict (foreign-edit or unowned-key).
In the dashboard UI, this locks the integration toggle and presents a destructive restore prompt ("Replace") warning that the file will be replaced from a previous snapshot. If confirmed, the user loses all non-OpenCodex providers and customized settings.
Reproduction
- Have a valid
~/.hermes/config.yaml containing sibling providers (e.g., commandcode-oauth, opencode-zen) and an auxiliary vision model configuration.
- Open the OpenCodex dashboard at http://127.0.0.1:10100/ and navigate to the Integrations tab.
- Observe that Hermes reports
state: "conflict" with reason unowned-key or foreign-edit instead of recognizing the sibling configuration as independent unowned content.
- Clicking the integration presents a modal offering to Replace/Restore the configuration from a snapshot.
- If the operator confirms the replace, the entire
config.yaml is overwritten by the snapshot, discarding all external providers and settings.
Version
@bitkyc08/opencodex 2.47.0 (and dev commit 2ee9019)
Operating system
Ubuntu 24.04 LTS (Linux 6.8.0-134-generic x86_64)
Provider and model
N/A (Client integrations subsystem)
Logs or error output
{
"clientId": "hermes",
"state": "conflict",
"installed": true,
"configPath": "/root/.hermes/config.yaml",
"reason": "unowned-key",
"snapshotCount": 0,
"retentionDegraded": false
}
Screenshots and supporting files
Observed in dashboard Integrations table: Hermes row enters conflict state with foreign-edit / unowned-key, locking ordinary toggle and requiring a destructive full-file restore.
Redacted configuration
model:
default: meituan/LongCat-2.0:free
providers:
commandcode-oauth:
models: [ ... ]
opencode-zen:
models: [ ... ]
opencodex:
api: http://127.0.0.1:10100/v1
api_key: ${OPENCODEX_HERMES_API_KEY}
Checks
Client or integration
Other
Area
Dashboard
Summary
Hermes Agent is an autonomous multi-provider agent whose configuration (
~/.hermes/config.yaml) typically hosts multiple providers (e.g., Command Code, OpenCode, local models, auxiliary vision models) alongside user comments and runtime settings.In
src/clients/config-export.ts, the Hermes export is documented with the clear design invariant:"Hermes
~/.hermes/config.yaml. We emit ONLY the provider entry — nevermodel.default— because hijacking the user's main model is not what a connect action asks for."However, in
src/integrations/registry.ts,hermeswas registered withoutsourcePreservingYaml: { path: ["providers", "opencodex"] }. Consequently, whenever an operator edits~/.hermes/config.yamlto configure sibling providers, auxiliary models, or comments,classifyIntegrationtreats the modification as a whole-file conflict (foreign-editorunowned-key).In the dashboard UI, this locks the integration toggle and presents a destructive restore prompt ("Replace") warning that the file will be replaced from a previous snapshot. If confirmed, the user loses all non-OpenCodex providers and customized settings.
Reproduction
~/.hermes/config.yamlcontaining sibling providers (e.g.,commandcode-oauth,opencode-zen) and an auxiliary vision model configuration.state: "conflict"with reasonunowned-keyorforeign-editinstead of recognizing the sibling configuration as independent unowned content.config.yamlis overwritten by the snapshot, discarding all external providers and settings.Version
@bitkyc08/opencodex 2.47.0 (and dev commit 2ee9019)
Operating system
Ubuntu 24.04 LTS (Linux 6.8.0-134-generic x86_64)
Provider and model
N/A (Client integrations subsystem)
Logs or error output
{ "clientId": "hermes", "state": "conflict", "installed": true, "configPath": "/root/.hermes/config.yaml", "reason": "unowned-key", "snapshotCount": 0, "retentionDegraded": false }Screenshots and supporting files
Observed in dashboard Integrations table: Hermes row enters conflict state with foreign-edit / unowned-key, locking ordinary toggle and requiring a destructive full-file restore.
Redacted configuration
Checks