# Install

One command runs a setup wizard that creates or joins your team. This page covers what you need, what setup asks, and what it writes to your machine.

## One command

```sh
npx -y terum-skills@latest setup
```

`npx` fetches the package on demand, so there is nothing to install first. Setup itself does write to this machine: a team clone, a config file, and any hooks you accept.

To join a team you were invited to, pass its repository:

```sh
npx -y terum-skills@latest setup <org>/<repo>
```

Bare `setup` cannot join. Choosing "Join an existing team" at the role question tells you to ask the owner for an invitation and writes nothing.

## What you need

| Requirement | Who needs it |
| --- | --- |
| git | Everyone. Every team read and write is a git operation on a clone. |
| Node.js 22.12.0 or later | Everyone. The package declares it; the CLI does not check. |
| GitHub CLI (`gh`), logged in | Creating a team on GitHub, `invite`, revoking a member's access, and installing or updating the app. Joining does not need it. |
| Claude Code, logged in | `eval`, and the category suggestion `publish` asks for. Nothing else calls a model. |

## Platforms

The CLI runs on macOS, Windows, Linux and WSL. The desktop app is for macOS and Windows only. Where there is no app, setup runs the whole wizard in the terminal and everything else works the same.

Install the app through setup or the `app` verb, not from the GitHub Releases page (see [Desktop app](https://www.terum.ai/docs/desktop-app)).

## What setup does

Setup is a wizard. Re-run it any time: it resumes the team this machine is on and offers whatever it did not finish.

::: steps
### The app, on macOS and Windows
At an interactive terminal, setup installs and opens the app, prints `Continuing in the app.` and hands the rest of the wizard to it. If that fails, the wizard continues in the terminal. `--no-app` keeps everything in the terminal.
### Create or join
With no team and no target, setup asks whether to create a team (a private GitHub repository under your account) or join one. It asks rather than guessing, because a wrong "create" leaves a repository you did not want.
### GitHub
Setup checks `gh`. Creating a team needs it logged in; joining continues without it and has you accept the invitation in a browser.
### Your team
Creating asks for the team name, your identity and the repository name, then offers to invite teammates by GitHub login. Joining accepts the invitation, clones the repository and asks for your handle.
### Your existing skills
Setup offers to add a project folder to your Library, then compares your skill folders with the team's. An identical folder can be recorded as installed; one with the same name and different bytes can be published as the next version. Nothing is written unless you say yes.
### Evals
For shared skills whose current version has no receipt, setup prints a cost estimate and offers Now, In batches, Overnight (queued for the app), or Skip (the default). Evals run Claude Code on this machine and bill your Claude account.
### Hooks and the eight skills
Setup asks about two Claude Code hooks, both defaulting to No: a session-start hook that syncs team skills, and an edit hook that reminds Claude Code to publish a skill it edited. It always places the eight terum-skills skills in `~/.claude/skills`, and in `~/.codex/skills` when `~/.codex` exists. See [Claude Code integration](https://www.terum.ai/docs/claude-code).
:::

`--no-projects`, `--no-existing` and `--no-evals` skip the matching steps.

## What it writes

| Path | What it holds |
| --- | --- |
| `~/.terum/skills/config.json` | Your team binding, identity, placement ledger and registered projects |
| `~/.terum/skills/teams/<team>/` | The team clone, with a push guard |
| `~/.terum/skills/run/` | Sync stamps, the eval queue, the app's launch record |
| `~/.claude/skills/<name>/` | The eight terum-skills skills |
| `~/.claude/settings.json` | Entries for the hooks you accept, backed up before the first write |

On Windows, `~` is `%USERPROFILE%`. The full inventory is in the [local state reference](https://github.com/ryanliu-terum/terum-skills/blob/main/docs/reference/local-state.md).

## Check the result

```sh
npx -y terum-skills@latest status
```

`status` is an offline read: the CLI version, your handle, the repository, the clone's state (with the fix when it is missing or incomplete), the members, the number of shared skills, and how stale the clone is.

## Update and uninstall

The `npx -y terum-skills@latest` form runs the latest release every time. The session hook and the placed skills stay pinned to the copy that installed them, so re-run `setup` to move them forward. `update` prints the command that updates your copy and never runs a package manager itself. The app updates itself.

```sh
npx -y terum-skills@latest uninstall
```

`uninstall` lists everything it will touch and asks once. It removes the team binding, placed skills, clone, hooks and the eight skills, and keeps your eval runs, backups and quarantine. An edited placed folder or a clone with unpushed work goes to quarantine instead of being deleted. Your membership in the team repository is unchanged. On macOS it deletes the app; on Windows, remove the app from Settings ▸ Apps. The npm package itself is never removed.
