Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/phaserjs/phaser/data-managernpx skills add phaserjs/phaser --skill data-managergit clone --depth 1 https://github.com/phaserjs/phaserWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00052 | $0.04217 |
| Opus 5 | $0.00026 | $0.02108 |
| Sonnet 5 | $0.00010 | $0.00843 |
| Haiku 4.5 | $0.00005 | $0.00422 |
Grade A, and why
data-manager scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 407 lines — stays where its author put it; the contents beside it link to each section on GitHub.
DataManager
Phaser's DataManager provides key-value storage with event-driven change tracking. It operates at three levels: per-GameObject (
sprite.setData/getData), per-Scene (this.data), and global (this.registry). Every set/change/remove operation emits events, enabling reactive data binding between game systems without tight coupling.
Key source paths: src/data/DataManager.js, src/data/DataManagerPlugin.js, src/data/events/, src/gameobjects/GameObject.js (setData/getData/incData/toggleData)
Related skills: ../scenes/SKILL.md, ../events-system/SKILL.md
Quick Start
// Per-GameObject data (auto-creates DataManager on first use)
const gem = this.add.sprite(100, 100, 'gem');
gem.setData('value', 50);
gem.setData({ color: 'red', level: 2 });
gem.getData('value'); // 50
gem.getData(['value', 'color']); // [50, 'red']
// Increment / toggle helpers
gem.incData('value', 10); // value is now 60
gem.incData('value', -5); // value is now 55 (negative to decrement)
gem.toggleData('active'); // false -> true (starts from false if unset)
// Scene-level data (this.data is a DataManagerPlugin)
this.data.set('score', 0);
this.data.get('score'); // 0
this.data.values.score += 100; // triggers changedata event
// Global registry (shared across ALL scenes)
this.registry.set('highScore', 9999);
// Any scene can read it:
this.registry.get('highScore'); // 9999
Core Concepts
DataManager (Phaser.Data.DataManager)
The base class that stores key-value pairs in an internal list object. It provides:
set(key, value)-- stores a value; emitssetdata(new key) orchangedata+changedata-{key}(existing key). Accepts an object to set multiple keys at once.get(key)-- retrieves a value, or pass an array of keys to get an array of values.inc(key, amount)-- increments a numeric value (defaults to +1). Creates from 0 if key does not exist.toggle(key)-- flips a boolean value. Creates fromfalseif key does not exist.remove(key)-- deletes a key; emitsremovedata. Accepts an array of keys.has(key)-- returnstrueif the key exists.getAll()-- returns a shallow copy of all key-value pairs as a plain object.query(regex)-- returns all entries whose keys match the given RegExp.each(callback, context, ...args)-- iterates all entries. Callback signature:(parent, key, value, ...args).merge(data, overwrite)-- bulk-imports from an object.overwritedefaults totrue; setfalseto skip existing keys.pop(key)-- retrieves and deletes a key in one call; emitsremovedata.reset()-- clears all data and unfreezes.freeze/setFreeze(bool)-- when frozen, all set/remove/inc/toggle operations silently no-op.count-- read-only property returning the number of stored entries.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago First seen · 407 lines · 52 tokens per session scan A 401f5aacb4cf
data-manager is a skill published in the GitHub repository phaserjs/phaser (40,232 stars, last pushed 11d ago), licensed MIT. It adds 52 tokens to every session and 4,217 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
task-manager
Capture actionable user requests as persistent tasks, update task status as work progresses, and keep a shared task store in sync. Use when a user asks an agent to do work, check progress, block a task, complete a task, or manage the Kanban board.
soundclaw
Control Spotify playback, search music, and return shareable music links.
todo
Maintain a shared workspace TODO list with blocked tasks.
onejs-setup-and-overview
Use this skill whenever the user wants to build or set up user interface in a Unity project using OneJS, React, TypeScript, or JSX, e.g. 'add a main menu to my game', 'build a settings screen', 'make a HUD', 'set up OneJS', 'my OneJS panel is blank', 'the UI is not hot reloading'. Covers confirming OneJS is installed…
task-manager
Capture actionable user requests as persistent tasks, update task status as work progresses, and keep a shared task store in sync. Use when a user asks an agent to do work, check progress, block a task, complete a task, or manage the Kanban board.
photo-sphere-viewer
Use when displaying 360-degree panoramic images (equirectangular/cubemap/dual-fisheye) in web applications, building virtual tours with markers and transitions, embedding interactive panoramas in Vue/React/vanilla JS, or creating 360-degree video players with gyroscope VR support. Photo-Sphere-Viewer v5: JavaScript…