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 initin any directory you ran it in:stqry.yaml(orstqry.yml) and the generatedCLAUDE.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 initin the project directory. It writes aCLAUDE.mdthat points Claude atstqry skill cat reference/workflows, so Claude pulls live content on demand whenever you work in that project. - Globally: run
stqry setup claudeonce. 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. --jsonmode — the envelope'smetafield:{"page": 1, "per_page": 30, "pages": 34, "count": 1017}.--quiet/--jqmode — the envelope is stripped from stdout, but awarning: 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.