Supported Channels in Agent Reach and Their Backend Selection Priorities

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 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:

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

Xiaohongshu (Little Red Book)

Instagram

Facebook

LinkedIn

Chinese Financial and Content Platforms

Xueqiu

Xiaoyuzhou

Bilibili

Video Platforms

YouTube

Discussion and Community Platforms

Reddit

V2EX

Developer and Search Platforms

GitHub

Exa Search

Web and Feed Platforms

Web (Jina Reader)

RSS

Programmatically Inspecting Channel Backends

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

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 Channel base class with ordered_backends() logic
agent_reach/channels/_opencli_site.py Shared base for OpenCLI-based platforms (Instagram, Facebook)
agent_reach/core.py AgentReach registry and channel initialization
agent_reach/config.py Config class for backend override keys
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, twitter.py, 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 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 (line 21), which hardcodes backends = ["OpenCLI"]. This design allows rapid prototyping for platforms where OpenCLI provides sufficient coverage without platform-specific logic.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →