# Agent Reach Channel Tier System: Classifying Platforms as Zero‑Config vs. Requires Setup

> Understand Agent Reach's channel tier system: zero-config vs. requires setup. Learn how platforms are classified into tiers 0, 1, or 2 for immediate use or configuration needs.

- Repository: [Pnant/Agent-Reach](https://github.com/Panniantong/Agent-Reach)
- Tags: how-to-guide
- Published: 2026-06-20

---

**Agent Reach assigns every supported platform to one of three tiers—0, 1, or 2—to indicate whether the channel works immediately out-of-the-box, requires a free API key or login session, or needs complex server-side configuration.**

The Agent Reach repository (`Panniantong/Agent-Reach`) implements a **channel tier system** that classifies each supported platform based on its setup complexity. This system helps users instantly identify which channels are ready to use after installation and which require additional credentials or infrastructure. By categorizing platforms into zero‑config, free‑key, and complex‑setup tiers, the codebase provides clear visibility into operational readiness.

## Understanding the Three Channel Tiers

### Tier 0: Zero‑Config Channels

Tier 0 channels require no API keys, credentials, or configuration files. They function as soon as the required upstream tool is installed on your system.

According to the source code in [`agent_reach/channels/base.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/base.py), channels in this tier set `tier = 0`. Examples include:
- **YouTube** ([`agent_reach/channels/youtube.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/youtube.py)): Works immediately when `yt‑dlp` is present.
- **Web** ([`agent_reach/channels/web.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/web.py)): Uses `Jina Reader` for simple HTTP fetches.
- **RSS** ([`agent_reach/channels/rss.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/rss.py)): Reads feeds without authentication.
- **GitHub** ([`agent_reach/channels/github.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/github.py)): Reads public API data without keys.
- **Exa Search** ([`agent_reach/channels/exa_search.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/exa_search.py)): Uses free‑tier Exa key optionally for basic search.
- **V2EX** ([`agent_reach/channels/v2ex.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/v2ex.py)): Scrapes public web pages.

### Tier 1: Free Key or Login Required

Tier 1 channels need a free‑tier API key or an existing login session (usually via cookies) to function. The setup is lightweight but requires user action.

Channels in this tier set `tier = 1` in their class definition:
- **Twitter** ([`agent_reach/channels/twitter.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/twitter.py)): Requires a cookie export to reuse an existing login session.
- **Reddit** ([`agent_reach/channels/reddit.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/reddit.py)): Needs a logged‑in session via OpenCLI or `rdt‑cli` cookies.
- **Xiaohongshu** ([`agent_reach/channels/xiaohongshu.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/xiaohongshu.py)): Requires a user cookie for authenticated requests.
- **Bilibili** ([`agent_reach/channels/bilibili.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/bilibili.py)): Needs a free API key for some endpoints.
- **Xueqiu** ([`agent_reach/channels/xueqiu.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/xueqiu.py)): Requires a free API key.
- **Xiaoyuzhou** ([`agent_reach/channels/xiaoyuzhou.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/xiaoyuzhou.py)): Needs a free key as documented in the docstring.

### Tier 2: Complex Setup Required

Tier 2 channels demand additional server‑side configuration, self‑hosted services, or paid plans before they become usable.

The LinkedIn channel demonstrates this classification:
- **LinkedIn** ([`agent_reach/channels/linkedin.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/linkedin.py)): Sets `tier = 2` because it requires the `linkedin‑scraper‑mcp` server to be installed and configured separately.

## How Tiers Are Defined in the Source Code

The tier attribute is defined as a class variable in the abstract base class located at [`agent_reach/channels/base.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/base.py):

```python
class Channel(ABC):
    …
    tier: int = 0  # 0 = zero-config, 1 = needs free key, 2 = needs setup

```

Each concrete channel implementation overrides this default value. For example, in [`agent_reach/channels/twitter.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/twitter.py), the class sets `tier = 1`, while [`agent_reach/channels/linkedin.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/linkedin.py) sets `tier = 2`.

This design allows the `doctor` command and other diagnostic tools to introspect channel requirements dynamically without hardcoding platform-specific logic.

## Tier-Based Health Checks with the Doctor Command

The `doctor` command in [`agent_reach/doctor.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/doctor.py) aggregates the status of all channels and groups the output by tier. When you run `python -m agent_reach.cli doctor`, the report first lists zero‑config channels, then shows optional channels that require additional setup.

