Agent skill

Loading Assets

by autonomous-ai in autonomous-ai/openharness

A skill your agent uses when loading assets in Phaser 4. An agent skill from autonomous-ai/openharness.

MITAuto-check passedGame Development

Install Loading Assets

skills CLI
$ npx skills add autonomous-ai/openharness --skill loading-assets -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install autonomous-ai/openharness loading-assets --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/autonomous-ai/openharness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/store/agents/phaser/skills/loading-assets .claude/skills/loading-assets && rm -rf skills-src

Use ~/.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/

Facts

Skill name
loading-assets
GitHub stars
1.1k
Token cost
~4k tokens
SKILL.md length
1,087 words
Files
2 (incl. references)
Skills in repo
100
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when loading assets in Phaser 4. An agent skill from autonomous-ai/openharness.

  • Works in 8 steps: 'start' - Loader begins → 'fileprogress' - Per-file progress… → 'load' - Each file finishes downloading → …
  • Loading assets in Phaser 4
  • SKILL.md covers Quick Start, Core Concepts, Common Patterns and All File Types Reference, plus 3 more sections
  • Reaches other-server.com

What it does

Loading Assets is an agent skill from autonomous-ai/openharness. Use this skill when loading assets in Phaser 4. Covers the Loader plugin, loading images, spritesheets, atlases, audio, JSON, tilemaps, bitmap fonts, and tracking load progress. Triggers on: preload, this.load, asset loading, spritesheet, atlas, load progress.

