555 lines
15 KiB
Markdown
555 lines
15 KiB
Markdown
# X平台终端智能CLI
|
||
|
||
`Twitter` `CLI工具` `AI分析` `OSINT` `MCP服务器` `开源`
|
||
|
||
<!-- markdownlint-disable MD041 -->
|
||
<p align="center">
|
||
<img src="assets/hero.png" alt="xint — 从终端获取 X 平台情报" width="800">
|
||
</p>
|
||
|
||
<p align="center">
|
||
<strong>X 平台智能 CLI</strong> — 在终端中搜索、监控、分析并与 X/Twitter 互动。
|
||
</p>
|
||
|
||
<p align="center">
|
||
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="许可证: MIT"></a>
|
||
<a href="https://bun.sh"><img src="https://img.shields.io/badge/Runtime-Bun-f9f1e1.svg" alt="Bun"></a>
|
||
<a href="https://github.com/0xNyk/xint/releases"><img src="https://img.shields.io/github/v/release/0xNyk/xint?display_name=tag" alt="发布版本"></a>
|
||
<a href="https://github.com/0xNyk/xint/stargazers"><img src="https://img.shields.io/github/stars/0xNyk/xint" alt="Stars"></a>
|
||
</p>
|
||
|
||
---
|
||
|
||
> **像专业人士一样搜索 X。** 全文搜索、实时监控、粉丝追踪、AI 情感分析和结构化导出 — 全部在 CLI 中完成。
|
||
|
||
## 为什么选择 xint?
|
||
|
||
- **面向 AI 智能体** — 专为 Claude Code、OpenClaw 及其他编程智能体设计的[技能包](#作为-ai-智能体技能使用)
|
||
- **面向研究人员** — 无需离开终端即可进行 OSINT、市场情报和趋势追踪
|
||
- **面向开发者** — 支持 JSONL/CSV 导出、Unix 管道集成,以及供 AI 智能体调用的 MCP 服务器
|
||
- **快速** — 基于 Bun 构建,使用类型化 TypeScript,内置智能缓存
|
||
|
||
精神续作:[twint](https://github.com/twintproject/twint)(已于 2023 年归档)。
|
||
|
||
## 安装
|
||
|
||
```bash
|
||
curl -fsSL https://raw.githubusercontent.com/0xNyk/xint/main/install.sh | bash
|
||
```
|
||
|
||
指定版本安装:
|
||
|
||
```bash
|
||
XINT_INSTALL_VERSION=<版本标签> \
|
||
curl -fsSL https://raw.githubusercontent.com/0xNyk/xint/main/install.sh | bash
|
||
```
|
||
|
||
Homebrew(Apple Silicon 轻量预构建二进制):
|
||
|
||
```bash
|
||
brew tap 0xNyk/xint
|
||
brew install xint
|
||
```
|
||
|
||
显式安装 Rust 变体:
|
||
|
||
```bash
|
||
brew install xint-rs
|
||
```
|
||
|
||
从源码手动安装:
|
||
|
||
```bash
|
||
git clone https://github.com/0xNyk/xint.git
|
||
cd xint
|
||
bun install
|
||
```
|
||
|
||
> **依赖:** [Bun](https://bun.sh) · [X API 访问权限](https://developer.x.com)(需预付费额度)
|
||
|
||
## 快速参考
|
||
|
||
| 任务 | 命令 |
|
||
|------|---------|
|
||
| 搜索 | `xint search "AI agents"` |
|
||
| 监控 | `xint watch "solana" -i 5m` |
|
||
| 流式推文 | `xint stream` |
|
||
| 用户主页 | `xint profile @elonmusk` |
|
||
| 推文线程 | `xint thread 123456789` |
|
||
| 粉丝变动 | `xint diff @username` |
|
||
| 书签 | `xint bookmarks` |
|
||
| 列表 | `xint lists` |
|
||
| 屏蔽 | `xint blocks` |
|
||
| 静音 | `xint mutes` |
|
||
| 关注 | `xint follow @username` |
|
||
| 媒体 | `xint media <推文ID>` |
|
||
| 趋势 | `xint trends` |
|
||
| AI 分析 | `xint analyze "best AI frameworks?"` |
|
||
| 报告 | `xint report "crypto"` |
|
||
| 转推列表 | `xint reposts <推文ID>` |
|
||
| 用户搜索 | `xint users "AI researcher"` |
|
||
| 文章分析 | `xint article <url> --ai "summarize"` |
|
||
| 能力清单 | `xint capabilities --json` |
|
||
| 终端 UI | `xint tui` |
|
||
|
||
### 简写命令
|
||
|
||
```bash
|
||
xint s "query" # 搜索
|
||
xint w "query" # 监控
|
||
xint p @user # 用户主页
|
||
xint tr # 趋势
|
||
xint bm # 书签
|
||
```
|
||
|
||
### TUI 主题定制
|
||
|
||
```bash
|
||
# 内置主题:classic | neon | minimal | ocean | amber
|
||
XINT_TUI_THEME=ocean xint tui
|
||
|
||
# 禁用动画标题行
|
||
XINT_TUI_HERO=0 xint tui
|
||
|
||
# 禁用菜单行图标
|
||
XINT_TUI_ICONS=0 xint tui
|
||
|
||
# 强制使用 ASCII 边框
|
||
XINT_TUI_ASCII=1 xint tui
|
||
|
||
# 自定义主题 token 文件
|
||
XINT_TUI_THEME_FILE=./tui-theme.tokens.example.json xint tui
|
||
```
|
||
|
||
## 配置
|
||
|
||
### 1. X API 密钥
|
||
|
||
在 Shell 或密钥管理器中设置本地 Bearer Token(请勿提交凭据):
|
||
- `X_BEARER_TOKEN`
|
||
|
||
从 [developer.x.com](https://developer.x.com) → 你的应用 → 应用设置 中获取 Bearer Token。
|
||
|
||
### 2. 可选:xAI(用于 AI 功能)
|
||
|
||
用于 `analyze`、`report --sentiment` 和 `article --ai`:
|
||
|
||
- `XAI_API_KEY`
|
||
|
||
### 3. 可选:OAuth(用于写操作)
|
||
|
||
用于书签、点赞、列表、屏蔽/静音及粉丝追踪:
|
||
|
||
- `X_CLIENT_ID`
|
||
|
||
运行 `xint auth setup` 完成 OAuth 授权流程。
|
||
|
||
## 部署模式
|
||
|
||
### 本地自托管(OSS 默认)
|
||
|
||
- 在本地从此仓库运行所有功能。
|
||
- 包 API 调用均在本地执行,除非设置了云端地址。
|
||
- 适合开发和私有工作流。
|
||
|
||
### 云端控制平面(`xint-cloud`)
|
||
|
||
- 将包 API 功能指向托管的控制平面:
|
||
- `XINT_PACKAGE_API_BASE_URL=http://localhost:8787/v1`(或你部署的 URL)
|
||
- `XINT_PACKAGE_API_KEY=<工作区API密钥>`
|
||
- `XINT_WORKSPACE_ID=<工作区ID>`
|
||
- 在配额/计划错误时显示可选的付费升级链接:
|
||
- `XINT_BILLING_UPGRADE_URL=https://your-app/pricing`
|
||
|
||
注意:
|
||
- 若 `XINT_PACKAGE_API_BASE_URL` 未设置,包 API MCP 工具将返回配置错误。
|
||
- `xint-cloud` 应保持私有;`xint` 和 `xint-rs` 作为公开 OSS 客户端。
|
||
|
||
## 智能体原生能力清单
|
||
|
||
`xint` 现已内置机器可读的清单,供智能体运行时白名单和工具路由使用:
|
||
|
||
```bash
|
||
# 格式化 JSON 输出
|
||
xint capabilities
|
||
|
||
# 紧凑 JSON 供机器解析
|
||
xint capabilities --compact
|
||
```
|
||
|
||
## 搜索
|
||
|
||
```bash
|
||
# 快速脉冲搜索
|
||
xint search "AI agents" --quick
|
||
|
||
# 过去一小时高互动推文
|
||
xint search "react 19" --since 1h --sort likes --min-likes 50
|
||
|
||
# 全档案深度搜索
|
||
xint search "bitcoin ETF" --full --pages 3
|
||
|
||
# 带情感分析
|
||
xint search "solana" --sentiment
|
||
|
||
# 导出
|
||
xint search "startups" --csv > data.csv
|
||
xint search "AI" --jsonl | jq '.text'
|
||
```
|
||
|
||
### 选项
|
||
|
||
| 参数 | 说明 |
|
||
|------|-------------|
|
||
| `--sort` | `likes` · `impressions` · `retweets` · `recent` |
|
||
| `--since` | `1h` · `3h` · `12h` · `1d` · `7d` |
|
||
| `--full` | 搜索完整档案(回溯至 2006 年) |
|
||
| `--min-likes N` | 按互动量筛选 |
|
||
| `--pages N` | 获取页数(1-5) |
|
||
| `--sentiment` | 为每条推文添加 AI 情感分析 |
|
||
| `--quick` | 使用缓存的快速模式 |
|
||
|
||
## 监控(实时)
|
||
|
||
```bash
|
||
# 每 5 分钟监控话题
|
||
xint watch "solana" --interval 5m
|
||
|
||
# 监控用户
|
||
xint watch "@vitalikbuterin" -i 1m
|
||
|
||
# Webhook 推送到 Slack
|
||
xint watch "breaking" -i 30s --webhook https://example.com/webhook
|
||
```
|
||
|
||
Webhook 安全规则:
|
||
- 远程 Webhook 必须使用 `https://`
|
||
- `http://` 仅在本地/回环地址时被允许
|
||
- 可选主机白名单:`XINT_WEBHOOK_ALLOWED_HOSTS=hooks.example.com,*.internal.example`
|
||
|
||
按 `Ctrl+C` 退出 — 将显示本次会话统计。
|
||
|
||
## 流式推文(官方过滤流)
|
||
|
||
```bash
|
||
# 列出当前流规则
|
||
xint stream-rules
|
||
|
||
# 添加过滤流规则
|
||
xint stream-rules add "from:elonmusk -is:retweet" --tag elon
|
||
|
||
# 连接到流
|
||
xint stream
|
||
|
||
# JSONL 输出,最多 25 条后停止
|
||
xint stream --jsonl --max-events 25
|
||
```
|
||
|
||
## 粉丝追踪
|
||
|
||
```bash
|
||
# 首次运行:创建快照
|
||
xint diff @vitalikbuterin
|
||
|
||
# 再次运行:显示变动
|
||
xint diff @vitalikbuterin
|
||
|
||
# 追踪关注列表
|
||
xint diff @username --following
|
||
```
|
||
|
||
需要 OAuth(`xint auth setup`)。
|
||
|
||
## 列表(需 OAuth)
|
||
|
||
```bash
|
||
# 查看你创建的列表
|
||
xint lists
|
||
|
||
# 创建私有列表
|
||
xint lists create "AI Researchers" --description "高质量账号" --private
|
||
|
||
# 添加/移除成员
|
||
xint lists members add <list_id> @username
|
||
xint lists members remove <list_id> @username
|
||
```
|
||
|
||
## 屏蔽与静音(需 OAuth)
|
||
|
||
```bash
|
||
# 查看已屏蔽/静音用户
|
||
xint blocks
|
||
xint mutes
|
||
|
||
# 添加/移除
|
||
xint blocks add @username
|
||
xint blocks remove @username
|
||
xint mutes add @username
|
||
xint mutes remove @username
|
||
```
|
||
|
||
## 关注操作(需 OAuth)
|
||
|
||
```bash
|
||
xint follow @username
|
||
xint unfollow @username
|
||
```
|
||
|
||
## 媒体下载
|
||
|
||
```bash
|
||
# 通过推文 ID 下载媒体
|
||
xint media 1900100012345678901
|
||
|
||
# 通过推文 URL 下载媒体
|
||
xint media https://x.com/user/status/1900100012345678901
|
||
|
||
# 指定输出目录并生成 JSON 摘要
|
||
xint media 1900100012345678901 --dir ./downloads --json
|
||
|
||
# 仅下载第一个视频/GIF
|
||
xint media 1900100012345678901 --video-only --max-items 1
|
||
|
||
# 仅下载图片
|
||
xint media 1900100012345678901 --photos-only
|
||
|
||
# 自定义文件名模板
|
||
xint media 1900100012345678901 --name-template "{username}-{created_at}-{index}"
|
||
```
|
||
|
||
## 转推列表
|
||
|
||
```bash
|
||
# 查看谁转推了某条推文
|
||
xint reposts <推文ID>
|
||
xint reposts <推文ID> --limit 50 --json
|
||
```
|
||
|
||
## 用户搜索
|
||
|
||
```bash
|
||
# 按关键词搜索用户
|
||
xint users "AI researcher"
|
||
xint users "solana dev" --limit 10 --json
|
||
```
|
||
|
||
## 情报报告
|
||
|
||
```bash
|
||
# 生成报告
|
||
xint report "AI agents" --save
|
||
|
||
# 带情感分析,并指定账号
|
||
xint report "crypto" --sentiment --accounts @aaboronkov,@solana
|
||
```
|
||
|
||
报告内容包括:摘要、情感分布、热门推文、账号活动。
|
||
|
||
## 文章分析
|
||
|
||
```bash
|
||
# 抓取文章
|
||
xint article "https://example.com"
|
||
|
||
# 抓取文章并 AI 摘要
|
||
xint article "https://example.com" --ai "关键要点?"
|
||
|
||
# 从 X 推文链接分析
|
||
xint article "https://x.com/user/status/123" --ai "总结"
|
||
```
|
||
|
||
使用 xAI 的 `grok-4` 模型,默认分析模型为 `grok-4-1-fast`。
|
||
|
||
## 作为 AI 智能体技能使用
|
||
|
||
专为 AI 编程智能体设计,可添加为技能:
|
||
|
||
```bash
|
||
# Claude Code
|
||
mkdir -p .claude/skills && cd .claude/skills
|
||
git clone https://github.com/0xNyk/xint.git
|
||
|
||
# OpenClaw
|
||
mkdir -p skills && cd skills
|
||
git clone https://github.com/0xNyk/xint.git
|
||
```
|
||
|
||
然后直接说:*"搜索 X 上关于 React 19 的讨论"* — 智能体会读取 `SKILL.md` 并运行正确的命令。
|
||
|
||
### MCP 服务器
|
||
|
||
```bash
|
||
xint mcp
|
||
```
|
||
|
||
启动一个供 AI 智能体连接的 MCP 服务器。
|
||
|
||
```bash
|
||
# HTTP/SSE 模式(默认仅本地)
|
||
xint mcp --sse --port=3000
|
||
|
||
# 可选:启用 Bearer 认证(建议在绑定非回环地址时使用)
|
||
XINT_MCP_AUTH_TOKEN=替换为长随机令牌 xint mcp --sse --host=127.0.0.1
|
||
```
|
||
|
||
安全默认值:
|
||
- SSE 模式默认绑定 `127.0.0.1`,除非设置 `--host` / `XINT_MCP_HOST`。
|
||
- 若主机为非回环地址,必须通过 `--auth-token` 或 `XINT_MCP_AUTH_TOKEN` 提供认证。
|
||
|
||
## 费用
|
||
|
||
| 操作 | 费用 |
|
||
|-----------|------|
|
||
| 读取推文 | $0.005/条 |
|
||
| 全档案搜索 | $0.01/条 |
|
||
| 写操作 | $0.01/次 |
|
||
|
||
```bash
|
||
xint costs # 今日花费
|
||
xint costs week # 过去 7 天
|
||
xint costs budget # 查看/设置限额
|
||
```
|
||
|
||
## 包 API 计费
|
||
|
||
```bash
|
||
# 显示工作区计划、限制和功能门控
|
||
xint billing status
|
||
|
||
# 显示指定时间窗口内各操作的用量
|
||
xint billing usage --days=30
|
||
```
|
||
|
||
这些命令从本地/托管的包 API(`XINT_PACKAGE_API_BASE_URL`)读取数据。
|
||
|
||
托管计费同步方面,包 API 还支持:
|
||
- `POST /v1/billing/webhook`(提供商无关的事件接入)
|
||
- `GET /v1/billing/events?limit=100`(工作区计费事件历史)
|
||
|
||
## 配置变量(仅本地)
|
||
|
||
| 变量 | 必填 | 说明 |
|
||
|----------|----------|-------------|
|
||
| `X_BEARER_TOKEN` | 是 | X API v2 Bearer Token |
|
||
| `XAI_API_KEY` | 否 | 用于 analyze/report 的 xAI 密钥 |
|
||
| `XINT_ARTICLE_TIMEOUT_SEC` | 否 | 文章抓取超时秒数(默认 30,范围 5-120) |
|
||
| `X_CLIENT_ID` | 否 | 书签/点赞/列表/屏蔽/静音的 OAuth |
|
||
| `XINT_PACKAGE_API_BASE_URL` | 否 | MCP 包工具/计费的包 API 基础 URL |
|
||
| `XINT_PACKAGE_API_KEY` | 否 | 包 API 认证的旧版单一 Bearer 密钥 |
|
||
| `XINT_PACKAGE_API_KEYS` | 否 | API 密钥到 `workspace_id` + `plan` 的 JSON 映射 |
|
||
| `XINT_PACKAGE_API_PLAN` | 否 | 默认工作区计划(`free\|pro\|team\|enterprise`) |
|
||
| `XINT_WORKSPACE_ID` | 否 | 本地 `xint billing *` 调用使用的工作区 ID |
|
||
| `XINT_BILLING_WEBHOOK_SECRET` | 否 | `/v1/billing/webhook` 签名验证的 HMAC 密钥 |
|
||
| `XINT_BILLING_UPGRADE_URL` | 否 | MCP 计划/配额错误时显示的升级链接 |
|
||
|
||
## 目录结构
|
||
|
||
```
|
||
xint/
|
||
├── xint.ts # CLI 入口
|
||
├── lib/ # 核心模块
|
||
│ ├── api.ts # X API 封装
|
||
│ ├── oauth.ts # OAuth 2.0 PKCE
|
||
│ ├── grok.ts # xAI 集成
|
||
│ ├── sentiment.ts # AI 情感分析
|
||
│ ├── watch.ts # 实时监控
|
||
│ └── format.ts # 输出格式化
|
||
├── data/
|
||
│ ├── cache/ # 搜索缓存(15分钟 TTL)
|
||
│ ├── exports/ # 已保存结果
|
||
│ └── snapshots/ # 粉丝快照
|
||
├── SKILL.md # AI 智能体使用说明
|
||
└── .env.example # 环境变量模板
|
||
```
|
||
|
||
## 安全
|
||
|
||
- Token 从环境变量读取 — 从不硬编码
|
||
- OAuth Token 以 `chmod 600` 权限存储
|
||
- Webhook:仅使用可信端点
|
||
- 在不受信任环境中请检查智能体会话日志
|
||
|
||
详见 [SECURITY.md](docs/security.md)。
|
||
|
||
## 贡献
|
||
|
||
开源项目!请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
|
||
|
||
## 发布自动化
|
||
|
||
`xint` 是 `xint` 和 `xint-rs` 发布自动化的唯一来源。
|
||
|
||
```bash
|
||
# 在 xint/ 目录下执行
|
||
./scripts/release.sh --dry-run --allow-dirty
|
||
./scripts/release.sh 2026.2.18.4 --allow-dirty
|
||
# 本次禁用默认的 ClawdHub 发布
|
||
./scripts/release.sh 2026.2.18.4 --no-clawdhub
|
||
# 同时启用 skills.sh 发布
|
||
./scripts/release.sh 2026.2.18.4 --skillsh
|
||
# 如果只想手动填写发布说明,禁用 GitHub 自动生成
|
||
./scripts/release.sh 2026.2.18.4 --no-auto-notes
|
||
# 将发布报告写入自定义目录
|
||
./scripts/release.sh 2026.2.18.4 --report-dir /tmp/xint-release-reports
|
||
```
|
||
|
||
可选路径覆盖:
|
||
|
||
- `REPO_PATH_XINT`(在 `xint` 仓库内运行时默认为当前仓库)
|
||
- `REPO_PATH_XINT_RS`(默认为兄弟目录 `../xint-rs`,若存在)
|
||
- `RELEASE_REPORT_DIR`(默认为 `xint/reports/releases`)
|
||
|
||
发布说明行为:
|
||
|
||
- 默认:使用 `gh release create --generate-notes` 自动生成
|
||
- 手动覆盖:设置 `CHANGELOG_ADDED`、`CHANGELOG_CHANGED`、`CHANGELOG_FIXED`、`CHANGELOG_SECURITY` 中任意一个
|
||
- 默认:当 `clawdhub` CLI 可用时发布到 ClawdHub(使用 `--no-clawdhub` 禁用)
|
||
- 可选:使用 `--skillsh` 发布到 skills.sh(或 `--ai-skill` 同时发布两者)
|
||
|
||
发布报告:
|
||
|
||
- 默认:写入 `reports/releases/<version>.md`
|
||
- 包含每个仓库的提交列表、提交范围、文件变更、SHA、对比链接和发布 URL
|
||
- 自动作为资产上传到两个 GitHub 发布页(可使用 `--no-report-asset` 禁用)
|
||
- 自动嵌入两个 GitHub 发布正文(可使用 `--no-report-body` 禁用)
|
||
- 使用 `--no-report` 完全禁用
|
||
|
||
## 贡献
|
||
|
||
欢迎贡献。请先阅读[贡献指南](CONTRIBUTING.md)。
|
||
|
||
## ❤️ 支持项目
|
||
|
||
如果你觉得这个项目有用,欢迎支持我的开源工作。
|
||
|
||
[](https://buymeacoffee.com/nyk_builderz)
|
||
|
||
**Solana 捐赠地址**
|
||
|
||
`BYLu8XD8hGDUtdRBWpGWu5HKoiPrWqCxYFSh4oxXuvPg`
|
||
|
||
---
|
||
|
||
<div align="center">
|
||
|
||
**需要为你的团队构建智能体基础设施、交易系统或 Solana 应用?**
|
||
|
||
[Builderz](https://builderz.dev) 提供生产级 AI 系统交付服务 — 覆盖 15 个国家,32+ 款产品。
|
||
|
||
[联系我们](https://builderz.dev) | [@nyk_builderz](https://x.com/nyk_builderz)
|
||
|
||
</div>
|
||
|
||
## 许可证
|
||
|
||
[](https://creativecommons.org/publicdomain/zero/1.0/)
|
||
|
||
在法律允许的最大范围内,作者已放弃对本作品的所有版权及相关权利。
|
||
|
||
---
|
||
|
||
<p align="center">
|
||
<a href="https://star-history.com/#0xNyk/xint&Date">
|
||
<img src="https://api.star-history.com/svg?repos=0xNyk/xint&type=Date" alt="Star 历史" width="400">
|
||
</a>
|
||
</p> |