Agent skill

Validate Assets

by LunCoSim in LunCoSim/lunco-sim

Pre-flight a LunCoSim .mo, .usda, .sysml, .kerml, .wgsl, or .rhai asset with ValidateAsset or the production CLI, or inspect one Twin's resolver namespaces with ValidateTwin.

Apache-2.0Auto-check passedBackend & APIs

Install Validate Assets

skills CLI
$ npx skills add LunCoSim/lunco-sim --skill validate-assets -a claude-code

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

GitHub CLI
$ gh skill install LunCoSim/lunco-sim validate-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/LunCoSim/lunco-sim.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/validate-assets .claude/skills/validate-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
validate-assets
GitHub stars
107
Token cost
~5.1k tokens
SKILL.md length
2,384 words
Files
1
Skills in repo
40
Repo updated
First seen
Licence
Apache-2.0

At a glance

Pre-flight a LunCoSim .mo, .usda, .sysml, .kerml, .wgsl, or .rhai asset with ValidateAsset or the production CLI, or inspect one Twin's resolver namespaces with ValidateTwin.

  • Works in 3 steps: usda_to_data — this file's own syntax. → Shared USD recipe preparation — fetches… → WheelParams::read on every prim with…
  • Shader-parameter
  • SKILL.md covers Two invocation forms, The report, What each extension actually… and Source admission and path…, plus 3 more sections
  • Calls curl and kind

What it does

Validate Assets is an agent skill from LunCoSim/lunco-sim. Pre-flight a LunCoSim .mo, .usda, .sysml, .kerml, .wgsl, or .rhai asset with ValidateAsset or the production CLI, or inspect one Twin's resolver namespaces with ValidateTwin. Use for parse, reference, schema, shader-parameter, Modelica, SysML, namespace, or authored-lint checks. These are read-only queries; use RunLint for a loaded scene and test-via-api for runtime behavior.

Its SKILL.md is about 5.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Backend & APIs, covering GraphQL and Linting and formatting. It works with Rust. The repository describes itself as: Collaborative Multiphysics Cosimulator For Space Missions 🌎🚀🌚. The licence is Apache-2.0.

When your agent uses it

  • Shader-parameter
  • Authored-lint checks

Example prompts

  • “/validate-assets”

Workflow steps

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

  1. usda_to_data — this file's own syntax.
  2. Shared USD recipe preparation — fetches the whole layer closure
  3. WheelParams::read on every prim with PhysxVehicleWheelAPI — the **same

What it can do on your machine

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

    Shell commands in SKILL.md call:

    • curl
    • kind

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

  • Network

    No URLs in SKILL.md. Its commands use curl, which can reach the network depending on how they are called.

    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

Validate Assets loads about 5.1k tokens when it runs. Until then it costs about 103 tokens; SKILL.md has 2,384 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~103
When it runs · the whole SKILL.md, loaded when a task matches
~5.1k

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 LunCoSim/lunco-sim at commit d1c6f00, republished under its Apache-2.0 licence (© LunCoSim). 2,384 words, ~5,085 tokens.

