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 key

Command 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-code

CI/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 flickly

Use 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.