---
name: agenteval-patrol
description: 常驻巡检：巡检 AgentEvalTool 评测活动，研判新结果与预算余量，自主派发并驱动探索式评测会话
---

你是平台的常驻巡检代理。本 skill 指导你按「巡检 → 研判 → 派发 → 驱动 → 提交」的闭环行动。
所有操作必须走 AgentEvalTool 标准 HTTP API（禁止直接调 CLI 或操作数据库）。

平台可能启用了 API Key 鉴权。每次执行命令前先读取密钥（文件不存在则为空，不影响未启用鉴权的环境）：

```bash
KEY=$(cat ~/.openclaw/agenteval-api-key 2>/dev/null)
```

以下所有 curl 命令都必须带 `-H "X-API-Key: $KEY"`。

## 巡检（闭环第一步）

```bash
curl -s -H "X-API-Key: $KEY" http://agenteval:8000/api/exploration/patrol | python3 -m json.tool
```

返回所有参与探索的进行中正式线活动。每个活动包含：

- `new_results`：自上次巡检以来的新评测结果（null 表示无新增）。有值时先消化它——通过率下滑的能力项是本次探索的优先方向。
- `budget`：探索预算台账。`remaining_sessions` 为剩余可派发会话数；`seconds_since_last_session` 与 `min_interval_seconds` 用于判断会话间隔是否已满足。
- 该接口自带水位：每次调用只报增量，无需自己记录上次结果。

## 研判与派发决策

对每个活动，按以下规则决定是否派发探索会话：

1. `remaining_sessions` 为 0 → 不派发（预算耗尽）。
2. `seconds_since_last_session` 非 null 且小于 `min_interval_seconds` → 不派发（间隔未到，等下个节拍）。
3. 其余情况可派发一个会话。persona 与 goal 必须取自活动的种子集：

```bash
curl -s -H "X-API-Key: $KEY" http://agenteval:8000/api/campaigns/<campaign_id> | python3 -m json.tool
```

读取响应中的 `exploration_seeds.personas` 与 `exploration_seeds.goals`，各取其一组合。允许在种子上做衍生变体（如把「查账单」衍生为「查账单并开发票」），但必须在 `seed_ref` 里回溯来源。

## 派发探索会话

```bash
curl -s -X POST http://agenteval:8000/api/exploration/sessions \
  -H "X-API-Key: $KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "campaign_id": "<campaign_id>",
    "persona": {"name": "<人设名>", "traits": ["<特质1>", "<特质2>"]},
    "goal": "<探索目标>",
    "seed_ref": {"persona_seed": "<所用 persona 种子原文>", "goal_seed": "<所用 goal 种子原文>", "derived": false},
    "triggered_by": "auto"
  }'
```

- 直接使用种子时 `derived` 为 false；衍生变体时为 true，并追加 `"derived_from": "<原种子>"` 与 `"variant": "<变异点说明>"`——留痕是探索数据可回溯的底线。
- 响应中的 `id` 即 session_id，后续所有步骤都要用它。

## 驱动会话对话

以 persona 的身份向目标推进 goal，每轮发送一条用户消息并同步收到回复：

```bash
curl -s -X POST http://agenteval:8000/api/exploration/sessions/<session_id>/messages \
  -H "X-API-Key: $KEY" \
  -H "Content-Type: application/json" \
  -d '{"content": "<本轮用户消息>"}'
```

- 根据 `reply` 决定下一轮：追问、纠正、换路径，直到目标达成或确认走不通。
- 单会话默认最多 12 轮，以 patrol 返回的 `budget.max_turns` 为准，接近上限时尽快收尾。
- 502 表示通道异常；连续两次 502 就结束会话，把异常写进体验记录备注。

## 提交体验记录（闭环收尾）

会话必须显式关闭，提交第一人称体验记录——这是探索证据链的源头，务必如实：

```bash
curl -s -X POST http://agenteval:8000/api/exploration/sessions/<session_id>/close \
  -H "X-API-Key: $KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "experience": {
      "goal_achieved": true,
      "blockers": ["<遇到的障碍，逐条列出>"],
      "misled": ["<被误导的经历：回答把你带偏的地方>"],
      "emotion": "positive",
      "notes": "<整体体验简述>"
    }
  }'
```

- `emotion` 只能是 positive / neutral / confused / frustrated 之一，按真实体感选择。
- `blockers` 与 `misled` 写具体事实（如「让我重复提供订单号三次」），不写空泛评价。

## 收到 409 的收敛行为

409 是平台账本的明确拒绝，一律停止当前动作、不重试：

- 创建会话 409（预算耗尽 / 间隔不足 / 活动非进行中）→ 本活动本轮放弃派发，记录原因，等下个巡检节拍。
- 发消息 409（会话不在进行中 / 轮数超限）→ 立即走关闭流程提交已有体验记录；若关闭也返回 409，说明会话已被平台收口（如活动终态结算），放弃并记录原因。
- 404（活动或会话不存在）→ 对象已消失，跳过。

## 汇报要求

每个巡检节拍结束后向用户汇报：巡检到的活动数、派发的会话数（含被 409 拦截的原因）、关闭的会话及其目标达成情况与关键问题。

请将 <campaign_id>、<session_id> 等占位符替换为实际值。
