Skip to content
Indiana
Dashboard
Docs
Browse docs / Indiana CLI

Indiana CLI

Configure scope, approve access in your browser, list Apps and validate Funnel / Paywall documents from your terminal.

CLI 0.1.0Updated

Current capabilities

Indiana CLI uses your console member identity. Browser approval grants access to a specific App and environment. The current version is 0.1.0 and requires Node.js >=22.

Available commands and limits
CommandPurpose
config / profiles / contextLocal server, profile and Org/App/environment selection
doctor / capabilitiesServer readiness and command coverage
login / auth status / logoutBrowser login, device authorization status and revocation
projects listRead authorized App names and environments with project.read
funnels validate / funnels diffValidate and compare local Funnel documents
paywalls validate / paywalls diffValidate and compare local Paywall documents

Available commands and limits

  • config / profiles / context

    Purpose
    Local server, profile and Org/App/environment selection
  • doctor / capabilities

    Purpose
    Server readiness and command coverage
  • login / auth status / logout

    Purpose
    Browser login, device authorization status and revocation
  • projects list

    Purpose
    Read authorized App names and environments with project.read
  • funnels validate / funnels diff

    Purpose
    Validate and compare local Funnel documents
  • paywalls validate / paywalls diff

    Purpose
    Validate and compare local Paywall documents
Remote customer, product, entitlement, coupon, finance and Funnel/Paywall read, write and publish commands are still pending. capabilities describes this executable; it does not prove account permissions.

Build and configure

The CLI is a private workspace package and is not published to npm. Build and run it from the Indiana repository root. All commands below use the repository entry pnpm --silent grow.

Replace the UUID placeholders with the IDs of your existing organization and App. Select Org, App and environment before login. context use only saves your selection; the server checks ownership, current membership and approved scope.

config init creates grow.config.json in the current directory without overwriting an existing file. Scope priority is explicit flags, project configuration, then the selected profile. context use updates existing project configuration, otherwise the selected profile. Configuration may be committed; keep tokens and SDK keys out of it.

terminal.shShell
pnpm task cli:buildpnpm --silent grow --helppnpm --silent grow capabilities --only-supported --jsonpnpm --silent grow config init --server https://groove-grow.vercel.apppnpm --silent grow profiles add work --server https://groove-grow.vercel.apppnpm --silent grow profiles use workpnpm --silent grow context use --org <org-uuid> --app <app-uuid> --env sandboxpnpm --silent grow doctor --json

Login and App approval

  • The CLI opens your system browser. Sign in with your console account and approve the OAuth identity request.
  • A second page shows the device request, App, environment and project.read permission. Check the device label and terminal pairing code before approval.
  • The CLI waits for approval, then saves credentials. Pending requests expire after 10 minutes and management grants after 30 days. Token refresh does not extend the grant.

Login uses Authorization Code with PKCE S256. The exact callback is http://127.0.0.1:43187/callback, used only by the local CLI to receive OAuth responses. The management service and approval pages use the deployed origin. An occupied port fails login; the callback is not changed or loosened.

The CLI uses user OAuth credentials, without browser cookies, client secrets or SDK keys. Each remote query rechecks the account, Auth session, client, grant and membership. New browserless logins and CI service accounts are not available yet.

terminal.shShell
pnpm --silent grow login --profile workpnpm --silent grow auth status --profile work --jsonpnpm --silent grow projects list --profile work --json

Credentials and device revocation

Credentials default to the operating system credential store, bound to the management origin, profile, issuer, client, user and session. An unavailable credential store fails explicitly, without automatic file fallback. POSIX users may explicitly choose --credential-store file with 0700 directories and 0600 files. Windows does not support this file mode.

logout revokes this device's server grant before deleting local credentials. Network failure retains credentials and reports incomplete revocation. logout --local only removes local credentials; the server grant may remain valid. Open https://groove-grow.vercel.app/cli/sessions to review and revoke individual devices. Revoking one device leaves other devices unchanged.

terminal.shShell
pnpm --silent grow logout --profile work

Validate and compare design documents

Use the current schemaVersion 1 FunnelDocument / PaywallDocument. Input must be valid UTF-8 and JSON, at most 1,000,000 bytes. draft allows incomplete drafts; publish checks publication structure. validate accepts --file - for stdin. Obsolete formats are rejected.

Validation reports validation=local and serverChecks=not_run. Structural validity does not authorize publication: tenant access, fixed references, providers and current state still require server checks. diff emits JSON Pointers, change kinds and stable SHA-256 hashes without document values. It shows up to 100 changes with total / truncated fields.

terminal.shShell
pnpm --silent grow funnels validate --file funnel.json --mode publish --jsonpnpm --silent grow paywalls validate --file paywall.json --mode draft --jsonpnpm --silent grow funnels diff --against before.json --file after.json --jsonpnpm --silent grow paywalls diff --against before.json --file after.json --json

Script output and troubleshooting

--json emits one JSON result on stdout; login progress goes to stderr. Errors include error.code, message and retryable. Output omits access/refresh tokens, PKCE verifiers and OAuth codes. --non-interactive does not start a new browser login. --timeout sets each request deadline in milliseconds, from 1–60000, defaulting to 10000.

Exit codes
ValueMeaning
0Success
2Invalid arguments, configuration, file or document
3Missing login, denied grant, failed refresh or expired session
4Origin binding or redirect constraint failed
5Configuration conflict or occupied write lock
6Service, network or response protocol error
7Runtime, management API or authorization not ready

Exit codes

  • 0

    Meaning
    Success
  • 2

    Meaning
    Invalid arguments, configuration, file or document
  • 3

    Meaning
    Missing login, denied grant, failed refresh or expired session
  • 4

    Meaning
    Origin binding or redirect constraint failed
  • 5

    Meaning
    Configuration conflict or occupied write lock
  • 6

    Meaning
    Service, network or response protocol error
  • 7

    Meaning
    Runtime, management API or authorization not ready
  • If doctor reports ready=false, use its output to check the service origin and OAuth configuration before login.
  • For an expired or revoked grant, or changed membership, inspect auth status and sign in for a new approval under your current permissions.
  • When changing servers, create a profile for that origin. Saved tokens cannot be carried to another service.