> For the complete documentation index, see [llms.txt](https://chaincontext.gitbook.io/help-center/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://chaincontext.gitbook.io/help-center/project-modes.md).

# Project Modes

ChainContext projects have two ownership models: **public** and **private**. The mode you pick changes what features are available and how approvals are routed.

## Which mode are you?

|                         | `projectMode: 'public'`                                      | `projectMode: 'private'`                               |
| ----------------------- | ------------------------------------------------------------ | ------------------------------------------------------ |
| **Who connects?**       | Many unrelated end-users with their own AI agents            | Just you (or your team)                                |
| **Whose wallet signs?** | Each connecting user's wallet                                | Your wallet, or a session key you provisioned from it  |
| **Typical use case**    | Protocol-published MCP, community utilities, monetized tools | Personal trading bot, portfolio manager, yield rotator |

> `projectMode` is **orthogonal** to `accessMode`. `accessMode` controls *can they connect?* (via API key). `projectMode` controls *who owns the wallet doing the work?*

## Feature availability by mode

| Feature                                           | Public               | Private             |
| ------------------------------------------------- | -------------------- | ------------------- |
| Classic write (`build_unsigned_tx`) — agent signs | ✓                    | ✓                   |
| Safe multisig proposals                           | ✓                    | ✓                   |
| Intent-based cross-chain                          | ✓                    | ✓                   |
| Session keys (`session_key_exec`)                 | ❌ disabled           | ✓ primary use case  |
| x402 pay-per-call monetization                    | ✓ main revenue lever | ❌ UI hidden         |
| HITL approvals                                    | ✓ route to end-user  | ✓ route to operator |
| ERC-8004 auto-registration                        | ✓                    | ✓                   |
| Pre-execution simulation                          | ✓                    | ✓                   |
| Streaming subscriptions                           | ✓                    | ✓                   |

## Switching modes

You can switch a project's mode from settings. On switch, the dashboard shows a warning listing features that will be enabled/disabled. Pricing on x402-monetized tools is cleared automatically when moving to private.

## HITL approver routing

For tools marked `requiresApproval`:

* **Private projects**: the approver is **you** (the operator). Configure email/webhook recipients in project settings.
* **Public projects**: the approver is the **end-user** whose agent is calling the tool. The MCP client declares `approverContact: { email?, webhookUrl? }` at `initialize` time. If absent, calls to `requiresApproval` tools return an error.

## Session-key gating

`session_key_exec` block is rejected by the validator on public projects. Rationale: provisioning a session key requires the parent wallet to sign an authorization. In a public flow, that wallet belongs to the connecting user (not the operator), so there's no coherent provisioning flow.
