# Supported Channels in Agent Reach and Their Backend Selection Priorities

> Discover Agent Reach supported channels and their backend selection priorities. Understand how 14 internet platforms are integrated and configurable for optimal performance.

- Repository: [Pnant/Agent-Reach](https://github.com/Panniantong/Agent-Reach)
- Tags: api-reference
- Published: 2026-08-05

---

**Agent Reach supports 14 internet platforms through dedicated channel classes, each with a prioritized ordered list of backends that can be overridden via configuration keys.**

Agent Reach is an open-source Python framework for agentic web interaction that routes requests to platform-specific backends. Each **channel** implements a class defining its supported **backends** in strict priority order—fallbacks are automatically tried when primary backends fail. This article maps every supported platform to its backend priority list and explains how to customize selection behavior.

## How Backend Selection Works in Agent Reach

The base `Channel` class in [`agent_reach/channels/base.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/base.py) implements the `ordered_backends` method. This method returns backends in priority order, with an optional user override via the `{channel_name}_backend` configuration key.

When initialized, `AgentReach` registers all channel classes from `agent_reach/channels/*.py`. The `check()` method probes backends sequentially until one responds successfully, setting `channel.active_backend` to the first working option.

### Overriding Default Priorities

You can promote any backend to first priority through configuration:

```python
from agent_reach.config import Config
from agent_reach.core import AgentReach

cfg = Config()
cfg.set("twitter_backend", "OpenCLI")  # Override: prefer OpenCLI over twitter-cli

reach = AgentReach(config=cfg)
print(reach.channels["twitter"].ordered_backends(cfg))

# Output: ['OpenCLI', 'twitter-cli', 'bird CLI (legacy)']

```

## Complete Channel and Backend Reference

### Social Media Platforms

**Twitter / X**
- **Backends (priority order):** `twitter-cli` → `OpenCLI` → `bird CLI (legacy)`
- **Source:** [[`twitter.py`](https://github.com/Panniantong/Agent-Reach/blob/main/twitter.py#L37)](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/twitter.py#L37)
- **Configuration key:** `twitter_backend`

**Xiaohongshu (Little Red Book)**
- **Backends:** `OpenCLI` → `xiaohongshu-mcp` → `xhs-cli (xiaohongshu-cli)`
- **Source:** [[`xiaohongshu.py`](https://github.com/Panniantong/Agent-Reach/blob/main/xiaohongshu.py#L163)](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/xiaohongshu.py#L163)
- **Configuration key:** `xiaohongshu_backend`

**Instagram**
- **Backend:** `OpenCLI` (single option)
- **Source:** [[`instagram.py`](https://github.com/Panniantong/Agent-Reach/blob/main/instagram.py#L7-L10)](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/instagram.py#L7)
- **Base class:** `OpenCLISiteChannel` from [`_opencli_site.py`](https://github.com/Panniantong/Agent-Reach/blob/main/_opencli_site.py)

**Facebook**
- **Backend:** `OpenCLI` (single option)
- **Source:** [[`facebook.py`](https://github.com/Panniantong/Agent-Reach/blob/main/facebook.py#L7-L10)](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/facebook.py#L7)
- **Base class:** `OpenCLISiteChannel` from [`_opencli_site.py`](https://github.com/Panniantong/Agent-Reach/blob/main/_opencli_site.py)

**LinkedIn**
- **Backends:** `linkedin-scraper-mcp` → `Jina Reader`
- **Source:** [[`linkedin.py`](https://github.com/Panniantong/Agent-Reach/blob/main/linkedin.py#L15)](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/linkedin.py#L15)
- **Configuration key:** `linkedin_backend`

### Chinese Financial and Content Platforms

**Xueqiu**
- **Backend:** `Xueqiu API (需要登录 Cookie)` — requires login cookies
- **Source:** [[`xueqiu.py`](https://github.com/Panniantong/Agent-Reach/blob/main/xueqiu.py#L117)](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/xueqiu.py#L117)

**Xiaoyuzhou**
- **Backends:** `groq-whisper` → `ffmpeg`
- **Source:** [[`xiaoyuzhou.py`](https://github.com/Panniantong/Agent-Reach/blob/main/xiaoyuzhou.py#L15)](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/xiaoyuzhou.py#L15)
- **Use case:** Audio/podcast processing

**Bilibili**
- **Backends:** `bili-cli` → `OpenCLI` → `B站搜索 API`
- **Source:** [[`bilibili.py`](https://github.com/Panniantong/Agent-Reach/blob/main/bilibili.py#L38)](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/bilibili.py#L38)

### Video Platforms

**YouTube**
- **Backend:** `yt-dlp` (single, robust option)
- **Source:** [[`youtube.py`](https://github.com/Panniantong/Agent-Reach/blob/main/youtube.py#L42)](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/youtube.py#L42)

### Discussion and Community Platforms

**Reddit**
- **Backends:** `OpenCLI` → `rdt-cli`
- **Source:** [[`reddit.py`](https://github.com/Panniantong/Agent-Reach/blob/main/reddit.py#L33)](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/reddit.py#L33)

**V2EX**
- **Backend:** `V2EX API (public)` — no authentication required
- **Source:** [[`v2ex.py`](https://github.com/Panniantong/Agent-Reach/blob/main/v2ex.py#L26)](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/v2ex.py#L26)

### Developer and Search Platforms

**GitHub**
- **Backend:** `gh CLI` — requires GitHub CLI installation
- **Source:** [[`github.py`](https://github.com/Panniantong/Agent-Reach/blob/main/github.py#L98)](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/github.py#L98)

**Exa Search**
- **Backend:** `Exa via mcporter`
- **Source:** [[`exa_search.py`](https://github.com/Panniantong/Agent-Reach/blob/main/exa_search.py#L13)](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/exa_search.py#L13)

### Web and Feed Platforms

**Web (Jina Reader)**
- **Backend:** `Jina Reader` — universal URL text extraction
- **Source:** [[`web.py`](https://github.com/Panniantong/Agent-Reach/blob/main/web.py#L13)](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/web.py#L13)

**RSS**
- **Backend:** `feedparser` — standard RSS/Atom feed parsing
- **Source:** [[`rss.py`](https://github.com/Panniantong/Agent-Reach/blob/main/rss.py#L10)](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/rss.py#L10)

## Programmatically Inspecting Channel Backends

Use this pattern to audit which backend is active for each channel:

```python
from agent_reach.core import AgentReach

reach = AgentReach()

for name, channel in sorted(reach.channels.items()):
    status, error = channel.check()
    active = channel.active_backend or "none"
    print(f"{name:15} | {active:25} | {'✓' if status else '✗'}")

```

The `check()` method iterates through `ordered_backends()` and returns `(True, None)` on first successful connection or `(False, exception)` if all fail.

## Key Implementation Files

| File | Purpose |
|------|---------|
| [`agent_reach/channels/base.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/base.py) | `Channel` base class with `ordered_backends()` logic |
| [`agent_reach/channels/_opencli_site.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/channels/_opencli_site.py) | Shared base for OpenCLI-based platforms (Instagram, Facebook) |
| [`agent_reach/core.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/core.py) | `AgentReach` registry and channel initialization |
| [`agent_reach/config.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/config.py) | `Config` class for backend override keys |
| [`agent_reach/cli.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/cli.py) | CLI entry point with `agent-reach doctor` for diagnostics |

Each platform-specific file in `agent_reach/channels/` (e.g., [`youtube.py`](https://github.com/Panniantong/Agent-Reach/blob/main/youtube.py), [`twitter.py`](https://github.com/Panniantong/Agent-Reach/blob/main/twitter.py), [`xiaohongshu.py`](https://github.com/Panniantong/Agent-Reach/blob/main/xiaohongshu.py)) defines a concrete `backends` list that determines the default priority order.

## Summary

- **14 channels** are supported, from mainstream platforms (YouTube, Twitter/X, Reddit) to China-specific services (Xiaohongshu, Bilibili, Xueqiu, Xiaoyuzhou).
- **Backend priority is explicit** in source code—first-listed backends are preferred, with automatic fallback to subsequent options.
- **User overrides are supported** via `{channel}_backend` configuration keys that reorder the list without removing fallback options.
- **Common patterns:** OpenCLI serves as a shared backend for multiple platforms; `Jina Reader` provides universal web extraction; MCP-based scrapers are increasingly used for authenticated platforms.

## Frequently Asked Questions

### How do I force a specific backend instead of auto-selection?

Set the channel-specific configuration key before initializing `AgentReach`. For example, `cfg.set("bilibili_backend", "OpenCLI")` moves `OpenCLI` ahead of `bili-cli` in the priority list. The original order is preserved for remaining backends.

### What happens if all backends for a channel fail?

The `check()` method returns `(False, error)` and `channel.active_backend` remains `None`. The channel is skipped during operations. Use `agent-reach doctor` from [`agent_reach/cli.py`](https://github.com/Panniantong/Agent-Reach/blob/main/agent_reach/cli.py) to diagnose backend failures across all channels.

### Why do Instagram and Facebook share the same backend implementation?

Both inherit from `OpenCLISiteChannel` defined in [`_opencli_site.py`](https://github.com/Panniantong/Agent-Reach/blob/main/_opencli_site.py) (line 21), which hardcodes `backends = ["OpenCLI"]`. This design allows rapid prototyping for platforms where OpenCLI provides sufficient coverage without platform-specific logic.