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
Command
Purpose
config / profiles / context
Local server, profile and Org/App/environment selection
doctor / capabilities
Server readiness and command coverage
login / auth status / logout
Browser login, device authorization status and revocation
projects list
Read authorized App names and environments with project.read
funnels validate / funnels diff
Validate and compare local Funnel documents
paywalls validate / paywalls diff
Validate 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
1pnpm task cli:build2pnpm--silent grow --help3pnpm--silent grow capabilities --only-supported--json4pnpm--silent grow config init --server https://groove-grow.vercel.app5pnpm--silent grow profiles add work --server https://groove-grow.vercel.app6pnpm--silent grow profiles use work7pnpm--silent grow context use --org <org-uuid> --app <app-uuid> --env sandbox8pnpm--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
1pnpm--silent grow login --profile work2pnpm--silent grow auth status --profile work --json3pnpm--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
1pnpm--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.
--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
Value
Meaning
0
Success
2
Invalid arguments, configuration, file or document
3
Missing login, denied grant, failed refresh or expired session
4
Origin binding or redirect constraint failed
5
Configuration conflict or occupied write lock
6
Service, network or response protocol error
7
Runtime, 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.