{"id":44828565,"url":"https://github.com/0xnyk/xint","last_synced_at":"2026-02-21T08:00:52.952Z","repository":{"id":338509522,"uuid":"1158123906","full_name":"0xNyk/xint","owner":"0xNyk","description":"X Intelligence CLI — search, monitor, analyze, and engage on X/Twitter. TypeScript + Bun. AI agent skill.","archived":false,"fork":false,"pushed_at":"2026-02-20T08:52:58.000Z","size":2337,"stargazers_count":15,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-20T08:55:56.835Z","etag":null,"topics":["ai-agents","bun","claude","cli","openclaw","openclaw-skill","osint","skill","twitter","typescript","x"],"latest_commit_sha":null,"homepage":"https://clawhub.ai/0xNyk/xint","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/0xNyk.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-14T20:47:52.000Z","updated_at":"2026-02-19T22:05:28.000Z","dependencies_parsed_at":"2026-02-20T07:02:21.484Z","dependency_job_id":null,"html_url":"https://github.com/0xNyk/xint","commit_stats":null,"previous_names":["0xnyk/xint"],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/0xNyk/xint","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xNyk%2Fxint","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xNyk%2Fxint/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xNyk%2Fxint/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xNyk%2Fxint/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/0xNyk","download_url":"https://codeload.github.com/0xNyk/xint/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xNyk%2Fxint/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29676971,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T06:23:40.028Z","status":"ssl_error","status_checked_at":"2026-02-21T06:23:39.222Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agents","bun","claude","cli","openclaw","openclaw-skill","osint","skill","twitter","typescript","x"],"created_at":"2026-02-16T23:30:02.638Z","updated_at":"2026-02-21T08:00:52.908Z","avatar_url":"https://github.com/0xNyk.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- markdownlint-disable MD041 --\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/hero.png\" alt=\"xint — X Intelligence from your terminal\" width=\"800\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eX Intelligence CLI\u003c/strong\u003e — search, monitor, analyze, and engage on X/Twitter from your terminal.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"License: MIT\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://bun.sh\"\u003e\u003cimg src=\"https://img.shields.io/badge/Runtime-Bun-f9f1e1.svg\" alt=\"Bun\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/0xNyk/xint/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/0xNyk/xint?display_name=tag\" alt=\"Release\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/0xNyk/xint/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/0xNyk/xint\" alt=\"Stars\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://twitter.com/intent/tweet?text=Check+out+xint:+X+Intelligence+CLI+for+AI+agents+%F0%9F%90%A5%0Ahttps://github.com/0xNyk/xint\"\u003e\u003cimg src=\"https://img.shields.io/twitter/url?label=Tweet\u0026url=https%3A%2F%2Fgithub.com%2F0xNyk%2Fxint\" alt=\"Tweet\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n\u003e **Search X like a pro.** Full-text search, real-time monitoring, follower tracking, AI sentiment analysis, and structured export — all from CLI.\n\n## Why xint?\n\n- **For AI Agents** — designed as a [skill](#use-as-an-ai-agent-skill) for Claude Code, OpenClaw, and other coding agents\n- **For Researchers** — OSINT, market intelligence, trend tracking without leaving the terminal\n- **For Developers** — JSONL/CSV export, Unix pipeline integration, MCP server for AI agent tools\n- **Fast** — built on Bun, typed TypeScript, smart caching\n\nSpiritual successor to [twint](https://github.com/twintproject/twint) (archived 2023).\n\n## Install\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/0xNyk/xint/main/install.sh | bash\n```\n\nOptional pinned version:\n\n```bash\nXINT_INSTALL_VERSION=\u003cversion-tag\u003e \\\ncurl -fsSL https://raw.githubusercontent.com/0xNyk/xint/main/install.sh | bash\n```\n\nHomebrew (lightweight prebuilt binary on Apple Silicon):\n\n```bash\nbrew tap 0xNyk/xint\nbrew install xint\n```\n\nRust variant explicitly:\n\n```bash\nbrew install xint-rs\n```\n\nManual source install:\n\n```bash\ngit clone https://github.com/0xNyk/xint.git\ncd xint\nbun install\n```\n\n\u003e **Requires:** [Bun](https://bun.sh) · [X API access](https://developer.x.com) (prepaid credits)\n\n## Quick Reference\n\n| Task | Command |\n|------|---------|\n| Search | `xint search \"AI agents\"` |\n| Monitor | `xint watch \"solana\" -i 5m` |\n| Stream | `xint stream` |\n| Profile | `xint profile @elonmusk` |\n| Thread | `xint thread 123456789` |\n| Followers | `xint diff @username` |\n| Bookmarks | `xint bookmarks` |\n| Lists | `xint lists` |\n| Blocks | `xint blocks` |\n| Mutes | `xint mutes` |\n| Follow | `xint follow @username` |\n| Media | `xint media \u003ctweet_id\u003e` |\n| Trends | `xint trends` |\n| AI Analyze | `xint analyze \"best AI frameworks?\"` |\n| Report | `xint report \"crypto\"` |\n| Article | `xint article \u003curl\u003e --ai \"summarize\"` |\n| Capabilities | `xint capabilities --json` |\n| TUI | `xint tui` |\n\n### Shorthands\n\n```bash\nxint s \"query\"    # search\nxint w \"query\"    # watch  \nxint p @user     # profile\nxint tr           # trends\nxint bm           # bookmarks\n```\n\n## Setup\n\n### 1. X API Key\n\nSet a local bearer token in your shell or secret manager (do not commit credentials):\n- `X_BEARER_TOKEN`\n\nGet your bearer token from [developer.x.com](https://developer.x.com) → Your Apps → App Settings.\n\n### 2. Optional: xAI for AI Features\n\nFor `analyze`, `report --sentiment`, and `article --ai`:\n\n- `XAI_API_KEY`\n\n### 3. Optional: OAuth for Write Access\n\nFor bookmarks, likes, lists, blocks/mutes, and follower tracking:\n\n- `X_CLIENT_ID`\n\nRun `xint auth setup` to complete OAuth flow.\n\n## Deployment Modes\n\n### Self-hosted (OSS default)\n\n- Run everything locally from this repo.\n- Package API calls are local unless you set cloud endpoints.\n- Good for development and private workflows.\n\n### Hosted cloud control plane (`xint-cloud`)\n\n- Point package API features at your hosted control plane:\n  - `XINT_PACKAGE_API_BASE_URL=http://localhost:8787/v1` (or your deployed URL)\n  - `XINT_PACKAGE_API_KEY=\u003cworkspace_api_key\u003e`\n  - `XINT_WORKSPACE_ID=\u003cworkspace_id\u003e`\n- Optional billing upgrade link shown on quota/plan errors:\n  - `XINT_BILLING_UPGRADE_URL=https://your-app/pricing`\n\nNotes:\n- If `XINT_PACKAGE_API_BASE_URL` is unset, package API MCP tools return a setup error.\n- `xint-cloud` should remain private; `xint` and `xint-rs` stay public OSS clients.\n\n## Agent-Native Capabilities Manifest\n\n`xint` now ships a machine-readable manifest for agent runtime allowlists and tool routing:\n\n```bash\n# Pretty JSON\nxint capabilities\n\n# Compact JSON for machine ingestion\nxint capabilities --compact\n```\n\n## Search\n\n```bash\n# Quick pulse\nxint search \"AI agents\" --quick\n\n# High-engagement from last hour\nxint search \"react 19\" --since 1h --sort likes --min-likes 50\n\n# Full-archive deep dive\nxint search \"bitcoin ETF\" --full --pages 3\n\n# With sentiment\nxint search \"solana\" --sentiment\n\n# Export\nxint search \"startups\" --csv \u003e data.csv\nxint search \"AI\" --jsonl | jq '.text'\n```\n\n### Options\n\n| Flag | Description |\n|------|-------------|\n| `--sort` | `likes` · `impressions` · `retweets` · `recent` |\n| `--since` | `1h` · `3h` · `12h` · `1d` · `7d` |\n| `--full` | Search full archive (back to 2006) |\n| `--min-likes N` | Filter by engagement |\n| `--pages N` | Pages to fetch (1-5) |\n| `--sentiment` | Add AI sentiment per tweet |\n| `--quick` | Fast mode with caching |\n\n## Watch (Real-Time)\n\n```bash\n# Monitor topic every 5 minutes\nxint watch \"solana\" --interval 5m\n\n# Watch user\nxint watch \"@vitalikbuterin\" -i 1m\n\n# Webhook to Slack\nxint watch \"breaking\" -i 30s --webhook https://example.com/webhook\n```\n\nWebhook safety:\n- Remote webhooks must use `https://`\n- `http://` is accepted only for localhost/loopback targets\n- Optional host allowlist: `XINT_WEBHOOK_ALLOWED_HOSTS=hooks.example.com,*.internal.example`\n\nPress `Ctrl+C` — shows session stats.\n\n## Stream (Official Filtered Stream)\n\n```bash\n# List current stream rules\nxint stream-rules\n\n# Add a filtered-stream rule\nxint stream-rules add \"from:elonmusk -is:retweet\" --tag elon\n\n# Connect to stream\nxint stream\n\n# JSONL output + stop after 25 events\nxint stream --jsonl --max-events 25\n```\n\n## Follower Tracking\n\n```bash\n# First run: creates snapshot\nxint diff @vitalikbuterin\n\n# Second run: shows changes\nxint diff @vitalikbuterin\n\n# Track following\nxint diff @username --following\n```\n\nRequires OAuth (`xint auth setup`).\n\n## Lists (OAuth)\n\n```bash\n# List your owned lists\nxint lists\n\n# Create a private list\nxint lists create \"AI Researchers\" --description \"High-signal accounts\" --private\n\n# Add/remove members\nxint lists members add \u003clist_id\u003e @username\nxint lists members remove \u003clist_id\u003e @username\n```\n\n## Blocks \u0026 Mutes (OAuth)\n\n```bash\n# List blocked/muted users\nxint blocks\nxint mutes\n\n# Add/remove\nxint blocks add @username\nxint blocks remove @username\nxint mutes add @username\nxint mutes remove @username\n```\n\n## Follow Actions (OAuth)\n\n```bash\nxint follow @username\nxint unfollow @username\n```\n\n## Media Download\n\n```bash\n# Download media from a tweet ID\nxint media 1900100012345678901\n\n# Download media from a tweet URL\nxint media https://x.com/user/status/1900100012345678901\n\n# Custom output directory + JSON summary\nxint media 1900100012345678901 --dir ./downloads --json\n\n# Download only first video/gif\nxint media 1900100012345678901 --video-only --max-items 1\n\n# Download only photos\nxint media 1900100012345678901 --photos-only\n\n# Custom filename template\nxint media 1900100012345678901 --name-template \"{username}-{created_at}-{index}\"\n```\n\n## Intelligence Reports\n\n```bash\n# Generate report\nxint report \"AI agents\" --save\n\n# With sentiment + specific accounts\nxint report \"crypto\" --sentiment --accounts @aaboronkov,@solana\n```\n\nReports include: summary, sentiment breakdown, top tweets, account activity.\n\n## Article Analysis\n\n```bash\n# Fetch article\nxint article \"https://example.com\"\n\n# Fetch + AI summary\nxint article \"https://example.com\" --ai \"Key takeaways?\"\n\n# From X tweet\nxint article \"https://x.com/user/status/123\" --ai \"Summarize\"\n```\n\nUses xAI's `grok-4` model.\n\n## Use as AI Agent Skill\n\nDesigned for AI coding agents. Add as a skill:\n\n```bash\n# Claude Code\nmkdir -p .claude/skills \u0026\u0026 cd .claude/skills\ngit clone https://github.com/0xNyk/xint.git\n\n# OpenClaw\nmkdir -p skills \u0026\u0026 cd skills\ngit clone https://github.com/0xNyk/xint.git\n```\n\nThen just ask: *\"Search X for what people say about React 19\"* — the agent reads `SKILL.md` and runs the right command.\n\n### MCP Server\n\n```bash\nxint mcp\n```\n\nRuns an MCP server AI agents can connect to.\n\n```bash\n# HTTP/SSE mode (local-only by default)\nxint mcp --sse --port=3000\n\n# Optional: require bearer auth (recommended if binding beyond loopback)\nXINT_MCP_AUTH_TOKEN=change-me xint mcp --sse --host=127.0.0.1\n```\n\nSecurity defaults:\n- SSE mode binds to `127.0.0.1` unless `--host` / `XINT_MCP_HOST` is set.\n- If host is non-loopback, auth is required via `--auth-token` or `XINT_MCP_AUTH_TOKEN`.\n\n## Cost\n\n| Operation | Cost |\n|-----------|------|\n| Tweet read | $0.005/tweet |\n| Full-archive | $0.01/tweet |\n| Write action | $0.01/action |\n\n```bash\nxint costs           # Today's spend\nxint costs week      # Last 7 days\nxint costs budget    # Show/set limits\n```\n\n## Package API Billing\n\n```bash\n# Show workspace plan, limits, and feature gates\nxint billing status\n\n# Show usage units by operation over a window\nxint billing usage --days=30\n```\n\nThese commands read from the local/hosted package API (`XINT_PACKAGE_API_BASE_URL`).\n\nFor hosted billing sync, package API also supports:\n- `POST /v1/billing/webhook` (provider-agnostic event ingest)\n- `GET /v1/billing/events?limit=100` (workspace billing event history)\n\n## Configuration Variables (Local Only)\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `X_BEARER_TOKEN` | Yes | X API v2 bearer token |\n| `XAI_API_KEY` | No | xAI key for analyze/report |\n| `XINT_ARTICLE_TIMEOUT_SEC` | No | Article fetch timeout seconds (default 30, range 5-120) |\n| `X_CLIENT_ID` | No | OAuth for bookmarks/likes/lists/blocks/mutes |\n| `XINT_PACKAGE_API_BASE_URL` | No | Package API base URL for MCP package tools/billing |\n| `XINT_PACKAGE_API_KEY` | No | Legacy single bearer key for package API auth |\n| `XINT_PACKAGE_API_KEYS` | No | JSON map of API keys to `workspace_id` + `plan` |\n| `XINT_PACKAGE_API_PLAN` | No | Default workspace plan (`free\\|pro\\|team\\|enterprise`) |\n| `XINT_WORKSPACE_ID` | No | Workspace id used by local `xint billing *` calls |\n| `XINT_BILLING_WEBHOOK_SECRET` | No | HMAC secret for `/v1/billing/webhook` signature validation |\n| `XINT_BILLING_UPGRADE_URL` | No | Upgrade URL shown in MCP plan/quota errors |\n\n## File Structure\n\n```\nxint/\n├── xint.ts              # CLI entry\n├── lib/                 # Core modules\n│   ├── api.ts          # X API wrapper\n│   ├── oauth.ts        # OAuth 2.0 PKCE\n│   ├── grok.ts         # xAI integration\n│   ├── sentiment.ts    # AI sentiment\n│   ├── watch.ts        # Real-time monitoring\n│   └── format.ts       # Output formatters\n├── data/\n│   ├── cache/          # Search cache (15min TTL)\n│   ├── exports/        # Saved results\n│   └── snapshots/      # Follower snapshots\n├── SKILL.md            # AI agent instructions\n└── .env.example        # Template\n```\n\n## Security\n\n- Tokens from env vars — never hardcoded\n- OAuth tokens stored with `chmod 600`\n- Webhooks: use trusted endpoints only\n- Review agent session logs in untrusted environments\n\nSee [SECURITY.md](docs/security.md) for full details.\n\n## Contributing\n\nOpen source! See [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## Release Automation\n\n`xint` is the source of truth for release automation across `xint` and `xint-rs`.\n\n```bash\n# from xint/\n./scripts/release.sh --dry-run --allow-dirty\n./scripts/release.sh 2026.2.18.4 --allow-dirty\n# disable default ClawdHub publish for one run\n./scripts/release.sh 2026.2.18.4 --no-clawdhub\n# enable skills.sh as well\n./scripts/release.sh 2026.2.18.4 --skillsh\n# disable GitHub auto-generated notes if you want manual sections only\n./scripts/release.sh 2026.2.18.4 --no-auto-notes\n# write release report to a custom location\n./scripts/release.sh 2026.2.18.4 --report-dir /tmp/xint-release-reports\n```\n\nOptional path overrides:\n\n- `REPO_PATH_XINT` (defaults to current repo when running inside `xint`)\n- `REPO_PATH_XINT_RS` (defaults to sibling `../xint-rs` when present)\n- `RELEASE_REPORT_DIR` (defaults to `xint/reports/releases`)\n\nNotes behavior:\n\n- Default: uses `gh release create --generate-notes`\n- Manual override: set any of `CHANGELOG_ADDED`, `CHANGELOG_CHANGED`, `CHANGELOG_FIXED`, `CHANGELOG_SECURITY`\n- Default: publishes to ClawdHub when `clawdhub` CLI is available (disable with `--no-clawdhub`)\n- Optional: publish to skills.sh with `--skillsh` (or `--ai-skill` for both)\n\nRelease report:\n\n- Default: writes `reports/releases/\u003cversion\u003e.md`\n- Contains per-repo commit list, commit range, file changes, SHAs, compare links, and release URLs\n- Uploaded automatically to both GitHub releases as an asset (can disable with `--no-report-asset`)\n- Embedded automatically in both GitHub release bodies (can disable with `--no-report-body`)\n- Disable with `--no-report`\n\n## License\n\n[MIT](LICENSE) · [0xNyk](https://github.com/0xNyk)\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://star-history.com/#0xNyk/xint\u0026Date\"\u003e\n    \u003cimg src=\"https://api.star-history.com/svg?repos=0xNyk/xint\u0026type=Date\" alt=\"Star History\" width=\"400\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0xnyk%2Fxint","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F0xnyk%2Fxint","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0xnyk%2Fxint/lists"}