{"slug": "agent-reach-absorbed-bilibili-s-412s-your-agent-kept-working", "title": "Agent-Reach absorbed Bilibili's 412s — your agent kept working", "summary": "Agent-Reach, an MIT-licensed capability layer for coding agents, automatically rerouted its Bilibili channel to bili-cli after Bilibili began returning HTTP 412 errors to yt-dlp in June 2026, allowing agents to continue working without user intervention. The v1.5.0 release, which passed 32 end-to-end tests across 13 channels and expanded its test suite from 107 to 162 tests, also introduced multi-backend routing and a 'real doctor' feature.", "body_md": "In June 2026, Bilibili quietly began rejecting yt-dlp with HTTP 412 errors. Agents wired to scrape it broke — except the ones sitting behind Agent-Reach, which rerouted the channel before most developers noticed.\n\nAgent-Reach is a local, MIT-licensed capability layer that gives shell-capable coding agents live internet access by selecting and routing to upstream CLIs rather than proxying data itself . When Bilibili started 412-blocking yt-dlp in June 2026, v1.5.0 rerouted the Bilibili channel to bili-cli with zero user action, while YouTube kept using yt-dlp untouched . The fix landed centrally: the maintainer reordered backends, so no individual builder had to patch a private integration.\n\n**Quick Answer:** When Bilibili began returning HTTP 412 to yt-dlp in June 2026, Agent-Reach v1.5.0 automatically rerouted its Bilibili channel to bili-cli — agents kept working with no user action. The release passed 32 end-to-end tests across 13 channels and grew its suite from 107 to 162 tests.\n\nThe framing shift matters: v1.5.0 describes itself as a capability layer, not a tool collection. Each platform gets an ordered primary-plus-fallback backend list; after setup, your agent calls those CLIs directly and Agent-Reach never sits in the data path . The June 11, 2026 release passed 32 end-to-end tests across 13 channels and grew its test suite from 107 to 162 tests .\n\n| Platform | Primary backend | Fallback |\n|---|---|---|\n| Web pages | Jina Reader | — |\n| YouTube | yt-dlp | — |\n| GitHub | gh CLI | — |\n| RSS | feedparser | — |\n| Bilibili | bili-cli | OpenCLI (subtitles) |\n| Twitter/X | twitter-cli | OpenCLI |\n| OpenCLI | rdt-cli | |\n| XiaoHongShu | OpenCLI | xhs-cli |\n| linkedin-mcp | Jina Reader | |\n| Global search | Exa via mcporter | — |\n\n\"capability layer: multi-backend routing + real doctor + OpenCLI\" — Agent-Reach v1.5.0 release framing (source:\n\n[Agent-Reach CLAUDE.md]).\n\nThe behavior is easy to model. The following minimal snippet — which was executed and returns exit 0 — illustrates the \"absorb and keep working\" contract that centralized rerouting delivers:\n\n``` python\nclass Bilibili412(Exception):\n    pass\n\ndef bilibili_fetch():\n    raise Bilibili412(\"Bilibili returned HTTP 412\")\n\ndef agent_reach(task):\n    try:\n        return task()\n    except Bilibili412 as exc:\n        return f\"absorbed {exc}; agent kept working\"\n\nprint(\"Agent-Reach:\", agent_reach(bilibili_fetch))\nprint(\"next step: summarize cached context\")\n```\n\nBefore you hand the install prompt to your agent, three things need to be in place: a real Python interpreter, an isolation mechanism, and — only if you want desktop-session backends — Node.js. Agent-Reach requires Python 3.10 or newer . On Windows, prefer `py -3`\n\nif `python3`\n\nresolves to the Microsoft Store stub instead of a real interpreter .\n\n`~/.agent-reach-venv/`\n\nis an equivalent fallback that runs the same install command .One trap to avoid: the name `agent-reach`\n\non PyPI points to an unrelated v0.1.0 package by a different author (jgalea/agent-reach, uploaded August 2, 2026) . Always install from the GitHub archive URL, never from a blind `pip install agent-reach`\n\n.\n\nInstallation is agent-directed by design: a human pastes an install prompt pointing at the raw GitHub [install guide](https://github.com/DontFretBrett/Agent-Reach-English), and the agent runs the commands while keeping files out of your project workspace . Below is the direct copy-paste path for the Panniantong build, version 1.5.0.\n\n**Step 1 — pipx (recommended):**\n\n```\npipx install https://github.com/Panniantong/agent-reach/archive/main.zip\n```\n\n**Step 2 — provision the capability layer:**\n\n```\nagent-reach install --env=auto\n```\n\nThe `--env=auto`\n\nflag auto-detects whether you are on a local machine or a server, then sets up core infrastructure: gh CLI, Node.js, mcporter, Exa search, and a yt-dlp config . After this runs, seven zero-config channels work without any login — Web via Jina Reader, YouTube, GitHub, RSS, Exa Search, V2EX, and basic Bilibili .\n\n**Step 3 — venv alternative** (if you avoid pipx): create an isolated environment, activate it, install the same archive, and run the identical setup command :\n\n```\npython3 -m venv ~/.agent-reach-venv\nsource ~/.agent-reach-venv/bin/activate\npip install https://github.com/Panniantong/agent-reach/archive/main.zip\nagent-reach install --env=auto\n```\n\nOn Windows, use `py -3`\n\nif `python3`\n\nresolves only to the Microsoft Store alias .\n\n**Verify:** run `agent-reach version`\n\nto confirm you have the Panniantong build and not the unrelated PyPI package, then run `agent-reach doctor --json`\n\n. The v1.5.0 doctor is a live health check that reports `active_backend`\n\nper channel and isolates failures, so one broken channel does not abort the full report .\n\n**Preview first:** to see what would be touched outside `~/.agent-reach/`\n\nwithout changing anything, add `--dry-run`\n\n:\n\n```\nagent-reach install --env=auto --dry-run\n```\n\nReddit has no zero-config path in Agent-Reach: anonymous API access is blocked, and official API access is approval-based, so the channel is not activated by the base install. It routes through OpenCLI first, then rdt-cli, and the docs flag it as inherently fragile . Expect breakage when Reddit tightens controls, and do not treat access as permanent.\n\nThe other login-gated channels — Twitter, XiaoHongShu, Facebook, Instagram, and Xueqiu — need a one-time browser cookie export via the Cookie-Editor extension before they work, and Twitter additionally wants `TWITTER_AUTH_TOKEN`\n\nand `TWITTER_CT0`\n\nset for direct twitter-cli calls . Cookie-backed access carries account-ban and credential-exposure risk, so the official docs recommend a dedicated secondary \"agent\" account rather than your primary login.\n\nTwo durability notes matter here. First, channel availability is not stable: v1.4.2 deliberately removed the Douyin, Weibo, and WeChat public-account channels the maintainers judged too unreliable to keep — do not expect a dropped channel to reappear. Second, OpenCLI drives your existing logged-in Chrome session and stores credentials only under `~/.agent-reach/config.yaml`\n\nat owner-only 0600 permissions, never uploaded . The local-first storage limits credential leakage, but the docs are explicit that ToS exposure for cookie-based scraping of walled platforms remains unresolved.\n\nOnce the base install is healthy, add login-gated platforms explicitly — they are not part of the zero-config set. One command enables the common trio: `agent-reach install --env=auto --channels=twitter,linkedin,xiaohongshu`\n\n, or use `--channels=all`\n\nto activate every supported channel in a single pass . Each channel then routes through its documented backend.\n\n`TWITTER_AUTH_TOKEN`\n\nand `TWITTER_CT0`\n\nvia `agent-reach configure twitter-cookies`\n\nbefore direct twitter-cli calls will succeed; without them, calls fail .Stay current with the same archive-based path: run `agent-reach check-update`\n\n, upgrade from the GitHub archive URL, then run `agent-reach doctor`\n\nto confirm each `active_backend`\n\nis healthy after the upgrade . The concrete takeaway: enable only the channels you use, keep cookies on a dedicated agent account, and let `doctor`\n\n— not a broken scrape mid-task — tell you when a backend has moved.\n\nNo — the official Panniantong project is not distributed through PyPI. The name `agent-reach`\n\non PyPI belongs to an unrelated package (v0.1.0 by Jean Galea, sourced from jgalea/agent-reach) uploaded on August 2, 2026, so a blind `pip install agent-reach`\n\nwould fetch the wrong project. Install from the GitHub archive instead: `pipx install https://github.com/Panniantong/agent-reach/archive/main.zip`\n\n.\n\nNo. Agent-Reach is a local-only capability layer and is never in the request or response data path — it only selects, health-checks, and routes to upstream CLIs that the agent then calls directly. Credentials and tokens live under `~/.agent-reach/`\n\n(config at `~/.agent-reach/config.yaml`\n\n) with owner-only 0600 permissions and are never uploaded .\n\nThe maintainers reorder or swap the affected backend in the next release, so builders do not patch private integrations. The canonical case: in June 2026 Bilibili began 412-blocking yt-dlp, and Agent-Reach switched the primary Bilibili backend from yt-dlp to bili-cli with zero user action . To pull a fix, run `agent-reach check-update`\n\nand upgrade from the archive URL .\n\nYes. Any shell-capable coding agent works, including Claude Code, Cursor, Windsurf, Codex, and OpenClaw. Agent-Reach installs a SKILL.md instruction layer that tells the agent which channels are available and healthy; the agent then invokes the upstream CLIs directly rather than through a proprietary API .\n\nAnonymous Reddit API access is blocked, and official API access is approval-based, so there is no login-free route. Even with OpenCLI or rdt-cli configured, the channel depends on a personal session and is inherently fragile, which is why the docs treat Reddit as best-effort rather than a reliable channel .", "url": "https://wpnews.pro/news/agent-reach-absorbed-bilibili-s-412s-your-agent-kept-working", "canonical_source": "https://dev.to/creeta/agent-reach-absorbed-bilibilis-412s-your-agent-kept-working-14ej", "published_at": "2026-08-04 09:49:53+00:00", "updated_at": "2026-08-04 10:13:02.033242+00:00", "lang": "en", "topics": ["developer-tools", "ai-agents", "ai-infrastructure"], "entities": ["Agent-Reach", "Bilibili", "yt-dlp", "bili-cli", "Panniantong", "GitHub", "OpenCLI", "Jina Reader"], "alternates": {"html": "https://wpnews.pro/news/agent-reach-absorbed-bilibili-s-412s-your-agent-kept-working", "markdown": "https://wpnews.pro/news/agent-reach-absorbed-bilibili-s-412s-your-agent-kept-working.md", "text": "https://wpnews.pro/news/agent-reach-absorbed-bilibili-s-412s-your-agent-kept-working.txt", "jsonld": "https://wpnews.pro/news/agent-reach-absorbed-bilibili-s-412s-your-agent-kept-working.jsonld"}}