--yes.
Authentication
Provide a token without the interactive login. Generate one from the CLI auth page ↗.- Environment variable (recommended)
- Flag
Preferred for CI and agents — the token never appears in the process list or
shell history.
--auth-token flag takes precedence over SUBFRAME_AUTH_TOKEN if both are
set. Either is verified and cached on first use, so later commands in the same
environment reuse it without re-supplying or re-verifying it.
Global flags
| Flag | Description |
|---|---|
-y, --yes | Accept the safe defaults and never prompt. Implied automatically when stdin is not a TTY. |
--non-interactive | Strict mode: never prompt and never assume a default — fail if any required value is missing. Use this when you want a run to error rather than guess. |
--json | Print a machine-readable JSON result to stdout. Human logs go to stderr. Implies non-interactive. |
--json, prints an
{ "ok": false, "error": ... } envelope to stdout), so you can rely on either
the exit code or the JSON in a pipeline.
Examples
Sync components in CI
The most common case. Afterinit has been run once and committed
.subframe/sync.json, syncing only needs a token:
Initialize an existing project non-interactively
Pass the values the CLI would otherwise prompt for:init flags worth knowing:
--projectId <id>— required when your account has more than one project (otherwise the CLI can’t choose for you and will list the available ids).--css-type <tailwind|tailwind-v4>— required if the CLI can’t detect your Tailwind version.--dir <path>— where components sync to.--alias <alias>— the import alias to use. Must end with/*(e.g.@/ui/*) so it matches every file in the directory; the CLI rejects an alias without it.--no-install,--no-sync,--no-tailwind— skip a step that would otherwise prompt. The matching--install/--sync/--tailwindforce it on.--no-update-import-alias— don’t change the import alias stored in your Subframe project.
Scaffold a brand new project
Creating a project from scratch can’t guess your framework or name, so pass them:Parse the result
With--json, stdout carries only the result object:

