Swift Actor Persistence
affaan-m/ECC
Thread-safe data persistence in Swift using actors — in-memory cache with file-backed storage, eliminating data races by design.
A skill your agent uses when reading or writing persistent game variables in a @drincs/pixi-vn game — simple flags/counters via storage, custom persisted classes via StoredClassModel, temporary…
$ npx skills add DRincs-Productions/pixi-vn --skill pixi-vn-storage -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install DRincs-Productions/pixi-vn pixi-vn-storage --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/DRincs-Productions/pixi-vn.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/storage .claude/skills/pixi-vn-storage && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "pixi-vn-storage" agent skill from https://github.com/DRincs-Productions/pixi-vn/tree/main/skills/storage into .claude/skills/pixi-vn-storage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pixi-vn-storage", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/DRincs-Productions/pixi-vn/tree/main/skills/storageType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add DRincs-Productions/pixi-vn --skill pixi-vn-storage -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install DRincs-Productions/pixi-vn pixi-vn-storage --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/DRincs-Productions/pixi-vn.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/storage .agents/skills/pixi-vn-storage && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pixi-vn-storage" agent skill from https://github.com/DRincs-Productions/pixi-vn/tree/main/skills/storage into .agents/skills/pixi-vn-storage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pixi-vn-storage", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add DRincs-Productions/pixi-vn --skill pixi-vn-storage -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install DRincs-Productions/pixi-vn pixi-vn-storage --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/DRincs-Productions/pixi-vn.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/storage .cursor/skills/pixi-vn-storage && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "pixi-vn-storage" agent skill from https://github.com/DRincs-Productions/pixi-vn/tree/main/skills/storage into .cursor/skills/pixi-vn-storage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pixi-vn-storage", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/DRincs-Productions/pixi-vn.git --path skills/storage--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add DRincs-Productions/pixi-vn --skill pixi-vn-storage -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install DRincs-Productions/pixi-vn pixi-vn-storage --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/DRincs-Productions/pixi-vn.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/storage .gemini/skills/pixi-vn-storage && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "pixi-vn-storage" agent skill from https://github.com/DRincs-Productions/pixi-vn/tree/main/skills/storage into .gemini/skills/pixi-vn-storage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pixi-vn-storage", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install DRincs-Productions/pixi-vn pixi-vn-storageInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add DRincs-Productions/pixi-vn --skill pixi-vn-storage -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/DRincs-Productions/pixi-vn.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/storage .github/skills/pixi-vn-storage && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "pixi-vn-storage" agent skill from https://github.com/DRincs-Productions/pixi-vn/tree/main/skills/storage into .github/skills/pixi-vn-storage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pixi-vn-storage", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add DRincs-Productions/pixi-vn --skill pixi-vn-storage -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install DRincs-Productions/pixi-vn pixi-vn-storage --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/DRincs-Productions/pixi-vn.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/storage .opencode/skills/pixi-vn-storage && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "pixi-vn-storage" agent skill from https://github.com/DRincs-Productions/pixi-vn/tree/main/skills/storage into .opencode/skills/pixi-vn-storage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pixi-vn-storage", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
pixi-vn-storageA skill your agent uses when reading or writing persistent game variables in a @drincs/pixi-vn game — simple flags/counters via storage, custom persisted classes via StoredClassModel, temporary…
Pixi Vn Storage is an agent skill from DRincs-Productions/pixi-vn. Use when reading or writing persistent game variables in a @drincs/pixi-vn game — simple flags/counters via storage, custom persisted classes via StoredClassModel, temporary (label-scoped) variables, and how any of this survives save/load and history go-back. Load this before writing any storage.set/storage.get/storage.flags.set code or a class that extends StoredClassModel.
Its SKILL.md is about 2.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
The repository describes itself as: Create visual novels with a modern 2D rendering engine and your favorite JavaScript framework.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 01c19cb. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript).
From the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
pixi-vn.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Pixi Vn Storage loads about 2.2k tokens when it runs. Until then it costs about 101 tokens; SKILL.md has 871 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from DRincs-Productions/pixi-vn at commit 01c19cb, republished under its LGPL-2.1 licence (© DRincs-Productions). 871 words, ~2,206 tokens.
.claude/skills/pixi-vn-storage/SKILL.md (or your agent's skills folder).Use this skill whenever a task involves storing game state that must persist across steps and saves: flags ("has the player met Liam?"), counters (gold, affection points), arbitrary objects, or a custom class whose instances need to survive save/load (e.g. a quest-tracking model). It does not cover characters specifically (see the characters skill, which is itself built on top of the pattern described here) or how the history/go-back system is implemented internally (see the history skill).
Official docs (authoritative for terminology and recommended patterns): storage, flags, storage classes, temporary storage, save & load.
import { storage, StoredClassModel } from "@drincs/pixi-vn";(Also available from the narrower @drincs/pixi-vn/storage subpath — see pixi-vn-getting-started for when to prefer that.) storage is a ready-made singleton (StorageManagerInterface) — you never instantiate StorageManager yourself.
storage.set / storage.getSee pixi-vn.com/start/storage.
storage.set("test", "test1");
storage.get("test"); // "test1"
storage.set("Test", "test2"); // keys are case-sensitive, "Test" !== "test"
storage.get("nope"); // undefined
storage.set("variable1", { test: "test", test2: 1 }); // objects/arrays are fine too
storage.set("variable6", null);
storage.set("variable7", undefined); // undefined removes the key entirelyAllowed value types (StorageElementType, from
src/storage/types/StorageElementType.ts): strings, numbers, booleans,
null/undefined, plain objects and arrays of these — no functions, class
instances, or Maps/Sets. For anything richer, use a StoredClassModel (below).
Other storage methods:
storage.remove(key) — deletes a variable.storage.flags.set(key, value: boolean) / storage.flags.get(key) — a
dedicated boolean-flag store (docs), kept
separate from set/get; flags default to false when never set. Keys are
case-sensitive here too. The docs recommend flags over storage.set for
booleans specifically because of save size: internally all active flags are
kept as a single array of names, which is much lighter to serialize than one
storage entry per boolean. A documented pattern is exposing a class boolean
property that's backed by a flag name (a string) instead of a literal
boolean, so the getter/setter transparently reads/writes
storage.flags.get/set.storage.default = { key: value, ... } — sets the starting values used
when the game boots or after storage.clear(); if you later remove() a
key (or it was never set()), reading it falls back to this default instead
of undefined.storage.clear() — wipes all stored variables (used by tests/new-game
flows), after which reads fall back to storage.default.See pixi-vn.com/start/temp-storage.
storage.temp.set(key, value) behaves like storage.set for reads —
storage.get(key) checks temp variables first, then falls back to the
permanent store — but the value is deleted once the label it was set in
closes. It's for scratch state that should reset once the player moves on:
storage.temp.set("counter", counter + 1);
// ... reads still go through storage.get("counter")
storage.temp.remove("counter");Per the docs' own description of the lifecycle: if the label that set the
temp variable calls another label (nested call, e.g. call), the variable
stays accessible from that child label too — it's only deleted once the
originating label itself closes. But if control moves on via jump
(closing the current label and starting a new one instead of nesting into
it), the temp variable is gone immediately, since it belonged to the
now-closed label. Implementation-wise this is tracked as a deadline against
how many labels are open on the call stack at the moment temp.set
runs — see tests/storage.test.ts, setTempVariable & getTempVariable,
where a temp counter set inside a called label keeps incrementing across
narration.continue() steps but is reset once narration.labels.closeCurrent()
/closeAll() unwind the label stack. Don't rely on temp variables for
state that must outlive the label that set it — use storage.set for that.
StoredClassModelSee pixi-vn.com/start/stored-classes.
For a richer object whose instances need to persist (survive save/load) and
whose fields should be individually get/set, extend StoredClassModel
instead of storing a plain object with storage.set. Each instance is
identified by a categoryId (shared by all instances of that class) plus a
per-instance id; properties are read/written with the protected
getStorageProperty/setStorageProperty helpers:
import { StoredClassModel } from "@drincs/pixi-vn";
interface QuestProps {
title: string;
}
class QuestModel extends StoredClassModel implements QuestProps {
constructor(id: string, props: QuestProps) {
super("quest", id); // categoryId, instance id
this.defaultTitle = props.title;
}
readonly defaultTitle: string;
get title(): string {
return this.getStorageProperty<string>("title") ?? this.defaultTitle;
}
set title(value: string) {
this.setStorageProperty("title", value);
}
get completed(): boolean {
return this.getStorageProperty<boolean>("completed") ?? false;
}
set completed(value: boolean) {
this.setStorageProperty("completed", value);
}
}
const findLiam = new QuestModel("find_liam", { title: "Find Liam" });
findLiam.completed = true; // persists under the "quest" categoryThe constructor arg passed in (e.g. props.title) becomes the default, kept
in memory on the instance; setStorageProperty writes an override into
storage that takes priority when reading. Passing undefined to
setStorageProperty removes that property from storage (falling back to the
in-memory default on the next read). This is exactly the pattern
CharacterBaseModel uses for name/surname/age — see the characters
skill (the docs' own example uses a plain category name like "city"; the
library's built-in models happen to fence theirs as "___character___" to
avoid any accidental collision, but that underscore style is just a
convention, not a requirement — a plain string like "quest" or "city"
works the same way).
Do not manually set/read storage keys that collide with the engine's own
bookkeeping. The docs' rule of thumb (storage
docs) is: system
variables use a ___-fenced prefix, so avoid that prefix in your own keys.
The full reserved key list lives in the SYSTEM_RESERVED_STORAGE_KEYS
constant (src/constants.ts) — in practice most entries are plain namespaced
strings without the ___ fence ("dialogue", "dialogue:step_counter",
"choice:options", "input:value", "input:info", "character",
"label:opened", "choices:made", etc.), with "___glue___" being the one
that actually uses the fenced style. Either way, treat every value in that
constant as off-limits for your own storage.set/flag keys, to avoid
confusion when inspecting exported save data.
Building save/load itself (the Game.exportGameState()/restoreGameState() flow, and how to
persist the result) is covered by pixi-vn-saves — you generally don't touch storage directly for
that; every variable set through storage is included automatically. The same is true for
step-by-step rewind: a snapshot of storage is captured at each recorded history step, so storage
variables participate in "go back" too, not just save/load — see pixi-vn-history. storage.clear()
resets variables back to whatever was set via storage.default, which is what tests use to get a
clean slate between scenarios.
pixi-vn-getting-started, pixi-vn-saves, pixi-vn-characters, pixi-vn-history, pixi-vn-narration
© DRincs-Productions, LGPL-2.1. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/storage of DRincs-Productions/pixi-vn.
Open the folder on GitHubat commit 01c19cb
Pixi Vn Storage next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Pixi Vn Storage this skillDRincs-Productions/pixi-vn | 149 | — | ~2.2k | Automated safety check: Pass | LGPL-2.1 | |
| Swift Actor Persistenceaffaan-m/ECC | 277k | 4 repos | ~1.2k | Automated safety check: Pass | MIT | |
| Object Storagesickn33/agentic-awesome-skills | 47k | 2 repos | ~2.6k | Automated safety check: Pass | MIT | |
| Neon Object Storagesickn33/agentic-awesome-skills | 47k | 1 repos | ~2.9k | Automated safety check: Notes | Apache-2.0 | |
| Session Persistruvnet/ruflo | 74k | — | ~415 | Automated safety check: Notes | MIT | |
| Web Storagethedaviddias/Front-End-Checklist | 74k | — | ~506 | Automated safety check: Pass | MIT |
affaan-m/ECC
Thread-safe data persistence in Swift using actors — in-memory cache with file-backed storage, eliminating data races by design.
sickn33/agentic-awesome-skills
Configure object storage with S3, GCS, and MinIO. An agent skill from sickn33/agentic-awesome-skills.
sickn33/agentic-awesome-skills
S3-compatible object storage that branches with your Neon project, so files and the database stay in sync across every branch.
ruvnet/ruflo
Persist and restore agent sessions across conversations with state snapshots
thedaviddias/Front-End-Checklist
A skill your agent uses when reviewing scripts, client components, bundles, or runtime behavior related to Use Web Storage API safely.
asgeirtj/system_prompts_leaks
Locate and read Muse Code's OWN session logs — the current session or a prior one.
DRincs-Productions/pixi-vn
A skill your agent uses when adding, organizing, registering, or loading non-code files (images, audio, video) in a Pixi'VN project — local assets processed by PixiJS AssetPack vs.
DRincs-Productions/pixi-vn
A skill your agent uses when defining visual novel characters for a @drincs/pixi-vn game — creating a character with a name, color, icon and other props, registering it so it can be looked up by id…
DRincs-Productions/pixi-vn
A skill your agent uses when implementing "go back" / "rewind" / step-navigation features in a Pixi'VN game, or when you need to read the player-facing dialogue/choice history (e.g.
DRincs-Productions/pixi-vn
A skill your agent uses when adding a minigame (snake, quiz, puzzle, timing/reaction game, ...) to a Pixi'VN visual novel — the useMinigame lifecycle hook pattern, using PixiJS directly on its own…
DRincs-Productions/pixi-vn
A skill your agent uses when writing or editing Pixi'VN story content — defining labels (scenes) with newLabel, writing dialogue steps, adding player choices with…
DRincs-Productions/pixi-vn
A skill your agent uses when implementing save/load in a Pixi'VN game — Game.exportGameState()/restoreGameState()/jsonToGameState(), what the exported GameState contains, and how to persist it (save…
A skill your agent uses when reading or writing persistent game variables in a @drincs/pixi-vn game — simple flags/counters via storage, custom persisted classes via StoredClassModel, temporary…. Pixi Vn Storage is an agent skill from DRincs-Productions/pixi-vn. Use when reading or writing persistent game variables in a @drincs/pixi-vn game — simple flags/counters via storage, custom persisted classes via StoredClassModel, temporary (label-scoped) variables, and how any of this survives save/load and history go-back.
Pixi Vn Storage fits situations like: writing persistent game variables in a @drincs/pixi-vn game — simple flags/counters via storage; custom persisted classes via StoredClassModel; temporary (label-scoped) variables; how any of this survives save/load and history go-back.
Run `npx skills add DRincs-Productions/pixi-vn --skill pixi-vn-storage -a claude-code`. Or copy the skill folder (skills/storage in DRincs-Productions/pixi-vn) into .claude/skills/pixi-vn-storage in your project. Claude Code loads it when a task matches its description.
Run `npx skills add DRincs-Productions/pixi-vn --skill pixi-vn-storage -a codex`. Or copy the skill folder (skills/storage in DRincs-Productions/pixi-vn) into .agents/skills/pixi-vn-storage in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add DRincs-Productions/pixi-vn --skill pixi-vn-storage -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pixi-vn-storage, .gemini/skills/pixi-vn-storage, .github/skills/pixi-vn-storage and .opencode/skills/pixi-vn-storage in your project.
SKILL.md names no scripts, command-line tools or credentials: Pixi Vn Storage is instructions for the agent only.
SKILL.md names 1 domain. As links in the text: pixi-vn.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Pixi Vn Storage is published under the LGPL-2.1 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.2k tokens (SKILL.md is roughly 8.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Pixi Vn Storage: Swift Actor Persistence (affaan-m/ECC, 277k stars), Object Storage (sickn33/agentic-awesome-skills, 47k stars), Neon Object Storage (sickn33/agentic-awesome-skills, 47k stars) and Session Persist (ruvnet/ruflo, 74k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
DRincs-Productions (a GitHub organization) maintains it in DRincs-Productions/pixi-vn, which has 149 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on October 1, 2026.
Source: DRincs-Productions/pixi-vn on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.