Team Setup manifests

Administrator·4 minutes to read

Explains the team setup manifest — what it runs and the shape it takes — as it runs on every team computer. The editor lives on Organisation → Team setup.

What a manifest is

{ "manifestId": "<slug>", "entries": [{ "id": "<slug>", "setup": "<script>", "check": "<script> | null" }] }

An entry's id is unique and slug-shaped, at most 64 characters; a manifest holds at most 50 entries; setup is at most 32 KiB and check is at most 4 KiB or null. A manifest is edited as a form or as JSON on Organisation → Team setup (/organisation/setup; no source screen — sheet idiom Sm-46).

How entries run

Entries run one at a time, in the order the manifest lists them. A computer runs the manifest at start and again every 24 hours while it stays up. An entry whose check exits 0 skips its setup; after a setup runs, check runs again to confirm it. Each entry's setup has a 30-minute timeout and its check a 5-minute one. A failure never blocks the computer and is retried on the next refresh. A change to the approved manifest reaches every running computer within a day on its own, and a restart or a recreate applies it immediately; every entry re-applies after a recreation.

Do not put secret values in setup scripts

A manifest is plain text applied across the whole fleet, so the editor carries its own note: Don't put secret values in setup scripts. Save them as team secrets and read them as environment variables. The scan behind it refuses a secret or a url_with_credentials finding and names the path where it found one. Save the value as a Team Secret instead, or authenticate interactively, inside the computer's own browser.

Team Secrets

Team secrets, below the editor, holds write-only values the setup scripts read as environment variables: a secret named NPM_TOKEN is $NPM_TOKEN in every entry's setup and check. A saved value is never shown again — the page lists names and sizes only — and a script's output shows it as [secret NPM_TOKEN]. A team holds at most 100 secrets, each at most 32 KB and together at most 96 KB. A name is capital letters, digits and underscores starting with a letter; a name the computer sets itself (PATH, HOME, the proxy variables, BASH_*, LD_*, LC_* and similar) is refused. Saving and removing one is audited (org.setup_secret_set, org.setup_secret_removed) by name, never by value.

Approval

In an organisation with one administrator, that administrator's Save and apply approves the manifest as it is saved. With two or more administrators, a change is proposed by one and approved by a different one. The approved version is the one computers pull. Every proposal and decision is audited (org.setup_manifest_proposed, org.setup_manifest_decided).

Member groups

Applies to, above the editor, picks the organisation's manifest or a member group's. A group's manifest runs on the computers of that group's members, after the organisation's entries, and on no other computer; an entry whose id the organisation's manifest already uses runs as <id>-2. Each scope has its own approved manifest and its own proposal.

Where results appear

Results show per computer, on Organisation → Computers and on the member's own Settings → Computer (Sm-49); each run writes one audit row (computer.setup_ran). A computer created before this release shows Team setup: not yet available on this computer until its next Update on Settings → Updates (Sm-52). There is no fleet-wide results view.

The guest and sudo

The computer runs Debian 13 (trixie). Its browser is Google Chrome stable, or Chromium on an arm64 home host, which has no Linux build of Chrome. git, gh, Go, jq, curl, ffmpeg, LibreOffice, Node and Python with pip are already installed, so a setup script does not need to install them. A setup script runs as the computer's own user, with sudo for any command — setup scripts keep it even when Allow sudo on bot computers is off.

Last verified against build c0f77aa.