@hillerstorm/wcl
v1.1.0
Published
Warcraft Logs CLI — fetch report data, search public logs, and verify sim damage calculations against real combat logs. PKCE auth, disk caching, rate-limit awareness, WoWSims db.json enrichment.
Maintainers
Readme
wcl — Warcraft Logs CLI
A command-line client for the Warcraft Logs GraphQL API with OAuth PKCE auth, disk caching, rate-limit awareness, and optional WoWSims database enrichment. Built for verifying sim damage calculations against real combat logs — but useful for any scripted WCL data access.
Also ships as an agent skill so coding agents (Claude Code, Cursor, etc.) can drive it.
Install
npm install -g @hillerstorm/wclOr from source:
git clone https://github.com/hillerstorm/wcl
cd wcl
npm install
npm run build
npm link # puts `wcl` on your $PATHRequires Node 22+.
Getting started
1. Register an API client at https://www.warcraftlogs.com/api/clients/:
- Name: anything you like
- Redirect URL:
http://localhost:31337/callback - Tick Public Client (the CLI uses PKCE — no client secret involved)
2. Configure:
wcl initInteractive prompt for your client ID and, optionally, per-expansion WoWSims repo paths (used to enrich responses with item/spell data from the sim's db.json — hit Enter to skip any you don't have). Re-run any time; type - at a prompt to clear a value.
3. Authenticate:
wcl authOpens your browser for the OAuth flow and stores tokens locally (0600). Re-run with --reset to start over.
4. Try it:
wcl quota # rate-limit usage
wcl search --encounter "Gruul the Dragonkiller" --class hunter --spec beastmastery
wcl fights <reportCode> --boss # fight list for a report
wcl actors <reportCode> --class hunter # resolve actor IDs
wcl events <reportCode> <fightId> --source "Playername" --summary
wcl player <reportCode> <fightId> "Playername" # full player snapshot
wcl character "Playername" <server-slug> <region> # zone rankingsAll output is JSON (add --pretty for human-readable). Errors go to stderr as JSON with stable code values and exit codes.
Commands
| Command | Purpose |
|---|---|
| wcl auth [--reset] | OAuth PKCE flow |
| wcl quota | Current rate-limit usage |
| wcl query --file q.graphql [--var k=v] [--var k:=json]… | Raw GraphQL escape hatch |
| wcl report <code> | Report metadata, fights, masterData |
| wcl fights <code> | Compact fight table |
| wcl actors <code> | Actor table with resolved pet owners |
| wcl events <code> <fightId> | Filtered event stream, auto-paginated |
| wcl fight <code> <fightId> | Fight metadata + damage-done table |
| wcl player <code> <fightId> <name> | Player snapshot, casts, damage, buffs |
| wcl cast-snapshot <code> <fightId> <name> | Full state snapshot around a single cast |
| wcl gear <code> <fightId> <name> | Gear/enchants/gems/temp-enchants for a player (boss fights only) |
| wcl search | Public-log discovery via rankings |
| wcl character <name> <server> <region> | Character zone rankings |
| wcl cache stats / wcl cache clear | Cache management |
Run any command with --help for full flags. Global flags: --instance / --expansion select the WCL host (retail, fresh, classic, vanilla, sod) and sim enrichment; --no-cache, --force, --pretty.
Data locations
| | Repo checkout | npm install |
|---|---|---|
| config.json, credentials.json | repo root (gitignored) | ~/.config/wcl/ |
| response cache | <repo>/.cache/ | ~/.cache/wcl/ |
Override with $WCL_CONFIG_DIR, $WCL_CACHE_DIR, $WCL_CLIENT_ID, $WCL_WOWSIMS_ROOT.
Rate limits & caching
WCL grants a points-per-hour quota. Every response carries a rateLimit footer; the CLI refuses new requests above 95% usage unless --force is passed. Report-shaped data is cached on disk for 7 days, searches for 1 hour.
Using as an agent skill
The skill definition lives in skills/wcl/SKILL.md:
npx skills add hillerstorm/wclor symlink skills/wcl into your agent's skills directory (e.g. ~/.claude/skills/wcl). The skill expects the wcl binary on $PATH — install it via npm or from source as above.
Development
npm run dev -- quota # run from TypeScript source (tsx)
npm test # vitest
npm run typecheck # tsc --noEmit
npm run build # esbuild bundle → dist/cli.jsAttribution & terms
Data comes from Warcraft Logs, fetched through the official v2 GraphQL API. This is an unofficial tool — not affiliated with, sponsored, or endorsed by RPGLogs / Archon.
Your use of the API is subject to the RPGLogs API Terms of Service. In particular: every user registers their own API client (wcl init — no developer credentials ship with this project, and yours should stay out of any fork you publish), and commercial use of API data requires prior approval from RPGLogs.
