关于 rdt-cli
rdt-cli 是用于浏览、搜索、阅读和互动 Reddit 的命令行工具,提供适合 Agent 工作流的结构化精简输出;需登录的操作通过浏览器 Cookie 完成。
主要功能
- 01浏览信息流、子版块和个人资料
- 02搜索帖子并导出结果
- 03阅读帖子与评论串
- 04投票、收藏、订阅和评论
- 05输出 JSON 或 YAML
适用场景
- 01监控已订阅子版块的信息流
- 02研究 Reddit 用户和帖子
- 03导出搜索结果以供分析
MCP 相关
输入将其描述为命令行技能,未说明 MCP 连接方式。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ public-clis/ rdt-cli --skill rdt-cli安装后在 Claude Code 中输入/rdt-cli确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
.gitignorepyproject.tomlSCHEMA.mdREADME.md.github/workflows/publish.ymlci.ymlrdt_cli/auth.py__init__.py__main__.pycli.pyclient.pyconfig.pyconstants.pyexceptions.pyfingerprint.pyindex_cache.pysession.pymodels.pytransports.pyparser.pyrdt_cli/commands/__init__.pyauth.pypost.pysearch.pysocial.pybrowse.py_common.pytests/__init__.pytests/fixtures/morechildren.jsonlisting.json详细介绍
rdt-cli — Reddit 命令行工具
二进制文件: rdt
凭据: 浏览器 Cookie(通过 browser-cookie3 自动提取)
设置
# Install (requires Python 3.10+)
uv tool install rdt-cli
# Or: pip install rdt-cli
# Upgrade
uv tool upgrade rdt-cli
身份验证
Agent 须知: 执行任何需要身份验证的 rdt 命令前,先检查是否存在凭据。
步骤 0:检查是否已完成身份验证
rdt status --json 2>/dev/null | jq -r '.data.authenticated' | grep -q true && echo "AUTH_OK" || echo "AUTH_NEEDED"
如果为 AUTH_OK,请跳至命令参考。
如果为 AUTH_NEEDED,请继续步骤 1。
步骤 1:指导用户完成身份验证
确保用户已在受支持的浏览器(Chrome、Firefox、Edge、Brave、Arc、Chromium、Opera、Vivaldi、Safari、LibreWolf)中登录 reddit.com。然后:
rdt login
使用以下命令验证:
rdt status
rdt whoami --json | jq '.data.name // .data._session.username'
步骤 2:处理常见身份验证问题
| 症状 | Agent 操作 |
|---|---|
No Reddit cookies found | 指导用户在浏览器中登录 reddit.com |
Session expired | 运行 rdt logout && rdt login |
database is locked | 关闭浏览器,然后重试 |
Agent 默认行为
所有机器可读输出都使用 SCHEMA.md 中说明的封装格式。
负载位于 .data 下。
- 非 TTY 标准输出 → 自动使用 YAML
--json/--yaml→ 显式指定格式--compact→ 减少字段(节省 Agent 令牌)--output file.json→ 将结构化输出保存到文件- 富文本输出 → stderr(管道安全:
rdt search X --json | jq .data) - 大多数读取命令无需身份验证(使用 Reddit 公共 JSON API)
- 写入操作(赞同、保存、订阅)需要身份验证,且内置 1.5-4 秒延迟
命令参考
浏览
| 命令 | 说明 | 示例 |
|---|---|---|
rdt feed | 浏览首页信息流(需要登录) | rdt feed -n 10 --json |
rdt feed --subs-only | 仅浏览订阅版块的信息流(无算法排序,按时间排序) | rdt feed --subs-only -n 5 --json |
rdt popular | 浏览 /r/popular | rdt popular -n 5 --json |
rdt all | 浏览 /r/all | rdt all -n 10 --compact --json |
rdt sub <name> | 浏览一个 subreddit | rdt sub python -s top -t week |
rdt sub-info <name> | 查看 subreddit 信息 | rdt sub-info rust --json |
rdt user <name> | 查看用户个人资料 | rdt user spez --json |
rdt user-posts <name> | 查看用户的帖子 | rdt user-posts spez -n 5 --json |
rdt user-comments <name> | 查看用户的评论 | rdt user-comments spez -n 5 --json |
rdt saved | 查看已保存的内容 | rdt saved -n 10 --json |
rdt upvoted | 查看已赞同的帖子 | rdt upvoted -n 10 --json |
rdt open <id_or_index> | 在浏览器中打开帖子 | rdt open 3 |
阅读
| 命令 | 说明 | 示例 |
|---|---|---|
rdt read <post_id> | 阅读帖子及评论 | rdt read 1abc123 --json |
rdt read <post_id> --expand-more | 展开顶层的 more comments | rdt read 1abc123 --expand-more --json |
rdt show <index> | 按短索引阅读 | rdt show 3 |
rdt show <index> --expand-more | 展开缓存结果中的 more comments | rdt show 3 --expand-more --json |
rdt whoami | 查看个人资料(业力、账号年龄) | rdt whoami --json |
搜索与导出
| 命令 | 说明 | 示例 |
|---|---|---|
rdt search <query> | 搜索帖子 | rdt search "python async" -s top -t year |
rdt search <query> -r <sub> | 在 subreddit 中搜索 | rdt search "error" -r rust --json |
rdt search <query> -o f.json | 搜索并保存到文件 | rdt search "ML" -n 50 -o results.json |
rdt export <query> | 导出为 CSV/JSON | rdt export "ML" -n 50 -o results.csv |
互动(需要身份验证)
| 命令 | 描述 | 示例 |
|---|---|---|
rdt upvote <id_or_index> | 点赞 | rdt upvote 3 |
rdt upvote <id> --down | 点踩 | rdt upvote 3 --down |
rdt upvote <id> --undo | 撤销投票 | rdt upvote 3 --undo |
rdt save <id_or_index> | 收藏帖子 | rdt save 3 |
rdt save <id> --undo | 取消收藏 | rdt save 3 --undo |
rdt subscribe <sub> | 订阅 | rdt subscribe python |
rdt subscribe <sub> --undo | 取消订阅 | rdt subscribe python --undo |
rdt comment <id> <text> | 发布评论 | rdt comment 3 "Great post!" |
账户
| 命令 | 描述 |
|---|---|
rdt login | 从浏览器提取 Cookie |
rdt logout | 清除缓存的 Cookie |
rdt status | 检查身份验证状态 |
rdt whoami | 查看详细个人资料信息 |
列表选项
所有列表命令(feed、popular、all、sub、user-posts、user-comments、saved、upvoted、search)均支持:
| 标志 | 描述 |
|---|---|
--json | JSON 输出(带 SCHEMA 信封) |
--yaml | YAML 输出(带 SCHEMA 信封) |
-o, --output FILE | 将结构化输出保存到文件 |
--full-text | 显示完整标题,不截断 |
-c, --compact | 适合 Agent 的紧凑输出(字段更少) |
Feed 专用选项
| 标志 | 描述 |
|---|---|
--subs-only | 仅显示已订阅 subreddit 中的帖子(按时间排序,不使用算法) |
--max-subs N | 最多获取的订阅数(默认值:20) |
Agent 工作流示例
浏览 → 阅读 → 点赞流程
rdt sub python -s top -t week -n 5
rdt show 1 --expand-more
rdt upvote 1
搜索 → 导出流程(结构化)
rdt search "machine learning" -s top --compact --json | jq '.data'
rdt export "machine learning" -n 100 -o ml_posts.csv
搜索 → 保存到文件
rdt search "rust async" -n 50 -o results.json
rdt search "python tips" -n 20 --compact -o tips.json
用户调研
rdt user spez --json | jq '.data | {name, link_karma, comment_karma}'
rdt user-posts spez -n 10 --compact --json
rdt user-comments spez -n 10 --compact --json
收藏 / 点赞内容回顾
rdt saved -n 20 --compact --json
rdt upvoted -n 20 --compact --json
仅监控订阅内容
rdt feed --subs-only -n 5 --compact --json
rdt feed --subs-only --max-subs 10 -o subs_feed.json
发现 Subreddit
rdt sub-info python --json | jq '.data | {subscribers, accounts_active}'
rdt sub python -s top -t month -n 5 --full-text
排序选项
- 列表排序:
hot、new、top、rising、controversial、best - 搜索排序:
relevance、hot、top、new、comments - 时间筛选(适用于 top/controversial):
hour、day、week、month、year、all - 评论排序:
best、top、new、controversial、old、qa
错误代码
在 error.code 字段中返回的结构化错误代码(参见 SCHEMA.md):
not_authenticated— Cookie 已过期或缺失rate_limited— 请求过多not_found— Subreddit、用户或帖子不存在forbidden— 私有 Subreddit 或被屏蔽的用户api_error— Reddit 上游 API 错误unknown_error— 意外错误
限制
- 不支持私信 — 无法访问私信
- 不支持实时 / 流式功能 — 不支持实时功能
- 不支持下载媒体 — 无法下载图片 / 视频
- 单账户 — 一次只能使用一组 Cookie
- 请求频率受限 — 请求之间内置高斯抖动延迟(约 1s)
- 仅使用公共 API — 使用带 .json 后缀的 API,不使用 OAuth 端点
面向 Agent 的反检测说明
- 请勿并行发送请求 — 内置的请求频率限制延迟用于保护账户安全
- 写入操作延迟:每次写入操作(点赞 / 收藏 / 订阅 / 评论)后随机延迟 1.5-4s
- 批量操作:批量处理时,在 CLI 调用之间加入延迟
- Chrome 133 指纹:所有请求使用一致的浏览器身份
- 指数退避:429/5xx 错误会自动重试并采用退避策略
安全说明
- 请勿要求用户在聊天记录中分享原始 Cookie 值
- 优先从浏览器提取 Cookie,而非手动复制粘贴机密信息
- 如果身份验证失败,请让用户通过
rdt login重新登录 - 内置的请求频率限制延迟可保护账户;请勿绕过它
评论
支持 Markdown