For the complete documentation index, see llms.txt. This page is also available as Markdown.

luciq-cli

The luciq-cli skill installs and authenticates the Luciq CLI, uploads symbol files, wires CI, and scripts data queries with typed flags.

Drive Luciq from a terminal, a build pipeline, or a script — installing and authenticating the luciq CLI, uploading symbol files, wiring symbolication into CI, or turning a data question into a repeatable command.

Symbol uploads have no MCP equivalent, so this is the only path to fix an unsymbolicated crash. For everything else, the CLI runs the same server-side tools the Luciq MCP server exposes, under the same permissions and plan entitlements — its value over MCP is a command you can commit, schedule, diff, and pipe, not extra data.

Use this skill when

  • The user asks to install the Luciq CLI, run luciq login, or verify a token with luciq whoami.

  • The user asks to upload symbol files — iOS dSYMs, Android ProGuard/R8 mappings, NDK .so files, React Native source maps, or Flutter Dart symbols — because crash reports aren't symbolicating.

  • The user wants symbolication wired into CI: GitHub Actions, Fastlane, Gradle, Bitrise, CircleCI, an Xcode build phase, or cron.

  • The user wants an exact, repeatable luciq ... command for a data question — one they can commit, schedule, or pipe into jq — rather than a conversational answer.

  • The user is scripting or automating Luciq in a non-interactive environment (a CI job, cron, a container) with no MCP client available.

  • The deliverable is a command, pipeline step, or script. A one-off question about production data inside an IDE conversation belongs to luciq-debug or luciq-readout instead, and first-time SDK integration belongs to luciq-setup.

What the agent does

  • Instrument choice, up front. Decides whether the request is CLI work or MCP work before doing anything. Uploads and CI wiring always go to the CLI since there's no MCP equivalent; a one-off question about data goes to MCP. The CLI is never presented as a workaround for a blocked MCP call — both hit the same backend under the same permissions.

  • Install, authenticate, verify. Checks whether the CLI is installed, installs it if not, authenticates with luciq login or LUCIQ_AUTH_TOKEN, and confirms with luciq whoami before running anything that talks to the API.

  • Symbol uploads and CI wiring. Locates the real build artifact, picks the exact upload subcommand and required flags for the platform, and requires one manual upload to print before touching any CI file.

  • Query and scripting. Resolves the app and mode, builds the command from typed flags where they exist, and falls back to --filters for anything without one. Only pipes to jq after confirming the output is actually JSON.

  • Gated writes. Shows the exact write command — bugs update, an alert or incident change, a funnel change — verbatim, and waits for explicit approval before running it.

  • luciq help as the final authority. Treats the installed binary, not its own reference tables, as ground truth. Any rejected flag or unknown subcommand sends it to luciq <group> help <subcommand> rather than inventing one.

  • No leaked credentials. Never echoes, logs, commits, or pastes a token, and avoids running luciq info in shared output since it prints the configured token in plaintext.

Install

The fastest path is the plugin install. Add the marketplace and install:

Works in Claude Code and Cursor. The plugin install also wires up the Luciq MCP server in one step.

After install, the skill is available as /luciq-skills:luciq-cli.

For other agents, install via npm:

Or copy SKILL.md from the public repo to ~/.claude/skills/luciq-cli/SKILL.md (user-global) or .claude/skills/luciq-cli/SKILL.md (project-local). The full SKILL.md is reproduced in the expandable below.

📋 Click to expand the full SKILL.md

Where the methodology lives

The skill's command surface, flags, and output shapes are cross-checked against the published Luciq CLI product guide — Getting Started for installation and authentication, Uploading Symbol Files for the upload matrix, and Command Reference for every data command. The skill packages that surface as a SKILL.md so an agent can drive it end to end instead of you looking each flag up by hand.

Prerequisites

  • A shell. The Luciq MCP server isn't involved in this skill at all — it installs and authenticates the CLI itself as its first track.

  • A CLI token, generated at dashboard.luciq.ai/company/luciq-cli. It's a personal credential tied to your own dashboard role, not a service account, and it authenticates every command, uploads included.

  • For symbol uploads specifically: the settings.mapping_files.modify permission on top of app access. A token that queries fine can still be refused for uploads.

Self-hosted or single-tenant clusters need LUCIQ_URL pointed at the cluster's API host (https://api.<cluster>.luciq.ai), generated from that cluster's own dashboard — a token from one cluster 401s against another.

How the agent drives the CLI

The skill decides CLI-or-MCP first, then works one of four tracks. Tracks B and C both assume Track A has already succeeded.

Track A. Install, authenticate, verify

The agent checks whether the CLI is installed (luciq version), installs it if missing (Homebrew or the gem), gets a token in place via luciq login or LUCIQ_AUTH_TOKEN, points at the right cluster if self-hosted, and confirms with luciq whoami — never declaring success without that verification. A green whoami proves the token works, not that it's authorized for any specific command; that surfaces on the first real call.

Track B. Upload symbols and wire CI

The agent detects the platform and build system, locates the real artifact on disk, and picks the exact upload subcommand and required flags for the file type (dSYM, ProGuard/R8 mapping, NDK, React Native source map, or Flutter Dart symbols). It runs one upload manually and confirms the before touching any CI file — a pipeline step that has never uploaded successfully once is an untested change on a release path. --version-name / --version-code / --mode all fail silently on a mismatch, so the agent reads the version from the build system rather than from memory.

Track C. Query and script data

The agent resolves the app to a real slug with luciq apps list, confirms the mode (each mode is a separate dataset), and builds the command from typed flags where they exist, falling back to --filters for anything else. Output is mostly enveloped JSON ({"bugs": [...]}, {"crashes": [...]}) except alerts list and incidents list, which return CSV — the agent checks the first line of output before piping to jq. It paginates deliberately rather than in parallel, respecting the 100-requests-per-60-seconds-per-IP rate limit that covers uploads too.

Track D. Gate writes

For anything that changes production state — bugs update, alert or incident changes, funnel changes — the agent confirms the target against a read command first, shows the exact command it intends to run verbatim, and waits for explicit approval before running it. It runs writes one at a time and reports every result honestly, including failures.

Out of scope

The skill won't fabricate CLI output — if a command wasn't run, it says so and shows the command rather than presenting a plausible-looking result. It treats luciq help as outranking its own reference tables: any rejected flag or unknown subcommand sends it to the live help text instead of inventing one. It never echoes, logs, or pastes a token, and avoids luciq info in shared output since that command prints the token in plaintext.

Last updated