Frontier

CLI reference

Last updated 6 September 2026

Verified against frontier-runner 0.1.1

Every command below was checked against frontier --help and that subcommand's --help. Flags not listed here are not part of this release. ConfigError and InstallError print to stderr and exit 1.

frontier --help
frontier --version

Onboarding commands

signup

Open hosted Frontier signup.

Syntaxfrontier signup [--api-url API_URL]
Important options--api-url SaaS origin. Default is the hosted Frontier origin.
Required files or environmentA browser, or the printed URL.
Artifacts writtenNone. Prints the sign-up URL and tries to open it.
Accesses SaaSOpens the public sign-up page only.
Accesses SnowflakeNo.
Exit behaviorAlways 0 after printing the URL.
frontier signup

login

Store a project API key in the OS keychain.

Syntaxfrontier login --api-key [--api-url API_URL]
Important options--api-key is required for this version (hidden prompt). Without it the command tells you browser login is unavailable and exits 1. --api-url SaaS origin.
Required files or environmentA project API key created in Settings after sign-in.
Artifacts writtenOS keychain item, or ~/.config/frontier/credentials with mode 0600 if the keychain is unavailable.
Accesses SaaSYes. Validates the key with GET /api/v1/auth/whoami.
Accesses SnowflakeNo.
Exit behavior0 when stored. 1 if --api-key is omitted. AUTH_CANCELLED / AUTH_INVALID exit 1.
frontier login --api-key

logout

Remove stored Frontier API credentials.

Syntaxfrontier logout
Important optionsNone.
Required files or environmentNone.
Artifacts writtenDeletes keychain and fallback credential files.
Accesses SaaSNo.
Accesses SnowflakeNo.
Exit behavior0.
frontier logout

auth status

Show whether the CLI is authenticated.

Syntaxfrontier auth status
Important optionsNone. There is no other auth subcommand.
Required files or environmentStored credentials, FRONTIER_API_KEY, or the 0600 fallback file.
Artifacts writtenNone.
Accesses SaaSYes, when credentials are present (whoami).
Accesses SnowflakeNo.
Exit behavior0 if Frontier accepts the key. 1 if not authenticated or the key is rejected.
frontier auth status

init

Detect the dbt project and write .frontier/config.yml.

Syntaxfrontier init [project_dir] [--project-dir DIR] [--force] [--yes] [--legacy-yml] [--config CONFIG]
Important options--force overwrite. --yes accept detected defaults. --legacy-yml writes example frontier.yml instead of .frontier/config.yml. --config is unused unless --legacy-yml is set.
Required files or environmentdbt_project.yml in the project directory.
Artifacts written.frontier/config.yml and gitignore entries for Frontier cache/credentials.
Accesses SaaSNo.
Accesses SnowflakeNo. Reads local dbt/git detection only.
Exit behavior0. DBT_PROJECT_MISSING exits 1.
frontier init --yes

discover

Infer a draft semantic manifest from dbt artifacts.

Syntaxfrontier discover [project_dir] [--yes] [--model MODEL]
Important options--yes select the first suggested model. --model target model name.
Required files or environmenttarget/manifest.json or a working dbt compile. Stored API credentials.
Artifacts writtenNone locally. Uploads a draft to SaaS.
Accesses SaaSYes. POST draft manifest. Never activates.
Accesses SnowflakeNo.
Exit behavior0 when a draft version is created. DISCOVER_* / AUTH_* / DBT_ARTIFACT_MISSING exit 1.
frontier discover --yes

doctor

Diagnose the local Frontier installation.

Syntaxfrontier doctor [project_dir] [--json] [--skip-warehouse]
Important options--json redacted JSON for support. --skip-warehouse skip the live Snowflake ping.
Required files or environmentA dbt project directory. Optional stored credentials for SaaS checks.
Artifacts writtenNone.
Accesses SaaSYes, reachability/auth/manifest checks when credentials exist.
Accesses SnowflakeYes, unless --skip-warehouse.
Exit behavior0 if all checks pass. 1 if any check failed.
frontier doctor --skip-warehouse

update-check

Compare this runner to the hosted latest.

