TechFabricTechFabric
Reference

CLI reference

The fx commands you will actually use day to day, covering both the local workflow and the hosted one, with flags and exit codes.

The fx CLI is published as @fabricorg/experiments.

Databricks target packs

Discover and diagnose built-in packs without making a workspace mutation.

fx targets list
fx targets list --json
fx targets doctor sql-delta
fx targets doctor lakeflow-jobs --json

Live execution is deliberately fail-closed.

fx targets run sql-delta --live
fx targets run lakeflow-jobs --live \
  --required jobs-orchestration \
  --evidence reports/jobs.json \
  --junit reports/jobs.xml

--live sets the same explicit gate as DBX_TEST_LIVE=1. Doctor validates alternative authentication, workspace/warehouse requirements, pack-specific configuration, and every required check before the runner creates or mutates a resource.

Publish pack-aware evidence using the active secure profile.

fx login
fx targets publish reports/jobs.json

The CLI derives a stable suite name from the pack metadata. Use --suite only when organization policy requires another exact name. See Databricks target packs for available pack IDs, maturity, configuration, and limitations.

For a Databricks Apps API in CI, set DATABRICKS_HOST, FX_QUALITY_DATABRICKS_CLIENT_ID, and FX_QUALITY_DATABRICKS_CLIENT_SECRET for direct OAuth M2M. Use --databricks-profile <name> with an interactive Databricks CLI profile. The Fabric API key still enforces the organization and role after the Databricks gateway authenticates the caller.

Harness operator and Fiber

Inspect the tenant-scoped operator without mutating an experiment.

fx harness list
fx harness doctor
fx harness run quality-status

Open TechFabric Harness Fiber against the same hosted profile.

fx harness fiber
fx harness fiber --plain

Run finite jobs from CI or a shell.

fx harness run srm-watcher --input '{"apply":false,"metric":"signup"}'
fx harness run analyst --input '{"experimentId":"<id>","deliver":false}'

SRM changes require "apply":true; analyst delivery requires "deliver":true. The defaults are preview-only. Fiber connects through a localhost-only bridge so the Fabric API key and Databricks bearer aren't placed in child-process arguments. See Harness agents and Fiber for roles, job schemas, Quality evidence, and troubleshooting.

Customer-owned agents are enrolled using an already-pinned Ed25519 release key.

fx harness register-key --input '{"keyId":"release-2026","publicKeyHex":"<64 hex chars>"}'
fx harness enroll --input "$(cat signed-agent-envelope.json)"
fx harness revoke-key release-2026

The enrollment envelope pins the implementation digest, Harness runtime, capabilities, model policy, and optional Unity Catalog Agent Service request. See Deploying a Harness worker on Databricks Apps for signing and reconciliation details.

Install globally:

npm install -g @fabricorg/experiments
fx --version

Use it directly:

fx --help
fx login --api-key fx_key_...
fx doctor
fx harness doctor
fx harness fiber
fx validate experiments/
fx dev
fx plan experiments/
fx apply experiments/
fx push experiments/ --api-url https://api.example.com --api-key fx_key_... --tenant <orgId>
fx report homepage-cta
fx kill homepage-cta --reason "Web Vitals regression"
fx init databricks-tests ./quality-tests
fx test publish ./quality-tests/reports/evidence.json

If you cannot install globally, run the same commands with npx @fabricorg/experiments.

Local workflow

Local mode uses .fx/ in your workspace.

fx validate experiments/
fx plan experiments/
fx apply experiments/
fx dev
  • fx plan compares YAML to .fx/store.json.
  • fx plan uses detailed exit codes: 0 means the workspace is in sync, 2 means the plan is valid and contains changes, and 1 means an error. In CI, treat 0 and 2 as successful plan evaluation.
  • fx apply invokes local domain actions and writes .fx/manifest.json.
  • fx dev signs and serves the local manifest, its JWKS and revocation record, plus local exposure/conversion ingest endpoints. Browser and Node SDKs use the same fail-closed verification path locally as they do in production.

Hosted push

Login once

Create a scoped API key in Studio Settings → API keys, then configure a private local profile:

fx login --api-key fx_key_...
fx doctor
fx profile show

fx login starts from https://studio.experiments.techfabric.com, discovers the current Databricks Apps API, validates the key, reads its organization and role, and stores the profile with owner-only file permissions. If the App is protected by Databricks OAuth, it uses the active Databricks CLI login; select another one with --databricks-profile <name>.

Use multiple environments without rewriting commands.

fx login --profile staging --api-key fx_key_...
fx profile list
fx profile use staging
fx doctor --profile staging
fx logout staging

Precedence is explicit flags → environment variables → active profile. Secrets are never printed by fx profile or fx doctor.

Use fx push to reconcile local YAML into a hosted API organization.

fx push experiments/

fx push:

  1. validates local YAML using the shared @fabricorg/experiments-yaml parser,
  2. fetches hosted experiments for the target org,
  3. prints the same Terraform-style plan as local fx plan,
  4. invokes hosted domain actions,
  5. publishes the hosted manifest unless --no-publish is set.

Useful flags:

fx push experiments/ --dry-run
fx push experiments/ --allow-deletes
fx push experiments/ --no-publish

Environment variable equivalents.

export FX_API_URL=https://api.example.com
export FX_API_KEY=fx_key_...
export FX_ORG_ID=<orgId>
fx push experiments/

Create API keys in Studio at /app/{orgSlug}/settings.

Databricks BDD and Quality Center

# Scaffold a standalone TypeScript/Gherkin suite.
fx init databricks-tests ./databricks-tests

# Publish Fabric BDD JSON, Databricks live-suite JSON, standard JUnit XML,
# or generic Fabric CLI check JSON.
fx test publish reports/evidence.json --suite "Data contracts"
fx test publish reports/junit.xml --suite "dbt tests"
fx test publish reports/experiment-preflight.json

With a profile, fx test publish needs no URL, key, or tenant flag. For CI it also reads FX_API_URL, FX_API_KEY, and FX_ORG_ID, with --api-url, --api-key, and --tenant equivalents. --external-id makes uploads idempotent outside GitHub Actions; --run-url attaches a CI link. Generic JSON uses "kind": "fabric-cli" and a cases array. A/B exposure and conversion analytics remain on the Experiments result pages; Quality stores test and preflight evidence. See Quality Center for schemas, CI examples, redaction, and Studio behavior.

Mojito-parity commands

# Migrate a directory of Mojito waves to Fabric YAML. Existing output files are
# preserved unless you pass --force; add --strict to fail on manual-review
# warnings. A wave with fewer than two recipes fails rather than emit invalid YAML.
fx import-mojito ./waves --out ./experiments

# Mint a signed preview link for a variant. Local mode (default) signs with a
# per-workspace secret in .fx/preview-secret; pass --api-url + --api-key to
# sign via the hosted /v1/orgs/{orgId}/preview/sign endpoint instead.
fx preview hero-cta-color --variant green-action \
  --origin https://staging.example.com \
  --ttl 600

Preview tokens are bearer credentials in URLs. Default TTL is 900s; the server clamps to [60, 3600]. Pages that may receive preview links should set Referrer-Policy: no-referrer to prevent token leakage via the Referer header. See Migrating from Mojito for the end-to-end workflow.

On this page