agentsclimarketplace

Srib integration

Skill sayonsom/srib-godot-skills-demo/.claude/skills/srib-integration

Standalone proof that six Claude Code skills develop a Godot 4.6 feature end-to-end: from an Excel backlog to a runnable SmartThings home view (shaders, animation, UI, integration). Includes one-step Linux/Windows setup.

Install
npx -y skills add sayonsom/srib-godot-skills-demo --skill srib-integration

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Implement integration-layer features for the SRIB Godot 4.6 Android app — wiring the view (shaders/visuals from srib-view) and model (math/logic from srib-model) layers together, connecting Godot to the Android system via JNI/GDExtension/plugin bridge, routing SmartThings API data into the 3D scene, managing autoload singletons, signal plumbing between nodes, scene composition, and the Android export + build pipeline. Use after srib-view and srib-model tickets are merged, or whenever a feature is about how parts of the system connect rather than how they look or compute. Typically the final step after view and model work is done. Trigger on: "srib-integration", "wire up", "connect view and model", "Android build", "SmartThings integration", "export to Android", "signal routing", "autoload".

SKILL.md

6.6 KB, as published. Nobody here has run it

srib-integration

Project: SRIB — Godot 4.6 Android application with a 3D SmartThings home view. Role: Integration layer. Connects what srib-view draws with what srib-model computes, and bridges Godot to the Android platform.


Scope

Integration concerns in this project:

AreaWhat it covers
Scene wiringComposing view nodes + model nodes into working scenes; signal connections; @onready paths
Autoload singletonsGlobal state managers (device state, SmartThings data cache, app config)
SmartThings bridgeReading SmartThings device status into Godot; mapping device state → visual/model parameters
Android plugin/JNIGDExtension .gdextension + .aar plugin setup; calling Java/Kotlin from GDScript
Export pipelineexport_presets.cfg configuration; Gradle build; APK signing; on-device deployment
Scene compositionInstantiating sub-scenes, setting up cameras, viewports, and the home 3D layout
Signal routingDefining and connecting signals between model (data ready) and view (update visual)

Invocation

srib-integration SRIB-NNN

Where SRIB-NNN is a ticket from issues/SRIB-NNN.md. Read the ticket first — it defines scope, acceptance criteria, and which view/model tickets this integrates.


Workflow

Step 1 — Read the ticket

Read issues/SRIB-NNN.md. Extract:

  • What view output (shader param, material, node state) needs to be driven
  • What model output (computed value, animation state, data structure) is the source
  • What Android/SmartThings data feeds in

If the dependent view or model tickets are not yet merged, stop and tell the user: "This integration ticket depends on SRIB-X (view) and SRIB-Y (model). Merge those first."

Step 2 — Locate the relevant files

Search the project for:

  • The scene file (.tscn) that composes the relevant nodes
  • The GDScript (.gd) files for both the view node and model node
  • Any existing autoload in project.godot under [autoload]
  • The Android plugin directory (android/plugins/ or android/build/)

Use grep -r and find rather than guessing paths.

Step 3 — Wire signals and data flow

The standard SRIB data flow pattern:

SmartThings/Android data
        ↓
   Autoload singleton (DeviceState.gd)
        ↓  signal: device_updated(id, state)
   Model node (e.g., RoomModel.gd)
        ↓  signal: visual_params_ready(params: Dictionary)
   View node (e.g., RoomShaderController.gd)
        ↓  shader_material.set_shader_parameter(...)
   MeshInstance3D / shader

When wiring:

  1. Signals go top-down; the model never imports the view.
  2. View nodes receive a Dictionary of named params — they do not know where the data came from.
  3. Autoloads are read-only by consumers; only one writer per data type.
  4. Scene tree connections use connect() in _ready() or %NodeName unique-name syntax.

Step 4 — Android bridge (when needed)

If the ticket touches Android:

GDExtension plugin setup:

  • Check android/plugins/ for existing .gdextension file
  • Java/Kotlin plugin class must extend GodotPlugin
  • Register methods with @UsedByGodot annotation
  • Rebuild .aar with ./gradlew build before testing

Calling from GDScript:

var plugin = Engine.get_singleton("SmartThingsPlugin")
if plugin:
    plugin.connect("device_state_changed", _on_device_state_changed)
    plugin.request_device_status(device_id)

SmartThings flow:

  1. Android plugin fetches device state via SmartThings REST API
  2. Emits Godot signal with raw state dict
  3. DeviceState autoload normalises and caches
  4. Emits device_updated for model nodes to consume

Step 5 — Export / build (when needed)

For APK changes:

  1. Verify export_presets.cfg has the correct custom_template/debug and custom_template/release paths
  2. Confirm android/build/config.gradle lists all required permissions
  3. Export from editor: Project → Export → Android → Export Project
  4. Install on device: adb install -r <apk-path>
  5. Check logcat: adb logcat -s Godot:V

Acceptance checklist

Every integration ticket must pass before closing:

  • Signals connect without errors (_ready() runs with no "connect" errors in Output)
  • Data flows from source to view: change a model value, verify the shader/visual updates
  • No orphaned signals (every connect has a matching disconnect or autofreed owner)
  • Tested in Godot editor (Play Scene, F5)
  • Tested on Android device or emulator (APK installed, correct behavior observed)
  • No regressions: other scenes still run without errors
  • project.godot autoloads section is clean (no duplicate or dead entries)
  • If Android plugin changed: .aar rebuilt and committed

Common pitfalls

  • Circular signal dependencies — model signals view, view signals model. Break the cycle by routing through the autoload singleton.
  • Shader param name mismatchset_shader_parameter("param_name", v) silently does nothing if the name doesn't match the shader uniform. Always verify the exact uniform name in the .gdshader file.
  • Plugin not foundEngine.get_singleton("X") returns null on desktop builds. Always null-check before calling plugin methods.
  • Scene path fragility — avoid hardcoded $Node/Child/Grandchild paths; prefer %UniqueNodeName or @export var references.
  • Export template mismatch — if the Godot version changes, export templates must be re-downloaded and re-set in the export preset.

File conventions

TypePath pattern
Autoload singletonsscripts/autoloads/<Name>.gd
Android pluginandroid/plugins/<name>/
Integration scriptsscripts/integration/<FeatureName>Integration.gd
Scene compositionsscenes/<room_or_feature_name>.tscn

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.