Description of commands available in the Granite console client
Every command available in the Granite console client. Generated from the CLI source at granite-so/cli — if something here disagrees with novps <command> --help, the CLI is right and this page is stale.
The binary is novps. Install it with curl https://cli.granite.so | sh, then authenticate with a Personal Access Token from the dashboard.
Global options
Every command accepts these.
Option
Short
Default
Description
--project
-p
default
Project alias to act on. Tokens are stored per alias, so one machine can drive several projects.
--json
—
false
Machine-readable output. Available on every list and get command, and on apps apply, apps deploy, resources update and resources deploy.
--force
-f on some commands
false
Skip the typed confirmation on a destructive command.
Destructive commands (apps delete, resources delete, databases delete, storage delete, storage keys regenerate and the sub-command deletes) prompt you to type DELETE and exit with a non-zero code if you do not. --force skips the prompt — that is what makes them usable from CI and from an AI agent.
novps apps apply --wait exits non-zero when the deployment does not reach success, so a deploy step fails a pipeline instead of passing quietly.
novps resources exec runs a command inside a container and exits with that command’s exit code, so a script or an agent can run commands in a container without an interactive shell.
Configuration
Setting
Source
Default
Token
~/.novps/config.json
—
API URL
NOVPS_API_URL, then api_url in the config file
https://api.granite.so
WebSocket URL
NOVPS_WS_URL, then ws_url in the config file
wss://websocket.granite.so
Install directory
NOVPS_INSTALL_DIR (install script only)
~/.local/bin or /usr/local/bin
Authorization
Commands related to authentication. The token is validated with a test API call before it is saved.
novps auth login
Authenticate with a Personal Access Token.
Option
Short
Default
Description
--token
-t
—
Personal Access Token. If not provided, you are prompted interactively.
--project
-p
default
Project alias to store the token under.
Tokens start with nvps_. Reading the token from the environment keeps it out of shell history, which is what you want in CI.
Terminal window
novpsauthlogin
novpsauthlogin--token"$GRANITE_TOKEN"
novpsauthlogin--project=staging
novps auth logout
Remove the saved authentication token.
Option
Short
Default
Description
--project
-p
default
Project alias to remove the token for.
Terminal window
novpsauthlogout
novpsauthlogout--project=staging
novps auth status
Show current authentication status: whether you are authenticated, and a truncated token prefix for identification.
Option
Short
Default
Description
--project
-p
default
Project alias to check.
Terminal window
novpsauthstatus
Applications
An application is the scope that holds your resources. apply is the command most workflows are built on: it creates or updates the whole application from a YAML manifest and is idempotent, matching resources by name.
novps apps list
List all applications in the project. Output columns: ID, Name, Resources, Created At.
Option
Short
Default
Description
--json
—
false
Output as JSON.
--project
-p
default
Project alias.
Terminal window
novpsappslist
novpsappslist--json
novps apps resources
List resources belonging to an application. Output columns: ID, Name, Type, Public Domain, Replicas, Schedule.
Argument
Required
Description
APP_ID
yes
Application ID.
Option
Short
Default
Description
--json
—
false
Output as JSON.
--project
-p
default
Project alias.
Terminal window
novpsappsresources0f3c1b2a-...
novps apps apply
Create or update an application from a YAML manifest. The application name is the CLI argument, not a field in the file, so the same manifest can create my-api-staging and my-api-prod.
Argument
Required
Description
APP_NAME
yes
Application name, unique within the project.
Option
Short
Default
Description
--file
-f
—
Path to the YAML manifest. Required.
--env-file
—
—
Path to a .env file, merged under the shell environment for ${VAR} substitution.
--prune
—
false
Delete resources in the application that are not in the manifest.
--dry-run
—
false
Parse and validate only; no API call.
--wait
-w
false
Wait for the deployment to finish, then print the endpoints.
--json
—
false
Output as JSON, including deployment_status and the resolved endpoints when used with --wait.
--project
-p
default
Project alias.
${VAR} references are substituted locally before the manifest is sent — from --env-file first, then the shell environment, which wins on conflict. An undefined variable is an error, not an empty string. A $VAR reference without braces is left alone and resolved by Granite from the application’s own environment variables at deploy time.
A manifest with source_type: github requires the Granite GitHub App on the repository; the CLI checks this before applying and stops with an explanation if the integration is missing.
Trigger a manual deployment for every resource in the application.
Argument
Required
Description
APP_ID
yes
Application ID.
Option
Short
Default
Description
--json
—
false
Output as JSON.
--project
-p
default
Project alias.
Terminal window
novpsappsdeploy0f3c1b2a-...
novps apps update
Update an application’s name or description. At least one of the two is required.
Argument
Required
Description
APP_ID
yes
Application ID.
Option
Short
Default
Description
--name
—
—
New application name.
--description
—
—
New description.
--json
—
false
Output as JSON.
--project
-p
default
Project alias.
Terminal window
novpsappsupdate0f3c1b2a-...--name"Production API"
novps apps set-env
Set application-wide environment variables. They are shared by all resources of the application. Unless you pass --no-deploy, the application is redeployed so the new values take effect. Available since CLI v0.10.0.
Merging reads the current values, so it requires the apps.show-secrets permission. --replace does not.
Argument
Required
Description
APP_ID
yes
Application ID.
PAIRS
yes
One or more KEY=VALUE pairs.
Option
Short
Default
Description
--merge / --replace
—
--merge
Merge with the existing variables, or replace them all.
Remove application-wide environment variables. Requires the apps.show-secrets permission. Fails if none of the keys are set. Available since CLI v0.10.0.
Argument
Required
Description
APP_ID
yes
Application ID.
KEYS
yes
One or more keys to remove.
Option
Short
Default
Description
--no-deploy
—
false
Save the change without redeploying.
--project
-p
default
Project alias.
Terminal window
novpsappsunset-env0f3c1b2a-...LOG_LEVELOLD_FLAG
novps apps delete
Delete an application and all of its resources (soft delete).
Argument
Required
Description
APP_ID
yes
Application ID.
Option
Short
Default
Description
--force
-f
false
Skip the confirmation.
--project
-p
default
Project alias.
Terminal window
novpsappsdelete0f3c1b2a-...
novpsappsdelete0f3c1b2a-...--force
novps apps events
Show the events of an application — failing healthchecks, restarts, out-of-memory kills, crash loops, image pull and configuration errors, cron runs and deployments — oldest first. (ongoing) marks a problem that is still open.
Argument
Required
Description
APP_ID
yes
Application ID.
Option
Short
Default
Description
--type
-t
—
Only this event type, e.g. resource.down or deployment.failed.
--resource
-r
—
Only events of this resource (name or ID).
--since
-s
—
Only events newer than a duration: 30m, 6h, 7d.
--limit
-n
25
Number of events (1–500).
--follow
-f
false
Keep printing new events as they happen.
--json
—
false
Output as JSON; with --follow, one object per line.
A resource is one deployable unit inside an application: a web-app, a worker or a cron-job. update is the general form; scale, set-image and set-env are shortcuts for the fields you change most often.
Open an interactive shell in a running container — the terminal equivalent of the Console tab in the dashboard.
Argument
Required
Description
RESOURCE_ID
yes
Resource ID to connect to.
Option
Short
Default
Description
--project
-p
default
Project alias.
Terminal window
novpsresourcesconnect7a91c4d8-...
To run commands from a script or an AI agent, use resources exec instead — connect needs a real terminal.
novps resources exec
Run a command in a running container without an interactive terminal. Only the command’s output is printed, and the CLI exits with the command’s exit code — 255 if the session drops before the command finishes. Use it from scripts, CI and AI agents such as Claude Code or Codex.
Argument
Required
Description
RESOURCE_ID
yes
Resource ID to run the command in.
COMMAND
no
Command to run with /bin/sh. Without it, a script is read from stdin.
Option
Short
Default
Description
--stdin
-i
false
Pass local stdin to the command.
--project
-p
default
Project alias.
The arguments are joined with spaces and run by /bin/sh, the same way ssh does, so pipes and && work inside a quoted argument. Put -- before a command that has its own flags.
Change replica size and count. Shortcut for update --replicas.
Argument
Required
Description
RESOURCE_ID
yes
Resource ID.
Option
Short
Default
Description
--replicas
-r
—
Replica size and count as size:count. Required.
--project
-p
default
Project alias.
Terminal window
novpsresourcesscale7a91c4d8-...-rsm:2
novps resources set-image
Update the image, tag and/or registry credentials. Shortcut for update.
Argument
Required
Description
RESOURCE_ID
yes
Resource ID.
Option
Short
Default
Description
--image
—
—
New image name.
--tag
—
—
New image tag.
--docker-credentials
—
—
USER:PASSWORD, a stored credential UUID, or an empty string to remove.
--project
-p
default
Project alias.
The credentials field in a manifest is read only when the resource is created — on later applies it is ignored. That is deliberate, so a committed file never has to carry a secret. Set and rotate credentials here instead, reading the value from the environment to keep it out of shell history.
List secret keys for an application or a single resource. Values are masked unless you ask for them.
Argument
Required
Description
APP_ID
yes
Application ID.
Option
Short
Default
Description
--resource
-r
—
Resource ID, for resource-level secrets.
--with-values
—
false
Include secret values in the output.
--json
—
false
Output as JSON.
--project
-p
default
Project alias.
Terminal window
novpssecretslist0f3c1b2a-...
novpssecretslist0f3c1b2a-...--with-values
novpssecretslist0f3c1b2a-...-r7a91c4d8-...
novps secrets get
Get a single secret value by key name.
Argument
Required
Description
APP_ID
yes
Application ID.
SECRET_KEY
yes
Secret key name, e.g. DATABASE_URL.
Option
Short
Default
Description
--json
—
false
Output as JSON.
--project
-p
default
Project alias.
Terminal window
novpssecretsget0f3c1b2a-...DATABASE_URL
Databases
Managed PostgreSQL, MySQL and Redis. Databases are not declared in the application manifest — create them here, then pass the connection string into the application through envs and --env-file, and grant access with databases allow-apps.
Databases are never exposed publicly. Use novps port-forward database to reach one from your machine.
novps databases list
List databases in the project.
Option
Short
Default
Description
--json
—
false
Output as JSON.
--project
-p
default
Project alias.
novps databases get
Show detailed information for a database.
Argument
Required
Description
DATABASE_ID
yes
Database ID.
Option
Short
Default
Description
--show-password
—
false
Include the password and DATABASE_URL.
--format
-f
table
Output format: table, json or env.
--project
-p
default
Project alias.
--format env prints DB_ENGINE, DB_HOST, DB_PORT, DB_USER, DB_NAME and DB_PASSWORD, adding DATABASE_URL when --show-password is given — which makes it a one-liner to seed a local .env.
novps databases pg-user is kept as a hidden alias for user. Use user in new scripts.
Registry
novps registry list
List the namespaces in the Granite Docker registry.
Option
Short
Default
Description
--json
—
false
Output as JSON.
--project
-p
default
Project alias.
Terminal window
novpsregistrylist
Storage
S3-compatible buckets. Buckets and keys are addressed by their unique identifier — internal_domain for a bucket, internal_name for a key — not by display name, because display names are not guaranteed unique within a project. Run the matching list command to see the identifier in the first column.
novps storage list
List buckets, with their origin and CDN endpoints.
Option
Short
Default
Description
--json
—
false
Output as JSON.
--project
-p
default
Project alias.
novps storage create
Create a bucket. A unique identifier suffix is appended to the display name automatically; the identifier to use afterwards is internal_domain in the output.
Argument
Required
Description
NAME
yes
Display name, 3–40 characters, alphanumeric and dashes.
Option
Short
Default
Description
--region
—
eu
Region: europe, usa or asia. eu creates the bucket in europe.
--json
—
false
Output as JSON.
--project
-p
default
Project alias.
Terminal window
novpsstoragecreatemy-bucket
novpsstoragecreatemy-bucket--regionusa
novps storage set-access
Change a bucket’s access policy.
Argument
Required
Description
BUCKET
yes
Bucket identifier (internal_domain).
ACCESS_LEVEL
yes
private or public-read.
Terminal window
novpsstorageset-accessmy-bucket-a1b2public-read
novps storage delete
Delete a bucket. It disappears from the project immediately; its contents are kept for 14 days and then permanently erased.
Print the public CDN URL of a file (novps storage files url). The bucket must be public-read; special characters in the key are percent-encoded. Requires CLI 0.7.0 or newer.
The secret is shown once, on success. There is no way to read it again — regenerate the key instead.
In the europe, usa and asia regions all buckets of a key must be in the same region and share one permission level (all ro or all rw); create separate keys otherwise.
Argument
Required
Description
NAME
yes
Display name, 3–60 characters, alphanumeric, dot and dash.
Replace permissions with the --bucket list. Pass with no --bucket to clear them all (legacy eu keys only — a key in the other regions must keep at least one bucket).
For keys in the europe, usa and asia regions, changing the permissions re-issues the key: the new Access Key and Secret Key are printed once and the old pair stops working immediately.
Regenerate a key. The old credentials stop working immediately. For keys in the europe, usa and asia regions the Access Key changes as well as the secret.
Argument
Required
Description
KEY
yes
Key identifier (internal_name).
Option
Short
Default
Description
--force
—
false
Skip the confirmation.
--json
—
false
Output as JSON.
--project
-p
default
Project alias.
Argument
Required
Description
KEY
yes
Key identifier (internal_name).
Option
Short
Default
Description
--force
—
false
Skip the typed confirmation.
--project
-p
default
Project alias.
GitHub
novps github list
List the GitHub installations linked to the current project. Output columns: ID, Account.
Option
Short
Default
Description
--json
—
false
Output as JSON.
--project
-p
default
Project alias.
An empty list means the Granite GitHub App is not installed for this project, which is what source_type: github in a manifest needs. Install it at https://github.com/apps/granite-so/installations/new and link the account in the dashboard — this cannot be done from the CLI.
Terminal window
novpsgithublist
Port forwarding
Databases are not reachable from outside the platform, and resources may expose internal ports that have no public domain. Port forwarding is how you reach either from your own machine — to run a migration, open a SQL client, or debug an internal service.
novps port-forward database
Argument
Required
Description
DATABASE_ID
yes
Database ID to forward to.
Option
Short
Default
Description
--local-port
-l
the engine’s default port
Local port to listen on.
--project
-p
default
Project alias.
Terminal window
novpsport-forwarddatabase3b7e-...
novpsport-forwarddatabase3b7e-...-l5433
novps port-forward resource
Argument
Required
Description
RESOURCE_ID
yes
Resource ID to forward to.
REMOTE_PORT
yes
Remote port on the resource.
Option
Short
Default
Description
--local-port
-l
the remote port
Local port to listen on.
--project
-p
default
Project alias.
Terminal window
novpsport-forwardresource7a91c4d8-...8080
novpsport-forwardresource7a91c4d8-...8080-l3000
Version
novps version
Print the installed CLI version. The Claude Code skill requires v0.3.0 or later.