twin-ship

Packages a Godot digital-twin viewer build with swappable data into one deployable artifact.

Updated Jul 8, 2026
One-click install
npx skills add https://github.com/arthur0n/xenodot-twin --skill twin-ship-arthur0n
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: twin-ship
Source: https://github.com/arthur0n/xenodot-twin/tree/main/plugin/skills/twin-ship
Command: npx skills add https://github.com/arthur0n/xenodot-twin --skill twin-ship-arthur0n

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Shipping a Godot digital-twin viewer to a site usually means re-exporting the whole project every time the model, binding map, or live data source changes. This Skill packages the export-safe viewer together with its data tree as one retargetable deployable, so a site swaps models or repoints its live URL with a text edit instead of a rebuild. ## Core Features & Use Cases - Data-beside-build packaging: Runs tools/twin_ship.sh to export the desktop build headless, stage the model, property sidecar, binding map, and recordings in a data/ folder beside the executable (never baked into the pck), rewrite viewer.cfg to data-relative paths, boot the binary as a smoke gate, and zip the artifact deterministically. - Retargeting without re-export: The --retarget mode swaps the model, binding map, or recording in an already-shipped artifact while asserting the executable mtime and url= line stay untouched. - Per-platform guidance: Covers the recommended export_presets.cfg (universal macOS binary, exclude_filter keeping data out of the pck), macOS .app data placement with the honest unsigned/Gatekeeper warning, Linux and Windows layouts, and loud cross-platform smoke SKIPs. - Use Case: A plant digital twin passes its verify gates and a stakeholder needs a runnable demo on their own Mac with no Godot install — run twin_ship.sh --preset macOS, hand over the zip, and later retarget it to a different building model without re-exporting. ## Quick Start Ask the agent to ship the verified twin viewer as a deployable zip for macOS using twin_ship.sh with the macOS export preset.

Frequently Asked Questions about twin-ship

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I package a Godot digital-twin viewer as a deployable build?

Run tools/twin_ship.sh --preset <name> after the twin passes its verify gates. It exports the desktop build headless, stages the model, sidecar, binding map, and recordings in a data/ folder beside the executable, rewrites viewer.cfg, boots the binary as a smoke gate, and zips the result.

How do I change the model or data source of a shipped Godot build without re-exporting?

Edit the url= line in the shipped viewer.cfg for a new live source, or run twin_ship.sh --retarget <shipped-dir> --model <path> to swap the model, binding map, or recording. The tool asserts the executable mtime and url= stay untouched, proving no rebuild occurred.

Why does my Godot macOS export fail with a template or ETC2/ASTC error?

macOS exports require export templates installed for the exact engine version and textures/vram_compression/import_etc2_astc=true in project.godot, since macOS templates ship only ASTC-compressed variants. twin_ship.sh asserts this in preflight and prints the exact line to add.

Can I ship a Godot web (WASM) build with twin_ship.sh?

No. Web builds are explicitly out of scope because they have no executable-adjacent filesystem and bake data inside the pck as res:// resources. Use tools/twin_publish_web.sh for the no-threads web variant and GitHub Pages deployment instead.

Why does Gatekeeper block my exported macOS twin app?

The builds are not code-signed or notarized, so Gatekeeper warns on first open on any Mac other than the build machine. The shipped README.txt explains the two workarounds: right-click then Open, or run xattr -dr com.apple.quarantine on the .app.

When should I not ship a digital-twin build?

Do not ship while any twin-verify gate is red or skipping, because the ship smoke only asserts the binary boots, not that the twin is correct. Fix join, binding, or playback failures with twin-verify and twin-bind-data first, then ship.