The implementation separates output by tier:

```python

# agent_reach/doctor.py (excerpt)

lines.append("[bold]✅ 装好即用：[/bold]")      # Tier 0

…
lines.append("[bold]可选渠道（已安装）：[/bold]")  # Tier 1 & 2

```

Zero‑config channels appear first with a red “✗” if any are missing. The report then displays Tier 1 and Tier 2 channels that are installed and ready, allowing you to decide whether to unlock additional capabilities.

## Querying Channel Tiers Programmatically

You can inspect channel tiers programmatically using the `check_all` function from [`agent_reach/doctor.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/doctor.py) and the `Config` class from [`agent_reach/config.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/config.py):

```python
from agent_reach.doctor import check_all, format_report
from agent_reach.config import Config

cfg = Config()                 # loads ~/.agent-reach/config.yaml

report = check_all(cfg)        # dict keyed by channel name

# Print a concise list of zero-config channels that are ready

zero_cfg = {k: v for k, v in report.items() if v["tier"] == 0 and v["status"] == "ok"}
print("Zero-config channels ready:", ", ".join(zero_cfg))

# Show which channels still need a key or setup

needs_setup = {k: v for k, v in report.items() if v["tier"] in (1, 2) and v["status"] != "ok"}
for name, info in needs_setup.items():
    print(f"{info['name']} (tier {info['tier']}) → {info['message']}")

```

Running this snippet produces output similar to:

```

Zero-config channels ready: YouTube, Web, RSS, GitHub, Exa Search, V2EX
Reddit (tier 1) → 未安装任何 Reddit 后端。（需要登录）
LinkedIn (tier 2) → 基本内容可通过 Jina Reader 读取。完整功能需要：
...

```

## Summary

- **Agent Reach uses three tiers** (0, 1, and 2) to classify platform channels based on setup complexity.
- **Tier 0 channels** require only the installation of upstream tools like `yt‑dlp` or `Jina Reader`.
- **Tier 1 channels** need a free API key or login cookie, as seen in [`agent_reach/channels/twitter.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/twitter.py) and [`agent_reach/channels/reddit.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/reddit.py).
- **Tier 2 channels** demand complex server configuration, such as the LinkedIn MCP server requirement.
- The **[`agent_reach/doctor.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/doctor.py)** module uses these tiers to generate health reports that prioritize zero‑config channels.

## Frequently Asked Questions

### What is a Tier 0 channel in Agent Reach?

A Tier 0 channel is a platform that works immediately after you install the required upstream tool, with no API keys or credentials needed. Examples include YouTube, Web, RSS, GitHub, and V2EX, all of which set `tier = 0` in their respective channel files.

### How does Tier 1 differ from Tier 2?

Tier 1 channels require a free API key or an existing login session (cookies), while Tier 2 channels need additional server-side components, self-hosted services, or paid subscriptions. For instance, Twitter requires only a cookie export (Tier 1), whereas LinkedIn requires the `linkedin‑scraper‑mcp` server to be installed and configured (Tier 2).

### How can I check which channels are configured on my system?

Run the command `python -m agent_reach.cli doctor` to execute the health check. This command aggregates all channel statuses from [`agent_reach/doctor.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/doctor.py) and displays them grouped by tier, showing which zero‑config channels are ready and which Tier 1 or 2 channels require additional setup.

### Where is the tier attribute defined in the codebase?

The tier attribute is defined as `tier: int = 0` in the abstract `Channel` class located in [`agent_reach/channels/base.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/base.py). Each concrete channel implementation in `agent_reach/channels/*.py` overrides this value to specify its classification.