Its SKILL.md is about 4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/REFERENCE.md`).

It sits in Game Development, covering Sprites and pixel art. The repository describes itself as: The ultimate harness for coding agents and beyond. All your agents. All your machines. One command center. Start with code, then follow your curiosity and build across… The licence is MIT.

When your agent uses it

  • Loading assets in Phaser 4
  • Tasks that involve Sprites and pixel art

Example prompts

  • “/loading-assets”

Workflow steps

8 steps, taken from the first numbered list in SKILL.md.

  1. 'start' - Loader begins
  2. 'fileprogress' - Per-file progress (repeats per file, if available)
  3. 'load' - Each file finishes downloading
  4. 'filecomplete-{type}-{key}' - Specific file processed and cached
  5. 'filecomplete' - Generic per-file completion
  6. 'progress' - Overall progress updated
  7. 'postprocess' - All files done, before cleanup
  8. 'complete' - Everything finished

What it can do on your machine

Read from SKILL.md and the folder at commit 50da5db. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are javascript and json).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • other-server.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Loading Assets loads about 4k tokens when it runs, and up to ~6.5k if it reads all its reference files. Until then it costs about 69 tokens; SKILL.md has 1,087 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~69
When it runs · the whole SKILL.md, loaded when a task matches
~4k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~6.5k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from autonomous-ai/openharness at commit 50da5db, republished under its MIT licence (© autonomous-ai). 1,087 words, ~4,043 tokens.

Download SKILL.mdSave it as .claude/skills/loading-assets/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
loading-assets
description
Use this skill when loading assets in Phaser 4. Covers the Loader plugin, loading images, spritesheets, atlases, audio, JSON, tilemaps, bitmap fonts, and tracking load progress. Triggers on: preload, this.load, asset loading, spritesheet, atlas, load progress.

Loading Assets

The Phaser Loader (this.load) handles fetching all external content: images, audio, JSON, tilemaps, atlases, fonts, scripts, and more. Assets are queued in preload(), loaded in parallel, and placed into global caches accessible by every Scene.

Key source paths: src/loader/LoaderPlugin.js, src/loader/File.js, src/loader/filetypes/, src/loader/events/ Related skills: ../game-setup-and-config/SKILL.md, ../scenes/SKILL.md, ../sprites-and-images/SKILL.md

Quick Start

js
class GameScene extends Phaser.Scene {
    preload() {
        this.load.image('logo', 'assets/logo.png');
    }

    create() {
        this.add.image(400, 300, 'logo');
    }
}

Assets loaded in preload() are guaranteed to be ready when create() runs. The Loader starts automatically during the preload phase.

Core Concepts

The Preload Pattern

Every Scene can define a preload() method. The Loader automatically starts when preload() completes and waits for all queued files to finish before calling create().

js
preload() {
    // Queue files - they don't load immediately
    this.load.image('sky', 'assets/sky.png');
    this.load.spritesheet('dude', 'assets/dude.png', { frameWidth: 32, frameHeight: 48 });
    this.load.audio('jump', 'assets/jump.mp3');
}

create() {
    // All assets above are now available
    this.add.image(400, 300, 'sky');
    this.add.sprite(100, 450, 'dude');
    this.sound.play('jump');
}
Loading Outside of Preload

If you call this.load methods outside of preload() (for example, in create() or in response to a user action), you must manually start the Loader:

js
create() {
    this.load.image('extra', 'assets/extra.png');
    this.load.once('complete', () => {
        this.add.image(400, 300, 'extra');
    });
    this.load.start();
}
URL Resolution: baseURL, path, and prefix

The final URL for a file is resolved as: baseURL + path + filename. These can be set via the game config or at runtime.

js
preload() {
    // Set base URL (prepended to all relative paths)
    this.load.setBaseURL('https://cdn.example.com/');

    // Set path (prepended after baseURL, before filename)
    this.load.setPath('assets/images/');

    // Set key prefix (prepended to the cache key, not the URL)
    this.load.setPrefix('LEVEL1.');

    // Loads from: https://cdn.example.com/assets/images/hero.png
    // Cached with key: LEVEL1.hero
    this.load.image('hero', 'hero.png');

    // Absolute URLs bypass the path/baseURL
    this.load.image('cloud', 'https://other-server.com/cloud.png');
}

These can also be set in the game config:

js
const config = {
    loader: {
        baseURL: 'https://cdn.example.com/',
        path: 'assets/',
        prefix: '',
        maxParallelDownloads: 32,
        crossOrigin: 'anonymous',
        responseType: '',
        async: true,
        timeout: 0,
        maxRetries: 2,
        imageLoadType: 'XHR' // or 'HTMLImageElement'
    }
};
Global Caches

Assets are stored in global game-level caches, not per-Scene. An image loaded in one Scene is available in every other Scene. Textures go into game.textures (the Texture Manager). Other data goes into game.cache sub-caches (e.g., game.cache.json, game.cache.audio, game.cache.xml).

Load Events

The Loader emits events throughout the loading lifecycle. Use these for progress bars and loading screens.

js
preload() {
    this.load.on('progress', (value) => {
        // value is 0 to 1
        console.log(`Loading: ${Math.round(value * 100)}%`);
    });

    this.load.on('complete', () => {
        console.log('All assets loaded');
    });

    this.load.on('loaderror', (file) => {
        console.warn('Failed to load:', file.key);
    });

    this.load.image('bg', 'assets/bg.png');
}

Common Patterns

Loading Images and Sprite Sheets
js
preload() {
    // Single image
    this.load.image('star', 'assets/star.png');

    // Image with normal map (pass URL array: [texture, normalMap])
    this.load.image('brick', ['assets/brick.png', 'assets/brick_n.png']);

    // Sprite sheet (fixed frame sizes)
    this.load.spritesheet('explosion', 'assets/explosion.png', {
        frameWidth: 64,
        frameHeight: 64,
        startFrame: 0,
        endFrame: 23,
        margin: 0,
        spacing: 0
    });

    // SVG (optionally rasterize at a specific size)
    this.load.svg('logo', 'assets/logo.svg', { width: 400, height: 400 });
}
Loading Audio
js
preload() {
    // Single file
    this.load.audio('bgm', 'assets/music.mp3');

    // Multiple formats for cross-browser support
    this.load.audio('bgm', ['assets/music.ogg', 'assets/music.mp3']);

    // Audio sprite (JSON defines named regions within a single audio file)
    this.load.audioSprite('sfx', 'assets/sfx.json', [
        'assets/sfx.ogg',
        'assets/sfx.mp3'
    ]);
}
Loading JSON and Tilemaps
js
preload() {
    // JSON data (stored in this.cache.json)
    this.load.json('levelData', 'assets/level1.json');

    // JSON with a dataKey to extract a sub-object
    this.load.json('enemies', 'assets/data.json', 'enemies');

    // Tiled tilemap (JSON format exported from Tiled)
    this.load.tilemapTiledJSON('map', 'assets/map.json');

    // CSV tilemap
    this.load.tilemapCSV('csvmap', 'assets/level.csv');

    // Impact tilemap
    this.load.tilemapImpact('impactmap', 'assets/level.js');
}

create() {
    const data = this.cache.json.get('levelData');
    const map = this.make.tilemap({ key: 'map' });
}
Loading Atlases
js
preload() {
    // JSON atlas (e.g., TexturePacker JSON Hash/Array)
    this.load.atlas('sprites', 'assets/sprites.png', 'assets/sprites.json');

    // XML atlas (e.g., Starling/Sparrow format)
    this.load.atlasXML('ui', 'assets/ui.png', 'assets/ui.xml');

    // Multi-atlas (atlas split across multiple textures)
    this.load.multiatlas('world', 'assets/world.json', 'assets/');

    // Unity texture atlas format
    this.load.unityAtlas('chars', 'assets/chars.png', 'assets/chars.txt');

    // Aseprite atlas
    this.load.aseprite('knight', 'assets/knight.png', 'assets/knight.json');
}

create() {
    this.add.sprite(400, 300, 'sprites', 'walk_01');
}
Loading Bitmap Fonts
js
preload() {
    // Requires both a texture and XML/JSON font data file
    this.load.bitmapFont('pixels', 'assets/font.png', 'assets/font.xml');
}

create() {
    this.add.bitmapText(100, 100, 'pixels', 'Hello World', 32);
}
Loading Video
js
preload() {
    // Load a video file. Third arg: noAudio flag (default false)
    this.load.video('intro', 'assets/intro.mp4');

    // Load without audio track
    this.load.video('bg_loop', 'assets/loop.mp4', true);
}
Loading Web Fonts
js
preload() {
    // Load a font file (ttf, otf, woff, woff2)
    this.load.font('myFont', 'assets/myfont.ttf', 'truetype');

    // With optional font face descriptors
    this.load.font('boldFont', 'assets/bold.woff2', 'woff2', {
        weight: 'bold',
        style: 'normal'
    });
}
Loading a Pack File

A pack file is a JSON file that describes multiple assets to load at once. Useful for organizing asset manifests.

js
preload() {
    this.load.pack('pack1', 'assets/pack.json');
}

Pack file format:

json
{
    "section1": {
        "baseURL": "assets/",
        "files": [
            { "type": "image", "key": "bg", "url": "bg.png" },
            { "type": "atlas", "key": "chars", "textureURL": "chars.png", "atlasURL": "chars.json" }
        ]
    }
}
Loading with a Progress Bar
js
preload() {
    const progressBar = this.add.graphics();
    const progressBox = this.add.graphics();
    progressBox.fillStyle(0x222222, 0.8);
    progressBox.fillRect(240, 270, 320, 50);

    this.load.on('progress', (value) => {
        progressBar.clear();
        progressBar.fillStyle(0xffffff, 1);
        progressBar.fillRect(250, 280, 300 * value, 30);
    });

    this.load.on('complete', () => {
        progressBar.destroy();
        progressBox.destroy();
    });

    // Queue your assets
    this.load.image('sky', 'assets/sky.png');
    // ... more assets
}

All File Types Reference

All this.load methods accept positional arguments or a single config object. They also accept an array of config objects to batch-load multiple files of the same type. See references/REFERENCE.md for the complete parameter table.

Textures: image, spritesheet, atlas, atlasXML, multiatlas, unityAtlas, aseprite, svg, htmlTexture, texture (compressed) Audio/Video: audio, audioSprite, video Data: json, xml, text, binary, html, css, glsl Fonts: bitmapFont, font Tilemaps: tilemapTiledJSON, tilemapCSV, tilemapImpact Other: animation, pack, script, scripts, plugin, scenePlugin, sceneFile

Events

All events are emitted on the Loader instance (this.load).

Event StringCallback SignatureDescription
'addfile'(key, type, loader, file)A file was added to the load queue
'start'(loader)Loader has started. Progress is zero
'load'(file)A single file finished loading (before processing/caching)
'fileprogress'(file, percentComplete)Per-file download progress (0-1). Only fires if browser provides lengthComputable
'progress'(value)Overall load progress updated (0-1)
'postprocess'(loader)All files loaded and processed, before internal cleanup
'filecomplete'(key, type, data)Any file finished loading and processing
'filecomplete-{type}-{key}'(key, type, data)Specific file finished (e.g., 'filecomplete-image-hero')
'loaderror'(file)A file failed to load
'complete'(loader, totalComplete, totalFailed)All files in the queue are done
Event Lifecycle Order
  1. 'start' - Loader begins
  2. 'fileprogress' - Per-file progress (repeats per file, if available)
  3. 'load' - Each file finishes downloading
  4. 'filecomplete-{type}-{key}' - Specific file processed and cached
  5. 'filecomplete' - Generic per-file completion
  6. 'progress' - Overall progress updated
  7. 'postprocess' - All files done, before cleanup
  8. 'complete' - Everything finished
Show full SKILL.md (567 more words)Show less

Gotchas and Common Mistakes

Keys must be unique within their type. Loading a second image with the same key as an existing one will log a warning and skip it. Remove the old texture from the Texture Manager first if you need to replace it.

Sprite sheet is not the same as an atlas. Use spritesheet() for fixed-size grids of frames (referenced by index). Use atlas() for packed texture atlases with named frames.

Forgetting this.load.start() outside preload. If you call load methods in create() or later, the Loader does not auto-start. You must call this.load.start() manually.

Path must end with /. If you call this.load.setPath() it will append the slash automatically. If you set this.load.path directly, you must include the trailing slash yourself.

Audio format fallbacks. Always provide multiple audio formats (OGG + MP3 at minimum) for cross-browser support. The Loader picks the first format the browser supports.

Pack files can override baseURL/path/prefix. Each section in a pack file can set its own baseURL, path, and prefix values. These apply only to files within that section and are restored after the section is processed.

File keys include the prefix. If you set this.load.setPrefix('MENU.') and load an image with key 'bg', the actual cache key becomes 'MENU.bg'. You must use that full key when referencing the asset.

The maxRetries property (default: 2) controls how many times the Loader retries a failed file before giving up. This is set per-file at creation time based on this.load.maxRetries. Adjusting it after files are added has no effect on those files.

Image load type. By default images load via XHR (as blobs). Set imageLoadType: 'HTMLImageElement' in the loader config to use <img> tag loading instead, which can help with CORS issues in some environments.

Local file schemes. The Loader recognizes file:// and capacitor:// as local schemes by default (via localSchemes). Files loaded from local schemes skip CORS headers.

Cross-origin. Set crossOrigin: 'anonymous' in the loader config (or via this.load.setCORS('anonymous')) when loading assets from a different domain, especially if those textures will be used with WebGL.

Keys are case-sensitive and scoped per type. 'Player' and 'player' are different keys. An image key 'player' and an audio key 'player' can coexist without conflict.

Duplicate keys are silently ignored. A second this.load.image('bg', ...) call does nothing if 'bg' already exists in the texture cache. Remove the old asset first to replace it.

Scene update() does NOT fire during preload. While assets are loading, update() is paused. However, preupdate, postupdate, and render still fire.

Progress can decrease. If new files are added mid-load (e.g., via filecomplete chaining), the progress value may drop because the total file count increased.

Scene Payload (Load Before Preload)

Load files before preload() runs by defining a pack in the Scene constructor. Useful for loading progress bar assets.

js
class BootScene extends Phaser.Scene {
    constructor() {
        super({
            key: 'BootScene',
            pack: {
                files: [
                    { type: 'image', key: 'bar', url: 'loaderBar.png' }
                ]
            }
        });
    }
    // 'bar' is already available in preload()
}
Adding Files Mid-Load

Use the per-file completion event to chain dependent loads during an active loading session.

js
preload() {
    this.load.json('level1', 'level1.json');
    this.load.on('filecomplete-json-level1', (key, type, data) => {
        this.load.image(data.images);
        this.load.spritesheet(data.spritesheets);
    });
}
Inline Pack Manifests

Pack data can be provided inline instead of from a URL.

js
preload() {
    this.load.pack('manifest', {
        section1: {
            prefix: '',
            path: 'assets/',
            defaultType: 'image',
            files: [
                { type: 'image', key: 'bg', url: 'bg.png' },
                { type: 'spritesheet', key: 'player', url: 'player.png', frameConfig: { frameWidth: 32, frameHeight: 32 } }
            ]
        }
    });
}
Cache System

Loaded assets go into global caches shared across all Scenes. Textures are stored in the Texture Manager (this.textures); other asset types go into typed sub-caches under this.cache.

js
// Access cached data
const json = this.cache.json.get('levelData');
const text = this.cache.text.get('dialogue');

// Check existence
this.cache.json.exists('levelData'); // or .has('levelData')
this.textures.exists('hero');

// Remove assets to free memory
this.textures.remove('hero');
this.cache.audio.remove('bgm');

// Listen for cross-scene texture additions
this.textures.on('addtexture-mapKey', (texture) => {
    // Another scene loaded 'mapKey' — now available here
});

Cache sub-types: this.cache.text, this.cache.json, this.cache.audio, this.cache.binary, this.cache.shader, this.cache.xml. See references/REFERENCE.md for the full Cache API.

Source File Map

See references/REFERENCE.md for the complete source file map and Cache API reference.

Key files: src/loader/LoaderPlugin.js (main Loader), src/loader/File.js (base File class), src/loader/filetypes/ (all file type loaders), src/loader/events/ (event constants).

© autonomous-ai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file (references) in store/agents/phaser/skills/loading-assets of autonomous-ai/openharness.

  • SKILL.md
  • references/REFERENCE.md

Open the folder on GitHubat commit 50da5db

Compare with similar skills

Loading Assets 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.

Loading Assets compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Loading Assets this skillautonomous-ai/openharness1.1k—~4kAutomated safety check: PassMIT
Game Asset Generatorhtdt/godogen7.1k—~2.8kAutomated safety check: PassMIT
Code-Drawn 2D Game Art0x0funky/agent-sprite-forge4.3k—~2.5kAutomated safety check: PassMIT
Sprite Genaldegad/sprite-gen2.6k—~4.5kAutomated safety check: PassApache-2.0
Hatch PethAcKlyc/MyAgents9182 repos~9.5kAutomated safety check: PassApache-2.0
Pixel Artmateaix/mateclaw1.1k5 repos~1.8kAutomated safety check: PassApache-2.0

Similar skills

  • Generates game art from text prompts: PNG images, GLB 3D models, rigged characters, animations and sprites, with background removal.

    7.1k GitHub stars~2.8k tokensUpdated 6 days ago
    Game DevelopmentAuto-check passed
  • Code-Drawn 2D Game Art

    0x0funky/agent-sprite-forge

    Draws 2D game art from code with no image model: pixel sprites, SVG props and icons, rigged characters, FX, autotiles and layouts, only when explicitly asked for.

    4.3k GitHub stars~2.5k tokensUpdated yesterday
    Game DevelopmentAuto-check passed
  • Sprite Gen

    aldegad/sprite-gen

    Generates images and game sprites through GPT or Grok with guided provider choices, separate saved defaults, automatic cleanup and optional curation.

    2.6k GitHub stars~4.5k tokensUpdated today
    Game DevelopmentAuto-check passed
  • Hatch Pet

    hAcKlyc/MyAgents

    Create, repair, validate, visually QA, and package MyAgents/Codex-compatible animated pets and pet spritesheets from character art, generated images, company or prospect brand cues, or visual…

    918 GitHub starsUsed in 2 repos~9.5k tokens
    Game DevelopmentAuto-check passed
  • Pixel Art

    mateaix/mateclaw

    Pixel art w/ era palettes (NES, Game Boy, PICO-8). An agent skill from mateaix/mateclaw.

    1.1k GitHub starsUsed in 5 repos~1.8k tokens
    Game DevelopmentAuto-check passed
  • Petdex

    crafter-station/petdex

    Browse, install, submit, and edit pixel-art pets with the Petdex CLI.

    4.2k GitHub stars~614 tokensUpdated 9 days ago
    Game DevelopmentAuto-check passed

More from autonomous-ai/openharness

All 100 skills in this repo
  • G-code Slicer Tool

    autonomous-ai/openharness

    Slices 3D mesh files into printer-profiled plain G-code through real slicer CLIs, with backend discovery, input inspection, dry runs and static validation.

    1.1k GitHub stars~1.5k tokensUpdated today
    Auto-check passed
  • Home Assistant Automation Builder

    autonomous-ai/openharness

    Turns a home-automation request into standard, testable automations.yaml, run against Home Assistant Core's real triggers and verified with its own trace tool.

    1.1k GitHub stars~1.2k tokensUpdated today
    Auto-check passed
  • Score Music Composer

    autonomous-ai/openharness

    Turns a musical brief into LilyPond concert-pitch music, checked parts for each instrument and a playable practice pack.

    1.1k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • OrcaSlicer 3MF and G-code Workflow

    autonomous-ai/openharness

    Turns an STL and explicit printer and material requirements into compared OrcaSlicer plans, an editable 3MF project, checked G-code and a portable handoff.

    1.1k GitHub stars~1.5k tokensUpdated today
    Auto-check passed
  • Sheets and Docs Report Builder

    autonomous-ai/openharness

    Builds an editable DOCX report, a formula-driven XLSX workbook and a fresh LibreOffice PDF preview from one structured source file, then checks them together.

    1.1k GitHub stars~708 tokensUpdated today
    Auto-check passed
  • Bambu Labs

    autonomous-ai/openharness

    Dry-run, upload, and cautiously initiate local Bambu Lab print jobs from validated plain .gcode, using Bambu LAN FTPS/MQTT handoffs.

    1.1k GitHub starsUsed in 1 repo~2.1k tokens
    Auto-check: warnings

Questions about Loading Assets

What does Loading Assets do?

A skill your agent uses when loading assets in Phaser 4. An agent skill from autonomous-ai/openharness. Loading Assets is an agent skill from autonomous-ai/openharness. Use this skill when loading assets in Phaser 4.

When should I use Loading Assets?

Loading Assets fits situations like: loading assets in Phaser 4; tasks that involve Sprites and pixel art.

How do I install Loading Assets in Claude Code?

Run `npx skills add autonomous-ai/openharness --skill loading-assets -a claude-code`. Or copy the skill folder (store/agents/phaser/skills/loading-assets in autonomous-ai/openharness) into .claude/skills/loading-assets in your project. Claude Code loads it when a task matches its description.

How do I install Loading Assets in Codex?

Run `npx skills add autonomous-ai/openharness --skill loading-assets -a codex`. Or copy the skill folder (store/agents/phaser/skills/loading-assets in autonomous-ai/openharness) into .agents/skills/loading-assets in your project. Codex loads it when a task matches its description.

Can I use Loading Assets in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add autonomous-ai/openharness --skill loading-assets -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/loading-assets, .gemini/skills/loading-assets, .github/skills/loading-assets and .opencode/skills/loading-assets in your project.

What does Loading Assets need to run?

SKILL.md names no scripts, command-line tools or credentials: Loading Assets is instructions for the agent only.

Does Loading Assets access the network?

SKILL.md names 1 domain. In commands or code: other-server.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Loading Assets safe to install?

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.

What licence does Loading Assets use?

Loading Assets is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Loading Assets use?

About 4k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.4k tokens, read only when the agent opens those files.

What are the alternatives to Loading Assets?

Skills that share tags, products or a category with Loading Assets: Game Asset Generator (htdt/godogen, 7.1k stars), Code-Drawn 2D Game Art (0x0funky/agent-sprite-forge, 4.3k stars), Sprite Gen (aldegad/sprite-gen, 2.6k stars) and Hatch Pet (hAcKlyc/MyAgents, 918 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Loading Assets?

autonomous-ai (a GitHub organization) maintains it in autonomous-ai/openharness, which has 1,149 GitHub stars. The repository holds 100 skills in this directory. The repository was last updated on October 8, 2026.

Source: autonomous-ai/openharness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.