---
name: content-intake-orchestrator
description: Orchestrate mixed URLs and local media into resumable, platform-routed, evidence-backed deep summaries. Use when a user asks to process a batch across Bilibili, Xiaohongshu, WeChat articles, Zhihu, Xiaoyuzhou, YouTube, generic web pages, or local audio/video; resume an interrupted intake run; produce one manifest and several verified summary batches; or enforce summary depth across many items. Do not use for a single link when a dedicated platform skill is enough, credential extraction, deleting a read-later queue, writing personal memory, or publishing content.
---

# Content Intake Orchestrator

Turn a mixed content batch into verified primary text, deep summaries, and a run report. Keep orchestration separate from platform adapters: this skill owns state, batching, quality gates, and recovery; each adapter owns acquisition and authentication.

## Public boundary

- Accept URLs, exported lists, local file paths, or JSON that the user intentionally placed in scope.
- Never extract browser credentials, inspect cookie stores, or print authentication material. If an adapter requires a logged-in session, use an already authorized tool or stop with `blocked_auth`.
- Never scan or mutate reminders, browser tabs, read-later queues, personal memory, editorial calendars, or publishing systems as a side effect.
- Never route to a provider whose redistribution rights or provenance are unknown.
- Treat an index as navigation. It cannot replace item-level deep summaries.

## Start a run

Create an input JSON list. Each item needs `url`; optional fields include `id`, `title`, `platform`, `source_kind`, and `source_chars`.

```json
[
  {"id":"talk-01","url":"https://www.bilibili.com/video/BV...","title":"Interview"},
  {"id":"essay-01","url":"https://example.com/essay","title":"Essay"}
]
```

Build the manifest before acquiring content:

```bash
python3 scripts/build_run_manifest.py items.json \
  --run-id 2026-07-15-research \
  --out-dir outputs/2026-07-15-research
```

The script rejects credential-like fields and URL query parameters, assigns stable IDs, routes known platforms, limits batches to eight items, and writes `run_manifest.json` plus a navigation-only `INDEX.md`.

For the manifest schema, state transitions, and output tree, read [references/workflow-contract.md](references/workflow-contract.md).

## Run the pipeline

1. **Plan**: inspect the manifest, confirm that the supplied sources are in scope, and leave external queues untouched.
2. **Acquire**: send each item to a dedicated adapter. Read [references/adapter-contract.md](references/adapter-contract.md) before adding or changing an adapter.
3. **Verify primary text**: articles need readable source text; audio and video need a complete transcript derived from the media. Descriptions and subtitles may help with alignment but do not replace primary text.
4. **Summarize by batch**: write one `summary.md` per batch of at most eight items. Preserve source order, arguments, examples, steps, and uncertainty.
5. **Apply the depth gate**: read [references/quality-gates.md](references/quality-gates.md). Mark short or incomplete sources `needs_recapture`; do not fill gaps from general knowledge.
6. **Report**: update item states, write `RUN_REPORT.md`, and return every summary path plus failed or blocked items.

Use bounded concurrency per adapter. A text adapter and an ASR adapter can run in parallel, but each must set its own safe limit and reduce concurrency when errors rise. Retries must increment `attempts` and keep the last error visible.

## Resume without repeating successful work

Use the previous manifest as the state source:

```bash
python3 scripts/build_run_manifest.py items.json \
  --run-id 2026-07-15-research \
  --resume-from outputs/2026-07-15-research/run_manifest.json \
  --out-dir outputs/2026-07-15-research-next
```

Do not reacquire or rewrite `completed` items unless the source changed or the user explicitly asks for a new summary. Retry `failed_retryable`; require a new input or user action for `blocked_auth`, `failed_terminal`, and `needs_recapture`.

## Completion gates

Report completion only when:

- every item is `completed` or has a specific blocking state and error;
- every completed item has verified primary text and a summary path;
- audio and video summaries are based on transcripts, not descriptions alone;
- every batch meets the depth gate and contains no more than eight items;
- `INDEX.md` links to the deep summaries instead of replacing them;
- the output manifest contains no credentials or session material;
- `RUN_REPORT.md` lists counts, retries, blocked items, and artifact paths.

Downstream insight extraction, memory writes, topic scheduling, and publishing belong to separate skills and require explicit user authorization.
