Skip to content

Repository files navigation

CreateOS CLI

 ██████╗██████╗ ███████╗ █████╗ ████████╗███████╗ ██████╗ ███████╗
██╔════╝██╔══██╗██╔════╝██╔══██╗╚══██╔══╝██╔════╝██╔═══██╗██╔════╝
██║ ██████╔╝█████╗ ███████║ ██║ █████╗ ██║ ██║███████╗
██║ ██╔══██╗██╔══╝ ██╔══██║ ██║ ██╔══╝ ██║ ██║╚════██║
╚██████╗██║ ██║███████╗██║ ██║ ██║ ███████╗╚██████╔╝███████║
╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝ ╚═════╝ ╚══════╝
Your intelligent infrastructure CLI

The official command-line interface for CreateOS — manage your projects and skills from the terminal.

Installation

macOS & Linux — install script (recommended)

curl -sfL https://raw.githubusercontent.com/NodeOps-app/createos-cli/main/install.sh | sh -

macOS & Linux — Homebrew

brew tap nodeops-app/tap
brew install createos

Nightly

Built daily from the latest commit on main. May contain unreleased features.

# Install script
curl -sfL https://raw.githubusercontent.com/NodeOps-app/createos-cli/main/install.sh | CREATEOS_CHANNEL=nightly sh -
# Homebrew
brew install createos --HEAD

Pin a specific version

curl -sfL https://raw.githubusercontent.com/NodeOps-app/createos-cli/main/install.sh | CREATEOS_VERSION=v0.0.3 sh -

Upgrade

createos upgrade

Or via Homebrew:

brew upgrade createos

Build from source

Requires Go 1.26+.

git clone https://github.com/NodeOps-app/createos-cli
cd createos-cli
go build -o createos .

Contributing

Pre-commit hooks

The repo ships with pre-commit hooks for secret detection and build verification. Set them up once after cloning:

pip install pre-commit detect-secrets
pre-commit install
detect-secrets scan > .secrets.baseline

Hooks that run on every commit:

HookCheck
detect-secretsScans for accidentally committed secrets
go-vetRuns go vet ./...
go-build-tmpVerifies the project builds cleanly

If detect-secrets flags a false positive, audit and update the baseline:

detect-secrets audit .secrets.baseline

Getting started

1. Sign in

Choose one of the following methods:

Option A — Browser login (OAuth, recommended)

createos login

This opens your browser to complete sign in. Your session is saved automatically.

Option B — API token

Get your API token from your CreateOS dashboard, then run:

createos login --token <your-api-token>

Or run createos login interactively and select "Sign in with API token" when prompted.

In CI or non-interactive environments, you must use the --token flag.

2. Confirm your account

createos whoami

3. Link your project

createos init

4. Explore commands

createos --help

Commands

Authentication

CommandDescription
createos loginSign in with browser or API token
createos logoutSign out
createos whoamiShow the currently authenticated user

Projects

CommandDescription
createos projects addCreate a new project
createos projects listList all projects
createos projects getGet project details
createos projects deleteDelete a project
createos projects suspendPause a running project
createos projects unsuspendResume a suspended project

projects add flags:

FlagDescription
--nameDisplay name for the project
--unique-nameUnique name (lowercase, 4-32 chars)
--typeProject type: vcs, image, or upload
--descriptionProject description
--frameworkFramework (e.g. nextjs, reactjs-spa, vite-spa)
--runtimeRuntime (e.g. node:20, golang:1.25, dockerfile)
--portPort the application listens on
--install-commandInstall command (e.g. npm install)
--build-commandBuild command (e.g. npm run build)
--run-commandRun command (e.g. npm run start)
--build-dirBuild output directory
--build-flagBuild flags
--run-flagRun flags
--directory-pathRoot directory path (default: .)
--github-ownerGitHub account/org name (VCS projects, non-interactive)
--repoGitHub repository full name, e.g. owner/repo (VCS, non-interactive)

Deploy

CommandDescription
createos deployDeploy your project (auto-detects type)

Deploy flags:

FlagDescription
--projectProject ID (auto-detected from .createos.json)
--branchBranch to deploy from (VCS/GitHub projects only)
--imageDocker image to deploy (image projects only, e.g. nginx:latest)
--dirDirectory to zip and upload (upload projects only, default: .)

Deploy behaviour by project type:

Project typeWhat happens
VCS / GitHubTriggers from the latest commit. Prompts for branch interactively if not provided.
UploadZips the local directory (respects .gitignore), uploads, and streams build logs.
ImageDeploys the specified Docker image.

Files excluded from upload zip:

Sensitive and noisy files are always excluded: .env, .env.*, secrets/keys (*.pem, *.key, *.p12, etc.), node_modules, build artifacts (target, coverage, etc.), OS/editor files, and anything listed in your project's .gitignore.

