Agent skill

trueskill-rank

Domain-agnostic TrueSkill batch ranking via LLM-as-judge. Ranks any list of text items using overlapping subsets dispatched to Codex Spark workers. Swappable rubrics. Use when you need to rank, score, curate, or sort a collection by quality.

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/other/other/trueskill-rank

SKILL.md

TrueSkill Rank

Rank any collection of text items by quality using TrueSkill + LLM-as-judge.

Setup

bash
pip install trueskill
  • Python 3.11+ required
  • agent-mux for parallel dispatch (optional -- falls back to direct OpenAI API if OPENAI_API_KEY is set)
  • Claude Code: copy this skill folder into .claude/skills/trueskill-rank/
  • Codex CLI: append this SKILL.md content to your project's root AGENTS.md

For the full installation walkthrough (prerequisites, verification, API fallback), see references/installation-guide.md.

Staying Updated

This skill ships with an UPDATES.md changelog and UPDATE-GUIDE.md for your AI agent.

After installing, tell your agent: "Check UPDATES.md in the trueskill-rank skill for any new features or changes."

When updating, tell your agent: "Read UPDATE-GUIDE.md and apply the latest changes from UPDATES.md."

Follow UPDATE-GUIDE.md so customized local files are diffed before any overwrite.


Quick Start

bash
PYTHON="python3"
CLI="~/.claude/skills/trueskill-rank/scripts/trueskill-rank.py"

# Full pipeline: prepare + dispatch + aggregate
$PYTHON $CLI run \
  --input items.json \
  --overlap 3 \
  --rubric ~/.claude/skills/trueskill-rank/rubrics/practitioner-signal.md \
  --output results.json

# Or step by step:
$PYTHON $CLI prepare --input items.json --overlap 3 \
  --rubric ~/.claude/skills/trueskill-rank/rubrics/practitioner-signal.md \
  --output-dir /tmp/ts-run/
# Dispatch is handled internally by trueskill-rank.py (no separate script needed)
$PYTHON $CLI aggregate --run-dir /tmp/ts-run/ --output results.json

Cost: each subset of 10 items produces C(10,2)=45 implicit pairwise comparisons. 100 items at overlap 3 = 30 subsets = 30 API calls = 1,350 implicit comparisons.

Decision Tree

Mode Selection

Question Answer Mode
Ranking individual items (messages, posts)? Yes --mode batch (default)
Comparing entities (channels, sources, candidates)? Yes --mode pairwise
Items > 50? Yes --mode batch (far more efficient)
Items < 20, need binary signal? Yes --mode pairwise

Overlap Selection

Overlap When to use Cost
--overlap 2 Quick scan, low stakes, small sets Lowest
--overlap 3 Default. Good balance of speed and confidence Medium
--overlap 4 High-stakes curation, final rankings Highest

Rubric Selection

Rubric Use for
practitioner-signal.md General content quality. 6 criteria led by practitioner signal
signal-serendipity-entropy.md Content curation emphasizing surprise and cross-domain bridges
Custom rubric via --rubric Any domain -- create from example-template.md

Input Format

json
{"items": [{"id": "item_001", "text": "...", "metadata": {...}}, ...]}

Source doesn't matter -- TG messages, HN posts, articles, papers, tweets. The id field is required, text is the content to rank, metadata is optional and passed through to output.

CLI Reference

prepare

Generate subsets and prompt files from input items.

bash
$PYTHON $CLI prepare \
  --input items.json \         # Required. JSON with {"items": [...]}
  --mode batch \               # batch (default) or pairwise
  --overlap 3 \                # 2-4, controls statistical robustness
  --subset-size 10 \           # Items per subset (batch) or matchups per batch (pairwise)
  --rubric rubric.md \         # Required. Scoring criteria file
  --output-dir /tmp/ts-run/ \  # Where to write subsets.json and prompts/
  --seed 42 \                  # Random seed for reproducibility
  --text-cap 1500              # Max chars per item in prompts

Output: subsets.json + prompts/subset-NN.txt (batch) or prompts/batch-NN.txt (pairwise)

