fix(part20): replace fabricated config blocks with real Hermes schemas#14
Merged
Conversation
Issue #13 flagged that the 'Route by Task Complexity' rule referenced a model_routing: DSL with intent/complexity/match keys that doesn't exist in Hermes. On audit, that's the tip of the iceberg: the previous rev of part20 invented a stack of config blocks that the Hermes loader does not read. Verified against Hermes v0.14.0 source (/home/terp/.hermes/hermes-agent, commit cea87d913) and the upstream cli-config.yaml.example. Fabricated keys removed and replaced with real ones: - model_routing: with intent/complexity/match/routes/tokens_gte -> auxiliary: per-task models + provider_routing: for OpenRouter + hermes fallback chain. Heads-up callout cites commit 424e9f36b ('refactor: remove smart_model_routing feature', #12732, 2026-04-19) so readers don't try to bring back the older smart_model_routing block either. - prompt_caching: with enabled/providers/cache_system_prompt/cache_skills/ cache_memory_digest/min_cache_tokens -> real one-key block prompt_caching.cache_ttl ('5m' or '1h'), plus the separate openrouter.response_cache layer. - telemetry: spans: browser_cdp / computer_use -> grep hermes logs or set a Langfuse alert on the existing browser_use/computer_use tool spans. - fast_mode: with per-gateway defaults and user_override -> /fast on|off|status slash command (it's a runtime toggle, no YAML block). - compression.auto.at_tokens / preserve / topics_from -> real compression.{enabled, threshold, target_ratio, protect_last_n} from cli-config.yaml.example. - alerts.cost_spike / alerts.token_anomaly -> alerts live in the tracing backend (Langfuse / Helicone / Phoenix) or in a small log-tailer that fires through hermes send telegram; there is no alerts: config block. - observability.langfuse.* (host/public_key/secret_key/sample_rate/ traced_tools/redact_payloads) -> HERMES_LANGFUSE_PUBLIC_KEY / HERMES_LANGFUSE_SECRET_KEY / HERMES_LANGFUSE_BASE_URL / HERMES_LANGFUSE_SAMPLE_RATE / etc. in ~/.hermes/.env, matching the bundled plugin's README and __init__.py. - observability.otel.endpoint / protocol / headers / attributes -> standard OTEL_EXPORTER_OTLP_* env vars in ~/.hermes/.env. - hermes evals init / dataset / run / compare subcommands -> Langfuse Datasets & Experiments workflow (Hermes has no built-in evals subcommand). Fixes #13.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes #13. The reporter flagged that the
model_routing:/intent:/complexity:config block in part20-observability.md ("Rule 1: Route by Task Complexity") doesn't exist in Hermes. They're right — and on audit, that's the tip of the iceberg. The previous rev of part20 invented a stack of YAML blocks the Hermes loader does not read.Verified against Hermes v0.14.0 source (
/home/terp/.hermes/hermes-agent, commitcea87d913), the upstreamcli-config.yaml.example, and the bundledplugins/observability/langfuseplugin.Fabricated keys removed → real ones used
model_routing:withroutes/intent/complexity/match/tokens_gteauxiliary:per-task models (vision, web_extract, compression, summarization) +provider_routing:for OpenRouter +hermes fallbackchainprompt_caching:withenabled/providers/cache_system_prompt/cache_skills/cache_memory_digest/min_cache_tokensprompt_caching.cache_ttl("5m"or"1h"), plus the separateopenrouter.response_cachelayertelemetry: spans: browser_cdp: true / computer_use: truehermes logs tail -f --level WARNINGor use a Langfuse alert on the existingbrowser_use/computer_usetool spansfast_mode:with per-gateway defaults +user_override/fast on|off|statusslash command — it's a runtime toggle, no YAML blockcompression.auto.at_tokens/preserve.tool_results_matching/topics_fromcompression.{enabled, threshold, target_ratio, protect_last_n}alerts: cost_spike: / token_anomaly:blockhermes send telegramobservability: langfuse:block in config.yamlHERMES_LANGFUSE_PUBLIC_KEY/HERMES_LANGFUSE_SECRET_KEY/HERMES_LANGFUSE_BASE_URL/HERMES_LANGFUSE_SAMPLE_RATE/ etc. in~/.hermes/.env, matching the bundled plugin's README and__init__.pyobservability: otel:block withendpoint/protocol/headers/attributesOTEL_EXPORTER_OTLP_*env vars in~/.hermes/.envhermes evals init / dataset / run / comparesubcommandsevalssubcommand)Heads-up callout for
smart_model_routingAdded a paragraph at the top of the "Cost Routing Playbook" noting that the older
smart_model_routing:block (cheap-vs-strong by message length) was removed upstream in commit424e9f36b("refactor: remove smart_model_routing feature", #12732, 2026-04-19). Readers who saw it referenced in older Hermes docs or upstream issue #16211 won't try to bring it back.Verification
~/.hermes/hermes-agent/hermes_cli/config.pyis the loader of record.grep -rn smart_model_routing /home/terp/.hermes/hermes-agent --include="*.py"returns zero hits in current source (only the removal commit in git log).~/.hermes/hermes-agent/plugins/observability/langfuse/{plugin.yaml,README.md,__init__.py}confirms the env-var contract.cli-config.yaml.exampleconfirms the realprompt_caching,compression,openrouter, andprovider_routingshapes.git diff --checkclean; onlypart20-observability.md(rewrite of Rules 1/2/2B/3/4/5 + Langfuse + OTel + eval sections) andCHANGELOG.md(dated entry) changed.Fixes #13.