org
1ctl org manages organizations — the top-level multi-tenancy unit in Satusky. Every deployment, domain, secret, and billing record belongs to an organization. Users can be members of multiple organizations with different roles, and the CLI always operates in the context of one active organization at a time.
1ctl org list1ctl org current1ctl org switch [--org-id <id> | --org-name <name>] [<name-or-id>]1ctl org create --name <name> [--description <desc>]1ctl org delete <org-id>
1ctl org team list1ctl org team add --email <email> [--role member|admin]1ctl org team role <org-user-id> --role <role>1ctl org team remove <org-user-id>1ctl organization is an alias for 1ctl org — both forms accept all subcommands.
Commands
Section titled “Commands”1ctl org list
Section titled “1ctl org list”1ctl org listLists every organization you are a member of, along with your role in each.
Under the hood: GET /v1/cli/organizations
Example
$ 1ctl org listORG ID NAME ROLE ACTIVEorg_04k2... acme-prod admin *org_09xz... acme-staging memberorg_11ab... personal adminThe * in the ACTIVE column marks the organization that is currently selected in ~/.satusky/context.json. All subsequent CLI commands run against this organization until you switch.
1ctl org current
Section titled “1ctl org current”1ctl org currentPrints the name and ID of the currently active organization without making an API call. Reads directly from ~/.satusky/context.json.
Example
$ 1ctl org currentacme-prod (org_04k2...)1ctl org switch
Section titled “1ctl org switch”1ctl org switch [--org-id <id>] [--org-name <name>] [<name-or-id>]Changes the active organization. The selection is written to ~/.satusky/context.json and applies to every subsequent command until you switch again. You can identify the target organization by ID, by name, or with a bare positional argument — 1ctl org switch accepts any of the three forms.
Flags
| Flag | Description |
|---|---|
--org-id <id> | Select organization by ID |
--org-name <name> | Select organization by name |
Examples
# Switch by name (positional argument)1ctl org switch acme-staging
# Switch by ID1ctl org switch --org-id org_09xz
# Switch by name flag1ctl org switch --org-name acme-stagingAfter switching, the CLI confirms the new active organization:
$ 1ctl org switch acme-stagingSwitched to acme-staging (org_09xz...)1ctl org create
Section titled “1ctl org create”1ctl org create --name <name> [--description <desc>]Creates a new organization and immediately makes it the active organization. Under the hood, the API provisions a dedicated Kubernetes namespace for the org — all workloads deployed to this org are isolated in that namespace.
Flags
| Flag | Required | Description |
|---|---|---|
--name <name> | Yes | Unique organization name. Used as a label in the dashboard and in the K8s namespace slug. |
--description <desc> | No | Optional human-readable description |
Under the hood:
POST /v1/cli/organizationswithnameand optionaldescription- A Kubernetes namespace is created and scoped to the new org
- The new org is written to
organizationsand you are added toorganization_usersasadmin - Context switches to the new org automatically
Example
$ 1ctl org create --name my-new-project --description "Internal tooling"Organization created: my-new-project (org_15cd...)Active organization set to: my-new-project1ctl org delete
Section titled “1ctl org delete”1ctl org delete <org-id>Deletes an organization permanently. This is irreversible: all deployments, domains, secrets, and usage records associated with the org are removed from the database, and the dedicated Kubernetes namespace is torn down.
You will be prompted to confirm by typing the organization name before deletion proceeds.
Under the hood: triggers the OrgDeleteHub workflow, which coordinates the Kubernetes namespace cleanup and cascading database record removal before returning.
Example
$ 1ctl org delete org_09xzWARNING: This will permanently delete acme-staging and all its resources.Type the organization name to confirm: acme-stagingDeleting acme-staging... done.If the org being deleted is currently active in ~/.satusky/context.json, the CLI clears the active org. Run 1ctl org switch to select a new one.
Team management
Section titled “Team management”1ctl org team list
Section titled “1ctl org team list”1ctl org team listLists all members of the active organization with their org-user ID and role.
Example
$ 1ctl org team listORG USER ID EMAIL ROLE1ctl org team add
Section titled “1ctl org team add”1ctl org team add --email <email> [--role member|admin]Invites a user to the active organization by email address. If the user does not yet have a Satusky account, an invitation email is sent. If they already have an account, they gain access immediately.
Flags
| Flag | Default | Description |
|---|---|---|
--email <email> | — | Email address of the user to invite (required) |
--role <role> | member | Role to assign: member or admin |
Under the hood: POST /v1/cli/organizations/users
Examples
# Invite a new member
# Invite and immediately grant admin roleRole permissions
| Role | Capabilities |
|---|---|
member | Deploy and manage their own applications; view org resources |
admin | All member capabilities plus: manage team members, manage billing, delete the organization |
1ctl org team role
Section titled “1ctl org team role”1ctl org team role <org-user-id> --role <role>Updates the role of an existing team member. Requires admin role in the active organization.
Flags
| Flag | Description |
|---|---|
--role <role> | New role: member or admin (required) |
Under the hood: PATCH /v1/cli/organizations/users/{orgUserID}/role
Example
# Promote bob to admin1ctl org team role ogu_02bb --role admin
# Demote carol back to member1ctl org team role ogu_03cc --role member1ctl org team remove
Section titled “1ctl org team remove”1ctl org team remove <org-user-id>Removes a user from the active organization. Their account is not deleted — they simply lose access to this org’s resources. Any deployments they own within the org continue to run.
Under the hood: DELETE /v1/cli/organizations/users/{orgUserID}
Example
$ 1ctl org team remove ogu_02bbContext and isolation
Section titled “Context and isolation”The active organization is stored in ~/.satusky/context.json under the org_id field. Every API request the CLI makes reads this value and includes it in the request context. Switching organizations with 1ctl org switch is the only way to change which org a command targets — there is no per-command --org flag.
Each organization gets a dedicated Kubernetes namespace. Workloads from different organizations are never co-scheduled or able to reach each other over the cluster network.
| Context file field | Description |
|---|---|
org_id | Active organization ID |
token | API token used for all requests |
user_id | Authenticated user ID |
Do not hand-edit context.json. Use 1ctl org switch and 1ctl auth login to manage it.