Projects and project settings

ExplanationUpdated 3 min read
View as Markdown
On this page

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.

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, 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.

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.

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

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, Board health.

Did this answer your question?