Skip to content

Getting Started

This guide takes you from zero to a running experiment: install the CLI, log in, pick a cluster, submit a workload, and read its status and logs. Each step shows the command and the kind of output you'll see.

Quickstart

1. Install the CLI

The Falcon repository is private, so build the falcon binary from source:

sh
git clone https://github.com/primatrix/Falcon
cd Falcon
go build -o /tmp/falcon ./apps/falcon

Put /tmp/falcon somewhere on your PATH (or call it by full path). The CLI talks to the production Falcon server by default — no extra config needed for daily use.

2. Log in

sh
falcon auth login

This opens your browser to the Cloudflare Access login page and stores the issued token under ~/.config/falcon/credentials.json. On success:

text
Login successful for https://falcon.infiscale-infra.org

On a headless machine the CLI prints the login URL to your terminal — open it on any other device and the login still completes.

3. See available clusters

sh
falcon cluster list

You'll see something like:

text
CLUSTER_ID    NAME           PROJECT             LOCATION     TPU_TYPE  STATUS   CREATED_AT
cl-7af2k9qd   tpu7x-cluster  tpu-service-473302  us-central1  v7x       active   2026-04-12 09:31 CST

You need at least one cluster with STATUS active to submit work. If there isn't one, ask an operator to register or activate a cluster.

4. Submit an experiment

Describe the workload in a YAML file. This minimal example runs a trivial command on one v7x chip:

sh
cat <<EOF > experiment.yaml
name: trial-001
exp_type: training
cluster_name: tpu7x-cluster
artifact_type: hlo
role_to_task_spec:
  worker:
    command: "echo hello && sleep 5"
    replica: 1
    image: "busybox:1.37"
    device_type: "v7x"
    device_topo: "2x2x1"
EOF

falcon exp create -f experiment.yaml

Falcon creates the experiment, its backing job, and an artifact, and prints their IDs:

text
EXP_ID          JOB_ID          ARTIFACT_ID   NAME       STATUS   ARTIFACT_URI
exp-arf29g1hql  job-8kd2m1xqp4  art-9plzq2v8  trial-001  pending  gs://.../experiments/exp-arf29g1hql/artifacts/art-9plzq2v8/

Note the EXP_ID — you'll use it for everything below.

By default Falcon chooses the cluster's configured supply path. To force a GKE flex-start node pool, set supply_mode: flex-start under the role's task spec. See Experiment Lifecycle for the full example and caveats.

5. Check status

sh
falcon exp get exp-arf29g1hql
text
exp_id:       exp-arf29g1hql
name:         trial-001
status:       running
exp_type:     training
cluster:      tpu7x-cluster
job_id:       job-8kd2m1xqp4
job_status:   RUNNING
conditions:
  - type:                 ResourceReady
    status:               True
    reason:               reservation
  - type:                 K8sJobSubmitted
    status:               True
    reason:               Submitted
artifact_id:  art-9plzq2v8
artifact_uri: gs://.../experiments/exp-arf29g1hql/artifacts/art-9plzq2v8/

status walks created → pending → running → succeeded | failed. The conditions block is the durable scheduling/provisioning trail — useful when an experiment sits in pending longer than expected.

6. Read logs

sh
falcon exp logs exp-arf29g1hql

This streams the workload pod's stdout/stderr through Falcon — no direct Kubernetes access needed. Add -f to follow a live run.

Prerequisites

  • CLI binary — built from source as in step 1.

  • Server URL — defaults to the production endpoint. Override per call with --server <addr> or set FALCON_SERVER=<addr> in your shell.

  • Credentials — interactively, falcon auth login (humans). For CI / automation, set a Cloudflare Access service token instead:

    sh
    export FALCON_CF_ACCESS_CLIENT_ID='<id>.access'
    export FALCON_CF_ACCESS_CLIENT_SECRET='<secret>'
  • An active cluster — at least one row with STATUS active in falcon cluster list.

Core commands

CommandWhat it does
falcon exp create -f <yaml>Submit an experiment
falcon exp get <exp_id>Show status, conditions, artifact
falcon exp listList your experiments
falcon exp logs <exp_id>Stream workload logs (-f to follow)
falcon exp abort <exp_id>Stop a running experiment
falcon exp exec <exp_id> -- <cmd>Run a command inside a live pod
falcon exp inspect <exp_id>Render a reproduction manifest
falcon exp delete <exp_id>Remove an experiment record

Next steps

Scripting & automation

Every command supports --output json for scripts and CI to consume a stable machine-readable form instead of the human tables above. For agent- and pipeline-friendly workflows (submit, wait, collect, analyze), see the falcon-workflow skill, which wraps these commands behind a locked JSON envelope.