Syntaxfrontier update-check [project_dir] [--api-url API_URL]
Important options--api-url SaaS origin.
Required files or environmentNetwork access to SaaS. Does not auto-update.
Artifacts writtenA daily cache file under ~/.cache/frontier/update-check.
Accesses SaaSYes. GET /api/v1/runner/versions.
Accesses SnowflakeNo.
Exit behavior0 when the installed version meets the minimum. RUNNER_UNSUPPORTED exits 1.
frontier update-check

Setup commands

setup github

Write .github/workflows/frontier.yml.

Syntaxfrontier setup github [project_dir] [--force] [--yes] [--blocking]
Important options--force overwrite. --yes accept defaults. --blocking set FRONTIER_BLOCKING=true (default false for the first PR).
Required files or environmentA GitHub origin. Optional gh CLI to write secrets.
Artifacts written.github/workflows/frontier.yml. May generate FRONTIER_ENTITY_HASH_KEY.
Accesses SaaSNo, unless you already stored an API key that gh copies into secrets.
Accesses SnowflakeNo. Prints a reminder to set Snowflake secrets without printing values.
Exit behavior0. GITHUB_REMOTE_MISSING / GITHUB_WORKFLOW_* / GITHUB_SECRET_MISSING exit 1.
frontier setup github --yes

setup hash-key

Generate FRONTIER_ENTITY_HASH_KEY.

Syntaxfrontier setup hash-key [--yes] [--copy] [--print-key]
Important options--yes store with gh when available. --copy copy the complete key to the clipboard. --print-key print the complete key.
Required files or environmentOptional gh CLI. The hash key is not sent to SaaS.
Artifacts writtenNone locally unless you print/copy/store it.
Accesses SaaSNo.
Accesses SnowflakeNo.
Exit behavior0. CLIPBOARD_UNAVAILABLE exits 1 if --copy cannot find pbcopy/xclip/wl-copy.
frontier setup hash-key --yes

setup snowflake

Print least-privilege Snowflake grants.

Syntaxfrontier setup snowflake [project_dir] [--cdc] [--query-history]
Important options--cdc include CDC stream grants. --query-history include imported Snowflake query-history privileges.
Required files or environmentOptional dbt profile to personalize database/schema names.
Artifacts writtenPrints SQL to stdout. Does not execute it.
Accesses SaaSNo.
Accesses SnowflakeNo network call. Prints GRANT SQL only.
Exit behavior0.
frontier setup snowflake --cdc

demo change

Explain a harmless first test PR.

Syntaxfrontier demo change [project_dir]
Important optionsNone besides the project directory.
Required files or environmentA dbt project. Frontier will not commit or push.
Artifacts writtenNone.
Accesses SaaSNo.
Accesses SnowflakeNo.
Exit behavior0.
frontier demo change

SQL-change assessment commands

manifest fetch

Download the active semantic manifest.

Syntaxfrontier manifest fetch [project_dir] [--config CONFIG] [--api-url API_URL] [--output OUTPUT]
Important options--output default target/frontier-manifest.json. --config path to frontier.yml. --api-url SaaS origin.
Required files or environmentStored API credentials and an active SaaS manifest.
Artifacts writtenPinned JSON at --output.
Accesses SaaSYes.
Accesses SnowflakeNo.
Exit behavior0. ManifestError codes exit 1.
frontier manifest fetch --output target/frontier-manifest.json

inspect

Read dbt artifacts and print model lineage.

Syntaxfrontier inspect [project_dir] [--config CONFIG] [--manifest-file FILE] [--allow-local-manifest] [--base-manifest FILE]
Important options--base-manifest optional base-branch manifest.json. --manifest-file skips the active SaaS fetch. --allow-local-manifest uses frontier.yml mapping when no SaaS manifest is configured.
Required files or environmenttarget/manifest.json. In GitHub Actions, target/frontier-artifact-sha must match GITHUB_SHA.
Artifacts writtenNone (prints a report).
Accesses SaaSYes unless --manifest-file is set.
Accesses SnowflakeNo.
Exit behavior0, or 1 on ConfigError/ManifestError.
frontier inspect --manifest-file target/frontier-manifest.json --base-manifest target-base/manifest.json

