Fetch trending programming models from OpenRouter rankings. Use when selecting models for multi-model review, updating model recommendations, or researching current AI coding trends. Provides model IDs, context windows, pricing, and usage statistics from the most recent week.
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Um comando direto ignora o prompt de revisão. Verifique a origem antes de executá-lo.
Fetch trending programming models from OpenRouter rankings. Use when selecting models for multi-model review, updating model recommendations, or researching current AI coding trends. Provides model IDs, context windows, pricing, and usage statistics from the most recent week.
OpenRouter Trending Models Skill
Overview
This skill provides access to current trending programming models from OpenRouter's public rankings. It executes a Bun script that fetches, parses, and structures data about the top 9 most-used AI models for programming tasks.
Update Frequency: Weekly (OpenRouter updates rankings every week)
When to Use This Skill
Use this skill when you need to:
Select models for multi-model review
Plan reviewer needs current trending models
User asks "which models should I use for review?"
Updating model recommendations in agent workflows
Research AI coding trends
Developer wants to know most popular coding models
Comparing model capabilities (context, pricing, usage)
Identifying "best value" models for specific tasks
Update plugin documentation
Refreshing model lists in README files
Keeping agent prompts current with trending models
Documentation maintenance workflows
Cost optimization
Finding cheapest models with sufficient context
Comparing pricing across trending models
Budget planning for AI-assisted development
Model recommendations
User asks "what's the best model for X?"
Providing data-driven suggestions vs hardcoded lists
Offering alternatives based on requirements
Quick Start
Running the Script
Basic Usage:
bun run scripts/get-trending-models.ts
Output to File:
bun run scripts/get-trending-models.ts > trending-models.json
Pretty Print:
bun run scripts/get-trending-models.ts | jq '.'
Help:
bun run scripts/get-trending-models.ts --help
Expected Output
The script outputs structured JSON to stdout:
{"metadata":{"fetchedAt":"2025-11-14T10:30:00.000Z","weekEnding":"2025-11-10","category":"programming","view":"trending"},"models":[{"rank":1,"id":"x-ai/grok-code-fast-1","name":"Grok Code Fast","tokenUsage":908664328688,"contextLength":131072,"maxCompletionTokens":32768,"pricing":{"prompt":0.0000005,"completion":0.000001,"promptPer1M":0.5,"completionPer1M":1.0}}// ... 8 more models],"summary":{"totalTokens":4500000000000,"topProvider":"x-ai","averageContextLength":98304,"priceRange":{"min":0.5,"max":15.0,"unit":"USD per 1M tokens"}}}
Execution Time
Typical execution: 2-5 seconds
Fetch rankings: ~1 second
Fetch model details: ~1-2 seconds (parallel requests)
Parse and format: <1 second
Output Format
Metadata Object
{
fetchedAt: string; // ISO 8601 timestamp of when data was fetchedweekEnding: string; // YYYY-MM-DD format, end of ranking weekcategory: "programming"; // Fixed categoryview: "trending"; // Fixed view type
}
Models Array (9 items)
Each model contains:
{
rank: number; // 1-9, position in trending listid: string; // OpenRouter model ID (e.g., "x-ai/grok-code-fast-1")name: string; // Human-readable name (e.g., "Grok Code Fast")tokenUsage: number; // Total tokens used last weekcontextLength: number; // Maximum input tokensmaxCompletionTokens: number; // Maximum output tokenspricing: {
prompt: number; // Per-token input cost (USD)completion: number; // Per-token output cost (USD)promptPer1M: number; // Input cost per 1M tokens (USD)completionPer1M: number; // Output cost per 1M tokens (USD)
}
}
Summary Object
{
totalTokens: number; // Sum of token usage across top 9 modelstopProvider: string; // Most represented provider (e.g., "x-ai")averageContextLength: number; // Average context window sizepriceRange: {
min: number; // Lowest prompt price per 1M tokensmax: number; // Highest prompt price per 1M tokensunit: "USD per 1M tokens";
}
}
Integration Examples
Example 1: Dynamic Model Selection in Agent
Scenario: Plan reviewer needs current trending models for multi-model review
# In plan-reviewer agent workflow
STEP 1: Fetch trending models
- Execute: Bash("bun run scripts/get-trending-models.ts > /tmp/trending-models.json")
- Read: /tmp/trending-models.json
STEP 2: Parse and present to user
- Extract top 3-5 models from models array
- Display with context and pricing info
- Let user select preferred model(s)
STEP 3: Use selected model for review
- Pass model ID to Claudish proxy
Implementation:
// Agent reads outputconst data = JSON.parse(bashOutput);
// Extract top 5 modelsconst topModels = data.models.slice(0, 5);
// Present to userconst modelList = topModels.map((m, i) =>`${i + 1}. **${m.name}** (\`${m.id}\`)
- Context: ${m.contextLength.toLocaleString()} tokens
- Pricing: $${m.pricing.promptPer1M}/1M input
- Usage: ${(m.tokenUsage / 1e9).toFixed(1)}B tokens last week`
).join('\n\n');
// Ask user to selectconst userChoice = awaitAskUserQuestion(`Select model for review:\n\n${modelList}`);
Example 2: Find Best Value Models
Scenario: User wants high-context models at lowest cost
# Fetch models and filter with jq
bun run scripts/get-trending-models.ts | jq '
.models
| map(select(.contextLength > 100000))
| sort_by(.pricing.promptPer1M)
| .[:3]
| .[] | {
name,
id,
contextLength,
price: .pricing.promptPer1M
}
'
Symptom: Models seem outdated compared to OpenRouter site
Check data age:
jq '.metadata.fetchedAt' trending-models.json
# Compare with current date
Solutions:
Re-run script:
bun run scripts/get-trending-models.ts > trending-models.json
Set up weekly refresh:
Add to cron: 0 0 * * 1 cd /path/to/repo && bun run scripts/get-trending-models.ts > skills/openrouter-trending-models/trending-models.json
Or use GitHub Actions (see Automation section)
Add staleness check in agents:
const data = JSON.parse(readFile("trending-models.json"));
const fetchedDate = newDate(data.metadata.fetchedAt);
const daysSinceUpdate = (Date.now() - fetchedDate.getTime()) / (1000 * 60 * 60 * 24);
if (daysSinceUpdate > 7) {
console.warn("Data is over 7 days old, consider refreshing");
}
Best Practices
Data Freshness
Recommended Update Schedule:
Weekly: Ideal (matches OpenRouter update cycle)
Bi-weekly: Acceptable for stable periods
Monthly: Minimum for production use
Staleness Guidelines:
0-7 days: Fresh (green)
8-14 days: Slightly stale (yellow)
15-30 days: Stale (orange)
30+ days: Very stale (red)
Caching Strategy
When to cache:
Multiple agents need same data
Frequent model selection workflows
Avoiding rate limits
How to cache:
Run script once: bun run scripts/get-trending-models.ts > trending-models.json
Commit to repository (under skills/openrouter-trending-models/)
Agents read from file instead of re-running script
Refresh weekly via manual run or automation
Cache invalidation:
# Check if cache is stale (> 7 days)if [ $(find trending-models.json -mtime +7) ]; thenecho"Cache is stale, refreshing..."
bun run scripts/get-trending-models.ts > trending-models.json
fi
Error Handling in Agents
Graceful degradation pattern:
1. Try to fetch fresh data
- Run: bun run scripts/get-trending-models.ts
- If succeeds: Use fresh data
- If fails: Continue to step 2
2. Try cached data
- Check if trending-models.json exists
- Check if < 14 days old
- If valid: Use cached data
- If not: Continue to step 3
3. Fallback to hardcoded models
- Use known good models from agent prompt
- Warn user data may be outdated
- Suggest manual refresh
Integration Patterns
Pattern 1: On-Demand (Fresh Data)
# Run before each use
bun run scripts/get-trending-models.ts > /tmp/models.json
# Read from /tmp/models.json
Pattern 2: Cached (Fast Access)
# Check cache age first
CACHE_FILE="skills/openrouter-trending-models/trending-models.json"if [ ! -f "$CACHE_FILE" ] || [ $(find "$CACHE_FILE" -mtime +7) ]; then
bun run scripts/get-trending-models.ts > "$CACHE_FILE"fi# Read from cache
Pattern 3: Background Refresh (Non-Blocking)
# Start refresh in background (don't wait)
bun run scripts/get-trending-models.ts > trending-models.json &
# Continue with workflow# Use cached data if available# Fresh data will be ready for next run
Changelog
v1.0.0 (2025-11-14)
Initial release
Fetch top 9 trending programming models from OpenRouter
Parse RSC streaming format
Include context length, pricing, and token usage
Zero dependencies (Bun built-in APIs only)
Comprehensive error handling
Summary statistics (total tokens, top provider, price range)