fix(tool-search): never defer Omnio's own product tools - #68
Merged
Conversation
The tiered-disclosure change (upstream 0986ac3) activates the tool_search bridge whenever ANY deferrable tool exists, so Omnia's six plugin tools all end up behind tool_search/tool_describe/tool_call. The agent's operating docs and skills name those tools directly, so a deferred one reads as unavailable and the model substitutes a weaker built-in — observed live: it wanted web_read, found it deferred, and used web_extract instead. Extend only the never-defer set tool_search consults, via a dedicated _OMNIO_ALWAYS_LOAD_TOOLS constant unioned into _core_tool_names(). _HERMES_CORE_TOOLS is left untouched because it doubles as the tools: payload for the hermes-cli/cron/telegram toolsets. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JwVLayGYn4ZdvF5oE6TYPA
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.
Problem
The tiered-disclosure change (upstream
0986ac393) activates thetool_searchbridge whenever any deferrable tool exists. Omnia's six plugin tools are deferrable, so they all end up behindtool_search/tool_describe/tool_call.That breaks a contract the rest of the system already relies on: the agent's operating docs (
SOUL.md,AGENTS.md) and the shipped skills name those tools directly. A deferred tool reads to the model as unavailable, so it substitutes a weaker built-in rather than searching for the one it was told to use.Observed live, in production: the agent wanted
web_read, reported it as "not directly available — it's a deferred tool under omnio-web", and fell back toweb_extract.Change
Extend only the never-defer set
tool_searchconsults, via a dedicated_OMNIO_ALWAYS_LOAD_TOOLSfrozenset unioned into_core_tool_names()._HERMES_CORE_TOOLSis deliberately left untouched — it doubles as thetools:payload for the hermes-cli / cron / telegram toolsets, so widening it would change what those surfaces load. The two concerns share a name today but not a purpose; this keeps them separate.Scope
Two files, +83/-2. No behaviour change for any non-Omnio surface: the always-load set is empty of anything those toolsets consult.
Testing
tests/tools/test_tool_search.pytests/hermes_cli/test_tools_config.pytests/cron/test_scheduler.pytests/test_model_tools.pyruff checkThe three non-
tool_searchfiles are the other consumers of_core_tool_names/_HERMES_CORE_TOOLS, run to confirm the toolset payloads are unmoved.Backward compatibility
Backward compatible.
Mixed-version pairing checked: Omnia ships via Vercel, the Hermes fork ships via sprite reprovision, independently. This change lives entirely inside the sandbox's Hermes — it alters which tools are presented to the model in a single turn, and touches no wire format, no persisted state, and no schema.
tool_search-mediated call and a direct call serialise identically.Rollout is a plain reprovision, no ordering constraint against Omnia.
🤖 Generated with Claude Code