name: pp-dice-fm
description: "Every ticket, fan, and pound of revenue from your DICE events — queryable, exportable, and joinable across shows. Trigger phrases: door list for tonight's show, export opted-in fans from DICE, revenue report from DICE events, find repeat buyers on DICE, ticket velocity for my DICE event, sync my DICE data, use dice-fm."
author: "Vinny Pasceri"
license: "Apache-2.0"
argument-hint: "
DICE — Printing Press CLI
Prerequisites: Install the CLI
This skill drives the dice-fm-pp-cli binary. You must verify the CLI is installed before invoking any command from this skill. If it is missing, install it first:
- Install via the Printing Press installer. It defaults binaries to
$HOME/.local/binon macOS/Linux and%LOCALAPPDATA%\Programs\PrintingPress\binon Windows:npx -y @mvanhorn/printing-press-library install dice-fm --cli-only - Verify:
dice-fm-pp-cli --version - Ensure the reported install directory is on
$PATHfor the agent/runtime that will invoke this skill.
If the npx install fails (no Node, offline, etc.), fall back to a direct Go install (requires Go 1.26.3 or newer):
go install github.com/mvanhorn/printing-press-library/library/media-and-entertainment/dice-fm/cmd/dice-fm-pp-cli@latest
If --version reports "command not found" after install, the runtime cannot see the binary directory on $PATH. Do not proceed with skill commands until verification succeeds.
When to Use This CLI
Use this CLI when you need to query your DICE event data programmatically — building door lists before shows, generating financial reports, segmenting fan lists for Mailchimp, or identifying repeat buyers across your event history. It is the right tool for any workflow that requires cross-event aggregation or data that the DICE dashboard cannot combine in one view.
When Not to Use This CLI
Do not activate this CLI for requests that require creating, updating, deleting, publishing, commenting, upvoting, inviting, ordering, sending messages, booking, purchasing, or changing remote state. This printed CLI exposes read-only commands for inspection, export, sync, and analysis.
Unique Capabilities
These capabilities aren't available in any other tool for this API.
Access management
door list— Generate a valid-ticket-holder list for any event, with transferred tickets showing the new holder's name — ready for door access management.Use this before every show to get the definitive 'who can enter' list including all transfers and minus all returns.
dice-fm-pp-cli door list --event RXZlbnQ6MTIzNDU= --json
Financial intelligence
revenue summary— Aggregate gross revenue, Dice fees, and net earnings per event or across a date range — ready for CFO reports.Use this for weekly financial reporting without manually totaling per-event dashboards in a spreadsheet.
dice-fm-pp-cli revenue summary --from 2026-01-01 --jsonvelocity show— Show cumulative ticket sales by day or hour relative to the on-sale date — see whether an event is tracking fast or slow.Use within the first 72 hours after an on-sale to decide whether an event needs promotional push.
dice-fm-pp-cli velocity show --event RXZlbnQ6MTIzNDU= --bucket day --jsonreturns anomalies— Flag events with unusually high refund rates — a pricing or marketing signal that deserves immediate attention.Use after sales close each week to surface events that may have pricing problems before the show date.
dice-fm-pp-cli returns anomalies --threshold 0.08 --agent
Audience intelligence
fans repeat— Find fans who bought tickets to two or more of your events — your most loyal audience, ready for VIP outreach.Use weekly to build re-engagement lists before announcing new events to warm audiences first.
dice-fm-pp-cli fans repeat --min-events 2 --since 2026-01-01 --csvfans optin— Export opted-in fan contacts filtered by city or country — CSV ready for Mailchimp, no dashboard exports needed.Use every Monday to build targeted email lists from the previous week's ticket buyers without touching the Dice dashboard.
dice-fm-pp-cli fans optin --event RXZlbnQ6MTIzNDU= --country GB --city London --csvfans top— Rank ticket buyers by total spend for an event or across all events — your VIP list for comps, upgrades, and sponsor decks.Use before each show to identify high-value fans for VIP treatment, and before sponsor meetings to demonstrate audience quality.
dice-fm-pp-cli fans top --event RXZlbnQ6MTIzNDU= --n 20 --json
Inventory & catalog intelligence
capacity— Roll up sold-vs-capacity headroom across every event from the local store;capacity poolsbreaks one event down by ticket pool (pool-sum vs event total).dice-fm-pp-cli capacity --limit 20 --select event_name,sold,capacity,remaining,pct_soldtier-performance— Rank price tiers by redemptions and each tier's share of total sales from the local store.dice-fm-pp-cli tier-performance --limit 20 --jsonnormalize— Canonicalize free-text ticket-type and venue names into structured axes (parallel, re-runnable, local-only);normalize recommendemits a starter config,normalize statsshows coverage, andnormalize promote-ruleslearns reusable regex rules from manual classifications.dice-fm-pp-cli normalize --tiers --fuzzy
Command Reference
events — Events on your DICE account (scheduling, state, venues, ticket types)
dice-fm-pp-cli events get— Get a single event by IDdice-fm-pp-cli events list— List your events
extras — Extras and add-ons sold with tickets
dice-fm-pp-cli extras— List extras (filter by event)
genres — Event genre types and their child genres
dice-fm-pp-cli genres— List genre types
orders — Ticket purchase orders with financial and geographic data
dice-fm-pp-cli orders— List orders (filter by event)
returns — Ticket returns and refunds
dice-fm-pp-cli returns— List returns (filter by event)
tickets — Sold tickets with holder details, pricing, and claim status
dice-fm-pp-cli tickets— List sold tickets (filter by event)
transfers — Ticket transfers between fans
dice-fm-pp-cli transfers— List ticket transfers (filter by event)
normalize — Canonicalize manually-entered ticket-type and venue names into structured axes (parallel and re-runnable; raw synced data is never modified)
dice-fm-pp-cli normalize— Resolve raw names → canonical entities + axes (--tiers,--venues,--all,--entity,--fuzzy,--fuzzy-threshold <float>,--export-unmatched <file>,--export-format prompt|names,--import <file.csv|.json>)dice-fm-pp-cli normalize stats— Show the normalized axis distribution (--entity)dice-fm-pp-cli normalize recommend— Profile the store and emit a starter normalization config (--printpreviews without writing)dice-fm-pp-cli normalize promote-rules— Graduate method=manual classifications into validated regex rules (--entity <type>,--write,--min-support <int>default2)Query the normalized view via
revenue summary --by-axis <access_class|sales_stage|entry_window_type|group_size|comp_flag>. Raw is the default;--by-axisfalls back to raw (with a warning) ifnormalizehas not been run. Normalization is local-only — resolved name mappings never leave your machine.Future:
--classifier-cmd <path>will let you bring your own LLM subprocess for classification; the external command owns its auth and credentials.
capacity — Cross-event sold-vs-capacity headroom from the local store
dice-fm-pp-cli capacity— Sold-vs-capacity headroom rollup across events (--event,--limit)dice-fm-pp-cli capacity pools— Per-ticket-pool allocation breakdown, pool-sum vs event total (--event,--limit)
tier-performance — Price-tier sales analysis from the local store
dice-fm-pp-cli tier-performance— Per price-tier redemptions and each tier's share of total sales (--limit)
Finding the right command
When you know what you want to do but not which command does it, ask the CLI directly:
dice-fm-pp-cli which "<capability in your own words>"
which resolves a natural-language capability query to the best matching command from this CLI's curated feature index. Exit code 0 means at least one match; exit code 2 means no confident match — fall back to --help or use a narrower query.
Recipes
Build tonight's door list
dice-fm-pp-cli door list --event RXZlbnQ6MTIzNDU= --json
Returns valid ticket holders with transfer resolution — who holds valid tickets, with new holder names for any transferred tickets.
Export opted-in London fans for Mailchimp
dice-fm-pp-cli fans optin --event RXZlbnQ6MTIzNDU= --country GB --city London --csv
Filters opted-in buyers from London, outputs CSV with firstName, lastName, email for direct import.
Weekly CFO revenue report
dice-fm-pp-cli revenue summary --from 2026-01-01 --json --select event_name,gross,dice_fees,net,orders_count
Aggregates all orders since January 1, showing gross, Dice fees, and net per event with totals.
Find repeat buyers for new event announcement
dice-fm-pp-cli fans repeat --min-events 2 --since 2026-01-01 --agent
Lists fans who attended 2+ events this year with total spend — warm audience for early access campaigns.
Check ticket velocity in first 72 hours
dice-fm-pp-cli velocity show --event RXZlbnQ6MTIzNDU= --bucket hour --json --select hour_offset,cumulative_sold
Shows hourly cumulative ticket sales relative to on-sale time so you can decide if an event needs promotional push.
Cross-event capacity headroom
dice-fm-pp-cli capacity --limit 20 --select event_name,sold,capacity,remaining,pct_sold
Ranks events by how close they are to selling out (sold, capacity, remaining, pct_sold). Add capacity pools --event <id> to break a single event into its ticket pools.
Which price tiers carried the sales mix
dice-fm-pp-cli tier-performance --limit 20 --json
Per price-tier redemptions and each tier's share of total sales — which price points actually moved.
Normalize names, then report by axis
dice-fm-pp-cli normalize --tiers --venues --fuzzy
dice-fm-pp-cli normalize --export-unmatched unmatched.json
# classify externally, then import the result as method=manual
dice-fm-pp-cli normalize --import classified.json
dice-fm-pp-cli normalize promote-rules --entity ticket_type --write
dice-fm-pp-cli normalize --tiers --venues --fuzzy
dice-fm-pp-cli revenue summary --from 2026-01-01 --by-axis access_class --json
Canonicalizes free-text ticket-type and venue names into structured axes (parallel and local-only; raw data untouched), then groups a revenue report on a clean axis. Run normalize recommend --print first to preview a starter config; after importing manual classifications, normalize promote-rules --entity <type> --write promotes repeat tokens into deterministic regex rules.
Via the MCP server
After installing dice-fm-pp-mcp (see MCP Server Installation below), call tools by name — CLI command paths map to tool names with spaces/hyphens as underscores, and flags become arguments:
orders_listwith{ "event": "<id>" }— a show's orderscapacitywith{ "limit": 20 }— capacity headroom across eventstier_performancewith{ "limit": 20 }— price-tier sales mixnormalize_statswith{ "entity": "ticket_type" }— normalized coverage by axis
These (plus the eight typed *_list / events_get resource tools) are read-only. normalize writes the local store, and normalize_promote_rules is a write tool when writing promoted rules, so call them from the CLI or invoke them deliberately. Custom SQL is out of scope here.
Personal data is pseudonymized by default. Tools that can return fan/holder PII — tickets_list, orders_list, returns_list, transfers_list, extras_list, search, sql, and the mirrored fans_top / fans_profile / fans_optin / fans_repeat / fans_segment / door_list — replace buyer/holder email, phone, and name with a stable fan_ref token (e.g. fan:1a2b3c4d5e6f708192) and omit dob. The token is deterministic per fan, so you can dedup/correlate the same person across calls without raw identifiers entering the model context. Pass include_pii: true on any of these to get raw values plus the token. The plain CLI is unaffected — it always emits raw output to the operator's terminal. sql redaction is best-effort (known PII columns + nested JSON data cells); a column alias or computed expression can slip past it, so prefer the typed tools or search when you need a guarantee.
Auth Setup
Requires a Bearer token from MIO (DICE.FM AMP). Set DICE_FM_TOKEN in your environment. All commands are read-only — no writes to the DICE platform.
Run dice-fm-pp-cli doctor to verify setup.
Agent Mode
Add --agent to any command. Expands to: --json --compact --no-input --no-color --yes.
Pipeable — JSON on stdout, errors on stderr
Filterable —
--selectkeeps a subset of fields. Dotted paths descend into nested structures; arrays traverse element-wise. Critical for keeping context small on verbose APIs:dice-fm-pp-cli events list --agent --select id,name,statusPreviewable —
--dry-runshows the request without sendingOffline-friendly — sync/search commands can use the local SQLite store when available
Non-interactive — never prompts, every input is a flag
Read-only — do not use this CLI for create, update, delete, publish, comment, upvote, invite, order, send, or other mutating requests
Response envelope
Commands that read from the local store or the API wrap output in a provenance envelope:
{
"meta": {"source": "live" | "local", "synced_at": "...", "reason": "..."},
"results": <data>
}
Parse .results for data and .meta.source to know whether it's live or local. A human-readable N results (live) summary is printed to stderr only when stdout is a terminal AND no machine-format flag (--json, --csv, --compact, --quiet, --plain, --select) is set — piped/agent consumers and explicit-format runs get pure JSON on stdout.
Agent Feedback
When you (or the agent) notice something off about this CLI, record it:
dice-fm-pp-cli feedback "the --since flag is inclusive but docs say exclusive"
dice-fm-pp-cli feedback --stdin < notes.txt
dice-fm-pp-cli feedback list --json --limit 10
Entries are stored locally at ~/.dice-fm-pp-cli/feedback.jsonl. They are never POSTed unless DICE_FM_FEEDBACK_ENDPOINT is set (must be https://) AND either --send is passed or DICE_FM_FEEDBACK_AUTO_SEND=true. Default behavior is local-only.
Write what surprised you, not a bug report. Short, specific, one line: that is the part that compounds.
Output Delivery
Every command accepts --deliver <sink>. The output goes to the named sink in addition to (or instead of) stdout, so agents can route command results without hand-piping. Three sinks are supported:
| Sink | Effect |
|---|---|
stdout |
Default; write to stdout only |
file:<path> |
Atomically write output to <path> (tmp + rename; created dirs 0700, file 0600) |
webhook:<url> |
POST the output body to the URL (application/json or application/x-ndjson when --compact) |
Unknown schemes are refused with a structured error naming the supported set. Webhook failures return non-zero and log the URL + HTTP status on stderr.
Webhook delivery is hardened because command output can carry personal data:
- https only — cleartext
http://is refused. - SSRF guard — a host that resolves to a private (RFC-1918), loopback, link-local, or cloud-metadata (
169.254.169.254) address is refused unless you pass--allow-private-webhook(opt-in for a trusted internal endpoint). - Audit — a
delivered N bytes to <host>line is written to stderr on success.
--deliver is blocked on the MCP surface, so an agent cannot use it to exfiltrate output; it is a human/CLI feature.
Named Profiles
A profile is a saved set of flag values, reused across invocations. Use it when a scheduled agent calls the same command every run with the same configuration - HeyGen's "Beacon" pattern.
dice-fm-pp-cli profile save briefing --json
dice-fm-pp-cli --profile briefing events list
dice-fm-pp-cli profile list --json
dice-fm-pp-cli profile show briefing
dice-fm-pp-cli profile delete briefing --yes
Explicit flags always win over profile values; profile values win over defaults. agent-context lists all available profiles under available_profiles so introspecting agents discover them at runtime.
Exit Codes
| Code | Meaning |
|---|---|
| 0 | Success |
| 2 | Usage error (wrong arguments) |
| 3 | Resource not found |
| 4 | Authentication required |
| 5 | API error (upstream issue) |
| 7 | Rate limited (wait and retry) |
| 10 | Config error |
Argument Parsing
Parse $ARGUMENTS:
- Empty,
help, or--help→ showdice-fm-pp-cli --helpoutput - Starts with
install→ ends withmcp→ MCP installation; otherwise → see Prerequisites above - Anything else → Direct Use (execute as CLI command with
--agent)
MCP Server Installation
- Install the MCP server:
go install github.com/mvanhorn/printing-press-library/library/media-and-entertainment/dice-fm/cmd/dice-fm-pp-mcp@latest - Register with Claude Code:
claude mcp add dice-fm-pp-mcp -- dice-fm-pp-mcp - Verify:
claude mcp list
Direct Use
- Check if installed:
which dice-fm-pp-cliIf not found, offer to install (see Prerequisites at the top of this skill). - Match the user query to the best command from the Unique Capabilities and Command Reference above.
- Execute with the
--agentflag:dice-fm-pp-cli <command> [subcommand] [args] --agent - If ambiguous, drill into subcommand help:
dice-fm-pp-cli <command> --help.