Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Configure a game's Play Games Services achievements and leaderboards with gplay `games`, keyed by the numeric `--application-id`; writes touch the draft only (publishing to players is Console-only). Use when creating or editing achievements or leaderboards, scripting their config in CI, or round-tripping a configuration as JSON.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -12% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 5% | 0% |
| case-03 | ✗→✓ | ▲ Improved | -8% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 45% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 12% | 0% |
gplay games configures a game's Play Games Services resources — achievement and leaderboard configurations, each with the full CRUD set (list / view / create / update / delete). It is an Admin API surface: the developer configures the game. It is not the Play Games Services runtime the game itself calls (sign-in, score submission) — that is out of scope. Shared conventions (auth, output, exit codes, --dry-run/--confirm) are in gplay-cli-usage. The whole namespace is [experimental].
--application-id, not --packageThis is the trap. Play Games resources are keyed by the numeric Play Games application ID (a distinct ID space), not the Android package name. --application-id <numeric-id> is required on list and create; the per-resource commands view / update / delete are addressed by the achievement/leaderboard id alone (no --application-id). The .gplay/config.json package pin does not apply anywhere here.
bashgplay games achievements list --application-id 1234567890 gplay games leaderboards list --application-id 1234567890
The single most important gotcha: every write here edits the draft configuration. The published copy players see is read-only, and the API exposes no publish method — pushing a draft live to players is Play Console-only. So gplay games … create/update stages the change; a human finishes it in the Console. Don't expect a CLI command to make it live.
bashgplay games achievements view <achievementId> --output json # read one gplay games achievements create --application-id 123 \ --name "First Blood" --description "Win your first match" \ --type STANDARD --initial-state REVEALED --point-value 10
--name / --description (localized, under --locale, defaulten-US), --type STANDARD|INCREMENTAL, --initial-state HIDDEN|REVEALED, --point-value, and --steps-to-unlock (INCREMENTAL only).
--from-json <file|-> for a full AchievementConfiguration body — theround-trip of view --output json, and the way to set multiple locales at once. --from-json and the field flags are mutually exclusive.
bashgplay games leaderboards create --application-id 123 \ --name "High Scores" --score-order LARGER_IS_BETTER \ --score-min 0 --score-max 1000000
--name (localized, --locale), --score-orderLARGER_IS_BETTER|SMALLER_IS_BETTER, --score-min / --score-max.
--from-json <file|-> for a full LeaderboardConfiguration — the way toset scoreFormat or multiple locales. Mutually exclusive with the field flags.
update replaces — fetch, edit, resendupdate <id> is a full PUT replace: the body replaces the draft. For a partial edit, read the current config, edit it, and resend it whole:
bashgplay games achievements view <id> --output json > ach.json # edit ach.json … gplay games achievements update <id> --from-json ach.json
The field flags on update send only what they name, so --name alone is fine for a one-field change; reach for the fetch-edit-resend round-trip when you need to preserve a rich body (multiple locales, nested fields).
create / update are routine draft writes — no --confirm. Rehearsewith --dry-run (no HTTP; --output json prints the request body).
delete <id> is irreversible → requires --confirm (missing → exit3); CI=true never auto-confirms.
GPLAY_READONLY refuses every live write (exit 4); --dry-run is exempt.--output json mirrors the API response verbatim (ADR-0003); list paging is--max-results + --page-token (read nextPageToken from the response).
Confirm the current verbs and flags with gplay games --help and gplay games <group> <command> --help — the surface is [experimental] (ADR-0033) and may still evolve.
Other measured skills in the registry, with their headline benchmark lift.