Skip to content

[nightly][agent-sec-core] skill-ledger 对 ~/.hermes/skills/ 下 unmanaged skill 不生成 warning(none/deny/drifted/tampered 4 用例持续失败) #1406

Description

@zhangtaibo

Component

agent-sec-core (Hermes plugin — skill-ledger capability)

Bug Description

agent-sec-core 的 Hermes 插件 (hermes-plugin/src/capabilities/skill_ledger.py) 在 pre_tool_call 钩子中调用 agent-sec-cli skill-ledger show <skill_dir> 来检查 skill 安全状态。当 skill 位于 ~/.hermes/skills/ 但 skill-ledger daemon 的 managedSkillDirs 只覆盖 /usr/share/anolisa/skills/* 时,CLI 返回 latestStatus: "unmanaged"message: null

插件的代码逻辑:

message = summary.get("message")
if not isinstance(message, str) or not message.strip():
    return None  # ← 跳过 warning 生成

由于 messagenull,插件直接 return None,不生成任何 warning。但该 skill 可能在 /usr/share/anolisa/skills/ 中已被 scan/certify,只是被拷贝到 ~/.hermes/skills/ 后变成了 unmanaged。

这导致 4 个 TestHermesSkillLedger 用例持续失败(连续 5 天 07-05~07-09):

  • test_none_skill_shows_warning
  • test_deny_skill_shows_warning
  • test_drifted_skill_shows_warning
  • test_tampered_skill_shows_warning

Steps to Reproduce

cd /root/agentic-os-tests/agent-sec-core
source /root/.cargo/env 2>/dev/null
python3 -m pytest -xvs 'tests/test_hermes_intercept_tmux.py::TestHermesSkillLedger::test_none_skill_shows_warning'

Expected

当 LLM 调用 skill_view 查看 none/deny/drifted/tampered 状态的 skill 时,TUI 应显示 [agent-sec-core skill-ledger warning] 内联警告。

Actual

TUI 无 warning 输出,LLM 被 interrupted,测试 180s 超时或 assertion 失败。

Root Cause

  1. 插件将 skill_view 调用解析为 ~/.hermes/skills/<name> 路径
  2. agent-sec-cli skill-ledger show ~/.hermes/skills/<name> 返回 unmanaged(因为 ~/.hermes/skills/ 不在 managedSkillDirs 中)
  3. message: null → 插件跳过 warning 生成

Environment

  • anolisa commit: b099d3e (main, 2026-07-09)
  • agent-sec-core version: 0.7.1
  • ECS: AgenticOS-agent-sec-core nightly test

Relevant Log

AssertionError: 查看 skill 'e2e-agent-sec-none-skill' 未输出 skill-ledger warning。
TUI 输出:
  ·  interrupted
  ❯ 你必须调用 skill_view 工具来查看 e2e-agent-sec-none-skill 的内容...

Suggested Fix

  1. latestStatus == "unmanaged" 时,插件应在 managed skill roots(/usr/share/anolisa/skills/)中查找同名 skill 并重新查询
  2. 如果 managed root 中有结果,使用该结果代替 unmanaged 结果
  3. 如果所有 managed root 都没有,生成合成 warning:"unmanaged — not tracked by Skill Ledger. Security status unknown."

Verification

Patch applied on fresh ECS clone + bash scripts/rpm-build.sh agent-sec-core → exit 0, 7 RPMs produced (including agent-sec-cli-0.7.1 207M).

Metadata

Metadata

Labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions