catalog/repos/0xnyk--xint.md

555 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
```
HomebrewApple 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)。
## ❤️ 支持项目
如果你觉得这个项目有用,欢迎支持我的开源工作。
[![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-support-orange?logo=buymeacoffee)](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>
## 许可证
[![CC0](https://licensebuttons.net/p/zero/1.0/88x31.png)](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>