{"repo":"NousResearch/hermes-agent","public_id":"30408","display_label":"Skills read tools missing from idempotent guardrail list","summary":"A bug was identified where skills_list and skill_view are read-only tools but were absent from IDEMPOTENT_TOOL_NAMES, causing repeated identical calls to go undetected by the tool-loop guardrail. Multiple fixes and related agent guards address this gap.","subsystem":"agent","counts":{"members":8,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":2,"merged_prs":1,"attempt_prs":5},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":100967},"resolution":{"state":"partially_resolved","by":"pr-100967"},"freshness":{"state":"verified","last_verified_at":"2026-09-02T07:26:58+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_PARTIAL","link_density":0.22714285714285715},"fix_edges":[{"issue_number":32827,"pr_number":100967,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":49075,"pr_number":100967,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":57804,"pr_number":100967,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false}],"members":[{"kind":"issue","number":30408,"title":"Hermes should stop repeated tool loops and block obviously broken final responses","url":null,"state":"closed"},{"kind":"issue","number":49075,"title":"[bug] Tool-loop guardrail: skills_list / skill_view are read-only but missing from IDEMPOTENT_TOOL_NAMES, so repeated-identical-call loops go undetected","url":null,"state":"closed"},{"kind":"pr","number":47231,"title":"fix(agent): guard repeated skill reads","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"25d954c2cf","number":0},{"kind":"pr","value":"#100967","number":100967},{"kind":"pr","value":"#49075","number":49075}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":49092,"title":"fix(guardrails): add skills_list/skill_view to IDEMPOTENT_TOOL_NAMES","url":null,"state":"closed","close_reason":{"category":"superseded_by_pr","implication":"superseded"},"merged":false,"is_fix_pr":true,"fix_tier":"suggested","fix_detail_withheld":true},{"kind":"pr","number":49101,"title":"fix(guardrail): add skills_list and skill_view to IDEMPOTENT_TOOL_NAMES","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#47231","number":47231},{"kind":"pr","value":"#47231","number":47231},{"kind":"pr","value":"#49092","number":49092},{"kind":"pr","value":"#49075","number":49075}],"category":"duplicate_of","implication":"duplicate"},"merged":false},{"kind":"pr","number":49202,"title":"fix(agent): guard repeated skill read tool calls","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"25d954c2cf","number":0},{"kind":"pr","value":"#100967","number":100967},{"kind":"pr","value":"#47231","number":47231}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":54411,"title":"fix(guardrails): add skills_list/skill_view to IDEMPOTENT_TOOL_NAMES","url":null,"state":"closed","close_reason":{"category":"superseded_by_pr","implication":"superseded"},"merged":false,"is_fix_pr":true,"fix_tier":"suggested","fix_detail_withheld":true},{"kind":"pr","number":100967,"title":"fix(guardrails): tool-call loops hard-stop on unattended platforms, identical replays halt for any tool (#49075, #89069; salvage #49189, #47231)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/agent_init.py","agent/tool_guardrails.py","cli-config.yaml.example","hermes_cli/config_defaults.py","run_agent.py","tests/agent/test_tool_guardrails.py","tests/run_agent/test_tool_call_guardrail_runtime.py","website/docs/user-guide/configuration.md","website/docs/user-guide/docker.md"]}],"trust":{"default_tier":"verified","includes_suggested":false}}