mcpbeat Sign in

Test Ecs Core Agent Skill

Test ECS core functionality (system registration, components, Transform sync, pause/step/resume, system toggle, entity discovery, snapshots) against the poke example using the iwsdk CLI.

3k tokens
context cost
the whole folder, loaded on every use
1
files
instructions only
0
copies elsewhere
how many repositories repackaged it
361
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/facebook/immersive-web-sdk --skill test-ecs-core

What it tells the agent to use

found in the instruction text
Bash runs shell commands — read the instruction before connecting

The instruction itself

22 sections, as written by the author

ECS Core Test

Run 8 test suites covering ECS system registration, component schemas, Transform sync, pause/step/resume, system toggle, entity discovery, snapshot/diff, and stability.

Configuration:

  • EXAMPLE_DIR: $IWSDK_REPO_ROOT/examples/poke

Tool calls: every tool call is npx iwsdk <subcommand> [--input-json '<JSON>'] [--timeout <ms>], run from inside the example workspace (cwd $EXAMPLE_DIR). The CLI auto-discovers the IWSDK app root from cwd, so no path tricks are required. Run npx iwsdk mcp inspect from the example to discover available tools and their CLI subcommands.

  • <JSON> is a JSON object string. Omit --input-json if no arguments are needed.
  • Output is JSON on stdout: {ok, workspaceRoot, operation, result}. Parse it to check assertions.
  • Use --timeout 20000 for operations that may take longer (reload, xr enter, screenshot).

IMPORTANT: Run each Bash command one at a time. Parse the JSON output and verify assertions before moving to the next command. Do NOT chain multiple CLI commands together.

IMPORTANT: When the instructions say "wait N seconds", use sleep N as a separate Bash command.


Step 1: Install Dependencies

cd $IWSDK_REPO_ROOT/examples/poke && npm run fresh:install

Wait for this to complete before proceeding.


Step 2: Start Dev Server

Start the dev server as a background task using the Bash tool's run_in_background: true parameter:

cd $IWSDK_REPO_ROOT/examples/poke && npm run dev

IMPORTANT: This command MUST be run with run_in_background: true on the Bash tool — do NOT append & to the command itself.

Once the background task is launched, poll the output for Vite's ready message (up to 60s). You can also run npx iwsdk dev status from the example directory until state.running becomes true. You do not need to extract or manage the port yourself; subsequent commands resolve the active runtime through the CLI automatically.

If the server fails to start within 60 seconds, report FAIL for all suites and skip to Step 5.


Step 3: Verify Connectivity

npx iwsdk ecs systems 2>/dev/null

This must return JSON with a list of systems. If it fails:

  • Check the dev server output for errors
  • Try killing and restarting the server (Step 2)
  • If it still fails, report FAIL for all suites and skip to Step 5

Step 4: Run Test Suites

Pre-test Setup

Run these commands in order:

  • npx iwsdk browser reload --timeout 20000 2>/dev/null

Then: sleep 3

  • npx iwsdk xr enter --timeout 20000 2>/dev/null

Then: sleep 2

  • npx iwsdk browser logs --input-json '{"level":["error","warn"]}' 2>/dev/null

Assert: result should be empty or have no errors/warnings


Suite 1: System Registration

Test 1.1: List All Systems

npx iwsdk ecs systems 2>/dev/null

Assert these framework systems are present with correct priorities:

| System | Priority |

| ------------------- | -------- |

| LocomotionSystem | -5 |

| InputSystem | -4 |

| GrabSystem | -3 |

| TransformSystem | 0 |

| VisibilitySystem | 0 |

| EnvironmentSystem | 0 |

| LevelSystem | 0 |

| AudioSystem | 0 |

| PanelUISystem | -3.8 |

Also verify entity counts:

  • InputSystem: rayInteractables >= 1, pokeInteractables >= 1
  • TransformSystem: transform >= 5
  • LevelSystem: levelEntities >= 4

Suite 2: Component Registration

Test 2.1: List All Components

npx iwsdk ecs components 2>/dev/null

Assert these components are present:

  • Transform with fields: position (Vec3), orientation (Vec4), scale (Vec3), parent (Entity)
  • Visibility with field: isVisible (Boolean, default: true)
  • LevelRoot (no fields — marker)
  • LevelTag with field: id (String)
  • PanelUI with field: config (String); this is the legacy raw-URL adapter
  • AudioSource with fields: src (FilePath), volume (Float32)

