Agent skill

Inspect Simulation

by LunCoSim in LunCoSim/lunco-sim

Observe a running LunCoSim through its API: read entities, telemetry ports, Modelica or cosimulation variables, time series, and viewport screenshots.

Apache-2.0Auto-check passedData & Analytics

Install Inspect Simulation

skills CLI
$ npx skills add LunCoSim/lunco-sim --skill inspect-simulation -a claude-code

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

GitHub CLI
$ gh skill install LunCoSim/lunco-sim inspect-simulation --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/inspect-simulation .claude/skills/inspect-simulation && 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
inspect-simulation
GitHub stars
107
Token cost
~3.1k tokens
SKILL.md length
1,406 words
Files
1
Skills in repo
40
Repo updated
First seen
Licence
Apache-2.0

At a glance

Observe a running LunCoSim through its API: read entities, telemetry ports, Modelica or cosimulation variables, time series, and viewport screenshots.

  • Works in 5 steps: list_entities → find the api_id of the… → read_ports {api_id, ports:[…]} (or… → Need a trend (settling, oscillation,… → …
  • Questions about live values
  • SKILL.md covers The read surface, Inspect an authored assembly, Recipe and Example (curl), plus 1 more section
  • Calls curl

What it does

Inspect Simulation is an agent skill from LunCoSim/lunco-sim. Observe a running LunCoSim through its API: read entities, telemetry ports, Modelica or cosimulation variables, time series, and viewport screenshots. Use for questions about live values, motion, scene contents, or visual state. This is the read-only complement to test-via-api, which drives and verifies; use build-usd-scene when the task is authoring.

Its SKILL.md is about 3.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 Data & Analytics, covering Forecasting and time series. The repository describes itself as: Collaborative Multiphysics Cosimulator For Space Missions 🌎🚀🌚. The licence is Apache-2.0.

When your agent uses it

  • Questions about live values
  • Tasks that involve Forecasting and time series

Example prompts

  • “/inspect-simulation”

Workflow steps

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

  1. list_entities → find the api_id of the thing you care about (by name).
  2. read_ports {api_id, ports:[…]} (or read_port) for the value(s) — filter, don't dump.
  3. Need a trend (settling, oscillation, arrival)? watch_ports for a series instead of hammering read_ports.
  4. Modelica in the loop? snapshot_variables for solver state, or cosim_status for the whole chain.
  5. capture_screenshot → /tmp/x.png → Read it, to confirm the physical picture.

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

    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

Inspect Simulation loads about 3.1k tokens when it runs. Until then it costs about 93 tokens; SKILL.md has 1,406 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~93
When it runs · the whole SKILL.md, loaded when a task matches
~3.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). 1,406 words, ~3,103 tokens.

Download SKILL.mdSave it as .claude/skills/inspect-simulation/SKILL.md (or your agent's skills folder).
name
inspect-simulation
description
Observe a running LunCoSim through its API: read entities, telemetry ports, Modelica or cosimulation variables, time series, and viewport screenshots. Use for questions about live values, motion, scene contents, or visual state. This is the read-only complement to test-via-api, which drives and verifies; use build-usd-scene when the task is authoring.

Inspect a running simulation

Observe over the HTTP API / MCP — never by polling logs or asking the user. The app must be running with --api (default port 4101; launch per test-via-api). Drive from curl POST /api/commands, or the mcp__lunco__* tools if wired.

For scene, motion, Editor, or viewport inspection, require the visible headful production window and keep it open while reading state. Pair typed queries with CaptureScreenshot and inspect the resulting image so the user can see the same state being diagnosed. A headless session is acceptable only for telemetry-only inspection with no visual or user-observation claim; never switch to it silently when a visual check is requested.

Read the ports, not the log. A telemetry port snapshot is the authoritative current value. tail -f/sleep-polling a log for a number is the anti-pattern.

The read surface

Tool / queryAnswers
list_entities (ListEntities)every registered entity → {api_id, name, type, pos}. Start here — most reads need an api_id.
query_entity (QueryEntity {id})one entity's pose/name/type blob.
QueryUsdPrimcomposed USD attributes and the resolved world position for a prim; use it to verify xformOpOrder, placement heading and mounted-part dimensions. Add topology:true for one scoped visual/collider/material/joint/bounds/projection record.
InspectUsdViewportthe explicit focused USD preview/view handles, document IDs, edit targets, projection generations, and projection_ready state; use this to identify the exact editor item visible in a screenshot and wait for a ready preview before editing.
InspectUsdInspectionPresetspersisted view-only USD inspection camera presets; use it to verify the named settings state and the active preset without treating camera presentation as authored USD.
read_portslive telemetry. With api_id: that entity's ports [{name,value,direction,kind}]. Without: EVERY port-bearing entity (large — pass name_filter substring and/or ports:[…] to narrow). One-shot.
read_port {api_id, port}a single named port value.
watch_ports {api_id, …}a time-series of ports (use when you need change over time, not a single sample).
snapshot_variables (SnapshotVariables)current Modelica variable values (the solver's state).
ListTelemetryChannels / QueryTelemetryHistoryretained scalar catalog and history. Keep the returned channel key; an archived channel remains queryable under its captured api/<GlobalEntityId>:<name> key after its source disappears.
cosim_statusevery USD-driven cosim entity end-to-end: {name, y, vy, netForce, force_y_input, buoyancy, modelica_*} — verify a Modelica → physics chain without logs.
rover_statusrover-specific convenience readout.
capture_screenshot (CaptureScreenshot)raw PNG — save -o /tmp/x.png, then Read it. Confirms what numbers can't (did it tip over?).

Inspect an authored assembly

When the question is about a reusable USD assembly rather than only a spawned entity, use the namespaced Rhai model_authoring reads with the exact document id and root path:

rhai
let context = model_authoring::model_context(doc, root, edit_target);
let ready = model_authoring::readiness_report(doc, root, edit_target, policy);
let graph = model_authoring::port_graph(doc, root, edit_target);

context is the complete composed tree and ready is the explicit topology/physicality/mount/connection/control/runtime preflight. These reads preserve the document generation and complement InspectUsdViewport and LintReport; they do not mutate or save the document. Use the returned exact paths for selection, reveal, framing, and follow-up typed commands. The scripting guide documents the authoring facades and dry-plan boundaries.

For generic authoring evidence, use the authoring_inspection Rhai library with the same exact document and preview identities:

rhai
let diff = authoring_inspection::candidate_diff(before_doc, after_doc, affected_paths);
let groups = authoring_inspection::group_diagnostics(lint_findings);
let evidence = authoring_inspection::inspection_snapshot(doc, root, path);
let mode = authoring_inspection::inspection_mode(doc, root, path, true);

candidate_diff is path-scoped and reports consequences plus lint readiness; group_diagnostics preserves raw findings; and inspection_snapshot keeps visual, collision, joints, frames, materials, provenance, schemas, and connections in one read-only record. Absence is evidence, not permission to invent a bound or provenance. To act on one finding, pass its absolute subject to authoring_inspection::navigate_diagnostic(preview, view, finding); it uses the canonical selection owner and exact FrameUsdPreviewSelection path.

For screenshots, query InspectUsdViewport first, require projection_ready:true, and correlate the returned UsdPreviewId and UsdPreviewViewId with the screenshot. View-only camera state is persisted through the assembly_edit wrappers save_inspection_preset, apply_inspection_preset, delete_inspection_preset, and inspection_presets; verify it with InspectUsdInspectionPresets and the viewport's active_preset. These presets do not modify USD or simulation state.

To perturb-then-observe: set_input / SetPorts {target, writes:[[name,val]], producer_id} to poke a live input through the next fixed tick; reuse one stable nonzero producer id for the same external caller, then re-read. Use ReleasePort / ReleaseControl with the same producer id when releasing a live hold to return an input to authored wiring. Apply a safe state with explicit named SetPorts values and keep that hold active while it is wanted. Use possess_vessel when the target also requires an explicit control claim.

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

Recipe

  1. list_entities → find the api_id of the thing you care about (by name).
  2. read_ports {api_id, ports:[…]} (or read_port) for the value(s) — filter, don't dump.
  3. Need a trend (settling, oscillation, arrival)? watch_ports for a series instead of hammering read_ports.
  4. Modelica in the loop? snapshot_variables for solver state, or cosim_status for the whole chain.
  5. capture_screenshot → /tmp/x.png → Read it, to confirm the physical picture.

If the scene has no authored window camera, the windowed luncosim host may use its explicit standalone presentation policy after finite USD bounds settle; it reports the generated owner in the Camera menu and status history. Headless and recording hosts do not opt into that policy. A transient camera-less projection, or a boundless standalone scene, is a presentation diagnostic rather than a terrain or physics failure.

Before interpreting a live read as a finished scene, check GET /api/ready and require ready:true, world_hold:false, and pending_count:0. A port may be absent while its Modelica island is still compiling; that is different from a valid zero.

For DEM terrain, read the typed TerrainLodStatus query as the authoritative geometry stream state. A settled visual terrain requires wanted == resident and pending == 0; the status-bar text is presentation history and is not a readiness signal. Streamed Lit terrain also waits for its USD material source projection and any required off-thread derived surface/normal product before exposing the initial tile set. During startup, a status entry may intentionally remain live at resident == wanted while pending > 0: that is render-material publication, not a completed tile bar. Observe the live terrain-derived status entry and the typed query rather than treating a historical terrain event as proof that materials are settled. Static USD DEM terrain keeps its UsdShade appearance intent on the terrain owner while the generated mesh is assembled.

For an interactive USD edit, query InspectUsdViewport before describing or changing the visible item, then correlate its explicit view/preview handle with CaptureScreenshot and ListOpenDocuments. Use the returned document ID, edit target, and projected generation in typed USD commands; do not infer the target from a tab title, file name, or entity name.

Fixed-panel rover readout

For a fixed solar deck, list the rover-root network entity and read its boundary ports plus the panel and battery member outputs. The useful minimum is solar_power, solar_incidence, panel power_out/generated_current_a, and battery terminal_current_a/soc_out. A positive mesh count or a visible SolarPanel prim does not prove that current reaches the battery.

For a placed rover, pair the live pose with QueryUsdPrim on the composed rover prim. Confirm the local forward-axis contract, the effective rotation op and its xformOpOrder; do not infer orientation from a screenshot chosen on a symmetry axis.

For a selected Editor prim, use QueryUsdPrim { topology: true } when the question is why a part is visible, collidable, or not attached as expected. Inspect topology.parts for the visual/collider flags, inherited purpose, collision state, per-shape canonical bounds, local/world transforms, source-layer/material/shader bindings, and topology.joints for body targets. Treat non-empty topology.diagnostics as an authored-data or projection issue; do not fill a null bound with a guessed box. topology.projection reports the document/live-stage generation, while topology.binding reports the existing visual-sync and physics markers for the selected runtime entity.

Example (curl)

bash
# what's spawned?
curl -s -X POST http://127.0.0.1:4101/api/commands -H 'Content-Type: application/json' \
  -d '{"type":"ListEntities"}'
# read selected lander ports; use ListPorts to discover exact names
curl -s -X POST http://127.0.0.1:4101/api/commands -H 'Content-Type: application/json' \
  -d '{"type":"ExecuteCommand","command":"ReadPorts","params":{"api_id":<lander-api-id>,"port_names":["altitude","descent_rate"]}}'
# confirm visually
curl -s -X POST http://127.0.0.1:4101/api/commands -H 'Content-Type: application/json' \
  -d '{"type":"ExecuteCommand","command":"CaptureScreenshot","params":{}}' -o /tmp/x.png   # then Read /tmp/x.png

Gotchas

  • Direction tracker: inspect the entire coordinate chain together: the world-to-mount direction ports, controller setpoints, measured joint angles, and the rendered boresight. A locked or low-error controller output alone can validate the same incorrect frame convention that points the mechanism away from its target.

  • read_ports without an api_id is huge — always name_filter and/or ports.

  • api_id (API-stable) ≠ the rhai GlobalEntityId — get api_id from list_entities, don't reuse a gid from a script.

  • Port not found / empty? The entity may be pre-compile (Modelica hasn't produced variables yet — cosim_status shows nulls until it does), or the name is a USD-path substring you haven't matched. List its ports first with read_ports {api_id} (no ports filter) to see the real names.

  • Wrong port? The canonical API port is 4101; set LUNCO_API_PORT=4101 if the MCP tools miss.

  • Don't restart to "get clean state" — read the running instance; see the ⚠️ in test-via-api.

  • One-shot vs series: read_ports samples once (call again for fresh values); use watch_ports for a time-series — don't sleep-loop read_ports.

For continuously updated wheel tracks, pair InspectVehicleTrail history and publication reads with screenshots after sustained movement past a waypoint. CPU publication alone cannot establish that a resized annotation image reached the material's GPU binding. The render binder owns descriptor-change rebinding; ordinary content uploads must preserve readiness.

© 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/inspect-simulation of LunCoSim/lunco-sim.

Open the folder on GitHubat commit d1c6f00

Compare with similar skills

Inspect Simulation 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.

Inspect Simulation compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Inspect Simulation this skillLunCoSim/lunco-sim107—~3.1kAutomated safety check: PassApache-2.0
TimesFM Forecastinggoogle-research/timesfm34k—~4.7kAutomated safety check: PassApache-2.0
StatsmodelszLanqing/codex-claude-academic-skills4.7k15 repos~4.9kAutomated safety check: PassBSD-3-Clause
Timesfm ForecastingzLanqing/codex-claude-academic-skills4.7k3 repos~7.5kAutomated safety check: NotesApache-2.0
Find Hypertable Candidatestimescale/pg-aiguide1.9k1 repos~2.6kAutomated safety check: PassApache-2.0
Pensieve Searcharkohut/pensieve1.4k—~8.2kAutomated safety check: PassApache-2.0

Similar skills

  • TimesFM Forecasting

    google-research/timesfm

    Forecasts any univariate time series zero-shot with Google's TimesFM model, returning point forecasts and calibrated prediction intervals without training.

    34k GitHub stars~4.7k tokensUpdated 9 days ago
    Data & AnalyticsAuto-check passed
  • Statsmodels

    zLanqing/codex-claude-academic-skills

    Statistical models library for Python. An agent skill from zLanqing/codex-claude-academic-skills.

    4.7k GitHub starsUsed in 15 repos~4.9k tokens
    Data & AnalyticsAuto-check passed
  • Timesfm Forecasting

    zLanqing/codex-claude-academic-skills

    Zero-shot time series forecasting with Google's TimesFM foundation model.

    4.7k GitHub starsUsed in 3 repos~7.5k tokens
    Data & AnalyticsAuto-check: notes
  • Find Hypertable Candidates

    timescale/pg-aiguide

    A skill your agent uses to analyze an existing PostgreSQL database and identify which tables should be converted to Timescale/TimescaleDB hypertables.

    1.9k GitHub starsUsed in 1 repo~2.6k tokens
    Data & AnalyticsAuto-check passed
  • Pensieve Search

    arkohut/pensieve

    Search the user's local Pensieve screenshot archive by text, app, or time range.

    1.4k GitHub stars~8.2k tokensUpdated 2 mo ago
    Data & AnalyticsAuto-check passed
  • Alphaear Predictor

    ninehills/skills

    Market prediction skill using Kronos. An agent skill from ninehills/skills.

    280 GitHub starsUsed in 1 repo~531 tokens
    Data & AnalyticsAuto-check passed

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

Questions about Inspect Simulation

What does Inspect Simulation do?

Observe a running LunCoSim through its API: read entities, telemetry ports, Modelica or cosimulation variables, time series, and viewport screenshots. Inspect Simulation is an agent skill from LunCoSim/lunco-sim. Observe a running LunCoSim through its API: read entities, telemetry ports, Modelica or cosimulation variables, time series, and viewport screenshots.

When should I use Inspect Simulation?

Inspect Simulation fits situations like: questions about live values; tasks that involve Forecasting and time series.

How do I install Inspect Simulation in Claude Code?

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

How do I install Inspect Simulation in Codex?

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

Can I use Inspect Simulation 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 inspect-simulation -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/inspect-simulation, .gemini/skills/inspect-simulation, .github/skills/inspect-simulation and .opencode/skills/inspect-simulation in your project.

What does Inspect Simulation need to run?

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

Does Inspect Simulation 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 Inspect Simulation 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 Inspect Simulation use?

Inspect Simulation 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 Inspect Simulation use?

About 3.1k tokens (SKILL.md is roughly 12k 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 Inspect Simulation?

Skills that share tags, products or a category with Inspect Simulation: TimesFM Forecasting (google-research/timesfm, 34k stars), Statsmodels (zLanqing/codex-claude-academic-skills, 4.7k stars), Timesfm Forecasting (zLanqing/codex-claude-academic-skills, 4.7k stars) and Find Hypertable Candidates (timescale/pg-aiguide, 1.9k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Inspect Simulation?

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.