agentsclimarketplace

Srib integration

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

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".From its SKILL.md

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.

SKILL.md

6.6 KB, ~1.4k tokens by cl100k_base, 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

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 325,949. 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.