Test 2.2: Transform Default Values

From the ecs_list_components output, verify Transform field defaults:

  • position default: [NaN, NaN, NaN]
  • orientation default: [NaN, NaN, NaN, NaN]
  • scale default: [NaN, NaN, NaN]

Suite 3: Transform Sync (ECS <-> Object3D)

Test 3.1: Modify Transform Position

  • Find an entity with LevelTag:
   npx iwsdk ecs find --input-json '{"withComponents":["LevelTag"]}' 2>/dev/null

Pick the first entity's entityIndex.

  • Get the scene hierarchy to find the entity's Object3D UUID:
   npx iwsdk scene runtime-hierarchy --input-json '{"maxDepth":3}' 2>/dev/null

Find the node matching the entity index.

  • Get initial transform:
   npx iwsdk scene transform --input-json '{"uuid":"<UUID>"}' 2>/dev/null
  • Set position via ECS:
   npx iwsdk ecs set-component --input-json '{"entityIndex":<N>,"componentId":"Transform","field":"position","value":"[0, 2, -1]"}' 2>/dev/null
  • Verify Object3D moved:
   npx iwsdk scene transform --input-json '{"uuid":"<UUID>"}' 2>/dev/null

Assert: localPosition matches [0, 2, -1] (within tolerance of 0.01).


Suite 4: ECS Pause / Step / Resume

Test 4.1: Pause

npx iwsdk ecs pause 2>/dev/null

Assert: paused === true, systemCount >= 12

Test 4.2: Step

npx iwsdk ecs step --input-json '{"count":5}' 2>/dev/null

Assert: framesAdvanced === 5

Test 4.3: Resume

npx iwsdk ecs resume 2>/dev/null

Assert: paused === false


Suite 5: System Toggle

Test 5.1: Pause a System

npx iwsdk ecs toggle-system --input-json '{"name":"GrabSystem","paused":true}' 2>/dev/null

Assert: isPaused === true

Test 5.2: Resume a System

npx iwsdk ecs toggle-system --input-json '{"name":"GrabSystem","paused":false}' 2>/dev/null

Assert: isPaused === false


Suite 6: Entity Discovery

Test 6.1: Find by Component

npx iwsdk ecs find --input-json '{"withComponents":["LevelRoot"]}' 2>/dev/null

Assert: exactly 1 entity

npx iwsdk ecs find --input-json '{"withComponents":["Transform"]}' 2>/dev/null

Assert: returns entities (count >= 5)

npx iwsdk ecs find --input-json '{"withComponents":["LevelTag"]}' 2>/dev/null

Assert: returns entities (count >= 4)

Test 6.2: Find by Name Pattern

npx iwsdk ecs find --input-json '{"namePattern":"LevelRoot"}' 2>/dev/null

Assert: matches entity named "LevelRoot"

Test 6.3: Exclude Components

npx iwsdk ecs find --input-json '{"withComponents":["Transform"],"withoutComponents":["LevelTag"]}' 2>/dev/null

Assert: returns only persistent entities (fewer than the full Transform set)


Suite 7: Snapshot & Diff

Test 7.1: Snapshot

npx iwsdk ecs snapshot --input-json '{"label":"baseline"}' 2>/dev/null

Assert: entityCount >= 5, componentCount >= 20

Test 7.2: Modify and Diff

  • Find an entity with LevelTag:
   npx iwsdk ecs find --input-json '{"withComponents":["LevelTag"]}' 2>/dev/null
  • Set its position:
   npx iwsdk ecs set-component --input-json '{"entityIndex":<N>,"componentId":"Transform","field":"position","value":"[1, 1, 1]"}' 2>/dev/null
  • Take second snapshot:
   npx iwsdk ecs snapshot --input-json '{"label":"modified"}' 2>/dev/null
  • Diff:
   npx iwsdk ecs diff --input-json '{"from":"baseline","to":"modified"}' 2>/dev/null

Assert: diff shows Transform.position changed to [1, 1, 1]


Suite 8: Stability

npx iwsdk browser logs --input-json '{"count":30,"level":["error","warn"]}' 2>/dev/null

