# NousResearch/hermes-agent · Kanban worker handling of unresolved skills, plus one unrelated Gemini fix

## Open now

- 1 issue, 1 PR open on GitHub.
- #54088: Kanban worker should not crash when an optional preloaded skill cannot be resolved
- PR #54100: fix(kanban): keep a dispatcher-owned worker running when the whole skill set is missing (#54088)

Most members concern making a Kanban worker or the CLI warn instead of crash when a preloaded or unknown skill cannot be looked up. One member, about adding a role field to Gemini systemInstruction for Gemma compatibility, does not appear related to this theme.

## TL;DR

- 6 member(s): 1 open issue(s), 1 closed issue(s), 1 open PR(s), 1 merged PR(s), 2 PR(s) closed without merging.
- A fix was merged to main in PR #55585. Verify it addresses your case.
- **Recommended:** read PR #55585 (and any competing PRs below) before filing. Confirm the merged change covers your symptom.

## Maintainer resolution verdict

- Internal-tracker verdict over this cluster's issue members: `partially_resolved` · deciding PR(s): `pr-55585`. This is distinct from the fix status above. Weigh it yourself.

## How this cluster was grouped

- Link evidence (`STRUCTURAL_PARTIAL`): some members are connected by structural evidence (shared changed files, or a closing/superseded reference); the rest are joined by an automated relevance judgement over their text.
- Members outside that structural core may belong to a different underlying problem.
- Pairwise link density `0.29`: the share of member pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36. `1.00` means every pair is linked.

## Open related issues

- #54088: Kanban worker should not crash when an optional preloaded skill cannot be resolved

## Closed / duplicate issues

- #27136: fix(cli): unknown skills should warn instead of crash to prevent Kanban worker auto-blocking

## Prior & competing PRs

- **#55585: fix(kanban): unknown skill warns instead of crashing the worker**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`
  - files: `cli.py`, `scripts/release.py`, `tui_gateway/server.py`
  - fix hunks:
  - `cli.py`

    ```diff
    @@ -15359,7 +15359,21 @@ def main(
             )
             if missing_skills:
                 missing_display = ", ".join(missing_skills)
    -            raise ValueError(f"Unknown skill(s): {missing_display}")
    +            # If at least one skill loaded, degrade gracefully: skip the
    +            # unknown ones and continue. A typo'd skill name should not crash
    +            # the worker (which auto-blocks the Kanban task after retries).
    +            # Only when EVERY requested skill is missing do we hard-fail, so a
    +            # fully-misconfigured worker fails loudly instead of running blind.
    +            if loaded_skills:
    +                logger.warning(
    +                    "Unknown skill(s) requested, skipping: %s. "
    +                    "Continuing with: %s. "
    +                    "List available skills with `hermes skills list`.",
    +                    missing_display,
    +                    ", ".join(loaded_skills),
    +                )
    +            else:
    +                raise ValueError(f"Unknown skill(s): {missing_display}")
             if skills_prompt:
                 cli.system_prompt = "\n\n".join(
                     part for part in (cli.system_prompt, skills_prompt) if part
    ```
  - `scripts/release.py`

    ```diff
    @@ -45,6 +45,7 @@
     
     # Auto-extracted from noreply emails + manual overrides
     AUTHOR_MAP = {
    +    "193368749+jimmyjohansson84@users.noreply.github.com": "jimmyjohansson84",  # PR #27123 salvage (Kanban unknown-skill warn-instead-of-crash; #27136)
         "[redacted:email]": "theAgenticBuilder",  # PR #14180 salvage (route delegate_task progress lines through _safe_print so ACP stdio JSON-RPC frames stay clean)
         "[redacted:email]": "huangxudong663-sys",  # PR #15157 salvage (isinstance(dict) guard on tool-call model_extra; NVIDIA NIM non-dict crash)
         "[redacted:email]": "Nickperillo",  # PR #8008 salvage (Discord channel-name matching + flush pending sends on shutdown)
    ```
  - `tui_gateway/server.py`

    ```diff
    @@ -4212,12 +4212,25 @@ def _make_agent(
         if startup_skills:
             from agent.skill_commands import build_preloaded_skills_prompt
     
    -        skills_prompt, _loaded_skills, missing_skills = build_preloaded_skills_prompt(
    +        skills_prompt, loaded_skills, missing_skills = build_preloaded_skills_prompt(
                 startup_skills,
                 task_id=session_id or key,
             )
             if missing_skills:
    -            raise ValueError(f"Unknown skill(s): {', '.join(missing_skills)}")
    +            missing_display = ", ".join(missing_skills)
    +            # Degrade gracefully when some skills loaded; only hard-fail when
    +            # every requested skill is missing. Mirrors cli.py — a typo'd skill
    +            # name should not crash the worker and auto-block the Kanban task.
    +            if loaded_skills:
    +                logger.warning(
    +                    "Unknown skill(s) requested, skipping: %s. "
    +                    "Continuing with: %s. "
    +                    "List available skills with `hermes skills list`.",
    +                    missing_display,
    +                    ", ".join(loaded_skills),
    +                )
    +            else:
    +                raise ValueError(f"Unknown skill(s): {missing_display}")
             if skills_prompt:
                 system_prompt = "\n\n".join(
                     part for part in (system_prompt, skills_prompt) if part
    ```
- **#27123: fix(gemini): add missing role field to systemInstruction for Gemma compatibility**. closed without merge
  - maintainer direction: category `merged_via`; implication `superseded`; refs `018009bc3`, `#55585`, `#27123`
- **#27201: fix(cli): unknown skills should warn instead of crash**. closed without merge
  - maintainer direction: category `merged_via`; implication `superseded`; refs `018009bc382de86f864e3fa8af3982c2f0aa7bfb`
- **#54100: fix(kanban): keep a dispatcher-owned worker running when the whole skill set is missing (#54088)**. open
  - maintainer direction: category `uncategorized`; implication `needs_llm`
  - files: `cli.py`, `tests/hermes_cli/test_cli_preloaded_skills.py`

## Fix status

- Merged to main in PR #55585 (cited above). No release data is tracked. Verify downstream.
- Fix last verified (merged) `2026-06-30`.
- Subsystem: `agent`
