# Projects

> Connect a repository and give training work somewhere to live.

::div{class="flex items-start gap-6"}
::div{class="shrink-0 flex items-center justify-center mt-1 size-24 rounded-4xl bg-dim-200"}
:u-icon{name="i-lucide-folder-dot" class="size-16 text-primary"}
::

A **project** in TReqs points to code in a repository so that training work can be planned and orchestrated. Training requests, runs, and workflows all belong to a project. Projects belong to an [organization](/docs/organizations), and appear in URLs as `/<org>/<project>` (just like GitHub).
::

Compute is *not* per-project — compute targets are shared across an organization. See [Compute targets](/docs/compute-targets).

## Create a project

From an organization's **Projects** page, choose **New project**. You'll need:

- A **name**, which becomes the project slug in URLs.
- A **visibility** — `public` or `private`. Private projects are visible only to members of the owning organization.
- A **repository** to connect, though you can add that afterwards.

```bash [TReqs CLI]
treqs projects create --name my-project
treqs project use my-project     # bind the current repo
```

`treqs project use` writes the binding into the repo, so subsequent `treqs tr` commands know which project they belong to without you naming it every time.

## Connect a repository

Under **Configure → Code**, connect the GitHub repository the project's training runs will clone. There are two access modes.

### GitHub App (private or public repositories)

Install the TReqs GitHub App on the account or organization that owns the repository, then pick the repository from the list. This is the mode you want for private repositories — the App's installation token is what lets TReqs clone them.

You control which repositories the App can see when you install it, and you can change that later from GitHub's own settings. TReqs only requests read access to repository contents.

### Public URL

For a public repository you can skip the App and point the project at the repository URL directly. Nothing is installed and no token is stored. TReqs clones it the way any anonymous client would.

This is the quicker path for open-source work, but it only works while the repository stays public. If it's made private later, runs will start failing to clone and you'll need to switch to the GitHub App mode.