aggregate

Parse dispatch results and run TrueSkill rating.

bash
$PYTHON $CLI aggregate \
  --run-dir /tmp/ts-run/ \     # Directory with subsets.json and results/
  --output results.json        # Final rankings JSON

run

Full pipeline: prepare + dispatch + aggregate.

bash
$PYTHON $CLI run \
  --input items.json \
  --overlap 3 \
  --rubric rubric.md \
  --output results.json

Dispatch runs automatically via the built-in dispatch_workers() function. No external scripts required.

Output Format

json
{
  "rankings": [
    {"id": "item_001", "mu": 35.2, "sigma": 2.1, "conservative": 28.9,
     "rank": 1, "appearances": 3, "wins": 8, "losses": 2}
  ],
  "stats": {
    "total_items": 100, "subsets": 30, "results_parsed": 30,
    "parse_errors": 0, "coverage_gaps": 0, "mode": "batch",
    "overlap": 3, "rubric": "practitioner-signal"
  }
}

conservative = mu - 3*sigma. This is the ranking key. Penalizes items with few appearances (high uncertainty).

Dispatch

Built into trueskill-rank.py via dispatch_workers(). No external scripts.

Primary: agent-mux --engine codex --model gpt-5.3-codex-spark --reasoning low --effort low (free via GPT subscription). Resolves agent-mux via AGENT_MUX_PATH env var, then which agent-mux, then relative to skill directory. Runs 6 workers in parallel via concurrent.futures.ThreadPoolExecutor.

Fallback: If agent-mux not found, falls back to direct OpenAI API via urllib.request (stdlib, zero deps). Requires OPENAI_API_KEY env var. Uses gpt-4o-mini. Results written as {"success": true, "response": "..."} JSON.

Creating Custom Rubrics

Copy rubrics/example-template.md and fill in:

markdown
# Rubric Name

## Criteria (ordered by importance)
1. **CRITERION** -- Description
2. **CRITERION** -- Description

## Tiebreaker
How to break ties.

## Context
What kind of content this is for.

3-6 criteria recommended. Order matters -- most important first.


Anti-Patterns

Do NOT Do Instead
Use overlap 2 for high-stakes curation Use overlap 3-4 for reliable rankings
Use pairwise mode for 50+ items Use batch ranking (far more efficient at scale)
Skip the rubric file Always specify a rubric via --rubric
Run without trueskill installed pip install trueskill first
Parse result files manually Use the aggregate subcommand

Error Handling

Problem Solution
trueskill not installed pip install trueskill
agent-mux not found + no OPENAI_API_KEY Install agent-mux or set OPENAI_API_KEY env var
Parse errors in results Check result files in results/ dir, retry failed subsets
Coverage gaps in aggregate output Increase overlap coefficient (--overlap 3 or --overlap 4)
Empty items array error Check input JSON format -- must be {"items": [...]} with at least one item

Bundled Resources Index

Path What When to Load
./SKILL.md Skill runbook (this file) Always
./UPDATES.md Structured changelog for AI agents When checking for new features or updates
./UPDATE-GUIDE.md Instructions for AI agents performing updates When updating this skill
./scripts/trueskill-rank.py Main CLI script -- prepare, dispatch, aggregate Always (execution)
./references/algorithm.md TrueSkill math, N-player mode, convergence, cost scaling When tuning parameters or understanding ranking behavior
./references/prior-runs.md Previous runs with statistics and lessons learned When calibrating overlap, rubrics, or interpreting results
./references/installation-guide.md Detailed install walkthrough for Claude Code and Codex CLI First-time setup or environment repair
./rubrics/practitioner-signal.md General content quality rubric (6 criteria) Default rubric for most ranking tasks
./rubrics/signal-serendipity-entropy.md Curation rubric emphasizing surprise and cross-domain bridges Content discovery and curation
./rubrics/example-template.md Template for creating custom rubrics When creating a new domain-specific rubric

Expand your agent's capabilities with these related and highly-rated skills.

Didn't find tool you were looking for?

Be as detailed as possible for better results