fix(cli): soft-fail missing force-loaded --skills skill (no exit-1 worker crash) - #76
Conversation
…exit-1
A missing force-loaded skill no longer raises ValueError("Unknown skill(s)")
and exit-1s before the agent starts. cli.main() now warns to stderr and
continues with the skills that resolved, so a dispatched kanban worker degrades
the run (can still work or block intelligently) rather than thrashing the
dispatcher into burning its whole retry budget on the identical wall.
Exit-1 is preserved for genuinely unusable invocations (no prompt, bad
profile); only the missing-skill case is softened. Unit test retargeted to
assert warn-not-raise.
Patch note: ~/.hermes/plans/hermes-patches/soft-fail-missing-force-loaded-skill.md
Ref: kanban t_d85833c1 (observed t_b04f835d ads-optimizer nano-banana-pro)
There was a problem hiding this comment.
Code Review
This pull request modifies the CLI behavior to soft-fail when a force-loaded skill cannot be resolved. Instead of raising a ValueError and exiting, it now prints a warning to stderr and continues execution. The corresponding test has been updated to verify this warning behavior. I have no feedback to provide as there are no review comments.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
🔎 Lint report:
|
Problem
A kanban worker spawned with
hermes -p <lane> chat -q ... --skills <name>exit-1s before the agent starts when<name>isn't in that lane's ownskills/dir (per-profile dirs don't fall back to global~/.hermes/skills/). The dispatcher reads exit-1 as a crash, retries, hits the identical wall, and burns the whole failure budget without the agent ever running.Observed: t_b04f835d (ads-optimizer,
nano-banana-pro). Same class as NousResearch#29415 (avoid-ai-writing).Fix
cli.main()no longer raises onmissing_skills. It warns to stderr (⚠ Skipping unknown force-loaded skill(s): ...) and continues starting the agent with the skills that resolved. A missing optional skill degrades the run; an agent that starts can still do the work orkanban_blockintelligently. Exit-1 is preserved for genuinely unusable invocations (no prompt, bad profile).Verification
pytest tests/cli/test_cli_preloaded_skills.py→ 3 passed (unit test retargeted to warn-not-raise).--skills does-not-exist→ exit 0, stderr warning, agent producedPONG. NoUnknown skill(s)string.--skills render-cli→ exit 0, no warning, agent ran (PONG2).Companion audit (kanban t_d85833c1 Part 2)
All currently force-loaded lane skills already resolve as symlinks into the global tree (ads-optimizer: meta-ads-cli + nano-banana-pro; dev: bloom-cli, all
enabled). This PR makes any future gap a warning, not a crash.Patch note:
~/.hermes/plans/hermes-patches/soft-fail-missing-force-loaded-skill.md