Assert: No application-level errors or warnings. Pre-existing 404 resource errors from page load are acceptable.


Step 5: Cleanup & Results

Kill the dev server:

cd $IWSDK_REPO_ROOT/examples/poke && npx iwsdk dev down

Output a summary table:

| Suite                    | Result    |
|--------------------------|-----------|
| 1. System Registration   | PASS/FAIL |
| 2. Component Registration| PASS/FAIL |
| 3. Transform Sync        | PASS/FAIL |
| 4. Pause/Step/Resume     | PASS/FAIL |
| 5. System Toggle         | PASS/FAIL |
| 6. Entity Discovery      | PASS/FAIL |
| 7. Snapshot & Diff       | PASS/FAIL |
| 8. Stability             | PASS/FAIL |

If any suite fails, include which assertion failed and actual vs expected values.


Recovery

If at any point a transient error occurs (server crash, WebSocket timeout, connection refused, etc.) that is NOT caused by a source code bug:

  • Stop the dev server: cd $IWSDK_REPO_ROOT/examples/poke && npx iwsdk dev down
  • Restart: re-run Step 2 to start a fresh dev server
  • Re-run the Pre-test Setup (reload, accept session)
  • Retry the failed suite

Only give up after one retry attempt per suite. If the same suite fails twice, mark it FAIL and continue to the next suite.


Known Issues & Workarounds

Transform NaN defaults

Transform fields default to [NaN, NaN, NaN] — by design. NaN sentinel means "don't overwrite existing Object3D value".

UUIDs change on reload

Three.js Object3D UUIDs regenerate on page reload. Always call npx iwsdk scene runtime-hierarchy after reload.

ecs_step timeout

npx iwsdk ecs step has a 5-second timeout per step. If render loop is inactive, steps may fail.

Entity indices change on reload

Never cache entity indices across reloads. Always re-discover via npx iwsdk ecs find.

Console log noise

Some warnings (e.g., TLS self-signed cert) are expected and should be ignored. Only check for application-level errors/warnings.

Other skills for the same job

different authors, same section of the catalogue
Webapp Testing
by anthropics
vendor ×12

Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.

6k tokens scripts
Finishing A Development Branch
by ZhanlinCui
×7

Use when implementation is complete, all tests pass, and you need to decide how to integrate the work - guides completion of development work by presenting structured options for merge, PR, or cleanup

1k tokens
Test Driven Development
by w95
×7

Use when implementing any feature or bugfix, before writing implementation code

2k tokens
Systematic Debugging
by ratacat
×7

Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes

10k tokens scripts
Verification Before Completion
by ZhanlinCui
×6

Use when about to claim work is complete, fixed, or passing, before committing or creating PRs - requires running verification commands and confirming output before making any success claims; evidence before assertions always

1k tokens
Backtest Expert
by BaggaT236
×3

Expert guidance for systematic backtesting of trading strategies. Use when developing, testing, stress-testing, or validating quantitative trading strategies. Covers "beating ideas to death" methodology, parameter robustness testing, slippage modeling, bias prevention, and interpreting backtest results. Applicable when user asks about backtesting, strategy validation, robustness testing, avoiding overfitting, or systematic trading development.

15k tokens scripts
Adaptyv
by christophacham
×3

Cloud laboratory platform for automated protein testing and validation. Use when designing proteins and needing experimental validation including binding assays, expression testing, thermostability measurements, enzyme activity assays, or protein sequence optimization. Also use for submitting experiments via API, tracking experiment status, downloading results, optimizing protein sequences for better expression using computational tools (NetSolP, SoluProt, SolubleMPNN, ESM), or managing protein design workflows with wet-lab validation.

16k tokens
Aeon
by christophacham
×3

This skill should be used for time series machine learning tasks including classification, regression, clustering, forecasting, anomaly detection, segmentation, and similarity search. Use when working with temporal data, sequential patterns, or time-indexed observations requiring specialized algorithms beyond standard ML approaches. Particularly suited for univariate and multivariate time series analysis with scikit-learn compatible APIs.

19k tokens

How to use it

Copy the folder

Take facebook/test-ecs-core from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.

Install what it needs

The instructions reference npx. Without those the skill loads but fails at the first command.