Using the kamu CLI
This page walks through the command groups shipped in the current kamu
release. Every command has --help, and most list commands take --json for
scripting. Install and log in first: see
kamu CLI: install and log in.
How commands authenticate
There are two credential paths, and it matters which one a command uses.
- Access key (
KAMU_ACCESS_KEYor--key): the platform services. Used bysites,clone,publish,assets,status,dns. This is the right credential for agents and CI. - Your KamuID login (
kamu auth login): identity and organization commands,orgsin particular. These act as you, not as a key.
kamu auth login # device flow, mints an access key for your first org
kamu auth whoami # who am I, which org
kamu auth token # print the current access token (for curl etc.)
kamu auth logout
Command map
| Group | What it drives | Credential |
|---|---|---|
kamu orgs | KamuID organizations: list, switch, create, invite, remove | login |
kamu sites | kamusites: create a website with an AI build, list, delete, form relays | access key |
kamu clone | Clone any project repo from the forge with git wired up | access key |
kamu publish | Publish a single HTML file to a shareable URL | access key |
kamu assets | Upload images to the CDN, check quota | access key |
kamu status | kamustatus: projects, monitors, alert rules, public status pages | access key |
kamu dns | kamudns: domains, records, availability search | access key |
kamu db | kamudb databases | login |
kamu bee | kamubee apps, deploys and logs | login |
Organizations
kamu orgs list
kamu orgs switch <slug> # the active org for later commands
kamu orgs show <slug> # info, members, pending invitations
kamu orgs create <name>
kamu orgs invite user@example.com --org <slug> --role member|admin
kamu orgs remove <email> --org <slug>
kamu orgs delete <slug> # owner only
If a stored login predates the organization scopes, kamu orgs fails and asks
you to run kamu auth login again.
Websites: kamu sites
kamu sites create starts an AI build from a brief. The business flags feed
the builder; --description is the one that matters most.
kamu sites create \
--business "Acme Plumbing" \
--industry Plumbing \
--business-type Plumber \
--description "Residential plumber in Tampere, 24h emergency service, free quotes." \
--services "Leak repair,Bathroom renovation,Emergency call-outs" \
--pages "Home,Services,Contact" \
--phone "+358 40 123 4567" --email info@acme.fi \
--logo ./logo.png \
--primary-color "#0b5fff"
Useful flags:
--existing-urllets the builder draw on a site you already have.--material <file>uploads a reference file, repeatable.--logo-promptgenerates a logo when you have none.--no-watchreturns immediately instead of following the build.--teampicks the org when the key covers several.
kamu sites list [--json]
kamu sites delete --yes # archives the repo and takes the site offline
Form relays
A relay destination receives the site's contact-form submissions as JSON at a
URL you control. Protect the target with the shared secret, delivered as the
X-Kamu-Relay-Key header.
kamu sites form add --site <id-or-slug> --target https://example.com/hook \
--secret <shared-key> --label "CRM webhook" [--rate-per-hour 60]
kamu sites form list --site <id-or-slug>
kamu sites form get <destination-id> # delivery stats
kamu sites form remove <destination-id>
Git: kamu clone
kamu clone # pick a project interactively
kamu clone my-project # repo name, owner/name, or a substring
kamu clone my-project ./dir
The clone passes the access key to git in memory and installs
kamu git-credential as the repo-local credential helper. After that, plain
git pull and git push work in that directory as long as the key is in the
environment. A missing KAMU_ACCESS_KEY in a fresh shell is the usual cause of
a failed push.
Single pages: kamu publish
Publishes one self-contained HTML file. The platform creates a repo per published file, so republishing the same file keeps the URL and records every version in git history.
kamu publish report.html --name "Q3 report"
kamu publish report.html --password s3cret # protect the page
kamu publish report.html --repo <owner/name> # republish to an existing publish repo
kamu publish list
Images: kamu assets
kamu assets upload hero.jpg team/*.png [--org <slug>] [--json]
kamu assets usage
Uploads are content-addressed, so the same file uploaded twice is stored once.
Files are served from files.kskamu.app.
Monitoring: kamu status
Everything hangs off a kamustatus project. The dashboard view is app.kamuhub.com → Monitor. For the full wiring of error telemetry and heartbeats, see the KamuStatus guides.
Projects
kamu status projects list
kamu status projects create --name "Acme" --slug acme --org <kamuid-org-id>
kamu status projects show <project-id>
kamu status projects delete <project-id>
Monitors
Monitor types: http (default), tcp, dns, ping, heartbeat.
kamu status monitors list <project-id>
kamu status monitors add <project-id> --name "Website" --type http \
--target https://example.com --interval 60 --expected-status 200 \
[--body-contains "Welcome"] [--method HEAD] [--timeout 10000]
kamu status monitors add <project-id> --name "API port" --type tcp --target api.example.com --port 443
kamu status monitors add <project-id> --name "MX" --type dns --target example.com --dns-type MX
kamu status monitors add <project-id> --name "Nightly job" --type heartbeat --grace 3600
kamu status monitors show <monitor-id> # includes certificate and domain expiry
kamu status monitors stats <monitor-id> --hours 168
kamu status monitors disable|enable|delete <monitor-id>
A heartbeat monitor gives you a ping URL. The job calls it on every run, and
the monitor goes down once --interval (default 300) plus --grace seconds
pass without a ping. See heartbeats; monitor
types and body assertions are in uptime monitoring.
Alert rules
Alert rules belong to a monitor.
kamu status alerts list <monitor-id>
kamu status alerts add <monitor-id> --type email --target ops@example.com --consecutive 3
kamu status alerts add <monitor-id> --type slack --target https://hooks.slack.com/...
kamu status alerts add <monitor-id> --type webhook --target https://example.com/alerts
kamu status alerts delete <alert-id>
Status pages
A status page is a public, read-only view of selected monitors in a project. Create and edit pages in the dashboard: Monitor → project → Status pages, pick a name, a URL slug and the monitors to show. Monitors can be grouped under display headings.
A page is served by kamustatus directly, not through the dashboard:
| What | URL |
|---|---|
| Status page | https://api.kamustatus.com/status/<slug> |
| Badge (Shields.io endpoint JSON) | https://api.kamustatus.com/status/<slug>/badge |
The CLI reads a public page without any credentials:
kamu status page <slug> # name, then one line per monitor with status and uptime
kamu status page <slug> --json
A project can also expose its own slug as a status page when public status is enabled on the project.
DNS: kamu dns
kamu dns zones # managed domains
kamu dns get example.com
kamu dns search acme --limit 20 # availability across TLDs
kamu dns records list example.com
kamu dns records add example.com --type A --name @ --content 203.0.113.10 --ttl 3600
kamu dns records add example.com --type CNAME --name www --content example.com
kamu dns records add example.com --type TXT --name @ --content "v=spf1 include:_spf.example.net ~all"
kamu dns records delete example.com <record-id>
Record types: A, AAAA, CNAME, MX, TXT, SRV, CAA, ALIAS.
Databases and apps: kamu db, kamu bee
kamu db list | create | get | connstr | suspend | resume | delete
kamu bee apps
kamu bee deploy # release from kamu.toml in the current directory
kamu bee status -a <app>
kamu bee logs -a <app> -f -n 500 # live tail, 500 historical lines first
kamu bee destroy -a <app>
Scripting tips
- Prefer
--jsonand pipe throughjq. Human output is not a stable format. - Set
NO_COLOR=1in CI logs. kamu completion <shell>prints the completion script for bash, zsh, fish and PowerShell.