Hi - I answer from the OpenSmartRoute documentation: routing, the API, plans and quotas, self-hosting. Ask away, or open a support ticket if you need a person.
Grounded in the docs - follow a source before acting on it.
Android Legacy State - Skill - OpenSmartRoute
Skillv1.0.0
Android Legacy State
Standards for State integration with Views using Coroutines and Lifecycle
Imported from majiayu000/claude-skill-registry (skills/development/legacy-state-hoangnguyen0403-agent-skills-standar/SKILL.md). Install upstream with npx skills add majiayu000/claude-skill-registry --skill legacy-state-hoangnguyen0403-agent-skills-standar. Copyright stays with the author.
Android Legacy State Standards
Priority: P1
Implementation Guidelines
Flow Consumption
Rule: ALWAYS use repeatOnLifecycle(Lifecycle.State.STARTED) to collect flows in Views.
Why: Prevents crashes (collecting while view is destroyed) and saves resources (stops collecting in background).
LiveData vs Flow
New Code: Use StateFlow exclusively.
Legacy: If using LiveData, observe with viewLifecycleOwner (Fragment), NOT this.
Anti-Patterns
launchWhenX: **Deprecated**: Use repeatOnLifecycle.
observe(this): **Leak Risk**: Use viewLifecycleOwner in Fragments.
Copy one of these into your project. Installing also returns the manifest and these snippets.
# after Install: the listing is in your workspace's routing pool - a plan picks it for its slot
curl -s -X POST https://api.opensmartroute.ai/api/v1/route -H 'Authorization: Bearer $OSR_API_KEY' -H 'Content-Type: application/json' -d '{"text": "...", "plan": true}'
Manifest
An Open Capability Manifest: the router reads it to know what this does, what it costs and when to pick it.