compare

Compare compiled SQL between base-branch and PR manifests.

Syntaxfrontier compare [project_dir] --base-manifest FILE [--pr-manifest FILE] [--output OUTPUT] [--manifest-file FILE] [--allow-local-manifest] [--config CONFIG]
Important options--base-manifest is required. --pr-manifest defaults to target/manifest.json. --output writes frontier-compare.json.
Required files or environmentBase and PR manifest.json plus compiled SQL trees when present.
Artifacts writtenfrontier-compare.json when --output is set; otherwise prints the report.
Accesses SaaSYes unless --manifest-file is set.
Accesses SnowflakeNo.
Exit behavior0, or 1 on compare/config errors.
frontier compare --manifest-file target/frontier-manifest.json --base-manifest target-base/manifest.json

run

Execute frontier and validation queries.

Syntaxfrontier run [project_dir] [--profiles FILE] [--target NAME] [--events FILE] [--output FILE] [--run-id ID] [--include-entity-ids] [--hash-entity-ids] [--dry-run] [--base-manifest FILE] [--manifest-file FILE] [--allow-local-manifest] [--config CONFIG]
Important options--dry-run uses recorded fixture counts without a live warehouse (forbidden as customer CI). --events defaults to seeds/change_events.csv unless a SQL change is present. --include-entity-ids uploads raw IDs (skips FRONTIER_ENTITY_HASH_KEY). --hash-entity-ids HMAC even when include is set.
Required files or environmentCurrent dbt artifacts. Live Snowflake unless --dry-run. Hash key unless --include-entity-ids.
Artifacts writtentarget/frontier-run.json by default.
Accesses SaaSFetches the active manifest unless --manifest-file is set. Does not upload.
Accesses SnowflakeYes, unless --dry-run.
Exit behavior0, or 1 on warehouse/config errors. Not a substitute for prove.
frontier run --target ci --manifest-file target/frontier-manifest.json --base-manifest target-base/manifest.json

prove

Apply isolated mutations and prove targeted repair equals the full rebuild.

Syntaxfrontier prove [project_dir] [--profiles FILE] [--target NAME] [--events FILE] [--output FILE] [--run-id ID] [--include-entity-ids] [--hash-entity-ids] [--dry-run] [--base-manifest FILE] [--manifest-file FILE] [--allow-local-manifest] [--config CONFIG]
Important optionsSame option names as run. Customer CI must not set FRONTIER_DRY_RUN; prove refuses dry-run when GITHUB_ACTIONS=true.
Required files or environmentCurrent dbt artifacts, pinned/active semantic manifest, Snowflake (unless dry-run). Hash key unless --include-entity-ids.
Artifacts writtentarget/frontier-run.json.
Accesses SaaSFetches the active manifest unless --manifest-file is set. Does not upload.
Accesses SnowflakeYes, unless --dry-run.
Exit behavior0 writes the assessment file even when full rebuild is required. Warehouse/config errors exit 1.
frontier prove --target ci --manifest-file target/frontier-manifest.json --base-manifest target-base/manifest.json

record-failure

Write a failed assessment without reading dbt artifacts.

Syntaxfrontier record-failure [project_dir] [--reason TEXT] [--output FILE] [--run-id ID] [--include-entity-ids] [--hash-entity-ids] [--manifest-file FILE] [--allow-local-manifest] [--config CONFIG]
Important options--reason default is 'dbt build failed; no current artifacts'.
Required files or environmentOptional pinned manifest. Does not require target/manifest.json.
Artifacts writtentarget/frontier-run.json.
Accesses SaaSFetches the active manifest unless --manifest-file is set.
Accesses SnowflakeNo.
Exit behavior0.
frontier record-failure --manifest-file target/frontier-manifest.json --reason "base-branch dbt compile failed"

upload

POST aggregate results to Frontier SaaS.

