Customer quickstart — ss in 8 commands
End-to-end onboarding for a new customer using ss to manage their own infrastructure. Each step is independent and re-runnable. Everything runs against your own account; nothing is shared with other ss users unless you explicitly publish.
0. Prereqs
Section titled “0. Prereqs”git clone <your-celestial-fork>cd <your-fork>pnpm installpnpm cli:link # globally links the `ss` binaryss --help # smoke test1. Create your account
Section titled “1. Create your account”An “account” is your local tenant — its own vault (encrypted secrets), its own module store, its own active-workspace pointer. Multiple accounts can live on the same laptop, switched explicitly.
ss account add my-company # lowercase, hyphens, max 63 charsss account use my-companyss account current # prints: my-companyFilesystem layout that gets created:
~/.starsystem/ active-account ← pointer (one line: my-company) accounts/ my-company/ account.json ← metadata vault.db ← encrypted SQLite, account-scopedSwitching accounts (ss account use <id>) atomically flips every
vault lookup, every active-workspace pointer (per repo), every
provider-key resolution. No bleeds across accounts.
2. Pick a workspace
Section titled “2. Pick a workspace”A “workspace” is a composition manifest at the repo root:
<workspace-id>.<env>.ssws.yaml. It composes modules together into
the effective service set for one environment.
ss workspace list # discover *.ssws.yaml in the reposs workspace use my-workspace.prod # set the active pointerss workspace current # prints: my-workspace.prod.ssws.yamlThe pointer lives at .starsystem/active-workspace in the repo root
(gitignored — each dev picks their own).
3. Check readiness
Section titled “3. Check readiness”ss onboard --env=prodReports four sections:
- Account — active + known
- Workspace — active + compose status
- Vault secrets —
vault.requireddeclared by each composed module vs what’s actually in the vault - Provider tokens — per-provider keys (Hetzner, Supabase, etc.) the legacy onboarding flow knows about
--json mode emits a structured doc suitable for agent or web-UI
consumption. Same data backs /onboarding in the dashboard.
4. Fill in workspace secrets
Section titled “4. Fill in workspace secrets”ss auth setup --env=prodWalks through every missing vault.required key declared in any
composed module. Per-key prompt includes:
- Which module(s) need it
- A human description (if the module’s manifest declared
vault.descriptions) - A provider hint when the key prefix maps to a known provider
(
SUPABASE_*→ supabase,CLOUDFLARE_*→ cloudflare, …)
Empty paste = skip. Re-run to continue where you left off.
5. Mint scoped provider tokens
Section titled “5. Mint scoped provider tokens”For providers where ss can drive a paste/device flow, use the
per-provider auth handler instead of set-secret — you get a deep
link to the right dashboard page and automatic validation:
ss auth supabase # paste flowss auth fly # device flow (no paste needed)ss auth cloudflare --scope=pages # narrow Pages-only tokenCloudflare in particular: prefer narrow scopes
(--scope=pages | r2 | workers | dns) over the broad
api_token. The artifact deploy path prefers
cloudflare/<capability>_token over the broad fallback.
ss auth status shows the full picture per provider:
ss auth status # all providersss auth status cloudflare # one provider in detail6. (Optional) Compose published modules
Section titled “6. (Optional) Compose published modules”ss module search "scribe" # find published modulesss module info scribe@latest # metadata-only viewss module install scribe@latest # add to your account's module storeInstalled modules become resolvable from your workspace’s .ssws.yaml:
modules: - account: scribe@latest # pulls from your local module storeInstalls don’t require any auth — the registry is public-read. Publishing requires a Celestial-issued platform key (out of scope for customers; see internal docs).
7. Deploy
Section titled “7. Deploy”ss artifact deploy my-service.api --env=prodDispatches by target.type:
- VPS (
hetzner,external) — builds a node tarball, scp’s it, atomic symlink flip, systemd restart cloudflare-pages— direct-uploads_artifact.include_pathsto the named Pages project, binds custom domain- Other (
supabase,railway, …) — provisioner-specific
ss artifact build / push / pull / list / rollback are available
for finer-grained operations.
8. Local daemons (optional)
Section titled “8. Local daemons (optional)”For services with target.type: local-process in their manifest
(e.g. dev servers that should auto-start at login):
ss processes ls # show declared local servicesss processes up <id> # start oness processes enable-at-login # launchd plist / systemd-user # boots them on session startWraps @celestial/process-manager — port-probe + lockfile re-attach
detect externally-started daemons so re-runs are idempotent.
What’s where
Section titled “What’s where”| Concept | Lives at | Per |
|---|---|---|
| Account metadata | ~/.starsystem/accounts/<id>/account.json | Account |
| Vault | ~/.starsystem/accounts/<id>/vault.db | Account |
| Active account pointer | ~/.starsystem/active-account | Machine |
| Module store | ~/.starsystem/modules.sqlite | Account-tagged rows |
| Inventory + tf_state | ~/.starsystem/inventory.db | Machine (workspace-tagged rows) |
| Active workspace pointer | <repo>/.starsystem/active-workspace | Repo |
| Workspace manifest | <repo>/<workspace>.<env>.ssws.yaml | Repo |
The 8 commands, condensed
Section titled “The 8 commands, condensed”ss account add my-company # 1ss account use my-company # 2 (could be one step with --use flag, future)ss workspace use my-workspace.prod # 3ss onboard --env=prod # 4ss auth setup --env=prod # 5ss auth <provider> [--scope=…] # 6 (per provider that needs a real flow)ss module install <id>@<v> # 7 (optional)ss artifact deploy <svc> --env=prod # 8If you can recite these in order, you can onboard a new customer in under five minutes.
Troubleshooting
Section titled “Troubleshooting”- “could not load workspace” →
ss workspace use <id>or pass--workspace-file=<path> - “vault is empty” → switched accounts; check
ss account current - “requires a platform key” → you tried
ss module publish; customers usess module install(publishing is internal-only) ss --helpshows extra “PUBLISHER” section → your account has a Celestial team key; this is correct for internal users