0xNyk/xint
GitHub: 0xNyk/xint
面向终端的X/Twitter情报工具,集搜索、监控、分析与AI能力于一体,专为OSINT研究和AI代理场景设计。
Stars: 39 | Forks: 2
X Intelligence CLI — 在终端中搜索、监控、分析 X/Twitter 并与之互动。
## 为什么选择 xint?
- **面向 AI 代理** — 设计为 Claude Code、OpenClaw 和其他编码代理的 [技能](#use-as-an-ai-agent-skill)
- **面向研究人员** — 无需离开终端即可进行 OSINT、市场情报、趋势追踪
- **面向开发者** — JSONL/CSV 导出、Unix pipeline 集成、用于 AI 代理工具的 MCP server
- **快速** — 基于 Bun 构建,类型化 TypeScript,智能缓存
[twint](https://github.com/twintproject/twint) 的精神继任者(2023 年归档)。
## 安装
```
curl -fsSL https://raw.githubusercontent.com/0xNyk/xint/main/install.sh | bash
```
可选的固定版本:
```
XINT_INSTALL_VERSION=
\
curl -fsSL https://raw.githubusercontent.com/0xNyk/xint/main/install.sh | bash
```
Homebrew(Apple Silicon 上的轻量级预构建二进制文件):
```
brew tap 0xNyk/xint
brew install xint
```
Rust 变体显式安装:
```
brew install xint-rs
```
手动源码安装:
```
git clone https://github.com/0xNyk/xint.git
cd xint
bun install
```
## 快速参考
| 任务 | 命令 |
|------|---------|
| 搜索 | `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 ` |
| 趋势 | `xint trends` |
| AI 分析 | `xint analyze "best AI frameworks?"` |
| 报告 | `xint report "crypto"` |
| 文章 | `xint article --ai "summarize"` |
| 能力 | `xint capabilities --json` |
| TUI | `xint tui` |
### 简写
```
xint s "query" # search
xint w "query" # watch
xint p @user # profile
xint tr # trends
xint bm # bookmarks
```
### TUI 自定义
```
# 内置主题:classic | neon | minimal | ocean | amber
XINT_TUI_THEME=ocean xint tui
# 禁用动画 hero line
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
```
### TUI 自定义
```
# 内置主题:classic | neon | minimal | ocean | amber
XINT_TUI_THEME=ocean xint tui
# 禁用动画 hero line
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 Key
在你的 shell 或密钥管理器中设置本地 bearer token(不要提交凭证):
- `X_BEARER_TOKEN`
从 [developer.x.com](https://developer.x.com) → Your Apps → App Settings 获取你的 bearer token。
### 2. 可选:用于 AI 功能的 xAI
用于 `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=`
- `XINT_WORKSPACE_ID=`
- 配额/计划错误时显示的可选账单升级链接:
- `XINT_BILLING_UPGRADE_URL=https://your-app/pricing`
注意:
- 如果未设置 `XINT_PACKAGE_API_BASE_URL`,包 API MCP 工具将返回设置错误。
- `xint-cloud` 应保持私有;`xint` 和 `xint-rs` 保持为公开的 OSS 客户端。
## 代理原生能力清单
`xint` 现在为代理运行时允许列表和工具路由提供一个机器可读的清单:
```
# 格式化的 JSON
xint capabilities
# 用于机器摄取的紧凑 JSON
xint capabilities --compact
```
## 搜索
```
# Quick pulse
xint search "AI agents" --quick
# High-engagement from last hour
xint search "react 19" --since 1h --sort likes --min-likes 50
# Full-archive deep dive
xint search "bitcoin ETF" --full --pages 3
# With sentiment
xint search "solana" --sentiment
# Export
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` | 带缓存的快速模式 |
## 监控(实时)
```
# Monitor topic every 5 minutes
xint watch "solana" --interval 5m
# Watch user
xint watch "@vitalikbuterin" -i 1m
# Webhook to Slack
xint watch "breaking" -i 30s --webhook https://example.com/webhook
```
Webhook 安全性:
- 远程 webhook 必须使用 `https://`
- 仅接受用于 localhost/loopback 目标的 `http://`
- 可选的主机允许列表:`XINT_WEBHOOK_ALLOWED_HOSTS=hooks.example.com,*.internal.example`
按 `Ctrl+C` — 显示会话统计信息。
## 流式(官方过滤流)
```
# List current stream rules
xint stream-rules
# Add a filtered-stream rule
xint stream-rules add "from:elonmusk -is:retweet" --tag elon
# Connect to stream
xint stream
# JSONL output + stop after 25 events
xint stream --jsonl --max-events 25
```
## 关注者追踪
```
# First run: creates snapshot
xint diff @vitalikbuterin
# Second run: shows changes
xint diff @vitalikbuterin
# Track following
xint diff @username --following
```
需要 OAuth(`xint auth setup`)。
## 列表(OAuth)
```
# List your owned lists
xint lists
# Create a private list
xint lists create "AI Researchers" --description "High-signal accounts" --private
# Add/remove members
xint lists members add @username
xint lists members remove @username
```
## 屏蔽与静音(OAuth)
```
# List blocked/muted users
xint blocks
xint mutes
# Add/remove
xint blocks add @username
xint blocks remove @username
xint mutes add @username
xint mutes remove @username
```
## 关注操作(OAuth)
```
xint follow @username
xint unfollow @username
```
## 媒体下载
```
# Download media from a tweet ID
xint media 1900100012345678901
# Download media from a tweet URL
xint media https://x.com/user/status/1900100012345678901
# Custom output directory + JSON summary
xint media 1900100012345678901 --dir ./downloads --json
# Download only first video/gif
xint media 1900100012345678901 --video-only --max-items 1
# Download only photos
xint media 1900100012345678901 --photos-only
# Custom filename template
xint media 1900100012345678901 --name-template "{username}-{created_at}-{index}"
```
## 情报报告
```
# Generate report
xint report "AI agents" --save
# With sentiment + specific accounts
xint report "crypto" --sentiment --accounts @aaboronkov,@solana
```
报告包括:摘要、情感分布、热门推文、账户活动。
## 文章分析
```
# Fetch article
xint article "https://example.com"
# Fetch + AI summary
xint article "https://example.com" --ai "Key takeaways?"
# From X tweet
xint article "https://x.com/user/status/123" --ai "Summarize"
```
使用 xAI 的 `grok-4` 模型。
## 用作 AI 代理技能
专为 AI 编码代理设计。添加为技能:
```
# 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
```
然后只需问:*"Search X for what people say about React 19"* — 代理会读取 `SKILL.md` 并运行正确的命令。
### MCP Server
```
xint mcp
```
运行一个 AI 代理可以连接的 MCP server。
```
# HTTP/SSE mode (local-only by default)
xint mcp --sse --port=3000
# Optional: require bearer auth (recommended if binding beyond loopback)
XINT_MCP_AUTH_TOKEN=replace-with-long-random-token xint mcp --sse --host=127.0.0.1
```
安全默认设置:
- SSE 模式绑定到 `127.0.0.1`,除非设置了 `--host` / `XINT_MCP_HOST`。
- 如果主机非 loopback,则需要通过 `--auth-token` 或 `XINT_MCP_AUTH_TOKEN` 进行认证。
## 费用
| 操作 | 费用 |
|-----------|------|
| 推文读取 | $0.005/tweet |
| 完整归档 | $0.01/tweet |
| 写入操作 | $0.01/action |
```
xint costs # Today's spend
xint costs week # Last 7 days
xint costs budget # Show/set limits
```
## 包 API 账单
```
# Show workspace plan, limits, and feature gates
xint billing status
# Show usage units by operation over a window
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 计划/配额错误中显示的升级 URL |
## 文件结构
```
xint/
├── xint.ts # CLI entry
├── lib/ # Core modules
│ ├── api.ts # X API wrapper
│ ├── oauth.ts # OAuth 2.0 PKCE
│ ├── grok.ts # xAI integration
│ ├── sentiment.ts # AI sentiment
│ ├── watch.ts # Real-time monitoring
│ └── format.ts # Output formatters
├── data/
│ ├── cache/ # Search cache (15min TTL)
│ ├── exports/ # Saved results
│ └── snapshots/ # Follower snapshots
├── SKILL.md # AI agent instructions
└── .env.example # Template
```
## 安全
- 来自环境变量的 Token — 绝不硬编码
- OAuth token 使用 `chmod 600` 存储
- Webhook:仅使用受信任的端点
- 在不受信任的环境中审查代理会话日志
有关完整详细信息,请参阅 [SECURITY.md](docs/security.md)。
## 贡献
开源!请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 发布自动化
`xint` 是 `xint` 和 `xint-rs` 跨版本发布自动化的真实来源。
```
# from xint/
./scripts/release.sh --dry-run --allow-dirty
./scripts/release.sh 2026.2.18.4 --allow-dirty
# disable default ClawdHub publish for one run
./scripts/release.sh 2026.2.18.4 --no-clawdhub
# enable skills.sh as well
./scripts/release.sh 2026.2.18.4 --skillsh
# disable GitHub auto-generated notes if you want manual sections only
./scripts/release.sh 2026.2.18.4 --no-auto-notes
# write release report to a custom location
./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/.md`
- 包含每个仓库的提交列表、提交范围、文件更改、SHA、比较链接和发布 URL
- 自动作为资产上传到两个 GitHub 发布(可以使用 `--no-report-asset` 禁用)
- 自动嵌入到两个 GitHub 发布正文中(可以使用 `--no-report-body` 禁用)
- 使用 `--no-report` 禁用
## 许可证
[MIT](LICENSE) · [0xNyk](https://github.com/0xNyk)
标签:AI代理, Bun, ESC4, JSONL, MCP服务器, OSINT, Twitter, TypeScript, WSL, X平台, 命令控制, 威胁情报, 安全插件, 市场情报, 开发者工具, 情报分析, 数据导出, 数据采集, 智能体技能, 社交媒体监控, 网络安全, 网络诊断, 网络调试, 自动化, 自动化攻击, 趋势追踪, 隐私保护