安全扫描
OpenClaw
可疑
medium confidence该技能的行为(使用 pilotctl 发布和读取心跳以及探测对等节点)与其声明的用途相匹配,但说明中引用了多个未声明的环境变量,并且假设了注册表/认证行为而没有记录所需的凭据或信任边界。
评估建议
这个技能似乎能够实现其声称的功能(心跳发布和故障检测),但在安装或运行之前存在一些需要澄清的差距:确保 pilotctl 是 PATH 上的可信二进制文件,并了解它如何向注册表进行认证(SKILL.md 假设你可以发布和读取消息,但没有声明所需的凭据或如何提供这些)。指令使用未在技能元数据中声明的环境变量($AGENT_ID、$SWARM_NAME、$REGISTRY_HOST)——决定你将如何设置这些变量,以及其中是否包含敏感值。确认向注册表发布心跳和 ping 对等节点的网络和隐私影响(这些操作会在网络上暴露代理 ID 和地址)。验证脚本调用的工具(jq、bc)的存在性和来源,并首先在受限/测试环境中运行命令。注意该技能采用 AGPL-3.0 许可证;如果你嵌入或修改它,该许可证可能会影响你修改后的技能的再分发。如果需要更清晰的安全态势,请请求作者声明所需的环境变量和任何凭据,记录 pilotctl/registry 的认证流程,并说明预期的网络/信任边界。...详细分析 ▾
✓ 用途与能力
名称/描述(心跳/故障检测和故障转移)与运行时指令一致:通过 pilotctl 发布心跳、读取收件箱、检测超时和 ping 对等节点。需要的二进制文件 pilotctl 和对 pilot-protocol 技能的依赖是适当的。
ℹ 指令范围
指令具体且仅限于心跳发布、收件箱检查和直接 ping 验证。然而,SKILL.md 引用了未在技能元数据中声明的环境变量(例如 $AGENT_ID、$SWARM_NAME、$REGISTRY_HOST)和工具(jq、bc);它还假设了一个注册表端点和 pilotctl 守护进程上下文,但没有指定认证或预期的网络边界。
✓ 安装机制
这是一个纯指令技能,没有安装规范和代码文件,因此安装程序不会下载或写入任何内容。安装风险较低。
⚠ 凭证需求
该技能没有声明所需的环境变量或凭据,但命令依赖于多个变量(AGENT_ID、SWARM_NAME、REGISTRY_HOST),并且在真实部署中可能需要认证才能从注册表发布/读取。该技能没有请求或记录任何凭据,也没有说明 pilotctl 如何进行认证,这是一个缺口:用户可能需要在其他地方提供令牌或其他密钥,但该技能没有提供指导。
✓ 持久化与权限
该技能不是 always:true,不请求持久的系统更改,仅可由用户调用。它不会尝试修改其他技能或系统范围的配置。
安全有层次,运行前请审查代码。
运行时依赖
无特殊依赖
版本
latestv1.0.02026/4/9
初始版本
● 无害
安装命令 点击复制
官方npx clawhub@latest install pilot-heartbeat-monitor
镜像加速npx clawhub@latest install pilot-heartbeat-monitor --registry https://cn.clawhub-mirror.com
技能文档
通过定期心跳监控代理健康状况,并使用基于超时的检测来识别故障。
命令
向对等节点发送心跳
pilotctl --json publish "registry-hostname" "heartbeat:$SWARM_NAME" \
--data "{\"agent\":\"$AGENT_ID\",\"timestamp\":\"$(date -u +%s)\",\"status\":\"alive\"}"
识别故障代理
TIMEOUT=30
CURRENT_TIME=$(date -u +%s)
FAILED_AGENTS=$(pilotctl --json inbox \
| jq --arg now "$CURRENT_TIME" --arg timeout "$TIMEOUT" \
'[.messages[] | select(.topic == "heartbeat:'$SWARM_NAME'") | {agent: .payload.agent, last_seen: .payload.timestamp}] | group_by(.agent) | map(select(($now | tonumber) - (map(.last_seen) | max) > ($timeout | tonumber))) | .[].agent')
通过直接 ping 验证故障
for agent in $FAILED_AGENTS; do
AGENT_ADDR=$(pilotctl --json peers | jq -r '.[] | select(.node_id == "'$agent'") | .address')
PING_RESULT=$(pilotctl --json ping "$AGENT_ADDR" --count 3 --timeout 2s)
LOSS=$(echo "$PING_RESULT" | jq -r '.packet_loss_pct')
if [ "$LOSS" = "100" ]; then
echo "Agent $agent CONFIRMED DOWN"
fi
done
工作流示例
工作池的健康监控脚本,支持自动任务重新分配:
#!/bin/bash
SWARM_NAME="worker-pool"
HEARTBEAT_INTERVAL=5
FAILURE_TIMEOUT=15
REGISTRY_HOST="registry.example.com"# 后台:发送自身心跳
(
while true; do
pilotctl --json publish "$REGISTRY_HOST" "heartbeat:$SWARM_NAME" \
--data "{\"agent\":\"$AGENT_ID\",\"timestamp\":\"$(date -u +%s)\"}"
sleep $HEARTBEAT_INTERVAL
done
) &
# 监控对等节点心跳
while true; do
CURRENT_TIME=$(date -u +%s)
# 检测超时并触发恢复
# ...
sleep $HEARTBEAT_INTERVAL
done
依赖项
需要 pilot-protocol 技能、jq 和 bc。
数据来源:ClawHub ↗ · 中文优化:龙虾技能库
OpenClaw 技能定制 / 插件定制 / 私有工作流定制
免费技能或插件可能存在安全风险,如需更匹配、更安全的方案,建议联系付费定制