Local commands vs platform commands
One binary, two kinds of command. The local half — scan, scan deps, scan tls, baseline, doctor, version, self-update — needs no network and no account, and runs entirely on your machine.
This page covers the other half — the commands that call your tenant API and, unless noted, require an authenticated session. There is no offline fallback for them, with one deliberate exception described under the release gate.
Authentication and configuration
Credentials resolve in a fixed order: RELIXQ_API_TOKEN (then the legacy RELIXQ_TOKEN) from the environment, then the OS keychain — Windows Credential Manager, macOS Keychain, or Linux Secret Service — populated by relixq login. If neither yields a token, platform commands fail with not logged in.
| Environment variable | Meaning |
|---|---|
RELIXQ_API_URL | Platform API base URL; overrides remote.api_url in relixq.yaml |
RELIXQ_API_TOKEN | API token — the canonical name for CI. Checked before the OS keychain. |
RELIXQ_TOKEN | Legacy alias, checked second |
RELIXQ_PROJECT | Active project; overrides project in relixq.yaml |
RELIXQ_BASE_SARIF | Fallback for --base-sarif on pr-comment |
GITHUB_TOKEN, GITHUB_REPOSITORY, GITHUB_SHA | Required to publish to GitHub from pr-comment and pentest gate |
GITHUB_EVENT_PATH | Auto-detects the pull-request number on pull_request events |
version: 1
project: payments-api # active project for platform commands
default_branch: main
remote:
api_url: https://api.relixq.io
gate:
fail_on_score_drop: 5 # see relixq pentest gateSession and workspace commands
- relixq login / logout / whoami
loginruns the device-code flow: it prints a verification URL and a short code, you approve in a browser, and the resulting access and refresh tokens are stored in your OS keychain — never on disk in plain text.logoutremoves them.whoamicurrently confirms that a stored credential exists; it does not yet call a profile endpoint.- relixq org list / org use <slug>
org listprints the organizations you belong to with slug, name, role, and join date.org useswitches your active organization: the platform re-mints your access token scoped to the target org, so every subsequent command operates in that context. Exits1if the slug is not among your memberships.- relixq use <project-slug>
- Sets the active project by writing the
projectfield intorelixq.yamlin the current directory, creating the file if absent and preserving other settings. Purely local — no API call.
Getting results into your tenant
- relixq remote-scan [--wait]
- Triggers a scan on the platform for the active project. Without
--waitit prints the scan run id and returns. With--waitit polls every 3 seconds until the run reaches a terminal state, then prints the findings in your configured output format. Exits1if the scan ends failed or cancelled. - relixq submit [findings.jsonl]
- Uploads local scan results so they appear in your workspace alongside server-side scans. Reads JSONL from the file argument or from stdin, so it pipes directly from a local scan.
- relixq report --scan-id <id>
- Downloads the report for a completed platform scan.
--formatacceptsmarkdown,sarif,json, orhtml;-owrites to a file. - relixq rules list / install / update / show
- Manages rule packs through the platform rule registry. These are not a local pack manager and require login. For local scans, point
--rulesat a rule directory instead.
# Scan locally, then publish the findings to your tenant
relixq scan --format jsonl | relixq submit
# Or have the platform do the scanning
relixq remote-scan --waitrelixq pr-comment
Reads a SARIF file produced by relixq scan --format sarif, then posts or updates an idempotent summary comment on the pull request and creates a GitHub check run with inline annotations, capped at 50. The comment leads with the RelixQ Score; pass --base-sarif with a scan of the base branch to show a before-and-after delta.
| Flag | Default | Meaning |
|---|---|---|
--sarif | (required) | SARIF file from relixq scan --format sarif |
--base-sarif | $RELIXQ_BASE_SARIF | SARIF scan of the base branch; enables the score delta |
--mode | warn | observe | warn | block |
--fail-on | critical | Severity that fails the check run in block mode |
--pr-number | auto-detect | Pull request number |
The pentest command group
The QAST honesty stance applies verbatim to every subcommand: adversary modeling, reachability, and a consent-gated PQC-readiness probe. No decryption is performed.
| Command | Purpose |
|---|---|
relixq pentest run --project <id> [--active] | Starts a QAST run. Passive is the default — classification and attack-path projection over already-discovered evidence, zero network probing. --active opts into read-only PQC-handshake observation and is refused with HTTP 403 without a signature-verified Rules of Engagement. There is no override flag. |
relixq pentest report --project <id> --run <id> --download [-o <file>] | Downloads the QAST report. The explicit --download flag is required — the command refuses to run without it. |
relixq pentest retest --project <id> --run <id> | Re-runs a prior assessment against the same scope to verify remediation. |
relixq pentest gate ... | The release gate — see Release gates. |
$ relixq pentest run --project payments-api
QAST run started: 7d31c0aa-....
mode: passive
status: queued
QAST - adversary-modeling + reachability + consent-gated PQC-readiness probe;
no decryption is performed.With --quiet, only the run id is printed, which is script-friendly. Exit codes: 1 on the RoE refusal, when no project is set, or on any API error; 0 when the run is accepted.
relixq pentest gate flags
| Flag | Meaning |
|---|---|
--project <id> | Project id; overrides relixq.yaml and RELIXQ_PROJECT |
--run <id> | (required) QAST run id for the scanned (head) ref |
--base-run <id> | QAST run id for the base ref; enables the new-exposure diff |
--mode | observe | warn | block (default warn) — only block can fail the merge |
--fail-on | Minimum new relevance or severity that fails the gate in block mode (default critical) |
--findings-sarif | Head-ref static-findings SARIF; adds the finding-severity and regression conditions |
--base-findings-sarif | Base-ref findings SARIF; enables net-new-finding and score-regression gating |
--fail-on-score-drop <n> | A score regression of at least n points blocks in block mode. 0 disables (warn-only). |
--exception "<fingerprint-or-*>[:reason]" | Repeatable local stand-in for a scoped exception; downgrades a matching block to a warn |
--sarif <file> | Write a SARIF of HNDL exposures and attack paths for code scanning |
--audit <file> | Write the gate-result audit event JSON |
--json | Emit the canonical decision JSON to stdout |
--dry-run | Compute the decision fully offline: no GitHub API, no files written. Implies --json. |
--no-publish | Compute the decision, and write SARIF, without posting to GitHub |
--local / --no-remote | Force findings-only: never contact the platform or the OS keychain |
Exit codes: 1 when the verdict is fail — which only block mode produces — or when the command itself errors; 0 otherwise. The exit code, the JSON verdict, the check-run conclusion, and the PR comment always agree.
Related pages
Release gates, PR comments and the GitHub App
Three escalating enforcement layers, a copy-paste GitHub Actions workflow, baselines, the eight-condition QAST release gate, and what the GitHub App does today.
QAST: Quantum Exposure Assessment
The adversary-validation layer: HNDL exposure classification via the Mosca inequality, attack-path projection, consent-gated read-only probing, remediation lifecycle, PTES/NIST reports, retest, and the PQC compatibility lab.
REST API reference
The endpoint map for the Enterprise REST API: authentication, tenancy, per-service endpoint tables, honest-empty semantics, and the internal endpoints you should never call directly.