# Projects and project settings

Source: https://opvs.ai/docs/factory/projects

> How a project ties boards to a repository, what each settings tab holds, routing defaults and health.

A project ties a group of boards to one repository and carries everything a build on those boards inherits: the repository, the push credential, the rules, the machines it may use, the review policy and the ship line.

## The rule that matters most

A **factory board must be in exactly one active project.** In none, every claim is refused with `board_project_unresolved`. In two, the board is ambiguous: it inherits neither project's settings and builds push nowhere.

```bash
opvs boards projects <board-id>     # resolved · none · ambiguous
```

"Active" means not archived. A project that is on hold or completed still counts as active. Archiving a project drops its factory boards to "no project", and building stops.

## Project settings

Open a project in the dashboard, then **Settings**. Each tab answers one question:

Tab

Holds

**General**

Name, description, status, and the health mail

**Agents**

What every worker on this project is given: rules, skills and commands

**Boards**

The boards in this project

**Code**

The repository and branch; the credential builds push with (it decides whose name is on the pull requests); environment variables; the merge owner; which machines may build this project; build capacity

**Data**

Data sources: the workspace's, plus this project's own

**Review**

The [review policy](/developers/factory/review-policy), the ship line, and project health

**Danger**

Archive the project

The Code tab only picks a GitHub credential; it never stores one. Credentials are added once for the workspace under **Settings → Integrations**. See [Connect GitHub](/developers/factory/connect-github).

## Routing defaults

A project can set the model, provider and harness every card inherits when it names none. The order is: the card's own setting, then the board's, then the project's, then the desk's.

```bash
opvs projects set-routing <project-id> --harness codex --provider openai-codex
```

`--provider` is a credential lane, written with hyphens (`anthropic-claude-code`, `openai-codex`). `--harness` is the engine, written with underscores (`claude_code`, `codex`). Pass `none` to clear one. Routing only applies when the board resolves to exactly one project.

## Status and archive

Command

Effect

`opvs projects set-status <project-id> on_hold`

Paused; still active

`opvs projects set-status <project-id> completed --handoff "<text>"`

Finished; the hand-off note is kept on the project

`opvs projects archive <project-id>`

Hidden from the default list, and no longer active. `--undo` restores it

## Project health

```bash
opvs projects health <project-id> --profile factory
```

A project never reads healthier than its boards: a member board that is incomplete counts against the project. Exit `0` is healthy or incomplete, `2` is not healthy.

Related: [Board types and columns](/developers/factory/board-types), [Board health](/developers/guides/board-health).
