# Testers

> Pin a version for private testing, invite testers by email, and manage their access.

**Private testing** lets people try one version of your CLI before it becomes official. The testing version and the official release are separate. Changing one never moves the other.

When the testing version is ready to ship, choose it as the official release. See [Releases and install](https://okibi.ai/docs/guides/releases.md).

## Two kinds of testers

| Tester | Who they are | Where they test |
| --- | --- | --- |
| **Workspace tester** | A workspace member with the **Tester** role | The **Testing** view of the workspace, after signing in |
| **External beta tester** | Anyone you invite by email to one CLI. They don't need an Okibi account. | A private page they open from an email link |

Add workspace testers in **Settings** > **Members** with the **Tester** role, or with `okibi workspaces invitations invite tester@example.com --role tester`. See [Workspace and members](https://okibi.ai/docs/guides/workspaces.md). Both kinds count against your plan's tester allowances.

## Pin the testing version

Owners and admins pin it. Candidates are existing versions and successful builds.

**In the app**

1. Open the project and click **CLI**.
2. Under **Versions**, pick a version and click **Give to testers**.
3. Optional: open **Settings** > **Who gets it** and click **Manage** next to **Testers**. Under **What testers should try**, tell testers what to try, and click **Save what to try**.

To turn testing off, pick the testing version and click **Stop testing**.

**In the CLI**

```sh
okibi clis testing status my-cli
okibi clis testing set my-cli --release <release-id> --notes "Try the search commands."
okibi clis testing clear my-cli
```
The `SELECT WITH` column of `testing status` shows the flag to pass: `--release` or `--run`.

Testing only links versions that already exist. For new code, make a version first (a new build, or `okibi clis publish my-cli` for repository commits), then pin it.

## Invite external testers

Pin a testing version first.

**In the app**

1. In **Settings** > **Who gets it**, click **Manage** next to **Testers**.
2. Under **Outside testers**, enter one email per line.
3. Click **Invite**.

Each new link appears under **Invitation links**, marked Email sent, Manual delivery, or Email failed. If the email didn't go out, click **Copy** and send the link yourself.

**In the CLI**

```sh
okibi clis testing invite my-cli tester@example.com
```
It prints the invitation link. Add `--name` for a display name and `--notes` for notes shown to this tester.

## What a tester sees

**External testers:**

1. The email asks them to **Accept private access**. The invitation expires after 7 days.
2. Okibi then emails a login link. It works once and expires after 15 minutes.
3. Their page shows **Install the private beta**, your **What to test** notes, and **Try the commands**, a simulator of the pinned commands.

Access ends 90 days after they first sign in, and their page shows the date. If a login link expires, they click **Email me a new link** on the same page.

**Workspace testers** sign in and land on **Private beta CLIs**, a list of CLIs with a pinned testing version. Each CLI has **Install the pinned release**, **What to test**, **Pinned command docs**, and **Try the commands**.

Every tester gets a personal install command. It expires in about an hour and only works while that version stays pinned. Testers copy a fresh one from their page.

## Suspend, reactivate, or revoke

These controls are in the **Testers** window, under **Outside testers**. Manage workspace testers in **Settings** > **Members** instead.

| Button | What it does |
| --- | --- |
| **Suspend** | Stops access right away, including install commands already copied |
| **Reactivate** | Restores a suspended tester whose access period hasn't ended. They sign in again. |
| **Revoke** | Ends access. Only a new invitation brings them back. |
| **Renew** | Sends a new invitation. Their access period starts over when they accept. |

From the terminal, get each tester's `ASSIGNMENT ID` first:

```sh
okibi clis testing testers my-cli
okibi clis testing suspend my-cli <assignment-id>
okibi clis testing reactivate my-cli <assignment-id>
okibi clis testing revoke my-cli <assignment-id>
```

To renew, run `okibi clis testing invite` again with the same email. If your plan's external tester allowance shrinks, Okibi suspends the newest testers past the limit and restores them when there is room again.

- [Releases and install](https://okibi.ai/docs/guides/releases.md): Choose the official release and share the install command.
- [Workspace and members](https://okibi.ai/docs/guides/workspaces.md): Roles, including the Tester role.
