Get started with Chainguard Checks
Sign up for Chainguard Checks, add a .chainguard/ci.yaml file to a repository, and see your first checks run on a GitHub …
For the complete documentation index, see llms.txt.
Chainguard Checks runs your repository’s CI on every GitHub pull request, with each check in its own microVM. Chainguard Workspaces runs your development work, and the coding agents that do it, in a remote microVM session that holds none of your long-lived credentials. You can use either product on its own, but they’re built to work together, and you set them up together: one command, chainctl develop init, turns on both. This page explains what the products share, then walks you through signing up and giving teammates access.
Note: Each product is in beta.
| Shared piece | What it means |
|---|---|
| One sign-up | chainctl develop init turns on both products, each with its own free monthly allowance. Refer to Sign up with chainctl develop init. |
| One GitHub App | The Chainguard App delivers pull request events to Chainguard Checks and, by default, fetches and pushes your repository for Workspaces sessions. A GitHub account can be linked to only one Chainguard organization. |
| One configuration file | Chainguard Checks runs the checks in your repository’s .chainguard/ci.yaml file on every pull request. In a Workspaces session, run-ci runs the same checks against your working tree, and a session can use the file’s environment. |
| One role | The sandbox.user role lets a member use both products. Refer to Give teammates access. |
A typical loop uses both products:
run-ci in the session to run your repository’s checks against the change. Refer to Run checks before you push.chainctl checks failures, fix the change, and push again. Refer to Inspect pull request runs.Before you begin, make sure you have the following:
You sign up with chainctl, and you use it with both products: chainctl checks for Chainguard Checks and chainctl develop for Chainguard Workspaces. If you don’t have it yet, follow the chainctl installation guide.
Chainguard Checks and Chainguard Workspaces need chainctl 0.2.382 or later. Earlier releases can’t sign you up as this page describes or run Claude Code in a session. Both products change often during the beta, so if you already have chainctl, update it to the latest release:
sudo chainctl updateIf you installed chainctl with Homebrew, run brew upgrade chainctl instead. Refer to Updating chainctl for details.
The Chainguard App is a GitHub App that connects your repositories to Chainguard. Chainguard Checks receives pull request events and reports results through it, and by default, Workspaces sessions fetch and push your repository through it. Guardener uses the same app.
Installing the app doesn’t change your repositories. Chainguard Checks runs only on repositories that have a .chainguard/ci.yaml file, after you link the account in the next step.
The chainctl develop init command signs you in, creates a free Chainguard Starter organization if you don’t have one, and turns on Chainguard Checks and Chainguard Workspaces. Each product gets its own free monthly allowance, which resets on the first day of each month (UTC). For what each allowance includes, refer to Availability and limits for Chainguard Checks and for Chainguard Workspaces.
Run the command in an interactive terminal, because it opens your browser and asks questions as it goes:
chainctl develop initTo create an organization, sign in with a work email address, using a password or a Google account. A personal email address, such as a Gmail address, can’t create one, and neither can other sign-in methods, such as GitHub or GitLab.
The command does the following:
--parent.Enter to link your own GitHub user, or enter the name of a GitHub organization where you have the owner role, such as acme, not a URL. The command opens your browser so you can authorize the link. If the Chainguard App isn’t installed on the account, the command offers to open the installation page, then authorizes and links the account again.chainctl develop github login, as described in Let sessions act on GitHub as you.When you authorize the link, GitHub might ask you to authorize single sign-on for your GitHub organizations. If you’re linking your own GitHub user, select Continue. To link an organization that uses SAML single sign-on, authorize single sign-on for that organization.
A GitHub account can be linked to only one Chainguard organization at a time. If the account you choose is already linked to another Chainguard organization, chainctl develop init names the account and, in an interactive terminal, asks for a different one to link. To move the account to your organization instead, press Ctrl+C to stop the command, and then refer to Moving a GitHub organization to a different Chainguard organization.
If chainctl develop init stops with an error, refer to chainctl develop init fails.
You can answer some of the command’s questions with flags:
| Flag | What it does |
|---|---|
--github-org | Links the named GitHub organization instead of your own GitHub user. |
--parent | Turns on Chainguard Checks and Chainguard Workspaces in an organization you already belong to, including an Enterprise organization, instead of creating one. You must be an owner of the organization. |
For example, to link the acme GitHub organization:
chainctl develop init --github-org acmeFor every flag, refer to the chainctl develop init reference.
If your company already has a Chainguard organization, chainctl develop init can’t create a second one for your email domain. Ask one of its owners to add you, as described in Give teammates access. An owner can then turn on both products in it, replacing $ORGANIZATION with the organization’s name:
chainctl develop init --parent $ORGANIZATIONIf the organization already has Chainguard Checks or Chainguard Workspaces through your Chainguard account team, the command keeps that allowance.
An organization that has a product through the account team must also accept that product’s terms, which takes the owner role. Until an owner accepts them, Chainguard Checks runs no checks for the organization, so the summary check on each pull request fails with Run creation failed, and no one can open a Workspaces session in it. To accept the terms for one product only, use its own command:
chainctl checks accept-terms --parent $ORGANIZATION
chainctl develop accept-terms --parent $ORGANIZATIONIf your GitHub account isn’t linked to the organization yet, link it as described in Getting started with Guardener, which uses the same Chainguard App.
Your teammates don’t need a Chainguard account to get checks on their pull requests or to read the results on GitHub. A teammate needs a role in your Chainguard organization to open the Chainguard Checks run page, to use chainctl checks commands such as status and rerun, or to open Workspaces sessions. Each teammate opens and manages their own sessions, which count toward your organization’s limits.
| Role | In Chainguard Checks | In Chainguard Workspaces |
|---|---|---|
viewer | Lets chainctl find your organization by name, which --parent $ORGANIZATION needs. | Lets chainctl develop find your organization by name. |
sandbox.user | Opens the run page, and reads, reruns, and cancels runs with chainctl checks. | Opens and manages the teammate’s own sessions, and runs checks in them. |
limited_owner | Starts runs with chainctl checks run, but can’t open the run page or read runs. | Opens sessions. Also manages your organization’s billing and invites or removes members. |
A teammate who uses sandbox.user also needs viewer. For more about roles, refer to Overview of roles and role-bindings.
In a Starter organization, the steps differ, as described in Add a teammate to a Starter organization. If you have the owner role in your organization, invite your teammate and grant them the sandbox.user role as follows. Replace $ORGANIZATION with the name of your Chainguard organization:
Create an invite for your teammate with the viewer role. Your teammate needs it as well as sandbox.user, because sandbox.user alone doesn’t let chainctl find your organization. Replace $EMAIL with your teammate’s email address:
chainctl iam invite create $ORGANIZATION --role viewer --email $EMAILSend your teammate the invite code that the command prints. Your teammate accepts the invite by logging in with it, replacing $INVITE_CODE with the code:
chainctl auth login --invite-code $INVITE_CODEAfter your teammate accepts, list your organization’s role-bindings. The output shows each member’s identity ID next to their email address:
chainctl iam role-bindings list --parent $ORGANIZATIONGrant your teammate the sandbox.user role, replacing $IDENTITY_ID with their identity ID:
chainctl iam role-bindings create --identity $IDENTITY_ID --role sandbox.user --parent $ORGANIZATIONYour teammate can then install chainctl, as described in Install or update chainctl, and open a session, as described in Get started with Chainguard Workspaces.
If you created your organization with chainctl develop init, it’s a Starter organization, and you have the limited_owner role rather than owner. You can’t create role-bindings for other users, so you can’t grant the sandbox.user role, and members read Chainguard Checks results on GitHub instead of on the run page. An invite can give only a role whose permissions you also have, and of those roles, only limited_owner can open sessions.
To invite a teammate, run steps 1 and 2 of Add a teammate. To let your teammate open sessions, use --role limited_owner instead of --role viewer in step 1:
chainctl iam invite create $ORGANIZATION --role limited_owner --email $EMAILThe limited_owner role also lets its holder manage your organization’s billing and invite or remove members.
Each invite must name your teammate’s email address with --email, and the address must be in your organization’s domain or one of its subdomains.
A coworker whose email address is in your organization’s domain can also ask to join by running chainctl starter request-access, which emails you the request. For details, refer to Request access with chainctl.
.chainguard/ci.yaml file and see your first checks run.Last updated: 2026-10-13 18:50