paddleocr
Reads text from scanned pages, photos and PDFs and returns it as structured Markdown or JSON, so you can pull tables, formulas and headers out of a document without retyping them. Covers many languages and works as input for AI tools.
A Claude Code skill that routes X (Twitter) searches to xAI Grok through OpenRouter, with Live Search scoped to the X source.
Claude Code
$ npx -y skills add mikedemarais/grok-skill --agent claude-code
Codex
$ npx skills add mikedemarais/grok-skill -a codex
Cursor
$ npx skills add mikedemarais/grok-skill -a cursor
Gemini CLI
$ npx skills add mikedemarais/grok-skill -a gemini-cli
GitHub Copilot
$ npx skills add mikedemarais/grok-skill -a github-copilot
OpenCode
$ npx skills add mikedemarais/grok-skill -a opencode
Windsurf
$ npx skills add mikedemarais/grok-skill -a windsurf
A Claude Code Skill that routes X/Twitter queries to xAI Grok 4 via OpenRouter with Live Search turned on and scoped to the X source.
--include / --exclude for targeted searches# 1. Set your OpenRouter API key
export OPENROUTER_API_KEY="sk-or-..."
# 2. Run a query (assumes Bun is installed)
bun scripts/grok.ts --q "what's trending on X about AI?"
That's it! The script returns JSON with summary, citations, and usage stats.
Sign up at openrouter.ai and create an API key.
# Set your OpenRouter key
export OPENROUTER_API_KEY="sk-or-..."
# Verify it's set
echo "$OPENROUTER_API_KEY"
# To persist across sessions, add to your shell profile:
echo 'export OPENROUTER_API_KEY="sk-or-..."' >> ~/.zshrc
source ~/.zshrc
# macOS/Linux
brew install bun || curl -fsSL https://bun.sh/install | bash
# Windows
powershell -c "irm bun.sh/install.ps1|iex"
# Clone to Claude Code skills directory
git clone https://github.com/mikedemarais/grok-skill.git ~/.claude/skills/grok-skill
# Make script executable
chmod +x ~/.claude/skills/grok-skill/scripts/grok.ts
# Restart Claude Code to discover the skill
# Minimal query
bun scripts/grok.ts --q "what are people saying about account abstraction on X?"
# One-off (without shell export)
OPENROUTER_API_KEY="sk-or-..." bun scripts/grok.ts --q "latest crypto news"
# Handles + timeframe + filters
bun scripts/grok.ts \
--q "AI developments" \
--include "@OpenAI" "@AnthropicAI" \
--from 2025-11-01 --to 2025-11-07 \
--mode on --min-faves 25 --max 12
# Exclude specific handles
bun scripts/grok.ts \
--q "crypto market sentiment" \
--exclude "@spam_account" \
--max 20
| Flag | Type | Description | Default |
|---|---|---|---|
--q | string | Query text (required) | - |
--mode | on|off|auto | Live Search mode | auto |
--include | @handle... | X handles to include (max 10) | [] |
--exclude | @handle... | X handles to exclude (max 10) | [] |
--from | YYYY-MM-DD | Start date for search | - |
--to | YYYY-MM-DD | End date for search | - |
--max | 1..50 | Max search results | 12 |
--min-faves | integer | Min favorites per tweet (≥ 0) | - |
--min-views | integer | Min views per tweet (≥ 0) | - |
Environment Variables:
OPENROUTER_API_KEY (required) - Your OpenRouter API keyGROK_MODEL (optional) - Override model (default: x-ai/grok-4)Constraints:
--include and --exclude are mutually exclusiveYYYY-MM-DD format{
"query": "AI developments",
"summary": "- **OpenAI releases GPT-5**: Major improvements in reasoning...\n- **Anthropic Claude updates**: New vision capabilities announced...\n- **xAI Grok integration**: Now available via OpenRouter API...",
"citations": [
"https://x.com/OpenAI/status/1234567890",
"https://x.com/AnthropicAI/status/9876543210",
"https://x.com/xai/status/5555555555"
],
"usage": {
"prompt_tokens": 892,
"completion_tokens": 312,
"total_tokens": 1204
},
"model": "x-ai/grok-4"
}
# Error: "Missing env OPENROUTER_API_KEY"
export OPENROUTER_API_KEY="sk-or-..."
The client automatically retries with exponential backoff. If you still hit limits:
--max to make smaller requests--max (try 15-20)--include/--exclude filters--mode on to force Live SearchThis is normal. The script extracts X/Twitter URLs from the summary text as a fallback. Check the citations array for discovered links.
chmod +x scripts/grok.ts
mode: Controls Live Search behavior
auto (default) - Model decides whether to searchon - Forces Live Searchoff - Disables search, uses model knowledge onlyreturn_citations: Always true to get tweet URLs
max_search_results: Capped at 12 by default for cost/latency
sources: Configured for X/Twitter with optional filters:
included_x_handles / excluded_x_handlespost_favorite_count / post_view_count0 - Success2 - Usage/validation error3 - Network/timeout error4 - JSON parse errorTypical token usage per query:
Best practices:
--max ≤ 12 for routine queriesusage field in output--max only when results are sparseContributions welcome! Please:
MIT - see LICENSE
Security Note: Never commit secrets. If you use a local .env file, ensure it's in .gitignore.
Reads text from scanned pages, photos and PDFs and returns it as structured Markdown or JSON, so you can pull tables, formulas and headers out of a document without retyping them. Covers many languages and works as input for AI tools.
Gives your AI assistant a memory that persists across sessions, so it remembers your preferences and earlier work in this repository instead of starting fresh. Search, forget, pause and resume memories with simple commands.
Gives AI agents a library of ready-made skills for scientific work such as metabolic flux analysis, protein experiment design, time series modeling, and analytical method validation, so research tasks need less hand-built code. It works with any agent that supports the open Agent Skills standard.
Gives Claude Code skills, agents, and commands for PostHog analytics, session replay, feature flags, error tracking, and LLM observability. Includes MCP server setup and project access checks.
A Claude Code skill that routes X (Twitter) searches to xAI Grok through OpenRouter, with Live Search scoped to the X source. Install it with the command on its page. It includes grok-skill. Its skills do not fire on their own yet. Free and open source.
Is this plugin yours?
Claim it with GitHubSubmit a pluginPromote it