STQRY Studio CLI

CLI for managing collections, screens, media, and content on STQRY.

Installation

Install script (macOS / Linux)

curl -fsSL https://downloads.stqry.com/stqry-cli/install.sh | sh

Installs the latest release to /usr/local/bin (or ~/.local/bin when /usr/local/bin isn't writable). Pin a version with STQRY_VERSION or pick the destination with STQRY_INSTALL_DIR:

curl -fsSL https://downloads.stqry.com/stqry-cli/install.sh | STQRY_VERSION=v0.10.44 sh

Direct download

Release archives and checksums.txt are published per version to the downloads CDN:

https://downloads.stqry.com/stqry-cli/releases/<version>/stqry-cli_<os>_<arch>.tar.gz

where <os> is darwin, linux, or windows (.zip instead of .tar.gz) and <arch> is amd64 or arm64. The latest version is at releases/latest.txt.

Updating

A binary installed via the install script (or any direct download) can update itself in place:

stqry update            # update to the latest release
stqry update --check    # only report whether an update is available

pip installs update with pip install --upgrade stqry (pipx: pipx upgrade stqry, uv: uv tool upgrade stqry) — stqry update detects package-manager installs and points you at the right command. stqry doctor also reports when a newer release is available.

(A Homebrew tap, mytours/tap/stqry-cli, is still published on every release, but installs from it don't currently work — use the install script instead.)

Uninstall

The CLI is a single binary and treads lightly — remove it with:

# Install-script / direct-download install (removes whichever location it's on,
# e.g. /usr/local/bin/stqry or ~/.local/bin/stqry):
rm "$(command -v stqry)"

# pip / pipx / uv install:
pip uninstall stqry        # or: pipx uninstall stqry  /  uv tool uninstall stqry

Optional leftover files the CLI creates, removable by hand:

  • The global Claude skill from stqry setup claude: rm -rf ~/.claude/skills/stqry
  • Per-project files written by stqry config init in any directory you ran it in: stqry.yaml (or stqry.yml) and the generated CLAUDE.md.

Shell completion

# Shell completion (bash / zsh / fish / powershell)
stqry completion zsh > "${fpath[1]}/_stqry"   # zsh example; see `stqry completion --help`

Quick Start

Configure the current directory with your STQRY API key (writes stqry.yaml):

stqry config init --api-key=<API_KEY> --region=us

List collections:

stqry collections list

Create a screen (--type is required, plus --name OR --title; --type must be one of story, web, panorama, ar, kiosk):

stqry screens create --name="Welcome" --type=story

Create a media item from a local file (uploads the file and creates a media item linked to it). --type must be one of map, webpackage, animation, audio, image, video, webvideo, ar, data. For audio and video the CLI falls back to --title when --name is omitted; every other type needs --name explicitly:

stqry media create --file=./photo.jpg --type=image --name=photo.jpg

AI Agent Integration

The CLI ships its own context for Claude: a slim core reference (stqry skill cat reference) that covers setup, the data model, and the global flags and indexes per-resource command docs fetched on demand (e.g. stqry skill cat media), plus step-by-step workflow recipes (stqry skill cat workflows). All print the latest documentation embedded in the installed binary — no separate install step.

Claude Code — two options, pick one (they don't conflict):

  • Per-project: run stqry config init in the project directory. It writes a CLAUDE.md that points Claude at stqry skill cat reference / workflows, so Claude pulls live content on demand whenever you work in that project.
  • Globally: run stqry setup claude once. It installs the same skill content at ~/.claude/skills/stqry/SKILL.md, so Claude Code auto-loads it whenever you mention STQRY content from any directory.

Claude Desktop — export a skill zip and install via the UI:

stqry skill export          # writes ./stqry-skill.zip

Then open Claude Desktop → Settings → Customise → Skills → Add Skill, select stqry-skill.zip, and restart. The zip is timeless — its SKILL.md calls stqry skill cat at runtime, so a single upload stays valid across CLI releases.

Alternatively, download the latest stqry-skill.zip directly from https://downloads.stqry.com/stqry-cli/stqry-skill.zip — no CLI install needed.

Claude Cowork — install via pip and use as CLI subprocess:

pip install stqry
stqry --version   # verify

To inspect skill content directly:

stqry skill cat reference       # core reference + index of per-resource docs
stqry skill cat media           # one resource's commands, flags, and recipes
stqry skill cat workflows       # multi-step recipes
stqry skill export --dir /tmp   # write Claude Desktop zip to /tmp/stqry-skill.zip

Output Formats

Commands support multiple output formats:

Default (human-readable):

stqry collections list

JSON output — wraps results in a { "data": [...], "meta": {...} } envelope:

stqry collections list --json

Quiet mode — emits only the raw data payload (no envelope), handy for piping:

stqry collections list --quiet

Built-in --jq — filter results without piping to an external jq binary. Always runs against the bare data (the array of rows), so the same expression works with or without --json. Pair with --raw / -r to emit string outputs as raw text instead of JSON-quoted strings (mirrors jq -r):

stqry collections list --jq '.[].name'
stqry collections get 42 --jq '.title.en' -r       # → plain string, no quotes
stqry media list --jq '[.[] | select(.file_size > 500000)]'

External jq is still useful when you need the meta envelope (the built-in --jq strips it):

stqry collections list --json | jq '.meta.pages'

Pagination

Every list command paginates server-side. The default is 30 rows per page; max is 1000 (server-enforced — --per-page > 1000 returns HTTP 400). When you don't pass --per-page you only see the first 30 rows — silent truncation has historically been the worst foot-gun for scripted enumeration.

Signals that more pages exist:

  • Human mode — footer like Showing 30 of 1017 (page 1 of 34) — pass --page / --per-page to see more.
  • --json mode — the envelope's meta field: {"page": 1, "per_page": 30, "pages": 34, "count": 1017}.
  • --quiet / --jq mode — the envelope is stripped from stdout, but a warning: showing N of TOTAL results … line is mirrored to stderr so it's still visible to humans and grep-able from scripts.

When you need every row, either bump --per-page to 1000 (one call covers most accounts) or walk pages until you reach meta.pages.

Account Configuration

STQRY Studio CLI stores credentials in a per-project stqry.yaml file. Create one with:

stqry config init --api-key=<API_KEY> --region=us

This writes:

api_key: <API_KEY>
api_url: https://api-us.stqry.com

The CLI walks up the directory tree, so a stqry.yaml in a project root applies to all subdirectories. There is intentionally no user-level / global config: you work on a STQRY account's content in its own folder, so that's where its credentials live. Per-project config (or env vars for CI) is all you need — there's nothing to configure globally.

To keep the key out of shell history and the process table, read it from stdin or a file instead of passing it inline:

echo "$STQRY_KEY" | stqry config init --api-key @- --region us

For CI or containers, set environment variables instead of writing a file — they take precedence over stqry.yaml.

Environment variables

Variable Purpose
STQRY_API_KEY API key (CI / containers). Requires STQRY_API_URL.
STQRY_API_URL API base URL; required alongside the key.
STQRY_CONFIG Pin resolution to an exact stqry.yaml path (skips the directory walk).
STQRY_TIMEOUT Per-request network timeout, e.g. 45s (same as --timeout).
STQRY_DEBUG Dump every HTTP request/response to stderr (same as --debug).
NO_COLOR / STQRY_NO_COLOR Disable ANSI colour (same as --no-color).
FORCE_COLOR Force colour even when output is piped.
PAGER Pager for long output (default less); PAGER=cat or --no-pager disables paging.

If no account is configured, the command will return an error prompting you to run stqry config init.