Syntaxfrontier upload [project_dir] [--run-file FILE] [--run-id ID] [--api-url URL] [--blocking] [--skip-pr-comment] [--config CONFIG]
Important options--blocking exit 1 after a successful upload when assessment status is failed. --skip-pr-comment do not post or update a GitHub PR comment. --run-file path to frontier-run.json.
Required files or environmenttarget/frontier-run.json (or --run-file). API credentials. In GitHub Actions, GITHUB_TOKEN is used locally for the comment step only.
Artifacts writtenNone locally. Creates/updates the dashboard run.
Accesses SaaSYes. POST ingest. Snowflake credentials are not in this step's environment in the generated workflow.
Accesses SnowflakeNo.
Exit behavior0 on successful upload unless --blocking and status=failed, then 1. HTTP 429/5xx retries; 413 and other errors exit 1.
frontier upload --blocking

CDC commands

All CDC commands take an optional project directory, --cdc-config (default frontier-cdc.yml), and --config (frontier.yml). Prove/upload also accept --manifest-file and --allow-local-manifest.

cdc inspect

Print configured CDC streams without consuming them.

Syntaxfrontier cdc inspect [project_dir] [--cdc-config FILE] [--config FILE] [--target NAME] [--manifest-file FILE] [--allow-local-manifest]
Important optionsDoes not read stream contents.
Required files or environmentfrontier-cdc.yml with provider snowflake_stream.
Artifacts writtenNone.
Accesses SaaSYes unless --manifest-file is set (overlay routes from the pinned manifest).
Accesses SnowflakeNo.
Exit behavior0, or 1 if the CDC config is invalid.
frontier cdc inspect

cdc status

Report whether configured streams have pending data.

Syntaxfrontier cdc status [project_dir] [--cdc-config FILE] [--profiles FILE] [--target NAME] [--config FILE]
Important options--profiles dbt profiles.yml (default ~/.dbt/profiles.yml). --target dbt target name.
Required files or environmentfrontier-cdc.yml and Snowflake connectivity.
Artifacts writtenNone. Prints STREAM: pending|empty.
Accesses SaaSNo.
Accesses SnowflakeYes. Does not consume.
Exit behavior0.
frontier cdc status

cdc consume

Durably capture pending stream records.

Syntaxfrontier cdc consume [project_dir] [--cdc-config FILE] [--profiles FILE] [--target NAME] [--config FILE]
Important optionsSame warehouse flags as status.
Required files or environmentSnowflake. Control tables in the stream database/schema.
Artifacts writtenDurable CDC batch rows in Snowflake. Status EMPTY, REUSED, or a new CAPTURED batch id.
Accesses SaaSNo.
Accesses SnowflakeYes.
Exit behavior0 on empty/reuse/capture. 1 if the stream is claimed or capture DML fails.
frontier cdc consume

cdc prove

Route a captured CDC batch and run targeted proof.

Syntaxfrontier cdc prove [project_dir] [--batch-id ID] [--apply] [--profiles FILE] [--target NAME] [--cdc-config FILE] [--manifest-file FILE] [--allow-local-manifest] [--config FILE]
Important options--batch-id default oldest CAPTURED or FAILED. --apply apply the repair to the target mart (default assessment only).
Required files or environmenttarget/manifest.json, pinned/active semantic manifest, captured batch, Snowflake.
Artifacts writtentarget/frontier-run.json for the CDC assessment.
Accesses SaaSFetches the active manifest unless --manifest-file is set.
Accesses SnowflakeYes.
Exit behavior0 when proof completes. 1 if the batch is missing, already proved, or SQL cannot be filtered safely.
frontier cdc prove

cdc upload

Upload a completed CDC assessment to Frontier SaaS without re-running proof.

Syntaxfrontier cdc upload [project_dir] [--batch-id ID] [--api-url URL] [--profiles FILE] [--target NAME] [--cdc-config FILE] [--manifest-file FILE] [--allow-local-manifest] [--config FILE]
Important options--batch-id default newest COMPLETED batch not yet uploaded.
Required files or environmentCompleted proof evidence and API credentials. Snowflake is used to read control-table state and mart row counts, not to send rows to SaaS.
Artifacts writtenMarks the batch uploaded in Snowflake control tables.
Accesses SaaSYes.
Accesses SnowflakeYes, for batch metadata and mart counts. Upload payload is aggregates only.
Exit behavior0. BASELINE_STALE, missing batch, or failed validation exit 1.
frontier cdc upload