You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fixes context-engine tool exposure when a platform has a saved toolset list from hermes tools.
Context engines such as hermes-lcm expose runtime tools through get_tool_schemas(), but AIAgent only injects those schemas when the context_engine toolset is enabled. Saved platform lists like web, terminal, etc. did not include that toolset, so active LCM sessions could run with context.engine: lcm while the model never saw the lcm_* tools.
This adds a first-class context_engine toolset and auto-enables it when a non-default context engine is configured, while preserving the explicit empty-selection behavior.
All checks passed!
✓ No Windows footguns found (502 file(s) scanned).
Broader local validation:
scripts/run_tests.sh -- -q --tb=short
Result:
25,165 tests passed, 4 failed
The failures were in unrelated model-picker tests that hit this machine's live local Ollama /models endpoint and returned installed local models instead of the test fixture models:
Covered by the new AIAgent regression: `_get_platform_tools()` resolves `context_engine` for an active non-default engine, and the engine's `stub_recover` schema appears in `AIAgent.valid_tool_names` and `agent.tools`.
Validation Status
Focused regression tests: passing locally.
Static checks: passing locally (ruff, Windows footguns).
Broader local suite: run locally, blocked only by 4 unrelated local Ollama/model-picker fixture failures as noted above.
GitHub PR checks: green on head 6bd2b5b437a3ae11f8ea42f93195000faf7151b1.
Passing: dependency bounds, supply-chain scan, attribution, common ancestor, e2e, ruff/ty, Windows footguns, Nix, Docker builds, and test (1) through test (6).
Skipped: expected publish/duration jobs (merge, move-latest, save-durations).
Merge state: CLEAN when rechecked after the green rerun.
Full-suite checklist is intentionally unchecked because local full validation did not finish green for unrelated local provider/fixture failures.
My commit messages follow Conventional Commits (fix(scope):, feat(scope):, etc.)
I searched for existing PRs to make sure this isn't a duplicate
My PR contains only changes related to this fix/feature (no unrelated commits)
I've run pytest tests/ -q and all tests pass
I've added tests for my changes (required for bug fixes, strongly encouraged for features)
I've tested on my platform: Linux 7.0.5-arch1-1 x86_64, Python 3.14.5
Documentation and Housekeeping
I've updated relevant documentation (README, docs/, docstrings) or N/A
I've updated cli-config.yaml.example if I added/changed config keys or N/A
I've updated CONTRIBUTING.md or AGENTS.md if I changed architecture or workflows or N/A
I've considered cross-platform impact (Windows, macOS) per the compatibility guide or N/A
I've updated tool descriptions/schemas if I changed tool behavior or N/A
For New Skills
N/A.
Screenshots / Logs
Before: active non-default context engines could expose schemas via get_tool_schemas(), but saved platform toolset lists omitted `context_engine`, so `AIAgent` suppressed those schemas.
After: `_get_platform_tools()` includes `context_engine` for non-default context engines, and the regression confirms the runtime schema reaches `AIAgent.valid_tool_names`.
@ethernet8023 Bump on this one: PR checks are green, mergeState is CLEAN, and I refreshed the body against the live diff/current checks.
This is the narrow host-side fix for hermes-lcm tool visibility: active context-engine tools stay exposed after saved platform toolset selections. It unblocks the canonical path for stephenschoettler/hermes-lcm#200 without adding plugin-side registry duplication.
Merged via PR #33719 (commit 8595281f3). Your commit 6bd2b5b43 was cherry-picked onto current main with authorship preserved (conflict-free auto-merge, 455 commits behind when picked). All 112 of your targeted regression tests pass against current main.
The context_engine toolset is now first-class and auto-enables whenever context.engine is set to anything other than the default compressor, so an active LCM session's lcm_* tools will reach the model even when a user has saved an explicit platform toolset list via hermes tools. Thanks for the precise diagnosis + clean fix.
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
comp/cliCLI entry point, hermes_cli/, setup wizardcomp/pluginsPlugin system and bundled pluginscomp/toolsTool registry, model_tools, toolsetsP3Low — cosmetic, nice to havetype/bugSomething isn't working
3 participants
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.
What does this PR do?
Fixes context-engine tool exposure when a platform has a saved toolset list from
hermes tools.Context engines such as
hermes-lcmexpose runtime tools throughget_tool_schemas(), butAIAgentonly injects those schemas when thecontext_enginetoolset is enabled. Saved platform lists likeweb,terminal, etc. did not include that toolset, so active LCM sessions could run withcontext.engine: lcmwhile the model never saw thelcm_*tools.This adds a first-class
context_enginetoolset and auto-enables it when a non-default context engine is configured, while preserving the explicit empty-selection behavior.Related Issue
Related: stephenschoettler/hermes-lcm#200
Type of Change
Changes Made
toolsets.pycontext_enginetoolset entry for runtime-provided context-engine tools.hermes_cli/tools_config.pycontext_engineto the configurable toolset list.context_enginefor non-defaultcontext.enginevalues, unless the platform selection is explicitly empty.tests/hermes_cli/test_tools_config.pytests/run_agent/test_plugin_context_engine_init.pyAIAgent.valid_tool_namesafter platform tool resolution.How to Test
Run focused validation:
Result:
Run static checks:
uvx ruff check . python scripts/check-windows-footguns.py --allResult:
Broader local validation:
Result:
The failures were in unrelated model-picker tests that hit this machine's live local Ollama
/modelsendpoint and returned installed local models instead of the test fixture models:tests/hermes_cli/test_list_picker_providers.py::test_current_custom_endpoint_passthrough_marks_current_rowtests/hermes_cli/test_model_switch_custom_providers.py::test_list_authenticated_providers_groups_same_endpointtests/hermes_cli/test_model_switch_custom_providers.py::test_list_authenticated_providers_distinct_endpoints_stay_separatetests/hermes_cli/test_model_switch_custom_providers.py::test_list_authenticated_providers_total_models_reflects_grouped_countManual exercise of changed path:
Validation Status
ruff, Windows footguns).6bd2b5b437a3ae11f8ea42f93195000faf7151b1.test (1)throughtest (6).merge,move-latest,save-durations).CLEANwhen rechecked after the green rerun.Checklist
Code
fix(scope):,feat(scope):, etc.)pytest tests/ -qand all tests passDocumentation and Housekeeping
docs/, docstrings) or N/Acli-config.yaml.exampleif I added/changed config keys or N/ACONTRIBUTING.mdorAGENTS.mdif I changed architecture or workflows or N/AFor New Skills
N/A.
Screenshots / Logs