██████╗██████╗ ███████╗ █████╗ ████████╗███████╗ ██████╗ ███████╗
██╔════╝██╔══██╗██╔════╝██╔══██╗╚══██╔══╝██╔════╝██╔═══██╗██╔════╝
██║ ██████╔╝█████╗ ███████║ ██║ █████╗ ██║ ██║███████╗
██║ ██╔══██╗██╔══╝ ██╔══██║ ██║ ██╔══╝ ██║ ██║╚════██║
╚██████╗██║ ██║███████╗██║ ██║ ██║ ███████╗╚██████╔╝███████║
╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝ ╚═════╝ ╚══════╝
Your intelligent infrastructure CLI
The official command-line interface for CreateOS — manage your projects and skills from the terminal.
curl -sfL https://raw.githubusercontent.com/NodeOps-app/createos-cli/main/install.sh | sh -brew tap nodeops-app/tap
brew install createosBuilt 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 --HEADcurl -sfL https://raw.githubusercontent.com/NodeOps-app/createos-cli/main/install.sh | CREATEOS_VERSION=v0.0.3 sh -createos upgradeOr via Homebrew:
brew upgrade createosRequires Go 1.26+.
git clone https://github.com/NodeOps-app/createos-cli
cd createos-cli
go build -o createos .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.baselineHooks that run on every commit:
| Hook | Check |
|---|---|
detect-secrets | Scans for accidentally committed secrets |
go-vet | Runs go vet ./... |
go-build-tmp | Verifies the project builds cleanly |
If detect-secrets flags a false positive, audit and update the baseline:
detect-secrets audit .secrets.baseline1. Sign in
Choose one of the following methods:
Option A — Browser login (OAuth, recommended)
createos loginThis 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
--tokenflag.
2. Confirm your account
createos whoami3. Link your project
createos init4. Explore commands
createos --help| Command | Description |
|---|---|
createos login | Sign in with browser or API token |
createos logout | Sign out |
createos whoami | Show the currently authenticated user |
| Command | Description |
|---|---|
createos projects add | Create a new project |
createos projects list | List all projects |
createos projects get | Get project details |
createos projects delete | Delete a project |
createos projects suspend | Pause a running project |
createos projects unsuspend | Resume a suspended project |
projects add flags:
| Flag | Description |
|---|---|
--name | Display name for the project |
--unique-name | Unique name (lowercase, 4-32 chars) |
--type | Project type: vcs, image, or upload |
--description | Project description |
--framework | Framework (e.g. nextjs, reactjs-spa, vite-spa) |
--runtime | Runtime (e.g. node:20, golang:1.25, dockerfile) |
--port | Port the application listens on |
--install-command | Install command (e.g. npm install) |
--build-command | Build command (e.g. npm run build) |
--run-command | Run command (e.g. npm run start) |
--build-dir | Build output directory |
--build-flag | Build flags |
--run-flag | Run flags |
--directory-path | Root directory path (default: .) |
--github-owner | GitHub account/org name (VCS projects, non-interactive) |
--repo | GitHub repository full name, e.g. owner/repo (VCS, non-interactive) |
| Command | Description |
|---|---|
createos deploy | Deploy your project (auto-detects type) |
Deploy flags:
| Flag | Description |
|---|---|
--project | Project ID (auto-detected from .createos.json) |
--branch | Branch to deploy from (VCS/GitHub projects only) |
--image | Docker image to deploy (image projects only, e.g. nginx:latest) |
--dir | Directory to zip and upload (upload projects only, default: .) |
Deploy behaviour by project type:
| Project type | What happens |
|---|---|
| VCS / GitHub | Triggers from the latest commit. Prompts for branch interactively if not provided. |
| Upload | Zips the local directory (respects .gitignore), uploads, and streams build logs. |
| Image | Deploys 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.
| Command | Description |
|---|---|
createos deployments list | List deployments for a project |
createos deployments logs | Stream runtime logs for a deployment |
createos deployments build-logs | Stream build logs for a deployment |
createos deployments promote | Promote a deployment to an environment |
createos deployments retrigger | Retrigger a deployment |
createos deployments sleep | Put a running deployment to sleep |
createos deployments wakeup | Wake up a sleeping deployment |
createos deployments cancel-build | Cancel a deployment that is building |
| Command | Description |
|---|---|
createos environments list | List environments for a project |
createos environments create | Create a new environment |
createos environments delete | Delete an environment |
| Command | Description |
|---|---|
createos env list | List environment variables for a project |
createos env set | Set one or more environment variables |
createos env rm | Remove an environment variable |
createos env pull | Download environment variables to a local .env file |
createos env push | Upload environment variables from a local .env file |
| Command | Description |
|---|---|
createos domains list | List custom domains for a project |
createos domains create | Create a custom domain for a project |
createos domains verify | Check DNS propagation and wait for verification |
createos domains delete | Delete a custom domain |
| Command | Description |
|---|---|
createos cronjobs list | List cron jobs for a project |
createos cronjobs create | Create a new HTTP cron job |
createos cronjobs get | Show details for a cron job (including path, method, headers, body) |
createos cronjobs update | Update a cron job's name, schedule, or HTTP settings |
createos cronjobs suspend | Pause a cron job |
createos cronjobs unsuspend | Resume a suspended cron job |
createos cronjobs activities | Show recent execution history |
createos cronjobs delete | Delete a cron job |
HTTP settings flags (for create and update):
| Flag | Description |
|---|---|
--path | HTTP path to call, must start with / |
--method | HTTP method: GET, POST, PUT, DELETE, PATCH, HEAD |
--header | Header in Key=Value format, repeatable |
--body | JSON body to send with the request (only for POST, PUT, PATCH) |
| Command | Description |
|---|---|
createos templates list | Browse available project templates |
createos templates info | Show details about a template |
createos templates use | Download and scaffold a project from a template |
| Command | Description |
|---|---|
createos vms list | List VM instances |
createos vms get | Get details of a VM |
createos vms deploy | Deploy a new VM |
createos vms ssh | Connect to a VM via SSH |
createos vms reboot | Reboot a VM |
createos vms resize | Resize a VM to a different plan |
createos vms terminate | Permanently destroy a VM |
Sandboxes are fast-booting VMs — isolated environments you can exec into, sync files to, tunnel ports through, and snapshot at will.
| Command | Description |
|---|---|
createos sandbox create | Create a new sandbox |
createos sandbox list | List your sandboxes |
createos sandbox get | Show details for one sandbox |
createos sandbox edit | Change a sandbox's settings (public URL, SSH keys, auto-pause) |
createos sandbox pause | Snapshot a running sandbox so you can resume it later |
createos sandbox resume | Bring a paused sandbox back to life |
createos sandbox fork | Clone a paused sandbox into a brand-new one |
createos sandbox rm | Delete one or more sandboxes |
createos sandbox exec | Run a command inside a sandbox |
createos sandbox shell | Open an interactive shell inside a sandbox |
createos sandbox sync | Two-way file sync between your laptop and a sandbox |
createos sandbox push | Copy a local file into a sandbox |
createos sandbox pull | Copy a file out of a sandbox |
createos sandbox tunnel | Forward a local port to a port inside a sandbox |
createos sandbox shapes | List available sandbox sizes (vCPU / RAM / disk) |
createos sandbox rootfs | List built-in OS images you can boot a sandbox from |
sandbox create flags:
| Flag | Description |
|---|---|
--shape | Size of the sandbox (see createos sandbox shapes) |
--name | Friendly name for the sandbox |
--rootfs | Base image or custom template to start from |
--disk-mib | Disk size in MiB (defaults to the shape's standard disk) |
--ssh-key | Path to an SSH public key file (repeatable) |
--env | Environment variable for every exec (repeatable): KEY=VALUE |
--egress | Allowed outbound host/IP (repeatable). Empty = unrestricted. |
--network | Private network to join at creation (repeatable): <name|id> |
--disk | S3 disk to mount at creation (repeatable): <name|id>:/mount/path |
--ingress | Give the sandbox a public HTTPS URL |
--auto-pause | Auto-pause after inactivity (e.g. 10m, 1h). Omit to keep running. |
Sandbox sub-resource commands:
| Command | Description |
|---|---|
createos sandbox disk create | Register an S3 bucket as a mountable disk |
createos sandbox disk ls | List 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 ls | List 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 ls | List 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 |
| Command | Description |
|---|---|
createos webhooks list | List all webhook endpoints |
createos webhooks get | Show details for a webhook endpoint |
createos webhooks create | Create a new webhook endpoint |
createos webhooks delete | Delete a webhook endpoint |
createos webhooks suspend | Suspend a webhook endpoint |
createos webhooks resume | Resume a suspended webhook endpoint |
| Command | Description |
|---|---|
createos skills catalog | Browse the skills catalog |
createos skills purchased | List your purchased skills |
| Command | Description |
|---|---|
createos init | Link the current directory to a CreateOS project |
createos status | Show a project's health and deployment status |
createos open | Open a project's live URL in your browser |
createos scale | Adjust replicas and resources for an environment |
| Command | Description |
|---|---|
createos oauth-clients list | List your OAuth clients |
createos oauth-clients create | Create a new OAuth client |
createos oauth-clients instructions | Show setup instructions for a client |
createos oauth-clients delete | Delete an OAuth client |
| Command | Description |
|---|---|
createos me oauth-consents list | List OAuth consents |
createos me oauth-consents revoke | Revoke an OAuth consent |
| Command | Description |
|---|---|
createos ask | Ask the AI assistant to help manage your infrastructure |
createos upgrade | Upgrade createos to the latest version |
createos version | Print the current version |
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> --forceAll 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| Flag | Description |
|---|---|
--output, -o <fmt> | Output format: json or table (default). Auto-json when piped. |
--debug, -d | Print HTTP request/response details (token is masked) |
--api-url | Override the API base URL |
--sandbox-api-url | Override the sandbox (fc-spawn) base URL |
--sandbox-gateway | SSH gateway address (host:port) used by sandbox shell --ssh |
- Your API token is stored at
~/.createos/.tokenwith600permissions (readable only by you). - OAuth session tokens are stored at
~/.createos/.oauthwith600permissions (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.