Log in
DocsProjects

Projects

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

Last updated

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.