Deployments

CommandDescription
createos deployments listList deployments for a project
createos deployments logsStream runtime logs for a deployment
createos deployments build-logsStream build logs for a deployment
createos deployments promotePromote a deployment to an environment
createos deployments retriggerRetrigger a deployment
createos deployments sleepPut a running deployment to sleep
createos deployments wakeupWake up a sleeping deployment
createos deployments cancel-buildCancel a deployment that is building

Environments

CommandDescription
createos environments listList environments for a project
createos environments createCreate a new environment
createos environments deleteDelete an environment

Environment Variables

CommandDescription
createos env listList environment variables for a project
createos env setSet one or more environment variables
createos env rmRemove an environment variable
createos env pullDownload environment variables to a local .env file
createos env pushUpload environment variables from a local .env file

Domains

CommandDescription
createos domains listList custom domains for a project
createos domains createCreate a custom domain for a project
createos domains verifyCheck DNS propagation and wait for verification
createos domains deleteDelete a custom domain

Cron Jobs

CommandDescription
createos cronjobs listList cron jobs for a project
createos cronjobs createCreate a new HTTP cron job
createos cronjobs getShow details for a cron job (including path, method, headers, body)
createos cronjobs updateUpdate a cron job's name, schedule, or HTTP settings
createos cronjobs suspendPause a cron job
createos cronjobs unsuspendResume a suspended cron job
createos cronjobs activitiesShow recent execution history
createos cronjobs deleteDelete a cron job

HTTP settings flags (for create and update):

FlagDescription
--pathHTTP path to call, must start with /
--methodHTTP method: GET, POST, PUT, DELETE, PATCH, HEAD
--headerHeader in Key=Value format, repeatable
--bodyJSON body to send with the request (only for POST, PUT, PATCH)

Templates

CommandDescription
createos templates listBrowse available project templates
createos templates infoShow details about a template
createos templates useDownload and scaffold a project from a template

VMs

CommandDescription
createos vms listList VM instances
createos vms getGet details of a VM
createos vms deployDeploy a new VM
createos vms sshConnect to a VM via SSH
createos vms rebootReboot a VM
createos vms resizeResize a VM to a different plan
createos vms terminatePermanently destroy a VM

Sandboxes

Sandboxes are fast-booting VMs — isolated environments you can exec into, sync files to, tunnel ports through, and snapshot at will.

CommandDescription
createos sandbox createCreate a new sandbox
createos sandbox listList your sandboxes
createos sandbox getShow details for one sandbox
createos sandbox editChange a sandbox's settings (public URL, SSH keys, auto-pause)
createos sandbox pauseSnapshot a running sandbox so you can resume it later
createos sandbox resumeBring a paused sandbox back to life
createos sandbox forkClone a paused sandbox into a brand-new one
createos sandbox rmDelete one or more sandboxes
createos sandbox execRun a command inside a sandbox
createos sandbox shellOpen an interactive shell inside a sandbox
createos sandbox syncTwo-way file sync between your laptop and a sandbox
createos sandbox pushCopy a local file into a sandbox
createos sandbox pullCopy a file out of a sandbox
createos sandbox tunnelForward a local port to a port inside a sandbox
createos sandbox shapesList available sandbox sizes (vCPU / RAM / disk)
createos sandbox rootfsList built-in OS images you can boot a sandbox from

sandbox create flags:

