Agent skill

Cardinal Migration

by Argus-Labs in Argus-Labs/world-engine

Migrate a Cardinal game to world-engine v0.18 from v0.16.x (Run(w) systems, explicit Register calls, Entity handles) or from v0.17.x and the retracted v1.0.x (NewTestWorld system tests, pprof…

LGPL-3.0Auto-check passedGame Development

Install Cardinal Migration

skills CLI
$ npx skills add Argus-Labs/world-engine --skill cardinal-migration -a claude-code

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

GitHub CLI
$ gh skill install Argus-Labs/world-engine cardinal-migration --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/Argus-Labs/world-engine.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/cardinal-migration .claude/skills/cardinal-migration && 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
cardinal-migration
GitHub stars
117
Token cost
~2.3k tokens
SKILL.md length
1,101 words
Files
11 (incl. scripts, references)
Skills in repo
3
Repo updated
First seen
Licence
LGPL-3.0

At a glance

Migrate a Cardinal game to world-engine v0.18 from v0.16.x (Run(w) systems, explicit Register calls, Entity handles) or from v0.17.x and the retracted v1.0.x (NewTestWorld system tests, pprof…

  • Works in 5 steps: go get… → Delete Pprof: from WorldOptions… → Run the repo's world sdk generate. The… → …
  • Upgrading world-engine in a game repo
  • SKILL.md covers From v0.17.x or v1.0.x, Before editing, Workflow and Hard rules, plus 1 more section
  • Runs Go scripts from its folder; calls go

What it does

Cardinal Migration is an agent skill from Argus-Labs/world-engine. Migrate a Cardinal game to world-engine v0.18 from v0.16.x (Run(w) systems, explicit Register calls, Entity handles) or from v0.17.x and the retracted v1.0.x (NewTestWorld system tests, pprof removed). Use when upgrading world-engine in a game repo, or when a build fails with errors like undefined: cardinal.BaseSystemState, undefined: cardinal.Ref, want Run(cardinal.World) or unknown field Pprof in struct literal of type cardinal.WorldOptions.

Its SKILL.md is about 2.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 13 other files, including scripts and reference files (for example `agents/openai.yaml`, `references/bootstrap.md` and `references/entities.md`).

It sits in Game Development, covering Game development. It works with Go. The repository describes itself as: Seed of a new world. An onchain game engine, built for devs with ambition. (world/acc). The licence is LGPL-3.0.

When your agent uses it

  • Upgrading world-engine in a game repo
  • A build fails with errors like undefined: cardinal.BaseSystemState
  • Undefined: cardinal.Ref
  • Want Run(cardinal.World)

Example prompts

  • “/cardinal-migration”

Workflow steps

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

  1. go get github.com/argus-labs/world-engine@v0.18.0 && go mod tidy.
  2. Delete Pprof: from WorldOptions literals, and CARDINAL_PPROF from deploy config
  3. Run the repo's world sdk generate. The output must not change.
  4. Port system tests to cardinal.NewTestWorld (bootstrap.md, Testing one system). The
  5. Verify (Done when). Snapshots load both ways, so nothing is wiped.

What it can do on your machine

Read from SKILL.md and the folder at commit 5f0797f. 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

    Ships 2 files in scripts/ (Go), which the agent can run.

    Shell commands in SKILL.md call:

    • go

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

  • Network

    No URLs in SKILL.md.

    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

Cardinal Migration loads about 2.3k tokens when it runs, and up to ~16k if it reads all its reference files. Until then it costs about 119 tokens; SKILL.md has 1,101 words of instructions outside code blocks.

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

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); the scripts in this folder are not scanned.

SKILL.md

The full file from Argus-Labs/world-engine at commit 5f0797f, republished under its LGPL-3.0 licence (© Argus-Labs). 1,101 words, ~2,274 tokens.

Download SKILL.mdSave it as .claude/skills/cardinal-migration/SKILL.md (or your agent's skills folder). This skill also uses 10 other files; get the full folder from GitHub.
name
cardinal-migration
description
Migrate a Cardinal game to world-engine v0.18 from v0.16.x (Run(w) systems, explicit Register* calls, Entity handles) or from v0.17.x and the retracted v1.0.x (NewTestWorld system tests, pprof removed). Use when upgrading world-engine in a game repo, or when a build fails with errors like `undefined: cardinal.BaseSystemState`, `undefined: cardinal.Ref`, `want Run(*cardinal.World)` or `unknown field Pprof in struct literal of type cardinal.WorldOptions`.

Cardinal migration

Port a game to world-engine v0.18.0. v0.17 removed state-struct systems: systems are types with Run(w *cardinal.World), every component, command, event and system event is registered on the world before StartGame, and searches yield cardinal.Entity handles. From v0.17.1, World CLI ships in the world-engine module, and the project's go.mod pins it. v0.18.0 keeps that API, snapshot format and generated code. It adds cardinal.NewTestWorld for system tests and removes the pprof server and the debug StreamPerf RPC.

v1.0.0 and v1.0.1 are retracted. v1.0.1 is v0.17.1 plus the retraction, so migrate a v1.0.1 pin as v0.17.1. Semver sorts it above v0.18.0, so go get must name the version.

Game behavior must not change. Do not merge, split, reorder or redesign systems while migrating. Leave game logic as it is, even where the new API invites a cleanup.

From v0.17.x or v1.0.x

Skip the workflow below. The audit's old-API list is empty except for test reflection.

  1. go get github.com/argus-labs/world-engine@v0.18.0 && go mod tidy.
  2. Delete Pprof: from WorldOptions literals, and CARDINAL_PPROF from deploy config (runtime.md, Telemetry).
  3. Run the repo's world sdk generate. The output must not change.
  4. Port system tests to cardinal.NewTestWorld (bootstrap.md, Testing one system). The audit lists every test that reflects into cardinal.World to run Init systems or enqueue commands. Those are the first to port.
  5. Verify (Done when). Snapshots load both ways, so nothing is wiped.

Before editing

  1. Run go run <skill-dir>/scripts/audit.go <game-root> and keep the output. It reports the pinned versions, a count per old pattern with example locations, stale generated code, and packages that look like Cardinal but do not import it.
  2. Install world (runtime.md, Versions). Run world sdk generate <backend-dir> --no-emit on the untouched code, while go.mod still pins the old release. Its undeclared list names every type an old field used (component.Health (cardinal.Ref)): that is your registration checklist. Any other violation is a wire shape ([]T, map, pointer or interface field). Each must be converted before generation succeeds, and a large count is the biggest job of the migration: see older-versions.md.
  3. Only rewrite packages that import github.com/argus-labs/world-engine/pkg/cardinal. The audit lists look-alike packages (their own BaseSystemState, WithCommand, ...). Leave them alone. If a look-alike imports the game's generated wire code or gen/ proto packages, stop and ask the user: World CLI does not generate code for its types, so the first regenerate deletes what it imports.
  4. Write down the system and plugin registration order per hook from each shard's main.go. You will reproduce it exactly.
  5. Tell the user whether snapshots must be wiped (Hard rules) before anything ships.
  6. With more than a few dozen systems, write codemods (go/ast or go/types) for the mechanical steps instead of editing by hand: system conversion, plugin threading, and per-package test registration. A 224-system game needed six.

Workflow

StepDoRead
1Starting anywhere but v0.16.7 (older, or the v0.16.8/9 interim API): read that section firstreferences/older-versions.md
2go get github.com/argus-labs/world-engine@v0.18.0, add the World CLI tool, go mod tidy, set go 1.27.1references/runtime.md
3Add one register(w *cardinal.World) per shard: every Register* call, then plugins and systems in the recorded orderreferences/bootstrap.md
4Convert each systemreferences/systems.md
5Convert entity, component and search codereferences/entities.md
6Rewire pluginsreferences/plugins.md
7Once go build fails only in wire code, delete stale wire.gen.go files and run the repo's world sdk generatereferences/runtime.md
8go build ./... && go vet ./... until clean, then go vet -tags per audit build constraint. Fix by the error tableseach reference
9Port system tests to cardinal.NewTestWorldreferences/bootstrap.md
10Re-run the audit and world sdk generate --no-emit, then check every item the compiler cannot catchreferences/hazards.md
11Verify (Done when)

Generation cannot run between steps 2 and 7. Once go.mod pins v0.18, discovery type-checks the backend and stops with DISCOVERY FAILED while any system still uses the v0.16 API.

Convert one package at a time. In large games, convert helpers that take a search alias, *cardinal.BaseSystemState or cardinal.Ref[...] before their callers.

Show full SKILL.md (442 more words)Show less

Hard rules

  • Snapshots: v0.17 and v0.18 cannot read snapshots written by v0.16.8 or earlier. The version number did not change, so every boot fails with proto: cannot parse invalid wire-format data and the shard restart-loops. A v0.16.8-or-earlier build reading a newer snapshot restores a wrong world without an error. From those versions, each shard's snapshot must be deleted at deploy, and again before any rollback. v0.16.9, v0.17.x and v1.0.1 snapshots load in v0.18 and back. Tell the user which case applies. Locally, world purge deletes them with the whole local cluster. Never delete remote snapshots yourself.
  • Register everything a system touches. Registration is no longer inferred from fields. A missing registration compiles, then panics on the first tick that reaches it.
  • Keep registration order. Systems in one hook still run in registration order, and same-tick system events depend on it.
  • Store e.ID() (a cardinal.EntityID) in components, commands, maps and system fields, and rebind with w.Entity(id). Never keep a cardinal.Entity across ticks.
  • Pass component and event values, not pointers: e.Set(c), w.Broadcast(ev). Pointers compile and panic.

Done when

  • go build ./... and go vet ./... pass, and go vet -tags <tags> ./... with tags that satisfy each build constraint the audit lists. go build skips test files.
  • scripts/audit.go exits 0: no old API, no hazards, no stale generated code, and no command, event, system event or component used without a Register* call.
  • world sdk generate --no-emit reports nothing blocking, and every ORPHANS entry is either registered or was unused in v0.16 too. --no-emit exits 0 on orphans.
  • Each shard passes cardinal.RunDST(t, register, pre) on several seeds. Each seed fuzzes a random subset of commands, and the seed is fixed per process, so -count repeats it. Run separate processes, for example for i in 1 2 3 4 5; do go test -count=1 -run DST ./shards/<id>/ || break; done. Put commands that unlock deeper paths (a kill, a match start) in pre. From v0.18.0, rerunning the same test with the logged TEST_SEED replays its op schedule and command payloads. The per-test seed mixes in the test name, so keep it. In v0.17.x, TEST_SEED does not reproduce a run that fuzzes any command; keep the failing log's op_weights and stack trace instead.
  • Existing game tests pass, including build-tagged ones (go test -tags <tags> ./...). Tests that built state structs are rewritten as described in bootstrap.md (Tests). System tests use cardinal.NewTestWorld (bootstrap.md, Testing one system). Ported tests keep every scenario and assertion. Where the 1-second step clock changes what a test observes, say so in the summary.
  • Your summary to the user states whether snapshots must be wiped, any hazard from hazards.md that applied, and anything you left unmigrated with the reason.

© Argus-Labs, LGPL-3.0. 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 10 other files (scripts, references) in .agents/skills/cardinal-migration of Argus-Labs/world-engine.

  • SKILL.md
  • agents/openai.yaml
  • references/bootstrap.md
  • references/entities.md
  • references/hazards.md
  • references/older-versions.md
  • references/plugins.md
  • references/runtime.md
  • references/systems.md
  • scripts/audit.go
  • scripts/audit_test.go

Open the folder on GitHubat commit 5f0797f

Compare with similar skills

Cardinal Migration 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.

Cardinal Migration compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Cardinal Migration this skillArgus-Labs/world-engine117—~2.3kAutomated safety check: PassLGPL-3.0
Godot Gdscript Patterns925236118/AlphaAgent10310 repos~5kAutomated safety check: PassMIT
Sprite Genaldegad/sprite-gen2.6k—~4.8kAutomated safety check: PassApache-2.0
2D Map and Scene Generator0x0funky/agent-sprite-forge4.4k—~2.9kAutomated safety check: PassMIT
Fantasy Framework Development Guideqq362946/Fantasy1.4k—~5.8kAutomated safety check: PassCustom licence
Dev StoryDonchitos/Claude-Code-Game-Studios26k—~2.4kAutomated safety check: NotesMIT

Similar skills

  • Godot Gdscript Patterns

    925236118/AlphaAgent

    Master Godot 4 GDScript patterns including signals, scenes, state machines, and optimization.

    103 GitHub starsUsed in 10 repos~5k tokens
    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.8k tokensUpdated today
    Game DevelopmentAuto-check passed
  • 2D Map and Scene Generator

    0x0funky/agent-sprite-forge

    Plans and builds 2D game maps and scenes, from tilemaps and parallax backgrounds to HD-2D plates, with collision checks, a playable HTML preview and Tiled, Godot or LDtk export.

    4.4k GitHub stars~2.9k tokensUpdated 3 days ago
    Game DevelopmentAuto-check passed
  • Development and review guide for the Fantasy C# distributed game server framework: ECS, FTask, routing, service discovery, config and databases.

    1.4k GitHub stars~5.8k tokensUpdated today
    Game DevelopmentAuto-check passed
  • Dev Story

    Donchitos/Claude-Code-Game-Studios

    Implement a story: ADR guidelines, right programmer agent, code plus test.

    26k GitHub stars~2.4k tokensUpdated yesterday
    Game DevelopmentAuto-check: notes
  • Plays an authorized Game Boy or Game Boy Color ROM in one persistent headless Coffee GB session, inspecting frames and keeping an action trace for replay or tests.

    1.2k GitHub stars~1.3k tokensUpdated 8 days ago
    Game DevelopmentAuto-check passed

More from Argus-Labs/world-engine

  • Go Development

    Argus-Labs/world-engine

    Apply Scott's Go engineering conventions when designing, editing, or reviewing Go code.

    117 GitHub stars~893 tokensUpdated today
    Auto-check: notes
  • Go CLI

    Argus-Labs/world-engine

    Design, edit, or review Go command-line tools and terminal interfaces, including Kong commands and Bubble Tea behavior.

    117 GitHub stars~380 tokensUpdated today
    Auto-check passed

Works with

Questions about Cardinal Migration

What does Cardinal Migration do?

Migrate a Cardinal game to world-engine v0.18 from v0.16.x (Run(w) systems, explicit Register calls, Entity handles) or from v0.17.x and the retracted v1.0.x (NewTestWorld system tests, pprof…. Cardinal Migration is an agent skill from Argus-Labs/world-engine.x (NewTestWorld system tests, pprof removed).

When should I use Cardinal Migration?

Cardinal Migration fits situations like: upgrading world-engine in a game repo; A build fails with errors like undefined: cardinal.BaseSystemState; undefined: cardinal.Ref; want Run(cardinal.World).

How do I install Cardinal Migration in Claude Code?

Run `npx skills add Argus-Labs/world-engine --skill cardinal-migration -a claude-code`. Or copy the skill folder (.agents/skills/cardinal-migration in Argus-Labs/world-engine) into .claude/skills/cardinal-migration in your project. Claude Code loads it when a task matches its description.

How do I install Cardinal Migration in Codex?

Run `npx skills add Argus-Labs/world-engine --skill cardinal-migration -a codex`. Or copy the skill folder (.agents/skills/cardinal-migration in Argus-Labs/world-engine) into .agents/skills/cardinal-migration in your project. Codex loads it when a task matches its description.

Can I use Cardinal Migration 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 Argus-Labs/world-engine --skill cardinal-migration -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/cardinal-migration, .gemini/skills/cardinal-migration, .github/skills/cardinal-migration and .opencode/skills/cardinal-migration in your project.

What does Cardinal Migration need to run?

Going by SKILL.md and its folder, Cardinal Migration needs Go for the scripts in its folder and the command-line tools its instructions call (go).

Does Cardinal Migration access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Cardinal Migration 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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Cardinal Migration use?

Cardinal Migration is published under the LGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Cardinal Migration use?

About 2.3k tokens (SKILL.md is roughly 9.1k 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 14k tokens, read only when the agent opens those files.

What are the alternatives to Cardinal Migration?

Skills that share tags, products or a category with Cardinal Migration: Godot Gdscript Patterns (925236118/AlphaAgent, 103 stars), Sprite Gen (aldegad/sprite-gen, 2.6k stars), 2D Map and Scene Generator (0x0funky/agent-sprite-forge, 4.4k stars) and Fantasy Framework Development Guide (qq362946/Fantasy, 1.4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Cardinal Migration?

Argus-Labs (a GitHub organization) maintains it in Argus-Labs/world-engine, which has 117 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 9, 2026.

Source: Argus-Labs/world-engine on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.