Developers
Script it. Automate it. Let an agent do it.
A CLI for your terminal, a plugin so Claude Code can drive it directly, and a GitHub Action for CI — all three talk to the same Flickly API you already use.
Get an API keyCommand line
The `flickly` CLI
Upload APKs, launch and manage device sessions, all from a terminal. Output auto-detects JSON when piped or run non-interactively, with clean exit codes to script against — built for CI and coding agents as much as humans.
AI coding agents
Claude Code plugin
Teaches Claude how to drive the flickly CLI on your behalf — correct auth setup, correct command sequencing, correct handling of exit codes and in-progress session states. Ask Claude to upload an APK or launch a device and it just does it.
claude --plugin-dir ./plugins/claude-codeCI/CD
GitHub Action
Upload a freshly built APK and optionally launch a live, streamable device as part of your CI run — a device link on every pull request, no manual step.
Install the CLI
npm install -g flicklyUse it
flickly auth login --api-key sk_live_xxxxx
flickly apps upload ./build/app-release.apk --json
# → { "id": "app_9f2c", "status": "ready", ... }
flickly sessions launch --app app_9f2c --json
# → { "id": "sess_a3c9", "state": "provisioning", ... }
flickly sessions view sess_a3c9 --json
# → poll until "state" is "ready", then open "viewUrl"Wire up the Action
Create an API key in Settings → API keys, store it as a repo secret, drop this into a workflow.
- name: Upload to Flickly
uses: flickly-io/flickly-cli@v1
id: flickly
with:
api-key: ${{ secrets.FLICKLY_API_KEY }}
apk-path: ./app/build/outputs/apk/release/app-release.apk
launch-session: true
- name: Comment the device link
run: echo "Test it live: ${{ steps.flickly.outputs.view-url }}"For the full REST API (what all three of these ultimately call), see the API docs.