FlagDescription
--shapeSize of the sandbox (see createos sandbox shapes)
--nameFriendly name for the sandbox
--rootfsBase image or custom template to start from
--disk-mibDisk size in MiB (defaults to the shape's standard disk)
--ssh-keyPath to an SSH public key file (repeatable)
--envEnvironment variable for every exec (repeatable): KEY=VALUE
--egressAllowed outbound host/IP (repeatable). Empty = unrestricted.
--networkPrivate network to join at creation (repeatable): <name|id>
--diskS3 disk to mount at creation (repeatable): <name|id>:/mount/path
--ingressGive the sandbox a public HTTPS URL
--auto-pauseAuto-pause after inactivity (e.g. 10m, 1h). Omit to keep running.

Sandbox sub-resource commands:

CommandDescription
createos sandbox disk createRegister an S3 bucket as a mountable disk
createos sandbox disk lsList your disks
createos sandbox disk show <name|id>Show details for one disk
createos sandbox disk attach <sb> <disk> <path>Mount a disk into a running sandbox
createos sandbox disk detach <sb> <disk> <path>Unmount a disk from a sandbox
createos sandbox disk rm <name|id>Delete a disk (auto-detaches first)
createos sandbox network create <name>Create a private network
createos sandbox network lsList your networks
createos sandbox network show <name|id>Show a network and its attached sandboxes
createos sandbox network attach <net> <sb>Add a sandbox to a network
createos sandbox network detach <net> <sb>Remove a sandbox from a network
createos sandbox network rm <name|id>Delete a network (auto-detaches first)
createos sandbox firewall show <sandbox>Show what the sandbox is allowed to reach
createos sandbox firewall set <sb> <host…>Replace the outbound allowlist
createos sandbox firewall clear <sandbox>Open the firewall — allow all outbound traffic
createos sandbox template submit <name>Build a Dockerfile into a sandbox image
createos sandbox template lsList your custom sandbox images
createos sandbox template show <name|id>Show details for one image
createos sandbox template logs <name|id>Show (or follow) the build output for an image
createos sandbox template rm <name|id>Delete a custom image

Webhooks

CommandDescription
createos webhooks listList all webhook endpoints
createos webhooks getShow details for a webhook endpoint
createos webhooks createCreate a new webhook endpoint
createos webhooks deleteDelete a webhook endpoint
createos webhooks suspendSuspend a webhook endpoint
createos webhooks resumeResume a suspended webhook endpoint

Skills

CommandDescription
createos skills catalogBrowse the skills catalog
createos skills purchasedList your purchased skills

Quick Actions

CommandDescription
createos initLink the current directory to a CreateOS project
createos statusShow a project's health and deployment status
createos openOpen a project's live URL in your browser
createos scaleAdjust replicas and resources for an environment

OAuth Clients

CommandDescription
createos oauth-clients listList your OAuth clients
createos oauth-clients createCreate a new OAuth client
createos oauth-clients instructionsShow setup instructions for a client
createos oauth-clients deleteDelete an OAuth client

Me

CommandDescription
createos me oauth-consents listList OAuth consents
createos me oauth-consents revokeRevoke an OAuth consent

Other

CommandDescription
createos askAsk the AI assistant to help manage your infrastructure
createos upgradeUpgrade createos to the latest version
createos versionPrint the current version

Non-interactive / CI usage

All commands accept flags so they work in CI and non-interactive environments. Destructive commands require --force to skip the confirmation prompt.

# Deploy
createos deploy # upload project — zips current dir
createos deploy --dir ./dist # upload project — zip a specific dir
createos deploy --branch main # VCS project — deploy from main
createos deploy --image nginx:latest # image project# Create projects
createos projects add --name "My API" --unique-name my-api \
--type image --port 8080
createos projects add --name "My App" --unique-name my-app \
--type upload --framework nextjs --runtime node:20
createos projects add --name "My App" --unique-name my-app \
--type vcs --framework nextjs --runtime node:20 \
--github-owner myorg --repo myorg/my-app
# Projects
createos projects get --project <id>
createos projects delete --project <id> --force
createos projects suspend --project <id> --force
createos projects unsuspend --project <id> --force
# Deployments
createos deployments list --project <id>
createos deployments logs --project <id> --deployment <id>
createos deployments build-logs --project <id> --deployment <id>
createos deployments promote --project <id> --deployment <id> --environment <id>
createos deployments retrigger --project <id> --deployment <id>
createos deployments sleep --project <id> --deployment <id> --force
createos deployments wakeup --project <id> --deployment <id>
createos deployments cancel-build --project <id> --deployment <id> --force
# Environments
createos environments list --project <id>
createos environments create --project <id> --name "Staging" --unique-name staging --branch develop
createos environments delete --project <id> --environment <id> --force
# Environment variables
createos env list --project <id> --environment <id>
createos env set KEY=value --project <id> --environment <id>
createos env rm KEY --project <id> --environment <id>
createos env pull --project <id> --environment <id> --force
createos env push --project <id> --environment <id> --force
# Domains
createos domains list --project <id>
createos domains create --project <id> --name example.com
createos domains verify --project <id> --domain <id> --no-wait
createos domains delete --project <id> --domain <id> --force
# Cron jobs
createos cronjobs list --project <id># Simple GET cron job
createos cronjobs create --project <id> --environment <id> \
--name "Cleanup job" --schedule "0 * * * *" \
--path /api/cleanup --method GET
# POST cron job with headers and JSON body
createos cronjobs create --project <id> --environment <id> \
--name "Webhook" --schedule "*/5 * * * *" \
--path /api/hook --method POST \
--header "Authorization=Bearer token" --header "X-Source=cron" \
--body '{"event":"tick"}'# Update HTTP settings (headers and body preserved if omitted)
createos cronjobs update --project <id> --cronjob <id> \
--path /api/hook --method POST \
--header "Authorization=Bearer token" --body '{"event":"tick"}'
createos cronjobs get --project <id> --cronjob <id>
createos cronjobs delete --project <id> --cronjob <id> --force
# Sandboxes
createos sandbox create --shape s-1vcpu-1gb --name my-box --ssh-key ~/.ssh/id_ed25519.pub
createos sandbox create --shape s-1vcpu-512mb --ingress --auto-pause 1h
createos sandbox list
createos sandbox list --all
createos sandbox list --status paused --quiet | xargs createos sandbox rm --force
createos sandbox get <id>
createos sandbox exec my-box -- uname -a
createos sandbox exec my-box --stream -- pip install requests
createos sandbox shell my-box
createos sandbox shell my-box --ssh
createos sandbox push my-box ./script.py /root/script.py
createos sandbox pull my-box /root/output.csv ./output.csv
createos sandbox tunnel my-box --local 8080 --remote 8000
createos sandbox pause my-box
createos sandbox resume my-box
createos sandbox fork my-box
createos sandbox edit my-box --ingress on
createos sandbox edit my-box --auto-pause 30m
createos sandbox rm my-box --force
createos sandbox shapes
createos sandbox rootfs
# Sandbox sync
createos sandbox sync my-box --local ~/work/project --remote /root/work
createos sandbox sync my-box --exclude '*.log' --exclude node_modules # skip files (repeatable)
createos sandbox sync my-box --mode one-way # push-only: laptop wins, keep extra remote files
createos sandbox sync my-box --mode mirror # make sandbox identical, delete extra remote files
createos sandbox sync my-box --quiet # run silently until Ctrl+C# Sandbox disks
createos sandbox disk create my-data --bucket my-bucket --endpoint https://s3.amazonaws.com \
--access-key AKID... --secret-key ...
createos sandbox disk ls
createos sandbox disk attach my-box my-data /mnt/data
createos sandbox disk detach my-box my-data /mnt/data --yes
createos sandbox disk rm my-data --yes
# Sandbox networks
createos sandbox network create my-net
createos sandbox network ls
createos sandbox network attach my-net my-box
createos sandbox network detach my-net my-box --yes
createos sandbox network rm my-net --yes
# Sandbox firewall
createos sandbox firewall show my-box
createos sandbox firewall set my-box pypi.org github.com
createos sandbox firewall clear my-box --yes
# Sandbox templates (custom images)
createos sandbox template submit my-rails -f Dockerfile
createos sandbox template ls
createos sandbox template logs my-rails --follow
createos sandbox template rm my-rails --yes
# Webhooks
createos webhooks list
createos webhooks get --endpoint <id>
createos webhooks create --url https://example.com/webhook
createos webhooks create --url https://example.com/webhook \
--event sandbox.create --event sandbox.destroy
createos webhooks suspend --endpoint <id>
createos webhooks resume --endpoint <id>
createos webhooks delete --endpoint <id> --force
# Templates
createos templates use --template <id> --yes
# VMs
createos vms list
createos vms get --vm <id>
createos vms deploy --zone nyc3 --size 1 --name "my-vm" --ssh-key "ssh-ed25519 ..."
createos vms reboot --vm <id> --force
createos vms terminate --vm <id> --force
createos vms resize --vm <id> --size 1
# OAuth clients
createos oauth-clients list
createos oauth-clients create \
--name "My App" \
--redirect-uri https://myapp.com/callback \
--app-url https://myapp.com \
--policy-url https://myapp.com/privacy \
--tos-url https://myapp.com/tos \
--logo-url https://myapp.com/logo.png
createos oauth-clients instructions --client <id>
createos oauth-clients delete --client <id> --force
# Me
createos me oauth-consents list
createos me oauth-consents revoke --client <id> --force

JSON output and piping

All list and get commands output JSON automatically when stdout is a pipe, so | jq works without any flags:

createos projects list | jq '.[].id'
createos deployments list --project <id>| jq '.[] | select(.status == "running")'
createos cronjobs list --project <id>| jq '.[] | {id, name, schedule}'
createos vms list | jq '.[].extra.ip_address'
createos webhooks list | jq '.[].url'

To force JSON output in a TTY, use --output json (or -o json):

createos projects get --project <id> --output json
createos environments list --project <id> -o json

Options

FlagDescription
--output, -o <fmt>Output format: json or table (default). Auto-json when piped.
--debug, -dPrint HTTP request/response details (token is masked)
--api-urlOverride the API base URL
--sandbox-api-urlOverride the sandbox (fc-spawn) base URL
--sandbox-gatewaySSH gateway address (host:port) used by sandbox shell --ssh

Security

  • Your API token is stored at ~/.createos/.token with 600 permissions (readable only by you).
  • OAuth session tokens are stored at ~/.createos/.oauth with 600 permissions (readable only by you).
  • Debug mode masks your token in output — only the first 6 and last 4 characters are shown.
  • Never share your token or commit it to version control.

About

CreateOS CLI

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages