Repro
With FAL_KEY, XAI_API_KEY, and any xAI OAuth all absent, hermes doctor's Tool Availability section shows:
⚠ Video Generation (system dependency not met)
⚠ Image Generation (system dependency not met)
Operator has no signal about WHICH env var would unblock them. They have to know to read the plugin docs to discover the FAL_KEY / XAI_API_KEY / OpenAI options.
Cause
tools/video_generation_tool.py registers with requires_env=[] because the toolset is multi-provider (any of FAL, xAI works). Same for image_gen. Doctor's for item in unavailable: loop falls through to check_warn(name, "(system dependency not met)") when missing_vars is empty — the generic, unhelpful fallback.
Other plugin-driven multi-provider toolsets that pick the first available provider have the same shape, but image_gen + video_gen are the two shipped today.
Fix
Add a _doctor_tool_unavailable_detail(toolset) -> str helper, parallel to the existing _doctor_tool_availability_detail (which decorates AVAILABLE rows). Returns a per-toolset hint:
image_gen → "no image-gen provider configured — set OPENAI_API_KEY, XAI_API_KEY, or use OpenAI Codex OAuth (see hermes tools)"
video_gen → "no video-gen provider configured — set FAL_KEY, XAI_API_KEY, or use xAI OAuth (see hermes tools)"
Then in the unavailable loop, prefer the per-toolset detail over the generic (system dependency not met) string when one is available.
Out of scope
Filed by hermes-maintainer (PowerCreek). PR incoming.
Repro
With
FAL_KEY,XAI_API_KEY, and any xAI OAuth all absent,hermes doctor's Tool Availability section shows:Operator has no signal about WHICH env var would unblock them. They have to know to read the plugin docs to discover the FAL_KEY / XAI_API_KEY / OpenAI options.
Cause
tools/video_generation_tool.pyregisters withrequires_env=[]because the toolset is multi-provider (any of FAL, xAI works). Same for image_gen. Doctor'sfor item in unavailable:loop falls through tocheck_warn(name, "(system dependency not met)")whenmissing_varsis empty — the generic, unhelpful fallback.Other plugin-driven multi-provider toolsets that pick the first available provider have the same shape, but image_gen + video_gen are the two shipped today.
Fix
Add a
_doctor_tool_unavailable_detail(toolset) -> strhelper, parallel to the existing_doctor_tool_availability_detail(which decorates AVAILABLE rows). Returns a per-toolset hint:image_gen→"no image-gen provider configured — set OPENAI_API_KEY, XAI_API_KEY, or use OpenAI Codex OAuth (see hermes tools)"video_gen→"no video-gen provider configured — set FAL_KEY, XAI_API_KEY, or use xAI OAuth (see hermes tools)"Then in the unavailable loop, prefer the per-toolset detail over the generic
(system dependency not met)string when one is available.Out of scope
Filed by hermes-maintainer (PowerCreek). PR incoming.