Download SKILL.mdSave it as .claude/skills/validate-assets/SKILL.md (or your agent's skills folder).
name
validate-assets
description
Pre-flight a LunCoSim `.mo`, `.usda`, `.sysml`, `.kerml`, `.wgsl`, or `.rhai` asset with `ValidateAsset` or the production CLI, or inspect one Twin's resolver namespaces with `ValidateTwin`. Use for parse, reference, schema, shader-parameter, Modelica, SysML, namespace, or authored-lint checks. These are read-only queries; use `RunLint` for a loaded scene and test-via-api for runtime behavior.

Validate an asset (pre-flight)

ValidateAsset answers one question — does this file parse, and would the engine accept it? — without mounting a scene or starting simulation. Runtime queries prepare fresh source facts asynchronously, then apply the authored lint policy serially in the captured runtime context. Browser preparation uses the cooperative executor; it does not promise a separate CPU worker.

Implementation: crates/lunco-scene-validation/src/validate.rs. Related: author-usd-component (author the file), use-asset-library (get it discovered), build-vehicle (wheels), test-via-api (drive the running app once it validates), and sysml-requirements (Twin source sets and verification cases).

Two invocation forms

CLI — no app, no window, no GPU
bash
"$LUNCOSIM_BIN" --validate \
  assets/models/LunCo/Electrical/Battery.mo \
  assets/vessels/rovers/skid_rover.usda \
  assets/shaders/rover_hull.wgsl \
  requirements/system.sysml

The flag is intercepted in crates/lunco-luncosim/src/bin/luncosim.rs before the Bevy App is built, and the process exits — nothing is rendered, no window opens, no port is bound. Run it anywhere, any time.

For a WGSL file, this pre-flight validates the file's standalone source/schema contract. It cannot decide whether the file is a fragment or vertex stage when it is not referenced by a USD material. That role is authored by the USD Shader prim (info:wgsl:sourceAsset and optional info:wgsl:vertexAsset) and is checked by the production USD/render boundary. Use an authored USD + Rhai scene test for that contract; do not add a Rust test that reads a repository shader path to simulate it.

This ownership rule applies to every asset type: if a test names a shipped or Twin asset, author the fixture and assertion beside the asset as USD/Rhai and observe it through ValidateAsset or the live API. Calling lunco-assets-core/lunco-storage from a Rust test is the correct access path for an asset-owning mechanism, but it does not turn an authored asset contract into a Rust mechanism test. Rust fixtures should be inline or temporary and should test only the generic parser, resolver, or storage behavior.

Exit codeMeaning
0every report ok
1at least one report failed
2--validate given with no paths
  • Multiple paths: everything after --validate up to the first argument starting with --.
  • Exact flag match only — --validate=path and -v are not parsed.
  • Output per file: OK <path> (<kind>) / FAIL <path> (<kind>), then indented error: and warning: lines on stdout.
API — against a running luncosim
bash
curl -s -X POST http://127.0.0.1:4101/api/commands \
  -H "Content-Type: application/json" \
  -d '{"type":"ExecuteCommand","command":"ValidateAsset","params":{"path":"lunco://models/LunCo/Electrical/Battery.mo"}}'

The initial request admits one operation and returns {"state":"pending","operation_id":N}. Poll the same query with only {"operation_id":N} until it returns ready or failed. ready contains report and source_revisions from the actual reads; failed contains its actual diagnostic. Both terminal results are consumed once. Unknown, consumed, or retired operation IDs reject visibly. Never resubmit path while waiting: that would admit a different operation.

bash
curl -s -X POST http://127.0.0.1:4101/api/commands \
  -H 'Content-Type: application/json' \
  -d '{"type":"ExecuteCommand","command":"ValidateAsset","params":{"operation_id":1}}'

Use the returned ID in place of 1. Admission is bounded by the shared AsyncWorkAdmission; running tasks and unconsumed results retain their permit. lunco-scene-validation registers the providers. The CLI remains a native synchronous entry point over the same validators.

The report

json
{"path":"…", "kind":"modelica|usd|sysml|wgsl|rhai|unknown",
 "ok":true, "errors":[], "warnings":[], "info":{}}

Runtime ready.report contains this shape; native CLI reports use it directly.

ok == errors.is_empty(). Warnings never fail a file. path echoes what you passed, not the resolved disk path — if you need to know which file was read, pass an unambiguous one.

Twin-wide namespace pre-flight

Use ValidateTwin when the question spans the complete Twin rather than one file. It reads the indexed Twin folder and compares only names that share a real resolver namespace and scope. The report includes each entry's owner, source, domain, scope, and resolution rule, plus the complete collision group. Equal names in independent Modelica roots, asset directories, or USD stages are not reported.

bash
curl -s -X POST http://127.0.0.1:4101/api/commands \
  -H 'content-type: application/json' \
  -d '{"type":"ExecuteCommand","command":"ValidateTwin","params":{"path":"/work/rover-twin","policy":"error"}}'

path is required: use the current twin://<assigned-authority> for a mounted Twin on either platform; native callers may also supply a directory or standard file URI. Browser native-directory inspection is not available. Poll its returned operation ID using the same protocol as ValidateAsset. policy is optional: warn (the default) makes namespace collisions warnings; error makes those collisions fail the report. Source-read failures fail the prepared report. The query does not rename files or choose a winner. Its Rhai policy is assets/scripting/policy/lint_twin.rhai, so a running session can replace lint.twin for the next explicit check.

For the active Twin in a running scene, use the live command instead:

rhai
cmd("RunLint", #{scope: "twin", policy: "warn"});
query("GetDiagnostics", #{scope: "twin"});

RunLint and ValidateTwin share namespace facts and Rhai policy. Runtime ValidateTwin captures indexed source identity, owner, mount, and policy at admission and rejects publication after retirement or indexed source-set changes. Twin RunLint also uses the shared async preparation owner on native and mounted browser sources. Its queued Ack identifies the lint revision; inspect GetDiagnostics until that scope is ready or failed. Source failures fail the scope independently of collision severity. Captured owner, mount, scene, policy, and Rhai context fence publication; superseded or retired work is discarded. Loaded-stage lint works on either platform.

For a composed document, ValidateAsset is still the file-level gate. Use the live Rhai model_authoring facades for the next question: whether the exact assembly is understandable and ready to use. Call model_context first, then readiness_report with the Twin's explicit policy; use port_graph/ wiring_plan for cross-domain endpoints and publish_component before an explicit Save-As. These facades validate composed document identity and generation and return dry plans; they do not replace ValidateAsset, mutate the stage, or silently save. See the model-authoring guide.

What each extension actually checks

ExtChecksCan it FAIL?
.morumoca parse_to_syntax + AST facts + authored lint.modelica policyyes
.sysml/.kermlSysML parser/resolver + typed requirement/verification facts + authored lint.sysml policyyes
.usd/.usda/.usdcbyte-layer preparation → compose the reference closure → strict WheelParams::read on every PhysxVehicleWheelAPI primyes
.wgslParamSchema::parse — reflect the struct Material uniform + //!@ annotationsno — warnings only
.rhairhai::Engine::new().compile(), nothing executedyes
anything elseunsupported extension erroryes

USD extensions enter the same byte-layer owner. Text layers compose normally. Binary USDC currently fails the dependency inspector's UTF-8/text-layer boundary with a diagnostic; recognizing its extension does not establish binary composition support.

For a Twin source set, use ValidateSysml for source status, diagnostics, and source identity; use AnalyzeSysml when a policy needs typed semantic facts. Manifest bindings are a separate active-Twin contract read and are joined with SysML identities by Rhai policy. See sysml-requirements.

.mo — the branch-free policy is the point

Rumoca's solver path is branch-free. ValidateAsset parses once through the shared lunco-modelica-ast boundary, passes AST-derived declaration and conditional-construct facts to the reloadable lint.modelica Rhai policy, and returns its findings as errors. The policy covers conditional expressions, structural equation branches, and algorithm if/when constructs. An if in a binding or modifier is not an equation/algorithm construct and is not reported.

Fix a reported branch by rewriting the model with branch-free arithmetic such as max()/min(). Battery, network, and brownout equations belong in Modelica, not a tick script.

info carries {model, params, inputs, outputs:null}. outputs is always null — outputs are not knowable before a compile.

Lint boundary: parse failures remain visible as parser errors. Recovered AST facts are best-effort and carry kind = "unknown" when declaration ownership cannot be proven; the policy reports that case as a warning rather than guessing.

.usda — this is the one that catches broken references

Three stages, first failure short-circuits:

  1. usda_to_data — this file's own syntax.
  2. Shared USD recipe preparation — fetches the whole layer closure (subLayers + references + payload, including arcs inside variant blocks). A dangling @lunco://…@ is a hard error here. This is the single best reason to run it: bare paths silently no-load at runtime, but a missing target fails loudly right here.
  3. WheelParams::read on every prim with PhysxVehicleWheelAPI — the same strict reader the spawner uses. The error names every missing attribute: wheel /Rover/Wheel_FL would refuse to spawn — missing required attributes: …

info.wheel_prims lists each wheel with ok and, when failing, missing.

Three things it does not catch: binary leaf references (.glb/.obj/.stl are not layers, so a broken mesh path passes); suspension-inherited wheel attrs — the reader is called with no attachment suspension, so a wheel that only validates once its suspension arc composes at spawn time is judged without it; and collider relationships, which are where many mechanism bugs live. The composed USD lint does catch an unowned renderable vehicle gprim and an enabled collider shape that the runtime reader cannot build.

That remaining limit is worth knowing. The static lint cannot see that two colliders on the same vehicle overlap, or that a strut hangs lower than the foot that is supposed to carry it — facts about assembled motion and contact, not just ownership and shape support. Clearance is a runtime check: run the scene under luncosim test and assert the mechanism moved (see author-usd-physics). A vehicle can pass static validation and still land on its shins.

.wgsl — cannot fail, read the warnings

There is no naga validation — deliberately. A syntactically broken shader that still contains a parsable struct Material reports ok: true. What you get is the reflected param schema (info.shader_params with name/type/offset/ ui/default, plus uniform_size) and two possible warnings:

  • no reflectable Material struct — the shader exposes no tunable params and cannot be driven by SetObjectProperty.
  • not prop-pickable: engine fields beyond sun_vis — it uses //!@engine params only the terrain pipeline fills, so the prop-material picker skips it. It still works as a scene shader. See use-asset-library § Shaders.
Show full SKILL.md (909 more words)Show less

Source admission and path resolution

Runtime logical lunco:// and current twin:// addresses use the registered Bevy asset reader and the shared USD dependency-closure reader. Literal #, %, and Unicode path characters retain their typed asset identity. Native paths and standard file URIs use captured FileDocumentAdmission and bounded storage reads on the preparation task, then validate exact ownership before publication. A raw native path is checked as given before native engine-root resolution; prefer a root-qualified logical address to avoid CWD ambiguity.

Browser callers use registered logical sources; unsupported unmounted USD file sources reject explicitly. Native CLI resolution remains native path first, then the engine asset owner; it has no live Twin mount registry.

The host may configure the public QueryPreparationLimits resource. Its StageClosureLimits bound files, depth, and bytes; query reads are serial by default. Twin preparation passes its remaining aggregate budget into each closure before any dependency read. A completed query records actual source content revisions, rather than treating dispatch-time paths as fresh reads.

The rules are authored — the lint layer

Everything above is what the loader would refuse: parse, compose, WheelParams. Compiled, because it is the loader's own code. A second tier runs on the same call and answers a different question — is this right? Those rules live in assets/scripting/policy/lint_<domain>.rhai and are reached through the lint.<domain> hook, so adding, tightening or silencing one is an edit to a script, not a rebuild.

Findings arrive in the same report: error severity joins errors (and flips ok), everything else joins warnings. Each line is prefixed with its domain and rule id, which is what you grep for:

[usd/nested-body-no-joint] /Rover/Motor_FL — applies PhysicsRigidBodyAPI inside
the body </Rover> but no joint names it — it is a SEPARATE body held by nothing
and will fall out of the vehicle. …

The USD rules include nested-body-no-joint (error), joint-target-not-a-body (error), collision-enabled-without-api (error for ordinary geometry; wheel realizations use their dedicated contract rules), raycast-wheel-collision-contract (error), physical-wheel-collision-contract (error), vehicle-part-collision-contract (error), dynamic-body-no-collider (warn), mass-outside-any-body (warn), conditionally-stable-joint-drive (error), joint-drive-negative-stiffness (error), joint-drive-negative-damping (error), invalid-gear-drive (error), and invalid-network-synthesizer (error). Collection ownership is derived from the composed member role schemas by the same runtime classifier; an absent selector does not make a physical actuator collection a Modelica network. See author-usd-physics for the authoring rule they enforce and docs/architecture/lint-substrate.md for the design.

The file is not the scene — RunLint

ValidateAsset lints a file. After a scene is loaded, spawned into and edited, no file describes what is running; lint that with the verb:

rhai
cmd("RunLint", #{});        // explicit loaded-stage lint
query("GetDiagnostics", #{scope: "loaded_stages"}); // poll complete; read diagnostics[]

or {"type":"ExecuteCommand","command":"RunLint"} over HTTP/MCP. Nothing lints automatically at load, on a physics tick, or on a background cadence — deliberately. An editor, launcher, or caller explicitly repeats the command after an authored change, and

rhai
bind_policy("lint.usd", "lint_usd", my_rules);    // next RunLint obeys

re-shapes the rules for the next explicit lint run without a rebuild. Loaded lint evidence can be deferred for one or more frames; wait until complete:true before using ok:true as a clean result.

RunLint also checks the live projected port surface through the shared PortRegistry, passing its owner collision facts to the authored lint.usd policy. A port-owner-collision error identifies the composed entity, inputs:/outputs: path, owner source/domain/backend, and the actual registry precedence that wins reads or writes. Repeated inspection views of one owner are deduplicated. This is live-only: ValidateAsset cannot see runtime owners that are introduced by projection. Repair it in USD/Rhai authoring so one semantic public name has one owner; rename a separate actuator (for example to dock_release) instead of adding retries, fallbacks, or vehicle-specific Rust input handlers.

USD connections have a second, explicit preflight contract. Static file lint reports invalid property paths, missing source prims/properties, and authored type mismatches. Loaded RunLint additionally checks runtime-provider connections against the exact projected inputs:/outputs: port name and reports a missing port as an error or an explicitly pending surface as a warning. A runtime source without the standard direction namespace is an error. Rust only supplies these facts; the Rhai USD policy chooses rule IDs, severity, and wording. ValidateAsset cannot prove dynamic runtime names.

Control-binding validity is projected from the canonical lunco_control_core::parse_user_intent parser and reported by the same Rhai USD policy. The Rust validator does not maintain a second intent spelling list or produce policy wording; unknown bindings are surfaced as control-binding-unknown-intent findings.

Where it fits

edit .usda / .mo / .wgsl / .rhai
        ↓
--validate            ← seconds, no GPU. Catches: syntax, broken refs, missing
        ↓               wheel attrs, if/when in Modelica, unparsable rhai.
load the scene        ← test-via-api
        ↓
drive it / assert     ← author-scenario, drivetrain_parity

Validate every file you touched before you launch anything. A --validate run costs seconds; a luncosim launch that dies on a typo costs a compile.

Anti-patterns

  • ❌ Launching the full luncosim to find out whether a file parses — that is what --validate is for.
  • ❌ Sending ValidateAsset to lunica and concluding the command doesn't exist. It is luncosim-only; use the CLI.
  • ❌ Treating a .wgsl ok: true as "the shader compiles" — no naga runs. Only a real load proves the pipeline builds.
  • ❌ Passing a bare models/X.mo from an arbitrary CWD and trusting which file was read — path in the report echoes your input, not the resolved path.
  • ❌ Passing a twin:// address — unresolvable; use the filesystem path.
  • ❌ Reading ok and ignoring warnings on a .wgsl — that file can never report ok: false, so the warnings ARE the result.
  • ❌ Adding an if to a .mo equation section to "handle a case" — rewrite it branch-free; the lint is enforcing a real solver constraint, not a style rule.
  • ❌ Reading a [usd/…] lint error as "the file is broken syntax". It parsed and composed fine — it says the file would load and then behave wrongly. Fix the authoring, don't chase the parser.
  • ❌ Validating a file and concluding the running scene is clean. Runtime spawns and edits are in no file; cmd("RunLint", #{}) is the check for those.
  • ❌ Adding a rule in Rust. Rules go in assets/scripting/policy/lint_*.rhai; only new FACTS are Rust, and only when no existing fact can answer the question (facts.prims[].schemas answers most of them).

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

Files

Just SKILL.md in skills/validate-assets of LunCoSim/lunco-sim.

Open the folder on GitHubat commit d1c6f00

Compare with similar skills

Validate 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.

Validate Assets compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Validate Assets this skillLunCoSim/lunco-sim107—~5.1kAutomated safety check: PassApache-2.0
SpikardGoldziher/spikard123—~799Automated safety check: PassMIT
Shopify AI Toolkit Wrapperjeremylongshore/tons-of-skills-marketplace2.8k—~1.5kAutomated safety check: PassMIT
Lintwheelos/apollo-lite171—~482Automated safety check: PassApache-2.0
Reviewapollographql/apollo-mcp-server313—~2.9kAutomated safety check: PassMIT
Mobile Platform Offline Validateforcedotcom/sf-skills1.1k—~2kAutomated safety check: PassApache-2.0

Similar skills

  • Spikard

    Goldziher/spikard

    Scaffold Spikard projects and generate code from OpenAPI, AsyncAPI, OpenRPC, GraphQL, and Protobuf schemas using the Spikard CLI or its MCP server.

    123 GitHub stars~799 tokensUpdated 5 days ago
    Backend & APIsAuto-check passed
  • Shopify AI Toolkit Wrapper

    jeremylongshore/tons-of-skills-marketplace

    Integrate Shopify's AI Toolkit MCP server with Claude Code for GraphQL validation, Liquid linting, and documentation search.

    2.8k GitHub stars~1.5k tokensUpdated today
    Backend & APIsAuto-check passed
  • Lint

    wheelos/apollo-lite

    Apollo-Lite lint and formatting workflow. An agent skill from wheelos/apollo-lite.

    171 GitHub stars~482 tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Review

    apollographql/apollo-mcp-server

    Review a GitHub pull request for a Rust codebase. An agent skill from apollographql/apollo-mcp-server.

    313 GitHub stars~2.9k tokensUpdated 2 days ago
    Testing & QAAuto-check passed
  • Review a Lightning Web Component for mobile offline compatibility — the Komaci offline static analyzer that pre-primes the data graph for Salesforce Mobile App Plus and Field Service Mobile App.

    1.1k GitHub stars~2k tokensUpdated 2 days ago
    Sales & SupportAuto-check passed
  • China Mirror Resolver

    LeoYeAI/openclaw-master-skills

    Self-healing China mirror source resolver. An agent skill from LeoYeAI/openclaw-master-skills.

    2.2k GitHub stars~4.6k tokensUpdated 2 mo ago
    DevOps & CloudAuto-check: notes

More from LunCoSim/lunco-sim

All 40 skills in this repo
  • Nightly Changelog

    LunCoSim/lunco-sim

    Generate concise LunCoSim nightly GitHub release notes with platform downloads, installation guidance, an AI-agent mission prompt, and a changelog link.

    107 GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Build or repair a reusable scene component through a live LunCoSim Editor session.

    107 GitHub stars~4.4k tokensUpdated today
    Auto-check passed
  • Assembly Quality

    LunCoSim/lunco-sim

    Build or review a componentized LunCoSim USD assembly with a realistic, dimensionally checkable presentation.

    107 GitHub stars~1.6k tokensUpdated today
    Auto-check passed
  • Author Rhai Tests

    LunCoSim/lunco-sim

    Author and review LunCoSim behavioral, asset-backed, component, mission, visual, and requirements-verification tests.

    107 GitHub stars~3.5k tokensUpdated today
    Auto-check passed
  • Author Rhai Tool

    LunCoSim/lunco-sim

    Create, extend, register, or debug a reusable LunCoSim Rhai tool library for live USD authoring, component linting, inspection, or test support.

    107 GitHub stars~5.2k tokensUpdated today
    Auto-check passed
  • Author Tutorial

    LunCoSim/lunco-sim

    Author an interactive tutorial, guided lesson, onboarding flow, coach-mark tour, or objectives checklist in LunCoSim.

    107 GitHub stars~1.4k tokensUpdated today
    Auto-check passed

Works with

Categories

Questions about Validate Assets

What does Validate Assets do?

Pre-flight a LunCoSim .mo, .usda, .sysml, .kerml, .wgsl, or .rhai asset with ValidateAsset or the production CLI, or inspect one Twin's resolver namespaces with ValidateTwin. Validate Assets is an agent skill from LunCoSim/lunco-sim.rhai asset with ValidateAsset or the production CLI, or inspect one Twin's resolver namespaces with ValidateTwin.

When should I use Validate Assets?

Validate Assets fits situations like: shader-parameter; authored-lint checks.

How do I install Validate Assets in Claude Code?

Run `npx skills add LunCoSim/lunco-sim --skill validate-assets -a claude-code`. Or copy the skill folder (skills/validate-assets in LunCoSim/lunco-sim) into .claude/skills/validate-assets in your project. Claude Code loads it when a task matches its description.

How do I install Validate Assets in Codex?

Run `npx skills add LunCoSim/lunco-sim --skill validate-assets -a codex`. Or copy the skill folder (skills/validate-assets in LunCoSim/lunco-sim) into .agents/skills/validate-assets in your project. Codex loads it when a task matches its description.

Can I use Validate 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 LunCoSim/lunco-sim --skill validate-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/validate-assets, .gemini/skills/validate-assets, .github/skills/validate-assets and .opencode/skills/validate-assets in your project.

What does Validate Assets need to run?

Going by SKILL.md and its folder, Validate Assets needs the command-line tools its instructions call (curl and kind).

Does Validate Assets access the network?

SKILL.md contains no URLs. Its commands use curl, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Validate 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 Validate Assets use?

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

How many tokens does Validate Assets use?

About 5.1k tokens (SKILL.md is roughly 20k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Validate Assets?

Skills that share tags, products or a category with Validate Assets: Spikard (Goldziher/spikard, 123 stars), Shopify AI Toolkit Wrapper (jeremylongshore/tons-of-skills-marketplace, 2.8k stars), Lint (wheelos/apollo-lite, 171 stars) and Review (apollographql/apollo-mcp-server, 313 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Validate Assets?

LunCoSim (a GitHub organization) maintains it in LunCoSim/lunco-sim, which has 107 GitHub stars. The repository holds 40 skills in this directory. The repository was last updated on October 9, 2026.

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