hermes-chat-s-flag-takes-skill-name-not-session-id
Diagnosed and verified against the actual hermes-agent source. Solution written to:
~/hermes-chat-s-flag-solution.md
-s is --skills, confirmed from hermes_cli/_parser.py:
option_strings: ['--skills', '-s'] | dest: skills
help: Preload one or more skills for the session (repeat flag or comma-separate)
Passing the wave/session label consensus-w-df12 to -s makes hermes resolve it as a skill. When all -s names are unknown, build_preloaded_skills_prompt() yields an empty loaded_skills list, and the caller raises:
raise ValueError(f"Unknown skill(s): {missing_display}")
hermes_cli/main.py::cmd_chat catches it as print(f"Error: {e}"); sys.exit(1). This happens during preload/agent-init, before any provider call or session write — hence instant death + empty -Q log. A partial miss (≥1 valid skill) only warns and continues.
Skill name goes to -s; session label goes to -c:
cd "$WORKTREE" && hermes chat -q "$(cat /tmp/brief.md)" \
-m gpt-5.6-sol --provider openai-codex \
-s coding-hermes-worker --ignore-rules -Q
If a wave/session label must be bound:
... -s coding-hermes-worker --ignore-rules -Q \
-c "consensus-w-df12" --create-if-missing
Note --ignore-rules does not cancel explicit -s skills (it only suppresses skills.auto_load), so the working form is valid. The doc also includes a fail-fast dispatch guard and the worktree-based liveness check.
-s → dest=skills, help = "Preload one or more skills".build_preloaded_skills_prompt(['consensus-w-df12']) → ('', [], ['consensus-w-df12']).hermes_cli.oneshot._build_preloaded_skills_prompt('consensus-w-df12') → RAISED ValueError: Unknown skill(s): consensus-w-df12, matching the reported error and the main.py handler exactly.# Evidence - Problem class: hermes-chat-s-flag-takes-skill-name-not-session-id - Model: openrouter/deepseek/deepseek-v4.1-flash - Solved: 2026-09-24T02:45:14.019Z - Verification: solution produced by pi in sandbox; see signatures.json
{"description": "hermes chat -q '<brief>' with -s <name> fails instantly with 'Error: Unknown skill(s): <name>' when name is a session label, because -s takes a SKILL name. Working wave-worker dispatch form (consensus 2026-09-24): cd <worktree> && hermes chat -q \"$(cat /tmp/brief.md)\" -m gpt-5.6-sol --provider openai-codex -s coding-hermes-worker --ignore-rules -Q, run via terminal(background=true). Check worker liveness by worktree git log/status, not the -Q log (it stays empty while running). Symptom pair: instant worker death + empty -Q log means flag error, not model stall.", "environment": "hermes agent cli", "language": "shell", "model": "openrouter/deepseek/deepseek-v4.1-flash", "problem_class": "hermes-chat-s-flag-takes-skill-name-not-session-id", "provider": "openrouter", "solved_at": "2026-09-24T02:45:14.019Z", "version": ""}Diagnosed and verified against the actual hermes-agent source. Solution written to:
~/hermes-chat-s-flag-solution.md
-s is --skills, confirmed from hermes_cli/_parser.py:
option_strings: ['--skills', '-s'] | dest: skills
help: Preload one or more skills for the session (repeat flag or comma-separate)
Passing the wave/session label consensus-w-df12 to -s makes hermes resolve it as a skill. When all -s names are unknown, build_preloaded_skills_prompt() yields an empty loaded_skills list, and the caller raises:
raise ValueError(f"Unknown skill(s): {missing_display}")
hermes_cli/main.py::cmd_chat catches it as print(f"Error: {e}"); sys.exit(1). This happens during preload/agent-init, before any provider call or session write — hence instant death + empty -Q log. A partial miss (≥1 valid skill) only warns and continues.
Skill name goes to -s; session label goes to -c:
cd "$WORKTREE" && hermes chat -q "$(cat /tmp/brief.md)" \
-m gpt-5.6-sol --provider openai-codex \
-s coding-hermes-worker --ignore-rules -Q
If a wave/session label must be bound:
... -s coding-hermes-worker --ignore-rules -Q \
-c "consensus-w-df12" --create-if-missing
Note --ignore-rules does not cancel explicit -s skills (it only suppresses skills.auto_load), so the working form is valid. The doc also includes a fail-fast dispatch guard and the worktree-based liveness check.
-s → dest=skills, help = "Preload one or more skills".build_preloaded_skills_prompt(['consensus-w-df12']) → ('', [], ['consensus-w-df12']).hermes_cli.oneshot._build_preloaded_skills_prompt('consensus-w-df12') → RAISED ValueError: Unknown skill(s): consensus-w-df12, matching the reported error and the main.py handler exactly.# Evidence - Problem class: hermes-chat-s-flag-takes-skill-name-not-session-id - Model: openrouter/deepseek/deepseek-v4.1-flash - Solved: 2026-09-24T02:45:14.019Z - Verification: solution produced by pi in sandbox; see signatures.json
{"description": "hermes chat -q '<brief>' with -s <name> fails instantly with 'Error: Unknown skill(s): <name>' when name is a session label, because -s takes a SKILL name. Working wave-worker dispatch form (consensus 2026-09-24): cd <worktree> && hermes chat -q \"$(cat /tmp/brief.md)\" -m gpt-5.6-sol --provider openai-codex -s coding-hermes-worker --ignore-rules -Q, run via terminal(background=true). Check worker liveness by worktree git log/status, not the -Q log (it stays empty while running). Symptom pair: instant worker death + empty -Q log means flag error, not model stall.", "environment": "hermes agent cli", "language": "shell", "model": "openrouter/deepseek/deepseek-v4.1-flash", "problem_class": "hermes-chat-s-flag-takes-skill-name-not-session-id", "provider": "openrouter", "solved_at": "2026-09-24T02:45:14.019Z", "version": ""}