# Mediary Scout

> 操作本机运行的 Mediary Scout（自托管媒体获取 agent）——改配置、找片/下片、查库存与进度，全程走本地 HTTP API，无需打开桌面客户端。 Use when the user wants to find, download, or track movies / TV shows / anime through Mediary Scout, check download progress, inspect their tracked library, change Mediary settings (quality / language / LLM / drives), or trigger a patrol sweep. 触发词：「帮我找 XX」「帮我下 XX」「XX 下好了吗」「XX 下载到哪了」「我在追哪些剧」「我的库存」「缺哪几集」「把画质改成 4K」「改成中文字幕优先」「触发一次巡检」「跑一遍巡检」。 Triggers: find/download a movie/show/anime, check download or acquisition progress, list what I'm tracking, show missing episodes, change quality preference to 4K, set preferred language, trigger/force a patrol, read or update Mediary Scout config.

- Skill: `fancydirty/mediary-scout` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add fancydirty/mediary-scout`
- Raw SKILL.md: https://api.skillmd.com/api/skills/fancydirty/mediary-scout/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: fancydirty (https://skillmd.com/u/fancydirty)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/fancydirty/mediary-scout

---


# Mediary Scout — Agent 操作面

你在通过本地 HTTP API 操作用户本机运行的 Mediary Scout。所有细节（完整 schema、错误码、字段清单）在 `references/api.md`。

## 1. 连接（每次先做）

发现文件在 `~/.mediary/agent.json`（权限 0600），内容：
`{ "baseUrl": "http://127.0.0.1:<port>", "token": "<hex>", "version": "<app version>" }`

```bash
cat ~/.mediary/agent.json
```

- **文件不存在** → 用户还没启动过。让用户打开 **Mediary Scout 桌面 app**（首启会生成 token 并写这个文件），然后重试。
- **文件存在但 curl connection refused** → app 没在运行。让用户启动 Mediary Scout 桌面 app。
- **文件存在且能连** → 继续。

之后所有调用都用这两个变量：

```bash
TOKEN=$(jq -r .token ~/.mediary/agent.json)
BASE=$(jq -r .baseUrl ~/.mediary/agent.json)
```

请求统一带 `-H "Authorization: Bearer $TOKEN"`。

## 2. 能力速查（用户说什么 → 调什么）

| 用户意图 | 端点 | curl |
|---|---|---|
| 查当前配置（画质/语言/LLM/推送…） | `GET /api/agent/config` | `curl -H "Authorization: Bearer $TOKEN" "$BASE/api/agent/config"` |
| 改配置（画质、语言、扫描时间…，传啥改啥） | `PUT /api/agent/config` | `curl -X PUT -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' -d '{"qualityPreference":"4K"}' "$BASE/api/agent/config"` |
| 「帮我找/下 XX」 | `POST /api/agent/acquire` | `curl -X POST -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' -d '{"query":"进击的巨人","type":"tv","season":2}' "$BASE/api/agent/acquire"` |
| 「触发一次巡检」「跑一遍巡检」 | `POST /api/agent/patrol` | `curl -X POST -H "Authorization: Bearer $TOKEN" "$BASE/api/agent/patrol"` |
| 「我在追哪些剧」「缺哪几集」「我的库存」 | `GET /api/agent/library` | `curl -H "Authorization: Bearer $TOKEN" "$BASE/api/agent/library"` |
| 「XX 下好了吗」「下载到哪了」「最近在忙啥」 | `GET /api/agent/activity` | `curl -H "Authorization: Bearer $TOKEN" "$BASE/api/agent/activity?limit=20"` |

`acquire` body 字段：`query`(必填)、`type`(`"tv"`/`"movie"`/`null`)、`season`(数字/`null`)、`storageId`(`"cs_…"`/`null`，缺省用 primary drive)、`tmdbId`(数字/`null`，用于消歧重发)。

## 3. 关键规则（必须遵守）

1. **409 歧义 → 交给用户挑，绝不瞎猜。** `acquire` 命中多个高分候选时返回 `409 { "candidates": [top5] }`。把候选（标题/年份/tmdbId）列给用户，让用户选一个，再带 `"tmdbId": <所选>` 重发同一 `acquire`。禁止自行替用户拍板。
2. **脱敏值绝不回写。** `GET config` 里秘密字段只露尾 4 位或显示为 `***`（如 `"apiKey": "sk-***7f2a"`、`"tmdbApiKey": "***"`）。**任何以 `***` 开头或含 `***` 的值都禁止写回 `PUT config`**——服务端会 400，且回写会毁掉真凭据。
3. **秘密字段只在用户明确给出新值时才写。** LLM apiKey、tmdbApiKey、prowlarr.apiKey、推送密钥等，只有用户在本次对话里明确提供了新的明文值，才放进 `PUT` body。用户没提就别碰这些字段。
4. **storages 只读。** `GET config` 会列出 `storages`（id/brand/name，不含凭据）；`PUT config` 不接受 `storages`，改盘绑定要在桌面 app 里做。
5. **未运行 / 未配置。** 端点隐身（返回 404、非预期结构）时：多半是 app 没运行或该环境没配 agent token——提示用户启动桌面 app，别把 404 当「没找到片」（找片的「无匹配」也是 404，用返回体区分：有 `candidates` 是歧义，有 `matched`/`status` 是成功，纯 404 且带 no-token 语义是未启用）。

完整请求/响应 schema、全部错误码（404 无 token / 无匹配、401 token 错、409 候选、403 demo、400 校验）、字段级说明见 `references/api.md`。

