hermes - 💡(How to fix) Fix skills_guard: agent-created skills hard-blocked by false-positive regex patterns — 'ask' verdict treated as block [1 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
NousResearch/hermes-agent#13686Fetched 2026-04-22 08:04:43
View on GitHub
Comments
0
Participants
1
Timeline
0
Reactions
0
Author
Participants

Root Cause

In tools/skills_guard.py:

INSTALL_POLICY = {
    "agent-created": ("allow", "allow", "ask"),  # dangerous → "ask"
}

And in _security_scan_skill() (tools/skill_manager_tool.py line 66-71):

if allowed is None:
    # "ask" verdict — for agent-created skills this means dangerous
    # findings were detected.  Block the skill and include the report.
    return f"Security scan blocked this skill ({reason}):\n{report}"

The "ask" verdict is never surfaced to the user as an interactive prompt — it simply blocks.

Code Example

INSTALL_POLICY = {
    "agent-created": ("allow", "allow", "ask"),  # dangerous → "ask"
}

---

if allowed is None:
    # "ask" verdict — for agent-created skills this means dangerous
    # findings were detected.  Block the skill and include the report.
    return f"Security scan blocked this skill ({reason}):\n{report}"
RAW_BUFFERClick to expand / collapse

Bug Description

The skills_guard security scanner hard-blocks skill creation when regex patterns produce false-positive "critical" severity matches in agent-created skills. The "ask" verdict is treated as a hard block with no user-facing confirmation prompt.

Root Cause

In tools/skills_guard.py:

INSTALL_POLICY = {
    "agent-created": ("allow", "allow", "ask"),  # dangerous → "ask"
}

And in _security_scan_skill() (tools/skill_manager_tool.py line 66-71):

if allowed is None:
    # "ask" verdict — for agent-created skills this means dangerous
    # findings were detected.  Block the skill and include the report.
    return f"Security scan blocked this skill ({reason}):\n{report}"

The "ask" verdict is never surfaced to the user as an interactive prompt — it simply blocks.

False Positives That Trigger the Block

The THREAT_PATTERNS list contains several over-broad patterns that fire on legitimate skill content:

  1. env_exfil_curl / env_exfil_wget / remote_fetch — Matches any mention of curl/wget/httpx with an HTTPS URL, including documentation text
  2. hermes_env_access — Pattern $HOME/.hermes/.env matches any mention of the Hermes env file path, even as a documentation reference
  3. send_to_url — Fires on legitimate descriptions of messaging/gateway integrations that mention "send to https://..."
  4. env_exfil_fetch — Fires on any fetch() call that references environment variables (standard API client practice)
  5. hardcoded_secret — Can fire on non-secret strings matching the credential-like format (e.g. Telegram bot usernames)
  6. context_exfil — Fires on normal documentation text mentioning "send conversation history"

Any ONE critical-severity finding triggers "dangerous" verdict → "ask" policy → hard block.

Impact

  • Agents cannot save skills that reference their own configuration (messaging gateways, bot tokens in .env, etc.)
  • Legitimate skill content describing API integrations, environment variable usage, or HTTP calls is blocked
  • No way for the owner/operator to override the block — the "ask" mechanism is non-functional

Recommended Fix (already applied locally)

Change INSTALL_POLICY["agent-created"] from ("allow", "allow", "ask") to ("allow", "allow", "allow").

Rationale: Agent-created skills are self-generated from the agent's own work context. They are not community-sourced unvetted content. Blocking them with no override mechanism is overprotective and prevents legitimate use cases. The agent operator already has full control over the agent's file system and can audit skill content directly.

Alternative Fix (if interactive confirmation is preferred)

Implement the "ask" verdict as an actual interactive confirmation that the operator must explicitly approve, rather than a silent block. This would require changes to how skill_manage surfaces confirmations during agent operation (not just at skill hub install time).

extent analysis

TL;DR

Change the INSTALL_POLICY["agent-created"] from ("allow", "allow", "ask") to ("allow", "allow", "allow") to prevent hard-blocking of agent-created skills due to false-positive "critical" severity matches.

Guidance

  • Review the THREAT_PATTERNS list to identify and refine over-broad patterns that may be causing false positives, such as env_exfil_curl and hermes_env_access.
  • Consider implementing an interactive confirmation for the "ask" verdict, allowing operators to explicitly approve or reject skills that trigger critical-severity findings.
  • Test the updated INSTALL_POLICY setting with various skill creation scenarios to ensure that legitimate skills are no longer blocked.
  • Evaluate the trade-off between security and usability when deciding between the recommended fix and the alternative fix.

Example

INSTALL_POLICY = {
    "agent-created": ("allow", "allow", "allow"),  # updated policy
}

Notes

The recommended fix assumes that agent-created skills are trusted and do not require additional verification. However, this may not be the case in all scenarios, and the alternative fix may be more suitable for environments where interactive confirmation is preferred.

Recommendation

Apply the workaround by changing the INSTALL_POLICY["agent-created"] to ("allow", "allow", "allow"), as this is a straightforward fix that addresses the immediate issue of hard-blocking legitimate skills.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

hermes - 💡(How to fix) Fix skills_guard: agent-created skills hard-blocked by false-positive regex patterns — 'ask' verdict treated as block [1 participants]