summer-analytics is a skill from the Summer skill library: a guide your AI agent reads when the task matches, so it builds the good version on the first try. Send game events to Summer analytics from the authority or client: fire-and-forget, never blocking gameplay.
When your agent uses it
- Adding analytics, telemetry or event tracking to a Summer game: level completed, coin collected, tutorial funnel
- Deciding what to track on the client versus the authority, and how to name analytics events and properties
- Analytics capture fails with unavailable, capacity_exceeded or analytics_storage_limit_exceeded
Install
summer setup installs every skill for your agent. To add only this one:
claude-code for your agent, such as codex or cursor. See Skills for every option.
The skill
Overview
Summer analytics stores named events, such aslevel_completed or
coin_collected, for the creator to query in Studio. There are two ways in:
Analytics is for looking at your game, never for running it:
- Capture returns immediately.
- Gameplay never waits for capture and never depends on its result.
- Capture is never retried. An
unavailableresult may already have stored the event, and capturing again records a second event.
ok == false and code unavailable, and nothing is stored. Also print each
event while testing, so you can check it in the logs.
Steps
1. Choose a small set of events
Name events after things that happened, in the past tense:match_started, coin_collected, tutorial_step_completed.
- Names:
- 1 to 64 characters, matching
^[A-Za-z][A-Za-z0-9_.:-]{0,63}$. - Case-sensitive, and never starting with
summer..
- 1 to 64 characters, matching
- Never put changing values in names (
coin_7_collected). Put them in properties:{"coin": 7}.- New event names are rate-limited per player and per game per day.
- Known names keep working after that limit.
- Properties are a JSON
Dictionary:- at most 64 scalar values;
- nesting at most 4 deep;
- property names up to 128 bytes;
- one event at most 16 KiB.
- Never send personal data or secrets. Names such as
email,password,phone,address,ip_addressand*_tokenare rejected at any depth, as is anything starting with$summer_.
2. Add a fire-and-forget helper
Authority, inauthority/main.gd:
client/main.gd, the same shape with the client facade:
3. Call it without awaiting
Call_track(...) as a statement and do not await it, so the caller
continues immediately. For example, in the authority’s _collect, after the
coin is applied:
4. Read the results
analytics.summary (hosted, after summer login) returns the
game’s top custom events next to its store page views, launches and play
time; the grow-analytics skill says how to read them. In Studio:
studio.open with target game, params gameId (your game’s id) and
section: "analytics". Events show up after a short delay.
Result codes
Every failure is final: none of them asks you to capture again.
Checklist
- Every capture is a plain
_track(...)call; no gameplay code awaits it. - Event names are fixed strings; values live in properties.
- No personal data, tokens or free-typed player text in properties.
- Authority-decided facts (won, collected, bought) are captured on the authority.
- Under Local Play the game plays normally while captures report
unavailable.
Common mistakes
See also
multiplayer— where the client and the authority runmultiplayer-state— the authority’s Command handlers, where most events happensummer-match-results— results and ratings, which Summer records itself
From a shell
No Summer MCP tools in this session? Run each one as a command; whensummer --version is missing or below 4.0, use npx -y summer-engine@latest in place of summer. Fields are flags in kebab-case (--scene-path res://main.tscn) or one --input '<json>', and summer ops describe <op> prints the exact input. The summer-cli skill has the rest.
Related skills
multiplayer: Start here for Summer multiplayer: how authority, clients, Worlds and Sessions fit, and what comes next.multiplayer-state: Authority-owned state in Summer multiplayer: shared and private State groups, Commands, Events.summer-match-results: End a Summer match: report each player’s win, loss or draw, show results on clients, then close the World.summer-store: Sell Summer items for Sparks in a multiplayer game: shop, checkout, owned items, authority entitlement checks.grow-analytics: Read a creator’s Summer Grow numbers (page views, launches, sessions, play time), compare windows.
Source:
library/skills/summer-analytics/SKILL.md, rendered from summer-engine@4.3.0 on npm.
