diff --git a/README.md b/README.md
index f418fa6..d338ee1 100644
--- a/README.md
+++ b/README.md
@@ -323,7 +323,7 @@ Agent Reach uses twitter-cli with cookie auth — zero API fees. Install with `p
Reddit 返回 403 怎么办?
-Agent Reach 使用 [rdt-cli](https://github.com/public-clis/rdt-cli) 访问 Reddit。Reddit 自 2024 年起要求认证,安装后需运行 `rdt login` 登录。安装:`pipx install rdt-cli`,然后 `rdt login`(自动从浏览器提取 Cookie)。之后 Agent 可以用 `rdt search "关键词"` 搜索、`rdt read POST_ID` 读帖子全文和评论。
+Agent Reach 使用 [rdt-cli](https://github.com/public-clis/rdt-cli) 访问 Reddit。Reddit 自 2024 年起要求认证,安装后需运行 `rdt login` 登录。安装:`pipx install 'git+https://github.com/public-clis/rdt-cli.git'`(PyPI 版本暂时落后,从 GitHub 装),然后 `rdt login`(自动从浏览器提取 Cookie)。之后 Agent 可以用 `rdt search "关键词"` 搜索、`rdt read POST_ID` 读帖子全文和评论。
diff --git a/agent_reach/channels/reddit.py b/agent_reach/channels/reddit.py
index 371a77a..3b51cc3 100644
--- a/agent_reach/channels/reddit.py
+++ b/agent_reach/channels/reddit.py
@@ -13,6 +13,8 @@ import subprocess
from .base import Channel
_CREDENTIAL_FILE = "~/.config/rdt-cli/credential.json"
+# Pinned to the 0.4.2 state — PyPI still only has 0.4.1 (upstream issue #10).
+_RDT_GIT_SOURCE = "git+https://github.com/public-clis/rdt-cli.git@5e4fb3720d5c174e976cd425ccc3b879d52cac66"
class RedditChannel(Channel):
@@ -31,9 +33,10 @@ class RedditChannel(Channel):
rdt = shutil.which("rdt")
if not rdt:
return "off", (
- "需要安装 rdt-cli(推荐使用最新版 v0.4.2+):\n"
- " pip install 'rdt-cli>=0.4.2'\n"
- "或:\n"
+ "需要安装 rdt-cli。PyPI 版本可能暂时落后,推荐直接从 GitHub 安装:\n"
+ f" pipx install '{_RDT_GIT_SOURCE}'\n"
+ "如已确认 PyPI 版本已更新,也可使用:\n"
+ " pipx install rdt-cli\n"
" uv tool install rdt-cli\n"
"最新源码:https://github.com/public-clis/rdt-cli\n"
"安装后运行 `rdt login` 登录(需先在浏览器登录 reddit.com)"
diff --git a/agent_reach/cli.py b/agent_reach/cli.py
index 4065b91..46d918e 100644
--- a/agent_reach/cli.py
+++ b/agent_reach/cli.py
@@ -17,6 +17,9 @@ import time
from agent_reach import __version__
+# Pinned to the 0.4.2 state — PyPI still only has 0.4.1 (upstream issue #10).
+_RDT_GIT_SOURCE = "git+https://github.com/public-clis/rdt-cli.git@5e4fb3720d5c174e976cd425ccc3b879d52cac66"
+
def _ensure_utf8_console():
"""Best-effort Windows console UTF-8 setup for CLI runtime only."""
@@ -706,8 +709,10 @@ def _install_reddit_deps():
if shutil.which("rdt"):
print(" ✅ rdt-cli already installed")
return
- for tool, cmd in [("pipx", ["pipx", "install", "rdt-cli"]),
- ("uv", ["uv", "tool", "install", "rdt-cli"])]:
+ for tool, cmd in [
+ ("pipx", ["pipx", "install", _RDT_GIT_SOURCE]),
+ ("uv", ["uv", "tool", "install", "--from", _RDT_GIT_SOURCE, "rdt-cli"]),
+ ]:
if shutil.which(tool):
try:
subprocess.run(cmd, capture_output=True, encoding="utf-8",
@@ -717,7 +722,7 @@ def _install_reddit_deps():
return
except Exception:
pass
- print(" [!] rdt-cli install failed. Run: pipx install rdt-cli")
+ print(f" [!] rdt-cli install failed. Run: pipx install '{_RDT_GIT_SOURCE}'")
def _install_bili_deps():
@@ -1495,7 +1500,8 @@ def _cmd_setup():
# Step 3: Reddit — rdt-cli
print("【信息】Reddit — 通过 rdt-cli 搜索和阅读,无需配置")
- print(" 安装:pipx install rdt-cli")
+ print(f" 安装:pipx install '{_RDT_GIT_SOURCE}'")
+ print(" 然后运行:rdt login")
print()
# Step 4: Groq (Whisper)
diff --git a/agent_reach/guides/setup-reddit.md b/agent_reach/guides/setup-reddit.md
index 9a27919..376350f 100644
--- a/agent_reach/guides/setup-reddit.md
+++ b/agent_reach/guides/setup-reddit.md
@@ -17,9 +17,9 @@ Agent Reach 通过 **rdt-cli** 实现 Reddit 的搜索和阅读功能:
which rdt && echo "installed" || echo "not installed"
```
-2. 如果未安装,自动安装:
+2. 如果未安装,自动安装(PyPI 版本暂时落后,从 GitHub 安装最新版):
```bash
-pipx install rdt-cli
+pipx install 'git+https://github.com/public-clis/rdt-cli.git'
```
或一键安装:
diff --git a/agent_reach/skill/references/social.md b/agent_reach/skill/references/social.md
index fa2f781..a666bb6 100644
--- a/agent_reach/skill/references/social.md
+++ b/agent_reach/skill/references/social.md
@@ -223,6 +223,6 @@ rdt popular --limit 10
rdt all --limit 10
```
-> **安装**: `pipx install rdt-cli`(确保 v0.4.2+)。需要先登录(`rdt login`)才能搜索和阅读。
+> **安装**: `pipx install 'git+https://github.com/public-clis/rdt-cli.git'`(PyPI 版本暂时落后,需从 GitHub 装 v0.4.2+)。需要先登录(`rdt login`)才能搜索和阅读。
> 需要登录的功能:`rdt feed --subs-only`(订阅列表)、`rdt saved`(收藏)。
> 建议使用 `--yaml` 输出,对 AI agent 更友好。
diff --git a/docs/update.md b/docs/update.md
index ed180ed..784bc26 100644
--- a/docs/update.md
+++ b/docs/update.md
@@ -50,8 +50,8 @@ Run these commands to ensure all upstream CLI tools are installed. Skip any that
# Twitter/X — twitter-cli (replaces deprecated bird CLI)
which twitter >/dev/null 2>&1 || pipx install twitter-cli 2>/dev/null || uv tool install twitter-cli 2>/dev/null
-# Reddit — rdt-cli (replaces Exa-based approach)
-which rdt >/dev/null 2>&1 || pipx install rdt-cli 2>/dev/null || uv tool install rdt-cli 2>/dev/null
+# Reddit — rdt-cli (replaces Exa-based approach; PyPI lags, install from GitHub)
+which rdt >/dev/null 2>&1 || pipx install 'git+https://github.com/public-clis/rdt-cli.git' 2>/dev/null || uv tool install --from 'git+https://github.com/public-clis/rdt-cli.git' rdt-cli 2>/dev/null
# XiaoHongShu — xhs-cli (replaces Docker MCP)
which xhs >/dev/null 2>&1 || pipx install xiaohongshu-cli 2>/dev/null || uv tool install xiaohongshu-cli 2>/dev/null
diff --git a/tests/test_channels.py b/tests/test_channels.py
index b1b5c6d..3ac24fa 100644
--- a/tests/test_channels.py
+++ b/tests/test_channels.py
@@ -654,6 +654,8 @@ class TestRedditChannel:
assert status == "off"
assert "rdt-cli" in msg
assert "public-clis/rdt-cli" in msg
+ assert "git+https://github.com/public-clis/rdt-cli.git" in msg
+ assert "rdt-cli>=0.4.2" not in msg
def test_reports_ok_when_authenticated(self, monkeypatch):
monkeypatch.setattr(shutil, "which", lambda _: "/usr/local/bin/rdt")
diff --git a/tests/test_cli.py b/tests/test_cli.py
index fc4377f..86d1a51 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -1,9 +1,12 @@
# -*- coding: utf-8 -*-
"""Tests for Agent Reach CLI."""
+import shutil
+import subprocess
+from unittest.mock import patch
+
import pytest
import requests
-from unittest.mock import patch
import agent_reach.cli as cli
from agent_reach.cli import main
@@ -42,6 +45,31 @@ class TestCLI:
assert auth_token == "token123"
assert ct0 == "ct0abc"
+ def test_install_reddit_deps_prefers_github_source(self, monkeypatch, capsys):
+ state = {"rdt_installed": False}
+ commands = []
+
+ def fake_which(name):
+ if name == "rdt":
+ return "/usr/local/bin/rdt" if state["rdt_installed"] else None
+ if name == "pipx":
+ return "/usr/local/bin/pipx"
+ return None
+
+ def fake_run(cmd, **kwargs):
+ commands.append(cmd)
+ state["rdt_installed"] = True
+ return subprocess.CompletedProcess(cmd, 0, "", "")
+
+ monkeypatch.setattr(shutil, "which", fake_which)
+ monkeypatch.setattr(subprocess, "run", fake_run)
+
+ cli._install_reddit_deps()
+
+ out = capsys.readouterr().out
+ assert commands == [["pipx", "install", cli._RDT_GIT_SOURCE]]
+ assert "✅ rdt-cli installed" in out
+
class TestCheckUpdateRetry:
def test_retry_timeout_classification(self):