Skip to content

Teams, projects, and roles

The getting-started and tour guides run everything locally against cryo dev. This page is the other half: using a shared cryosleep server with your team. It covers signing in, how work is organised into orgs and projects, and who can do what.

Two nouns hold everything:

  • An org is your team’s tenant. It owns projects, members, an agent fleet, and its own encrypted secrets. Billing and isolation are per org: one org can never see another’s runs, secrets, or members.
  • A project is a workspace inside an org, usually one per service or repo. Runs, secrets, schedules, the event bus, and the webhook connection all live at the project level. A run id spells out both: myorg:api:run-3xKq….

You belong to one or more orgs, with a role in each (below), plus optional grants on individual projects.

Get a personal access token from the web UI (sign in, then Settings → Tokens), then point the CLI at the server:

Terminal window
cryo login https://cryo.example.com --token cspat_…

That verifies the token, resolves your org and project from your memberships, and writes config.toml. From then on every command targets that server; override per command with --org / --project or $CRYOSLEEP_ORG / $CRYOSLEEP_PROJECT. cryo where shows the current target, cryo config show the resolved settings.

List the projects you can see, and create one (org owner or admin):

Terminal window
cryo project ls
cryo project create api --name "API service"
cryo project create web --name "Web app"

Submit work to a specific project with --project; the run id it prints is fully qualified, so you can paste it straight back into any run command:

Terminal window
run=$(cryo submit ./pipeline.yaml --project api)
cryo status "$run"
cryo logs "$run" --follow

Delete a project (and its scoped state) with cryo project rm <slug>; it refuses while runs are executing.

Every membership carries one of four roles. They’re ranked, so a higher role includes everything below it:

Role Can
viewer read: list and watch runs, read logs, list secret names
member the above, plus run workflows (submit, cancel, signal)
admin the above, plus manage members, secrets, schedules, webhooks, and caps
owner the above, plus delete the project and change ownership; an org owner also mints agent tokens for the org and its projects

Roles apply at two levels, and your effective role on a project is the higher of the two:

  • An org-wide role (cryo org members) applies to every project in the org.
  • A project grant (cryo project members) admits someone to just that one project, with no org-wide access. Use it to give a contractor member on web without letting them see api. A grant stops at admin; owner is an org-level role only.

Add people by email (both commands create the user if the email is new, so there’s no separate invite step):

Terminal window
# Org-wide: a teammate who works across all projects
cryo org members add dana@example.com --role member
# Project-scoped: a contractor on one project, read-only on nothing else
cryo project members add sam@example.com --role member --project web
cryo project members add sam@example.com --role viewer --project api

cryo org members ls and cryo project members ls list current members (admin-gated). The org’s last owner can’t be demoted or removed, so an org can’t be left ownerless.

When a permission check fails, the error says why: you don't have access to \myorg/api`, or this needs the `member` role on `myorg/web`; you have `viewer``. Ask an org or project admin to grant you with the commands above.

These all belong to a project and follow the same role rules:

Agents are matched to work by capability, and their token sets how wide they reach: an unscoped token is a shared fleet that claims any org’s work; a token scoped to an org claims that org’s projects; a token scoped to org/project claims just that one. See deploying agents.