# Projects

A project is a repo, like `github.com/acme/web`. It has the connections its agents see, and its conversations.

## Make one

On the dashboard, open the switcher at the top left and choose Create project: pick repos from GitHub (after connecting it) or type one. Or in a clone:

```
0b project link
```

`0b project link` makes the repo a project and points that clone's Claude Code, Codex and Cursor at the project's own endpoint, `https://0bridge.dev/mcp/p/<id>`. Run it in each clone. The token it writes only opens that project.

## Connections per project

On the dashboard, open a connection's ⋯ menu → **Scope** and turn off **Everywhere** to pick the projects it's for. It then disappears everywhere else, Claude included. A project's Connections tab shows which ones its agents get. From a clone:

```
0b project use slack --label acme
0b project unuse slack --label acme
```

The other way round: keep a connection everywhere but out of one project, like another company's Slack in this company's repo. In the project's Connections tab, ⋯ → **Hide here** (or in **Scope**, check the projects under **Except in**). From a clone:

```
0b project hide slack --label other-company
0b project show slack --label other-company
```

## Strict

A strict project's agents see only its own connections, not the global ones, and their conversation search stays in the repo. Good for a company repo: its agents can't reach your personal accounts.

```
0b project strict on
```

Where the files go: Claude Code keeps the project endpoint in `~/.claude.json` for that folder; Codex in `.codex/config.toml` and Cursor in `.cursor/mcp.json` in the clone, kept out of git. Codex reads it once you trust the folder.

In Cursor, strict holds only in part: Cursor loads `~/.cursor/mcp.json` and the clone's `.cursor/mcp.json` side by side rather than letting the project's entry replace the global one, so its agents still have your global 0bridge entry. Turn that one off in Cursor Settings → MCP while you work in a strict repo. Claude Code and Codex use the project's entry in place of the global one.

## The repo's own servers, skills and instructions

Some MCP servers and skills only make sense in one repo. Add them inside a clone with `--project`:

```
0b mcp add db --project -- db-mcp --read-only
0b skill add ./tools/deploy-skill --project
0b apply
```

`0b apply` writes them into every registered clone of the repo: Claude Code's local scope for that folder (in `~/.claude.json`, nothing in the repo), `.codex/config.toml` and `.cursor/mcp.json`, and the skill into `.claude/skills` and `.agents/skills` (Cursor reads both). New files are kept out of git, a committed file is never changed (0b says what to do instead), and only what 0bridge wrote is ever updated or removed. `0b project import` brings what a clone's tools already have there under 0bridge, including the repo's `.mcp.json`.

Instructions stay in the repo's own files. If it has an `AGENTS.md` and also a `CLAUDE.md`, Claude Code reads only `CLAUDE.md`, so 0bridge adds a marked block with `@AGENTS.md` to it; if it only has `CLAUDE.md`, an `AGENTS.md` with a marked copy is made for Codex and Cursor. `0b project instructions off` takes those blocks out.
